Subversion Repositories Kolibri OS

Rev

Rev 8568 | Rev 9530 | 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"
8568 IgorA 10
	include "../../../KOSfuncs.inc"
11
    include "../../../load_lib.mac"
4157 eAndrew 12
    ;include "../../../debug.inc"
4120 eAndrew 13
 
4140 eAndrew 14
    include "DATA.INC"
15
    include "NAME.INC"
16
 
8568 IgorA 17
    @use_library	 \
4120 eAndrew 18
	    mem.Alloc,	 \
19
	    mem.Free,	 \
20
	    mem.ReAlloc, \
21
	    dll.Load
22
;================================================================================
4140 eAndrew 23
main:
4120 eAndrew 24
; ==== Init ====
8568 IgorA 25
    mcall   SF_SYSTEM, SSF_GET_ACTIVE_WINDOW
4120 eAndrew 26
    mov     [win.psid], eax
27
 
8568 IgorA 28
    mcall   SF_SET_EVENTS_MASK, EVM_REDRAW+EVM_BUTTON+EVM_MOUSE ;+EVM_DEKSTOP to update colors on skin change
4120 eAndrew 29
 
30
; ==== Load libs ====
31
    load_libraries load_lib_start, load_lib_end
32
 
33
; ==== Config LibINI ====
9444 leency 34
    invoke  ini.get_int, ini_data.file_name, ini_data.settings_name, ini_data.location_name, 2
35
    test    eax,eax
36
	jz      exit
4120 eAndrew 37
    mov     [dock_items.location], eax
4234 eAndrew 38
    invoke  ini.get_int, ini_data.file_name, ini_data.settings_name, ini_data.fsize_name, 0
39
    mov     [dock_items.fsize], eax
5475 leency 40
    invoke  ini.get_int, ini_data.file_name, ini_data.settings_name, ini_data.ashow_name, 0
41
    mov     [dock_items.ashow], eax
4120 eAndrew 42
 
4195 eAndrew 43
    invoke  ini.sections, ini_data.file_name, sections_callback
44
 
45
; ==== Load colors ====
8568 IgorA 46
    mcall   SF_STYLE_SETTINGS, SSF_GET_COLORS, color
4140 eAndrew 47
    or	    dword[color.bg],	0x10000000
48
    or	    dword[color.frame], 0x10000000
49
    or	    dword[color.text],	0x80000000
4120 eAndrew 50
 
51
; ==== Config LibIMG ====
8568 IgorA 52
    mov     dword[fi.p00], SSF_GET_INFO
4140 eAndrew 53
    mov     dword[fi.p16], buf_128
54
    mov     dword[fi.p21], img_data.file_name
55
 
8568 IgorA 56
    mcall   SF_FILE, fi
4140 eAndrew 57
 
58
    mov     edx, [buf_128 + 32]
59
    imul    edx, 10
60
 
61
    stdcall mem.Alloc, edx
4120 eAndrew 62
    mov     [img_data.rgb_object], eax
63
 
8568 IgorA 64
    mov     dword[fi.p00], SSF_READ_FILE
4140 eAndrew 65
    mov     dword[fi.p12], edx
66
    m2m     dword[fi.p16], dword[img_data.rgb_object]
67
    mov     dword[fi.p21], img_data.file_name
4120 eAndrew 68
 
8568 IgorA 69
    mcall   SF_FILE, fi
4120 eAndrew 70
 
71
    cmp     ebx, 0xFFFFFFFF
72
    je	    @f
73
 
74
    stdcall dword[img.decode], dword[img_data.rgb_object], ebx, 0
75
    mov     dword[img_data.object], eax
76
 
77
  ; === ALPHA ===
4195 eAndrew 78
    mov     edi, eax
79
    add     edi, 8
80
    mov     edi, [edi]
81
    imul    edi, 128
82
    sub     edi, 4
83
 
4120 eAndrew 84
    add     eax, 24
85
    mov     eax, [eax]
86
 .setalpha:
87
    mov     ebx, [eax + edi]
88
    shr     ebx, 24
89
    cmp     ebx, 0
90
    jne     .nonalpha
4134 eAndrew 91
 
92
    mov     ecx, [color.bg]
4120 eAndrew 93
    mov     [eax + edi], ecx
94
 .nonalpha:
4195 eAndrew 95
    sub     edi, 4
96
    cmp     edi, 0
4120 eAndrew 97
    jne     .setalpha
98
 
99
  ; === CONVERTING TO BGR
100
    stdcall dword[img.toRGB], dword[img_data.object], dword[img_data.rgb_object]
101
    stdcall dword[img.destroy], dword[img_data.object]
102
 
103
; ==== Config window ====
104
    mov     eax, dword[dock_items.location]
105
    and     eax, 1b
106
    cmp     eax, 0
107
    je	    .vert
108
    jmp     .setshape
109
 
110
 .vert:
111
    mov     byte[win.isvert], 1
112
 
113
 .setshape:
114
    cmp     byte[win.isvert], 1
115
    je	    .vert_sp
116
 
117
 .horz_sp:
118
    call    .HORZ_WIDTH
119
    call    .HORZ_X
120
    call    .HORZ_HEIGHT
121
    cmp     dword[dock_items.location], 1
122
    je	    .settop
123
 
124
 .setbottom:
125
    call    .HORZ_Y_BOTTOM
126
    jmp     .SETDEF
127
 
128
 .settop:
129
    call    .HORZ_Y_TOP
130
    jmp     .SETDEF
131
 
132
 
133
 .vert_sp:
134
    call    .VERT_WIDTH
135
    call    .VERT_HEIGHT
136
    call    .VERT_Y
137
    cmp     dword[dock_items.location], 2
138
    je	    .setleft
139
 
140
 .setright:
141
    call    .VERT_X_RIGHT
142
    jmp     .SETDEF
143
 
144
 .setleft:
145
    call    .VERT_X_LEFT
146
    jmp     .SETDEF
147
 
4195 eAndrew 148
;-------------------------------------------------------------------------------
4120 eAndrew 149
 .HORZ_WIDTH:
4234 eAndrew 150
    cmp     [dock_items.fsize], byte 1
151
    je	    @f
4140 eAndrew 152
    mov     eax, BUTTON_SIZE
4120 eAndrew 153
    mov     ebx, [dock_items.count]
154
    imul    eax, ebx
4140 eAndrew 155
    add     eax, 24
4120 eAndrew 156
    dec     eax
4234 eAndrew 157
    jmp     .set_hw
158
  @@:
8568 IgorA 159
    mcall   SF_GET_SCREEN_SIZE
4234 eAndrew 160
    shr     eax, 16
161
 .set_hw:
4120 eAndrew 162
    mov     [win.width_opn], eax
163
    mov     [win.width_hdn], eax
164
 
165
    ret
166
 
4195 eAndrew 167
;-------------------------------------------------------------------------------
4120 eAndrew 168
 .HORZ_X:
8568 IgorA 169
    mcall   SF_GET_SCREEN_SIZE
4195 eAndrew 170
    shr     eax, 17
171
    mov     ecx, [win.width_opn]
172
    shr     ecx, 1
173
    sub     eax, ecx
174
    mov     [win.x_opn], eax
175
    mov     [win.x_hdn], eax
4120 eAndrew 176
 
177
    ret
178
 
4195 eAndrew 179
;-------------------------------------------------------------------------------
4120 eAndrew 180
 .HORZ_HEIGHT:
4195 eAndrew 181
    mov     dword[win.height_hdn], 3
4140 eAndrew 182
    mov     dword[win.height_opn], BUTTON_SIZE
4120 eAndrew 183
 
184
    ret
185
 
4195 eAndrew 186
;-------------------------------------------------------------------------------
4120 eAndrew 187
 .HORZ_Y_BOTTOM:
8568 IgorA 188
    mcall   SF_GET_SCREEN_SIZE
4120 eAndrew 189
    and     eax, 0xFFFF
190
    dec     eax
191
    mov     [win.y_hdn], eax
4157 eAndrew 192
    sub     eax, 43
4120 eAndrew 193
    mov     [win.y_opn], eax
194
 
195
    ret
196
 
197
 .HORZ_Y_TOP:
198
    mov     dword[win.y_opn], 0
199
    mov     dword[win.y_hdn], 0
200
 
201
    ret
202
 
4195 eAndrew 203
;-------------------------------------------------------------------------------
4120 eAndrew 204
 .VERT_WIDTH:
4140 eAndrew 205
    mov     dword[win.width_opn], BUTTON_SIZE
4157 eAndrew 206
    mov     dword[win.width_hdn], 3
4120 eAndrew 207
 
208
    ret
209
 
4195 eAndrew 210
;-------------------------------------------------------------------------------
4120 eAndrew 211
 .VERT_X_LEFT:
212
    mov     dword[win.x_opn], 0
213
    mov     dword[win.x_hdn], 0
214
 
215
    ret
216
 
217
 .VERT_X_RIGHT:
8568 IgorA 218
    mcall   SF_GET_SCREEN_SIZE
4120 eAndrew 219
    and     eax, 0xFFFF0000
220
    shr     eax, 16
221
    mov     [win.x_hdn], eax
4140 eAndrew 222
    sub     eax, BUTTON_SIZE
4120 eAndrew 223
    mov     [win.x_opn], eax
224
 
225
    ret
226
 
4195 eAndrew 227
;-------------------------------------------------------------------------------
4120 eAndrew 228
 .VERT_HEIGHT:
4234 eAndrew 229
    cmp     [dock_items.fsize], byte 1
230
    je	    @f
4140 eAndrew 231
    mov     eax, BUTTON_SIZE
4120 eAndrew 232
    mov     ebx, [dock_items.count]
233
    imul    eax, ebx
234
    dec     eax
4234 eAndrew 235
    jmp     .set_vh
236
  @@:
8568 IgorA 237
    mcall   SF_GET_SCREEN_SIZE
4234 eAndrew 238
    and     eax, 0xFFFF
239
 .set_vh:
4120 eAndrew 240
    mov     [win.height_opn], eax
241
    mov     [win.height_hdn], eax
242
 
243
    ret
244
 
4195 eAndrew 245
;-------------------------------------------------------------------------------
4120 eAndrew 246
 .VERT_Y:
8568 IgorA 247
    mcall   SF_GET_SCREEN_SIZE
4120 eAndrew 248
    and     eax, 0xFFFF
4195 eAndrew 249
    shr     eax, 1
4120 eAndrew 250
 
4195 eAndrew 251
    mov     esi, [win.height_opn]
252
    shr     esi, 1
253
    sub     eax, esi
4120 eAndrew 254
 
4195 eAndrew 255
    mov     [win.y_hdn], eax
256
    mov     [win.y_opn], eax
4120 eAndrew 257
 
258
    ret
259
 
4195 eAndrew 260
;-------------------------------------------------------------------------------
4120 eAndrew 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
5475 leency 273
 
274
    cmp     byte[dock_items.ashow],1
275
    jne     .not_ashow
4120 eAndrew 276
 
5475 leency 277
    mov     eax, [win.width_opn]
278
    mov     [win.width], eax
279
 
280
    mov     eax, [win.x_opn]
281
    mov     [win.x], eax
282
 
283
    mov     eax, [win.height_opn]
284
    mov     [win.height], eax
285
 
286
    mov     eax, [win.y_opn]
287
    mov     [win.y], eax
288
 
289
 .not_ashow:
290
 
291
 
4195 eAndrew 292
;-------------------------------------------------------------------------------
4120 eAndrew 293
; ==== START ====
8568 IgorA 294
    mcall   SF_THREAD_INFO, win.procinfo, -1
4120 eAndrew 295
    mov     ecx, [win.procinfo + 30]
8568 IgorA 296
    mcall   SF_SYSTEM, SSF_GET_THREAD_SLOT
4120 eAndrew 297
    and     eax, 0xFFFF
298
    mov     [win.sid], eax
299
 
300
    call    main_loop
4140 eAndrew 301
;-------------------------------------------------------------------------------
4120 eAndrew 302
exit:
303
    stdcall mem.Free, [img_data.rgb_object]
8568 IgorA 304
    mcall   SF_SYSTEM, SSF_TERMINATE_THREAD, [nwin.sid]
305
    mcall   SF_TERMINATE_PROCESS
4120 eAndrew 306
;-------------------------------------------------------------------------------
8568 IgorA 307
align 4
4195 eAndrew 308
main_loop:
8568 IgorA 309
    mcall   SF_WAIT_EVENT
4120 eAndrew 310
 
311
    cmp     eax, EV_REDRAW
312
    je	    event_redraw
313
 
314
    cmp     eax, EV_BUTTON
315
    je	    event_button
316
 
317
    cmp     eax, EV_MOUSE
318
    je	    event_mouse
319
 
320
    jmp     main_loop
321
;-------------------------------------------------------------------------------
4140 eAndrew 322
event_redraw:
4198 eAndrew 323
    call    DRAW_WINDOW
324
    jmp     main_loop
325
;-------------------------------------------------------------------------------
326
DRAW_WINDOW:
8568 IgorA 327
    mcall   SF_REDRAW, SSF_BEGIN_DRAW
4120 eAndrew 328
 
4195 eAndrew 329
    mov     esi, [color.bg]
330
    or	    esi, 0x01000000
8568 IgorA 331
    mcall   SF_CREATE_WINDOW, <[win.x], [win.width]>, <[win.y], [win.height]>, [color.bg], , [color.frame]
4120 eAndrew 332
 
8568 IgorA 333
    xor     edi, edi
4120 eAndrew 334
  @@:
335
    cmp     edi, [dock_items.count]
336
    je	    @f
337
 
338
    push    edi
8568 IgorA 339
    mov     eax, SF_DEFINE_BUTTON
4124 eAndrew 340
    mov     edx, 0x60000002
341
    mov     esi, [color.bg]
4140 eAndrew 342
    imul    edi, BUTTON_SIZE
343
    add     edi, 12
4124 eAndrew 344
    shl     edi, 16
4140 eAndrew 345
    add     edi, BUTTON_SIZE
4120 eAndrew 346
    cmp     byte[win.isvert], 1
347
    je	    .vert_btn
4140 eAndrew 348
    mcall   , edi, <0, BUTTON_SIZE>
4120 eAndrew 349
    jmp     .endbtn
350
 .vert_btn:
4157 eAndrew 351
    sub     edi, 12 shl 16
4140 eAndrew 352
    mcall   , <0, BUTTON_SIZE>, edi
4120 eAndrew 353
 .endbtn:
354
    pop     edi
355
 
356
    cmp     byte[dock_items.separator + edi], 1
4134 eAndrew 357
    jne     .end_separator
4120 eAndrew 358
 
359
 .draw_separator:
360
    push    ebx
361
    push    ecx
4140 eAndrew 362
 
8568 IgorA 363
    mov     eax, SF_DRAW_RECT
4120 eAndrew 364
    mov     ebx, edi
4140 eAndrew 365
    imul    ebx, BUTTON_SIZE
366
    add     ebx, BUTTON_SIZE
8568 IgorA 367
    add     ebx, 12-1
4120 eAndrew 368
    shl     ebx, 16
4198 eAndrew 369
    add     ebx, 2
4140 eAndrew 370
 
4120 eAndrew 371
    cmp     byte[win.isvert], 1
372
    je	    .vert_draw_sep
4198 eAndrew 373
    mcall   , , <4,  36>, [color.frame]
4120 eAndrew 374
    jmp     .end_inner_sep
375
 .vert_draw_sep:
4157 eAndrew 376
    sub     ebx, 12 shl 16
4120 eAndrew 377
    mov     ecx, ebx
4140 eAndrew 378
    mcall   , <4, 36>, , [color.frame]
4120 eAndrew 379
 .end_inner_sep:
380
    pop     ecx
381
    pop     ebx
382
 .end_separator:
383
 
384
    cmp     byte[win.isvert], 1
385
    je	    .vert_dig
386
    mov     edx, ebx
387
    and     edx, 0xFFFF0000
4140 eAndrew 388
    add     edx, 0x00060006
4120 eAndrew 389
    jmp     .digend
390
 .vert_dig:
391
    mov     edx, ecx
392
    and     edx, 0xFFFF0000
393
    shr     edx, 16
4140 eAndrew 394
    add     edx, 0x00060006
4120 eAndrew 395
 .digend:
396
 
397
    imul    ebx, edi, 4
398
    add     ebx, dock_items.icon
399
    mov     ebx, [ebx]
4140 eAndrew 400
    imul    ebx, ICON_SIZE_BGR
4120 eAndrew 401
    add     ebx, [img_data.rgb_object]
402
 
8568 IgorA 403
    mcall   SF_PUT_IMAGE, , <32, 32>
4120 eAndrew 404
 
405
    inc     edi
406
    jmp     @b
407
  @@:
408
 
8568 IgorA 409
    mcall   SF_REDRAW, SSF_END_DRAW
4120 eAndrew 410
 
4198 eAndrew 411
    ret
4120 eAndrew 412
;-------------------------------------------------------------------------------
4140 eAndrew 413
event_button:
8568 IgorA 414
    mcall   SF_GET_BUTTON
4120 eAndrew 415
 
7421 leency 416
	;; it must not be possible to close dock
417
    ;cmp     ah, 1
418
    ;je	    .button_close
4120 eAndrew 419
 
420
    cmp     ah, 2
421
    je	    .button_dock
422
 
423
    jmp     @f
424
 
7421 leency 425
 ;.button_close:
426
 ;   jmp     exit
4120 eAndrew 427
 
428
 .button_dock:
429
    mov     edi, [win.button_index]
430
    imul    edi, 256
431
 
8568 IgorA 432
    mov     dword[fi.p00], SSF_START_APP
4140 eAndrew 433
 
4120 eAndrew 434
    mov     esi, edi
435
    add     esi, dock_items.path
4140 eAndrew 436
    mov     dword[fi.p21], esi
4120 eAndrew 437
 
438
    mov     esi, edi
439
    add     esi, dock_items.param
4140 eAndrew 440
    mov     dword[fi.p08], esi
4120 eAndrew 441
 
8568 IgorA 442
    mcall   SF_FILE, fi
4120 eAndrew 443
 
4134 eAndrew 444
    mov     ecx, eax
8568 IgorA 445
    mcall   SF_SYSTEM, SSF_GET_THREAD_SLOT
4134 eAndrew 446
    and     eax, 0xFFFF
447
    mov     [win.psid], eax
448
 
4140 eAndrew 449
    jmp     wnd_hide
450
 
4120 eAndrew 451
  @@:
452
    jmp     main_loop
453
;-------------------------------------------------------------------------------
4140 eAndrew 454
event_mouse:
4198 eAndrew 455
  ; ==== IS MOUSE INNER ====
8568 IgorA 456
    mcall   SF_MOUSE_GET, SSF_WINDOW_POSITION
4120 eAndrew 457
    mov     edi, eax
458
    mov     esi, eax
459
    shr     edi, 16
460
    and     esi, 0xFFFF
461
 
462
    cmp     edi, 0
4140 eAndrew 463
    jl	    wnd_hide
4120 eAndrew 464
    dec     edi
465
    cmp     edi, [win.width]
4140 eAndrew 466
    jg	    wnd_hide
4120 eAndrew 467
    cmp     esi, 0
4140 eAndrew 468
    jl	    wnd_hide
4120 eAndrew 469
    dec     esi
470
    cmp     esi, [win.height]
4140 eAndrew 471
    jg	    wnd_hide
4120 eAndrew 472
 
4198 eAndrew 473
  ; ==== COUNT INDEX ====
474
 
4120 eAndrew 475
    mov     eax, [dock_items.location]
476
    and     eax, 1b
477
    cmp     eax, 1
478
    jne     .vert
479
    mov     eax, edi
480
    jmp     .nxt
481
 
482
 .vert:
483
    mov     eax, esi
4157 eAndrew 484
    add     eax, 12
4120 eAndrew 485
 
486
 .nxt:
4140 eAndrew 487
    sub     eax, 12
4120 eAndrew 488
    mov     edx, 0
4140 eAndrew 489
    mov     ebx, BUTTON_SIZE
4120 eAndrew 490
    div     ebx
491
 
492
    cmp     eax, [dock_items.count]
493
    jge     .set0
494
    jmp     .nxtcmp
495
 
496
 .set0:
497
    mov     eax, 100
498
 
499
 .nxtcmp:
500
    cmp     [win.button_index], eax
501
    je	    .nxt2
502
 
4198 eAndrew 503
    push    dword[win.button_index]
504
    pop     dword[win.prev_index]
505
 
4120 eAndrew 506
    mov     [win.button_index], eax
507
 
4198 eAndrew 508
 ; ==== DRAW SELECTION ====
509
    call    DRAW_SELECTION
510
 
4120 eAndrew 511
 .nxt2:
512
    mov     eax, [win.button_index]
4140 eAndrew 513
    imul    eax, BUTTON_SIZE
4120 eAndrew 514
    cmp     byte[win.isvert], 1
515
    je	    .vert_name
516
    add     eax, [win.x]
517
    mov     [nwin.x], eax
4157 eAndrew 518
    mov     byte[nwin.change_shape], 1
8568 IgorA 519
    mcall   SF_DRAW_RECT, <0, [win.width]>, <[win.height], 1>, [color.frame]
4120 eAndrew 520
    jmp     .vert_end
521
 .vert_name:
522
    add     eax, [win.y]
4157 eAndrew 523
    add     eax, 14
4120 eAndrew 524
    mov     [nwin.y], eax
4157 eAndrew 525
    mov     byte[nwin.change_shape], 1
8568 IgorA 526
    mcall   SF_DRAW_RECT, <[win.width], 1>, <0, [win.height]>, [color.frame]
4120 eAndrew 527
 .vert_end:
528
 
4198 eAndrew 529
 ; ==== OPEN/CLOSE WINDOW ====
4120 eAndrew 530
    cmp     byte[win.state], 1
4140 eAndrew 531
    je	    main_loop
4120 eAndrew 532
 
533
    mov     edx, esp
534
    add     edx, 512
8568 IgorA 535
    mcall   SF_CREATE_THREAD, 1, n_main
4120 eAndrew 536
 
8568 IgorA 537
    mcall   SF_SYSTEM, SSF_GET_ACTIVE_WINDOW
4120 eAndrew 538
    mov     [win.psid], eax
539
 
8568 IgorA 540
    mcall   SF_SYSTEM, SSF_FOCUS_WINDOW, [win.sid]
4120 eAndrew 541
 
542
    mov     byte[win.state], 1
543
 
544
    mov     eax, [win.width_opn]
545
    mov     [win.width], eax
546
 
547
    mov     eax, [win.x_opn]
548
    mov     [win.x], eax
549
 
550
    mov     eax, [win.height_opn]
551
    mov     [win.height], eax
552
 
553
    mov     eax, [win.y_opn]
554
    mov     [win.y], eax
555
 
5475 leency 556
 
557
    cmp     byte[dock_items.ashow],1
558
    je	   .change_nothing
8568 IgorA 559
    mcall   SF_CHANGE_WINDOW, [win.x], [win.y], [win.width], [win.height]
4120 eAndrew 560
 
5475 leency 561
  .change_nothing:
4198 eAndrew 562
    call    DRAW_WINDOW
563
    call    DRAW_SELECTION
564
    jmp     main_loop
4120 eAndrew 565
 
4140 eAndrew 566
;-------------------------------------------------------------------------------
567
wnd_hide:
4120 eAndrew 568
    cmp     byte[win.state], 0
4140 eAndrew 569
    je	    main_loop
4120 eAndrew 570
 
571
    mov     byte[nwin.close], 1
572
 
8568 IgorA 573
    mcall   SF_SYSTEM, SSF_FOCUS_WINDOW, [win.psid]
4120 eAndrew 574
 
575
    mov     byte[win.state], 0
576
    mov     byte[win.button_index], -1
577
 
5475 leency 578
    cmp     byte[dock_items.ashow],1
579
    je	   .do_no_hide
580
 
4120 eAndrew 581
    mov     eax, [win.width_hdn]
582
    mov     [win.width], eax
583
 
584
    mov     eax, [win.x_hdn]
585
    mov     [win.x], eax
586
 
587
    mov     eax, [win.height_hdn]
588
    mov     [win.height], eax
589
 
590
    mov     eax, [win.y_hdn]
591
    mov     [win.y], eax
592
 
8568 IgorA 593
    mcall   SF_CHANGE_WINDOW, [win.x], [win.y], [win.width], [win.height]
4120 eAndrew 594
 
5475 leency 595
  .do_no_hide:
4198 eAndrew 596
    call    DRAW_WINDOW
597
    jmp     main_loop
4120 eAndrew 598
;-------------------------------------------------------------------------------
4198 eAndrew 599
DRAW_SELECTION:
600
    mov     ebx, [win.prev_index]
601
    imul    ebx, BUTTON_SIZE
602
    add     ebx, 14
603
    shl     ebx, 16
604
    add     ebx, 40
605
    mov     ecx, 0x00020028
606
 
607
    cmp     byte[win.isvert], 1
608
    jne     @f
609
    xchg    ebx, ecx
610
    sub     ecx, 0x000C0000
611
  @@:
612
 
8568 IgorA 613
    mcall   SF_DRAW_RECT, , , [color.bg]
4198 eAndrew 614
 
615
    mov     edx, ebx
616
    shr     ecx, 16
617
    mov     dx, cx
618
    add     edx, 0x00040004
619
 
620
    mov     ebx, [win.prev_index]
621
    imul    ebx, 4
622
    add     ebx, dock_items.icon
623
    mov     ebx, [ebx]
624
    imul    ebx, ICON_SIZE_BGR
625
    add     ebx, [img_data.rgb_object]
626
 
8568 IgorA 627
    mcall   SF_PUT_IMAGE, , <32, 32>
4198 eAndrew 628
 
629
    mov     ebx, [win.button_index]
630
    imul    ebx, BUTTON_SIZE
631
    add     ebx, 14
632
    shl     ebx, 16
633
    add     ebx, 40
634
    mov     ecx, 0x00020028
635
 
636
    cmp     byte[win.isvert], 1
637
    jne     @f
638
    xchg    ebx, ecx
639
    sub     ecx, 0x000C0000
640
  @@:
641
 
8568 IgorA 642
    mcall   SF_DRAW_RECT, , , [color.bt]
4198 eAndrew 643
 
644
    mov     edx, ebx
645
    shr     ecx, 16
646
    mov     dx, cx
647
    add     edx, 0x00040004
648
 
649
    mov     ecx, [win.button_index]
650
    imul    ecx, 4
651
    add     ecx, dock_items.icon
652
    mov     ecx, [ecx]
653
    imul    ecx, ICON_SIZE_BGR
654
    add     ecx, [img_data.rgb_object]
655
 
656
    mov     ebx, sel_img
657
 
658
    mov     edi, 0
659
  @@:
660
    mov     al, byte[ecx + 2]
661
    shl     eax, 8
662
    mov     al, byte[ecx + 1]
663
    shl     eax, 8
664
    mov     al, byte[ecx + 0]
665
 
666
    or	    eax, 0x10000000
667
    cmp     eax, [color.bg]
668
    jne     .notbg
669
    mov     eax, [color.bt]
670
 .notbg:
671
 
672
    mov     byte[ebx + 0], al
673
    shr     eax, 8
674
    mov     byte[ebx + 1], al
675
    shr     eax, 8
676
    mov     byte[ebx + 2], al
677
 
678
    add     ebx, 3
679
    add     ecx, 3
680
 
681
    add     edi, 3
682
 
683
    cmp     edi, 1024 * 3
684
    jne     @b
685
 
8568 IgorA 686
    mcall   SF_PUT_IMAGE, sel_img, <32, 32>
4198 eAndrew 687
 
688
    ret
689
;-------------------------------------------------------------------------------
4120 eAndrew 690
proc sections_callback, _file_name, _section_name
691
    mov     eax, [_section_name]
692
    cmp     byte[eax], '@'
693
    jne     @f
694
 
695
    dec     dword[dock_items.count]
696
    jmp     .endproc
697
 
698
  @@:
699
    ; ==== GET NAME ====
700
    mov     ebx, [dock_items.count]
701
    imul    ebx, 16
702
    add     ebx, dock_items.name
703
 
704
    mov     eax, [_section_name]
705
 
706
    mov     edi, 0
707
  @@:
708
    mov     cl, byte[eax]
709
    mov     byte[ebx + edi], cl
710
 
711
    inc     eax
712
    inc     edi
713
    cmp     edi, 10
714
    jne     @b
715
 
716
  ; ==== GET PATH ====
717
    mov     ebx, [dock_items.count]
718
    imul    ebx, 256
719
    add     ebx, dock_items.path
720
 
721
    invoke  ini.get_str, [_file_name], [_section_name], ini_data.path_name, ebx, 256, 0
722
 
723
  ; === GET  PARAM ===
724
    mov     ebx, [dock_items.count]
725
    imul    ebx, 256
726
    add     ebx, dock_items.param
727
 
728
    invoke  ini.get_str, [_file_name], [_section_name], ini_data.param_name, ebx, 256, 0
729
 
730
  ; ==== GET ICON ====
731
    invoke  ini.get_int, [_file_name], [_section_name], ini_data.icon_name, 0
732
 
733
    mov     ebx, [dock_items.count]
734
    imul    ebx, 4
735
    mov     [dock_items.icon + ebx], eax
736
 
737
  ; ==== GET SEPARATOR ====
738
    invoke  ini.get_int, [_file_name], [_section_name], ini_data.separator_name, 0
739
 
740
    mov     ebx, [dock_items.count]
741
    mov     byte[dock_items.separator + ebx], al
742
 
743
  ; ====== END =======
744
 .endproc:
745
    mov     eax, 1
746
    inc     dword[dock_items.count]
747
    ret
748
endp
749
;-------------------------------------------------------------------------------
4140 eAndrew 750
    include "MEMORY.INC"