Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4120 eAndrew 1
use32
2
    org     0x0
3
;-------------------------------------------------------------------------------
4
    db	    "MENUET01"
5
    dd	    1, main, __dataend, __memend, __stackend, 0, sys_path
6
;-------------------------------------------------------------------------------
7
    include "../../../macros.inc"
8
    include "../../../proc32.inc"
9
    include "../../../dll.inc"
10
    include "../../../develop/libraries/box_lib/load_lib.mac"
4134 eAndrew 11
   ;include "../../../debug.inc"
4120 eAndrew 12
 
13
    @use_library_mem	 \
14
	    mem.Alloc,	 \
15
	    mem.Free,	 \
16
	    mem.ReAlloc, \
17
	    dll.Load
18
;-------------------------------------------------------------------------------
19
ICON_SIZE	 equ  32 * 32 * 3
4124 eAndrew 20
IMAGE_FILE_SIZE  equ  ICON_SIZE   * 29
4120 eAndrew 21
IMAGE_DATA_SIZE  equ  32 * 32 * 4 * 29
22
;================================================================================
23
proc main
24
; ==== Init ====
25
    mcall   18, 7
26
    mov     [win.psid], eax
27
 
28
    mcall   40, 100101b
29
 
30
    mov     dword[file_exec.proc], 7
31
 
32
; ==== Load libs ====
33
    load_libraries load_lib_start, load_lib_end
34
 
35
; ==== Config LibINI ====
36
    invoke  ini.get_int, ini_data.file_name, ini_data.settings_name, ini_data.location_name, -1
37
    mov     [dock_items.location], eax
38
 
4121 eAndrew 39
    invoke  ini.get_color, ini_data.file_name, ini_data.settings_name, ini_data.color_bg, 0x0
4120 eAndrew 40
    mov     [color.bg], eax
4134 eAndrew 41
    invoke  ini.get_color, ini_data.file_name, ini_data.settings_name, ini_data.color_bg_line, 0x080808
42
    mov     [color.bg_line], eax
4121 eAndrew 43
    invoke  ini.get_color, ini_data.file_name, ini_data.settings_name, ini_data.color_frame, 0xFFFFFF
4120 eAndrew 44
    mov     [color.frame], eax
4121 eAndrew 45
    invoke  ini.get_color, ini_data.file_name, ini_data.settings_name, ini_data.color_framein, 0x888888
4120 eAndrew 46
    mov     [color.framein], eax
4121 eAndrew 47
    invoke  ini.get_color, ini_data.file_name, ini_data.settings_name, ini_data.color_text, 0xFFFFFF
4120 eAndrew 48
    or	    eax, 0x80000000
49
    mov     [color.text], eax
50
 
51
    invoke  ini.sections, ini_data.file_name, sections_callback
52
 
53
; ==== Config LibIMG ====
54
    stdcall mem.Alloc, dword IMAGE_FILE_SIZE
55
    mov     [img_data.rgb_object], eax
56
 
57
    mov     dword[img_data.file.proc], 0
58
    mov     dword[img_data.file.position], 0
59
    mov     dword[img_data.file.size], dword IMAGE_FILE_SIZE
60
    m2m     dword[img_data.file.buffer], dword[img_data.rgb_object]
61
    mov     byte[img_data.file + 20], 0
62
    mov     dword[img_data.file.name], img_data.file_name
63
 
64
    mcall   70, img_data.file
65
 
66
    cmp     ebx, 0xFFFFFFFF
67
    je	    @f
68
 
69
    stdcall dword[img.decode], dword[img_data.rgb_object], ebx, 0
70
    mov     dword[img_data.object], eax
71
 
72
  ; === ALPHA ===
73
    mov     edi, 0
74
    add     eax, 24
75
    mov     eax, [eax]
76
 .setalpha:
77
    mov     ebx, [eax + edi]
78
    shr     ebx, 24
79
    cmp     ebx, 0
80
    jne     .nonalpha
4134 eAndrew 81
 
82
    pushad
83
    mov     eax, edi
84
    mov     edx, 0
85
    mov     ebx, 128
86
    div     ebx
87
 
88
    mov     edx, 0
89
    mov     ebx, 2
90
    div     ebx
91
 
92
    mov     edx, 0
93
    div     ebx
94
 
95
    cmp     edx, 1
96
    je	    .set_bg_line
97
 .set_bg:
98
    popad
99
    mov     ecx, [color.bg]
100
    jmp     .set_ecx
101
 .set_bg_line:
102
    popad
103
    mov     ecx, [color.bg_line]
104
 .set_ecx:
4120 eAndrew 105
    mov     [eax + edi], ecx
106
 .nonalpha:
107
    add     edi, 4
108
    cmp     edi, IMAGE_DATA_SIZE
109
    jne     .setalpha
110
 
111
  ; === CONVERTING TO BGR
112
    stdcall dword[img.toRGB], dword[img_data.object], dword[img_data.rgb_object]
113
    stdcall dword[img.destroy], dword[img_data.object]
114
 
115
; ==== Config window ====
116
    mov     eax, dword[dock_items.location]
117
    and     eax, 1b
118
    cmp     eax, 0
119
    je	    .vert
120
    jmp     .setshape
121
 
122
 .vert:
123
    mov     byte[win.isvert], 1
124
 
125
 .setshape:
126
    cmp     byte[win.isvert], 1
127
    je	    .vert_sp
128
 
129
 .horz_sp:
130
    call    .HORZ_WIDTH
131
    call    .HORZ_X
132
    call    .HORZ_HEIGHT
133
    cmp     dword[dock_items.location], 1
134
    je	    .settop
135
 
136
 .setbottom:
137
    call    .HORZ_Y_BOTTOM
138
    jmp     .SETDEF
139
 
140
 .settop:
141
    call    .HORZ_Y_TOP
142
    jmp     .SETDEF
143
 
144
 
145
 .vert_sp:
146
    call    .VERT_WIDTH
147
    call    .VERT_HEIGHT
148
    call    .VERT_Y
149
    cmp     dword[dock_items.location], 2
150
    je	    .setleft
151
 
152
 .setright:
153
    call    .VERT_X_RIGHT
154
    jmp     .SETDEF
155
 
156
 .setleft:
157
    call    .VERT_X_LEFT
158
    jmp     .SETDEF
159
 
160
 .HORZ_WIDTH:
4134 eAndrew 161
    mov     eax, 40
4120 eAndrew 162
    mov     ebx, [dock_items.count]
163
    imul    eax, ebx
164
    dec     eax
165
    mov     [win.width_opn], eax
166
    mov     [win.width_hdn], eax
167
 
168
    ret
169
 
170
 .HORZ_X:
171
    mcall   14
172
    shr     eax, 16
173
    mov     ebx, 2
174
    mov     edx, 0
175
    div     ebx
176
    mov     edx, 0
177
    mov     ecx, eax
178
 
179
    mov     eax, [win.width_opn]
180
    div     ebx
181
    sub     ecx, eax
182
    mov     [win.x_opn], ecx
183
    mov     [win.x_hdn], ecx
184
 
185
    ret
186
 
187
 .HORZ_HEIGHT:
4134 eAndrew 188
    mov     dword[win.height_opn], 40
4120 eAndrew 189
    mov     dword[win.height_hdn], 0
190
 
191
    ret
192
 
193
 .HORZ_Y_BOTTOM:
194
    mcall   14
195
    and     eax, 0xFFFF
196
    dec     eax
197
    mov     [win.y_hdn], eax
4134 eAndrew 198
    sub     eax, 40
4120 eAndrew 199
    mov     [win.y_opn], eax
200
 
201
    ret
202
 
203
 .HORZ_Y_TOP:
204
    mov     dword[win.y_opn], 0
205
    mov     dword[win.y_hdn], 0
206
 
207
    ret
208
 
209
 .VERT_WIDTH:
4134 eAndrew 210
    mov     dword[win.width_opn], 40
4120 eAndrew 211
    mov     dword[win.width_hdn], 0
212
 
213
    ret
214
 
215
 .VERT_X_LEFT:
216
 
217
    mov     dword[win.x_opn], 0
218
    mov     dword[win.x_hdn], 0
219
 
220
    ret
221
 
222
 .VERT_X_RIGHT:
223
    mcall   14
224
    and     eax, 0xFFFF0000
225
    shr     eax, 16
226
    mov     [win.x_hdn], eax
4134 eAndrew 227
    sub     eax, 40
4120 eAndrew 228
    mov     [win.x_opn], eax
229
 
230
    ret
231
 
232
 .VERT_HEIGHT:
4134 eAndrew 233
    mov     eax, 40
4120 eAndrew 234
    mov     ebx, [dock_items.count]
235
    imul    eax, ebx
236
    dec     eax
237
    mov     [win.height_opn], eax
238
    mov     [win.height_hdn], eax
239
 
240
    ret
241
 
242
 .VERT_Y:
243
    mcall   14
244
    and     eax, 0xFFFF
245
    mov     edx, 0
246
    mov     ebx, 2
247
    div     ebx
248
    mov     esi, eax
249
 
250
    mov     eax, [win.height_opn]
251
    mov     edx, 0
252
    mov     ebx, 2
253
    div     ebx
254
    sub     esi, eax
255
 
256
    mov     [win.y_hdn], esi
257
    mov     [win.y_opn], esi
258
 
259
    ret
260
 
261
 .SETDEF:
262
    mov     eax, [win.width_hdn]
263
    mov     [win.width], eax
264
 
265
    mov     eax, [win.x_hdn]
266
    mov     [win.x], eax
267
 
268
    mov     eax, [win.height_hdn]
269
    mov     [win.height], eax
270
 
271
    mov     eax, [win.y_hdn]
272
    mov     [win.y], eax
273
 
274
; ==== START ====
275
    mcall   9, win.procinfo, -1
276
    mov     ecx, [win.procinfo + 30]
277
    mcall   18, 21
278
    and     eax, 0xFFFF
279
    mov     [win.sid], eax
280
 
281
    call    main_loop
282
 
283
exit:
284
    stdcall mem.Free, [img_data.rgb_object]
285
    mcall   18, 2, [nwin.sid]
286
    mcall   -1
287
endp
288
;-------------------------------------------------------------------------------
289
proc main_loop
290
    mcall   10
291
 
292
    cmp     eax, EV_REDRAW
293
    je	    event_redraw
294
 
295
    cmp     eax, EV_BUTTON
296
    je	    event_button
297
 
298
    cmp     eax, EV_MOUSE
299
    je	    event_mouse
300
 
301
    jmp     main_loop
302
 
303
 .end:
304
    ret
305
endp
306
;-------------------------------------------------------------------------------
307
proc event_redraw
308
    mcall   12, 1
309
 
310
    mcall   0, <[win.x], [win.width]>, <[win.y], [win.height]>, [color.frame], [color.frame], [color.frame]
311
 
4124 eAndrew 312
    mov     eax, 13
313
 
4120 eAndrew 314
    and     ebx, 0x0000FFFF
315
    add     ebx, 0x00010000
316
    sub     ebx, 0x00000001
317
 
318
    and     ecx, 0x0000FFFF
319
    add     ecx, 0x00010000
320
    sub     ecx, 0x00000001
321
 
4124 eAndrew 322
    mcall   , , , [color.framein]
4120 eAndrew 323
 
324
 
325
    add     ebx, 0x00010000
326
    sub     ebx, 0x00000002
327
 
328
    add     ecx, 0x00010000
329
    sub     ecx, 0x00000002
330
 
4124 eAndrew 331
    mcall   , , , [color.bg]
4120 eAndrew 332
 
4134 eAndrew 333
    mov     edi, 2
334
    mov     eax, 13
335
    mov     ebx, 2 shl 16
336
    add     ebx, [win.width]
337
    sub     ebx, 3
338
    mov     ecx, 2 shl 16 + 2
339
    mov     edx, [color.bg_line]
340
  @@:
341
    mcall
342
    add     ecx, 4 shl 16
343
    add     edi, 4
344
    cmp     edi, [win.height]
345
    jl	    @b
346
 
4120 eAndrew 347
    mov     edi, 0
348
  @@:
349
    cmp     edi, [dock_items.count]
350
    je	    @f
351
 
352
    push    edi
4124 eAndrew 353
    mov     eax, 8
354
    mov     edx, 0x60000002
355
    mov     esi, [color.bg]
4134 eAndrew 356
    imul    edi, 40
4124 eAndrew 357
    shl     edi, 16
4134 eAndrew 358
    add     edi, 39
4120 eAndrew 359
    cmp     byte[win.isvert], 1
360
    je	    .vert_btn
4134 eAndrew 361
    mcall   , edi, <0, 40>
4120 eAndrew 362
    jmp     .endbtn
363
 .vert_btn:
4134 eAndrew 364
    mcall   , <0, 40>, edi
4120 eAndrew 365
 .endbtn:
366
    pop     edi
367
 
4134 eAndrew 368
 .draw_Sseparator:
369
    push    ebx
370
    push    ecx
371
    mov     eax, 13
372
    mov     ebx, edi
373
    imul    ebx, 40
374
    add     ebx, 40
375
    shl     ebx, 16
376
    add     ebx, 1
377
    cmp     byte[win.isvert], 1
378
    je	    .vert_Sdraw_sep
379
    mcall   , , <6, 29>, [color.framein]
380
    jmp     .end_Sinner_sep
381
 .vert_Sdraw_sep:
382
    mov     ecx, ebx
383
    mcall   , <6, 29>, , [color.framein]
384
 .end_Sinner_sep:
385
    pop     ecx
386
    pop     ebx
387
 .end_Sseparator:
388
 
4120 eAndrew 389
    cmp     byte[dock_items.separator + edi], 1
4134 eAndrew 390
    jne     .end_separator
4120 eAndrew 391
 
392
 .draw_separator:
393
    push    ebx
394
    push    ecx
4124 eAndrew 395
    mov     eax, 13
4120 eAndrew 396
    mov     ebx, edi
4134 eAndrew 397
    imul    ebx, 40
398
    add     ebx, 39
4120 eAndrew 399
    shl     ebx, 16
400
    add     ebx, 1
401
    cmp     byte[win.isvert], 1
402
    je	    .vert_draw_sep
4134 eAndrew 403
    mcall   , , <0, 41>, [color.frame]
4120 eAndrew 404
    sub     ebx, 0x00010000
4124 eAndrew 405
    mov     edx, [color.framein]
4134 eAndrew 406
    mcall   , , <1, 39>
4120 eAndrew 407
    add     ebx, 0x00020000
4134 eAndrew 408
    mcall   , , <1, 39>
4120 eAndrew 409
    jmp     .end_inner_sep
410
 .vert_draw_sep:
411
    mov     ecx, ebx
4134 eAndrew 412
    mcall   , <0, 41>, , [color.frame]
4120 eAndrew 413
    sub     ecx, 0x00010000
4124 eAndrew 414
    mov     edx, [color.framein]
4134 eAndrew 415
    mcall   , <1, 39>
4120 eAndrew 416
    add     ecx, 0x00020000
4134 eAndrew 417
    mcall   , <1, 39>
4120 eAndrew 418
 .end_inner_sep:
419
    pop     ecx
420
    pop     ebx
421
 .end_separator:
422
 
423
    cmp     byte[win.isvert], 1
424
    je	    .vert_dig
425
    mov     edx, ebx
426
    and     edx, 0xFFFF0000
4134 eAndrew 427
    add     edx, 0x00040004
4120 eAndrew 428
    jmp     .digend
429
 .vert_dig:
430
    mov     edx, ecx
431
    and     edx, 0xFFFF0000
432
    shr     edx, 16
4134 eAndrew 433
    add     edx, 0x00040004
4120 eAndrew 434
 .digend:
435
 
436
    imul    ebx, edi, 4
437
    add     ebx, dock_items.icon
438
    mov     ebx, [ebx]
439
    imul    ebx, ICON_SIZE
440
    add     ebx, [img_data.rgb_object]
441
 
442
    mcall   7, , <32, 32>
443
 
444
    inc     edi
445
    jmp     @b
446
  @@:
447
 
448
    mcall   12, 2
449
 
450
    jmp     main_loop
451
endp
452
;-------------------------------------------------------------------------------
453
proc event_button
454
    mcall   17
455
 
456
    cmp     ah, 1
457
    je	    .button_close
458
 
459
    cmp     ah, 2
460
    je	    .button_dock
461
 
462
    jmp     @f
463
 
464
 .button_close:
465
    jmp     exit
466
 
467
 .button_dock:
468
    mov     edi, [win.button_index]
469
    imul    edi, 256
470
 
471
    mov     esi, edi
472
    add     esi, dock_items.path
473
    mov     dword[file_exec.file], esi
474
 
475
    mov     esi, edi
476
    add     esi, dock_items.param
477
    mov     dword[file_exec.param], esi
478
 
479
    mcall   70, file_exec
480
 
4134 eAndrew 481
    mov     ecx, eax
482
    mcall   18, 21
483
    and     eax, 0xFFFF
484
    mov     [win.psid], eax
485
 
4120 eAndrew 486
  @@:
487
    jmp     main_loop
488
endp
489
;-------------------------------------------------------------------------------
490
proc event_mouse
491
    mcall   37, 1
492
    mov     edi, eax
493
    mov     esi, eax
494
    shr     edi, 16
495
    and     esi, 0xFFFF
496
 
497
    cmp     edi, 0
498
    jl	    @f
499
    dec     edi
500
    cmp     edi, [win.width]
501
    jg	    @f
502
    cmp     esi, 0
503
    jl	    @f
504
    dec     esi
505
    cmp     esi, [win.height]
506
    jg	    @f
507
 
508
    mov     eax, [dock_items.location]
509
    and     eax, 1b
510
    cmp     eax, 1
511
    jne     .vert
512
    mov     eax, edi
513
    jmp     .nxt
514
 
515
 .vert:
516
    mov     eax, esi
517
 
518
 .nxt:
519
    mov     edx, 0
4134 eAndrew 520
    mov     ebx, 40
4120 eAndrew 521
    div     ebx
522
 
523
    cmp     eax, [dock_items.count]
524
    jge     .set0
525
    jmp     .nxtcmp
526
 
527
 .set0:
528
    mov     eax, 100
529
 
530
 .nxtcmp:
531
    cmp     [win.button_index], eax
532
    je	    .nxt2
533
 
534
    mov     [win.button_index], eax
535
 
536
 .nxt2:
537
    mov     eax, [win.button_index]
4134 eAndrew 538
    imul    eax, 40
4120 eAndrew 539
    cmp     byte[win.isvert], 1
540
    je	    .vert_name
4134 eAndrew 541
    sub     eax, 15
4120 eAndrew 542
    add     eax, [win.x]
543
    mov     [nwin.x], eax
544
    jmp     .vert_end
545
 .vert_name:
4134 eAndrew 546
    add     eax, 12
4120 eAndrew 547
    add     eax, [win.y]
548
    mov     [nwin.y], eax
549
 .vert_end:
550
    mov     byte[nwin.change_shape], 1
551
 
552
    cmp     byte[win.state], 1
553
    je	    .end_cmp
554
 
555
    mov     edx, esp
556
    add     edx, 512
557
    mcall   51, 1, n_main
558
 
4124 eAndrew 559
    mov     eax, 18
560
 
561
    mcall   , 7
4120 eAndrew 562
    mov     [win.psid], eax
563
 
4129 eAndrew 564
    mcall   18, 3, [win.sid]
4120 eAndrew 565
 
566
    mov     byte[win.state], 1
567
 
568
    mov     eax, [win.width_opn]
569
    mov     [win.width], eax
570
 
571
    mov     eax, [win.x_opn]
572
    mov     [win.x], eax
573
 
574
    mov     eax, [win.height_opn]
575
    mov     [win.height], eax
576
 
577
    mov     eax, [win.y_opn]
578
    mov     [win.y], eax
579
 
580
    mcall   67, [win.x], [win.y], [win.width], [win.height]
581
 
582
    call     event_redraw
583
 
584
  @@:
585
    cmp     byte[win.state], 0
586
    je	    .end_cmp
587
 
588
    mov     byte[nwin.close], 1
589
 
590
    mcall   18, 3, [win.psid]
591
 
592
    mov     byte[win.state], 0
593
    mov     byte[win.button_index], -1
594
 
595
    mov     eax, [win.width_hdn]
596
    mov     [win.width], eax
597
 
598
    mov     eax, [win.x_hdn]
599
    mov     [win.x], eax
600
 
601
    mov     eax, [win.height_hdn]
602
    mov     [win.height], eax
603
 
604
    mov     eax, [win.y_hdn]
605
    mov     [win.y], eax
606
 
607
    mcall   67, [win.x], [win.y], [win.width], [win.height]
608
 
609
    call     event_redraw
610
 
611
  .end_cmp:
612
    jmp     main_loop
613
endp
614
;-------------------------------------------------------------------------------
615
proc sections_callback, _file_name, _section_name
616
    mov     eax, [_section_name]
617
    cmp     byte[eax], '@'
618
    jne     @f
619
 
620
    dec     dword[dock_items.count]
621
    jmp     .endproc
622
 
623
  @@:
624
    ; ==== GET NAME ====
625
    mov     ebx, [dock_items.count]
626
    imul    ebx, 16
627
    add     ebx, dock_items.name
628
 
629
    mov     eax, [_section_name]
630
 
631
    mov     edi, 0
632
  @@:
633
    mov     cl, byte[eax]
634
    mov     byte[ebx + edi], cl
635
 
636
    inc     eax
637
    inc     edi
638
    cmp     edi, 10
639
    jne     @b
640
 
641
  ; ==== GET PATH ====
642
    mov     ebx, [dock_items.count]
643
    imul    ebx, 256
644
    add     ebx, dock_items.path
645
 
646
    invoke  ini.get_str, [_file_name], [_section_name], ini_data.path_name, ebx, 256, 0
647
 
648
  ; === GET  PARAM ===
649
    mov     ebx, [dock_items.count]
650
    imul    ebx, 256
651
    add     ebx, dock_items.param
652
 
653
    invoke  ini.get_str, [_file_name], [_section_name], ini_data.param_name, ebx, 256, 0
654
 
655
  ; ==== GET ICON ====
656
    invoke  ini.get_int, [_file_name], [_section_name], ini_data.icon_name, 0
657
 
658
    mov     ebx, [dock_items.count]
659
    imul    ebx, 4
660
    mov     [dock_items.icon + ebx], eax
661
 
662
  ; ==== GET SEPARATOR ====
663
    invoke  ini.get_int, [_file_name], [_section_name], ini_data.separator_name, 0
664
 
665
    mov     ebx, [dock_items.count]
666
    mov     byte[dock_items.separator + ebx], al
667
 
668
  ; ====== END =======
669
 .endproc:
670
    mov     eax, 1
671
    inc     dword[dock_items.count]
672
    ret
673
endp
674
;-------------------------------------------------------------------------------
675
n_main:
676
    cmp     dword[dock_items.location], 1
677
    je	    .top
678
    cmp     dword[dock_items.location], 4
679
    je	    .right
680
    cmp     dword[dock_items.location], 3
681
    je	    .bottom
682
    jmp     .left
683
 .top:
684
    mov     eax, [win.height_opn]
4134 eAndrew 685
    add     eax, 4
4120 eAndrew 686
    mov     [nwin.y], eax
687
    jmp     @f
688
 .right:
689
    mov     eax, [win.x_opn]
4134 eAndrew 690
    sub     eax, 72
4120 eAndrew 691
    mov     [nwin.x], eax
692
    jmp     @f
693
 .bottom:
694
    mov     eax, [win.y_opn]
4134 eAndrew 695
    sub     eax, 20
4120 eAndrew 696
    mov     [nwin.y], eax
697
    jmp     @f
698
 .left:
699
    mov     eax, [win.width_opn]
4134 eAndrew 700
    add     eax, 4
4120 eAndrew 701
    mov     [nwin.x], eax
702
  @@:
703
    mov     dword[nwin.width], 68
704
    mov     dword[nwin.height], 16
705
 
706
    mcall   40, 1b
707
 
708
    mcall   9, win.procinfo, -1
709
    mov     ecx, [win.procinfo + 30]
710
    mcall   18, 21
711
    and     eax, 0xFFFF
712
    mov     [nwin.sid], eax
713
;-------------------------------------------------------------------------------
714
n_main_loop:
715
    mcall   23, 1
716
 
717
    cmp     eax, EV_IDLE
718
    je	    n_event_idle
719
    cmp     eax, EV_REDRAW
720
    je	    n_event_redraw
721
 
722
    jmp     n_main_loop
723
;-------------------------------------------------------------------------------
724
n_event_idle:
725
    cmp     byte[nwin.close], 1
726
    jne     @f
727
 
728
    mov     byte[nwin.close], 0
729
    mcall   -1
730
 
731
  @@:
732
    cmp     byte[win.button_index], 100
733
    jne     @f
734
 
735
    mcall   67, 0, 0, 0, 0
736
    jmp     .end
737
 
738
  @@:
739
    cmp     byte[nwin.change_shape], 1
740
    jne     .end
741
 
742
    mov     byte[nwin.change_shape], 0
743
    mcall   67, [nwin.x], [nwin.y], [nwin.width], [nwin.height]
744
 
745
 .end:
746
    jmp     n_main_loop
747
;-------------------------------------------------------------------------------
748
n_event_redraw:
749
    mcall   12, 1
750
 
751
    mcall   0, <[nwin.x], [nwin.width]>, <[nwin.y], [nwin.height]>, [color.frame], [color.frame], [color.frame]
752
 
4124 eAndrew 753
    mov     eax, 13
754
 
4120 eAndrew 755
    and     ebx, 0x0000FFFF
756
    add     ebx, 0x00010000
757
    sub     ebx, 0x00000001
758
 
759
    and     ecx, 0x0000FFFF
760
    add     ecx, 0x00010000
761
    sub     ecx, 0x00000001
762
 
4124 eAndrew 763
    mcall   , , , [color.framein]
4120 eAndrew 764
 
765
 
766
    add     ebx, 0x00010000
767
    sub     ebx, 0x00000002
768
 
769
    add     ecx, 0x00010000
770
    sub     ecx, 0x00000002
771
 
4124 eAndrew 772
    mcall   , , , [color.bg]
4120 eAndrew 773
 
4134 eAndrew 774
    mov     edi, 0
775
    mov     eax, 13
776
    mov     ebx, 2 shl 16
777
    add     ebx, [nwin.width]
778
    sub     ebx, 3
779
    mov     ecx, 2 shl 16 + 2
780
    mov     edx, [color.bg_line]
781
  @@:
782
    mcall
783
    add     ecx, 4 shl 16
784
    add     edi, 4
785
    cmp     edi, 16
786
    jne     @b
787
 
4120 eAndrew 788
    mov     edx, [win.button_index]
789
    imul    edx, 16
790
    add     edx, dock_items.name
791
 
792
    mov     eax, 0
793
  @@:
794
    inc     eax
795
    cmp     byte[edx+eax], 0
796
    jne     @b
797
 
798
    imul    eax, 3
799
    mov     ebx, 34
800
    sub     ebx, eax
801
    inc     ebx
802
    shl     ebx, 16
803
    add     ebx, 5
804
 
805
    mcall   4, , [color.text]
806
 
807
    mcall   12, 2
808
 
809
    jmp     n_main_loop
810
;-------------------------------------------------------------------------------
811
img_data:
812
 .file_name:
813
    db	    "/sys/iconstrp.png", 0
814
 .cfg_text:
815
    db	    "R", 0
816
 .ext_text:
817
    db	    "X", 0
818
;-------------------------------------------------------------------------------
819
ini_data:
820
 .file_name:
821
    db	    "/sys/settings/Docky.ini", 0
822
 .path_name:
823
    db	    "path", 0
824
 .param_name:
825
    db	    "param", 0
826
 .icon_name:
827
    db	    "icon", 0
828
 .separator_name:
829
    db	    "separator", 0
830
 
831
 .settings_name:
832
    db	    "@SETTINGS", 0
833
 .location_name:
834
    db	    "location", 0
835
 .color_bg:
836
    db	    "bg", 0
4134 eAndrew 837
 .color_bg_line:
838
    db	    "bg_line", 0
4120 eAndrew 839
 .color_frame:
840
    db	    "frame", 0
841
 .color_framein:
842
    db	    "framein", 0
843
 .color_text:
844
    db	    "text", 0
845
;-------------------------------------------------------------------------------
846
load_lib_start:
847
    lib1    l_libs img.name,	     \
848
		   sys_path,	     \
849
		   file_name,	     \
850
		   img.dir,	     \
851
		   error,	     \
852
		   error,	     \
853
		   img, 	     \
854
		   error,	     \
855
		   error
856
 
857
    lib2    l_libs ini.name,	     \
858
		   sys_path,	     \
859
		   file_name,	     \
860
		   ini.dir,	     \
861
		   error,	     \
862
		   error,	     \
863
		   ini, 	     \
864
		   error,	     \
865
		   error
866
load_lib_end:
867
;-------------------------------------------------------------------------------
868
img:
869
 .init	   \
870
    dd	    .init_T
871
 .toRGB    \
872
    dd	    .toRGB_T
873
 .decode   \
874
    dd	    .decode_T
875
 .destroy  \
876
    dd	    .destroy_T
877
 
878
    dd	    0, 0
879
 
880
 .init_T:
881
    db	    "lib_init", 0
882
 .toRGB_T:
883
    db	    "img_to_rgb2", 0
884
 .decode_T:
885
    db	    "img_decode", 0
886
 .destroy_T:
887
    db	    "img_destroy", 0
888
 
889
 .dir:
890
    db	    "/sys/lib/"
891
 .name:
892
    db	    "libimg.obj", 0
893
;-------------------------------------------------------------------------------
894
ini:
895
 .init	   \
896
    dd	    .init_T
897
 .sections \
898
    dd	    .sections_T
899
 .get_int  \
900
    dd	    .get_int_T
901
 .get_str  \
902
    dd	    .get_str_T
903
 .get_color\
904
    dd	    .get_color_T
905
 
906
    dd	    0, 0
907
 
908
 .init_T:
909
    db	    "lib_init", 0
910
 .sections_T:
911
    db	    "ini_enum_sections", 0
912
 .get_int_T:
913
    db	    "ini_get_int", 0
914
 .get_str_T:
915
    db	    "ini_get_str", 0
916
 .get_color_T:
917
    db	    "ini_get_color", 0
918
 
919
 .dir:
920
    db	    "/sys/lib/"
921
 .name:
922
    db	    "libini.obj", 0
923
;-------------------------------------------------------------------------------
924
error:
925
    db	    0
926
;-------------------------------------------------------------------------------
927
__dataend:
928
;================================================================================
929
    rb	    1024
930
__stackend:
931
;================================================================================
932
color:
933
 .bg:
934
    rd	    1
4134 eAndrew 935
 .bg_line:
936
    rd	    1
4120 eAndrew 937
 .frame:
938
    rd	    1
939
 .framein:
940
    rd	    1
941
 .text:
942
    rd	    1
943
;-------------------------------------------------------------------------------
944
win:
945
 .x:
946
    rd	    1
947
 .y:
948
    rd	    1
949
 .width:
950
    rd	    1
951
 .height:
952
    rd	    1
953
 
954
 .x_hdn:
955
    rd	    1
956
 .y_hdn:
957
    rd	    1
958
 .width_hdn:
959
    rd	    1
960
 .height_hdn:
961
    rd	    1
962
 
963
 .x_opn:
964
    rd	    1
965
 .y_opn:
966
    rd	    1
967
 .width_opn:
968
    rd	    1
969
 .height_opn:
970
    rd	    1
971
 
972
 .sid:
973
    rd	    1
974
 .psid:
975
    rd	    1
976
 .procinfo:
977
    rb	    1024
978
 .state:
979
    rb	    1
980
 .button_index:
981
    rd	    1
982
 
983
 .isvert:
984
    rb	    1
985
;-------------------------------------------------------------------------------
986
nwin:
987
 .x:
988
    rd	    1
989
 .y:
990
    rd	    1
991
 .width:
992
    rd	    1
993
 .height:
994
    rd	    1
995
 
996
 .visible:
997
    rd	    1
998
 .sid:
999
    rd	    1
1000
 .change_shape:
1001
    rb	    1
1002
 .close:
1003
    rb	    1
1004
;-------------------------------------------------------------------------------
1005
img_data.object:
1006
    rd	    1
1007
img_data.rgb_object:
1008
    rd	    1
1009
img_data.file:
1010
 .proc:
1011
    rd	    1
1012
 .position:
1013
    rd	    1
1014
    rd	    1
1015
 .size:
1016
    rd	    1
1017
 .buffer:
1018
    rd	    1
1019
    rb	    1
1020
 .name:
1021
    rd	    1
1022
;-------------------------------------------------------------------------------
1023
file_exec:
1024
 .proc:
1025
    rd	    1
1026
    rd	    1
1027
 .param:
1028
    rd	    1
1029
    rd	    1
1030
    rd	    1
1031
    rb	    1
1032
 .file:
1033
    rd	    1
1034
;-------------------------------------------------------------------------------
1035
dock_items:
1036
 .count:
1037
    rd	    1
1038
 .name:
1039
    rb	    16	* 20
1040
 .path:
1041
    rb	    256 * 20
1042
 .param:
1043
    rb	    256 * 20
1044
 .icon:
1045
    rd	    1	* 20
1046
 .separator:
1047
    rb	    1	* 20
1048
 .location:
1049
    rd	    1
1050
;-------------------------------------------------------------------------------
1051
sys_path:
1052
    rb	    4096
1053
file_name:
1054
    rb	    4096
1055
;-------------------------------------------------------------------------------
1056
__memend:
1057
;================================================================================