Subversion Repositories Kolibri OS

Rev

Rev 7613 | Rev 9444 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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