Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
8346 IgorA 1
;*****************************************************************************
2
; File Browser control for Kolibri OS
3
; Copyright (c) 2009-2013, Marat Zakiyanov aka Mario79, aka Mario
4
; All rights reserved.
5
;
6
; Redistribution and use in source and binary forms, with or without
7
; modification, are permitted provided that the following conditions are met:
8
;	 * Redistributions of source code must retain the above copyright
9
;	   notice, this list of conditions and the following disclaimer.
10
;	 * Redistributions in binary form must reproduce the above copyright
11
;	   notice, this list of conditions and the following disclaimer in the
12
;	   documentation and/or other materials provided with the distribution.
13
;	 * Neither the name of the  nor the
14
;	   names of its contributors may be used to endorse or promote products
15
;	   derived from this software without specific prior written permission.
16
;
17
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
18
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
; DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY
21
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
;*****************************************************************************
28
;*****************************************************************************
29
macro	file_browser_exit
30
{
31
popa
32
ret 4
33
}
34
;*****************************************************************************
35
fb_type				equ dword [edi]		;dword
36
fb_size_x			equ [edi+4]		;word
37
fb_start_x			equ [edi+6]		;word
38
fb_size_y			equ [edi+8]		;word
39
fb_start_y			equ [edi+10]		;word
40
fb_icon_size_y			equ word [edi+12]	;word
41
fb_icon_size_x			equ word [edi+14]	;word
42
fb_line_size_x			equ word [edi+16]	;word
43
fb_line_size_y			equ word [edi+18]	;word
44
fb_type_size_x			equ word [edi+20]	;word
45
fb_size_size_x			equ word [edi+22]	;word
46
fb_date_size_x			equ word [edi+24]	;word
47
fb_attributes_size_x		equ word [edi+26]	;word
48
fb_icon_assoc_area		equ dword [edi+28]	;dword
49
fb_icon_raw_area		equ dword [edi+32]	;dword
50
fb_resolution_raw		equ dword [edi+36]	;dword
51
fb_palette_raw			equ dword [edi+40]	;dword
52
fb_directory_path_area		equ dword [edi+44]	;dword
53
fb_file_name_area		equ dword [edi+48]	;dword
54
fb_select_flag			equ dword [edi+52]	;dword
55
fb_background_color		equ dword [edi+56]	;dword
56
fb_select_color			equ dword [edi+60]	;dword
57
fb_seclect_text_color		equ dword [edi+64]	;dword
58
fb_text_color			equ dword [edi+68]	;dword
59
fb_reduct_text_color		equ dword [edi+72]	;dword
60
fb_marked_text_color		equ dword [edi+76]	;dword
61
fb_max_panel_line		equ dword [edi+80]	;dword
62
fb_select_panel_counter		equ dword [edi+84]	;dword
63
fb_folder_block			equ dword [edi+88]	;dword
64
fb_start_draw_line		equ dword [edi+92]	;dword
65
fb_start_draw_cursor_line	equ word [edi+96]	;word
66
fb_folder_data			equ dword [edi+98]	;dword
67
fb_temp_counter			equ dword [edi+102]	;dword
68
fb_file_name_length		equ dword [edi+106]	;dword
69
fb_marked_file			equ dword [edi+110]	;dword
70
fb_extension_size		equ dword [edi+114]	;dword
71
fb_extension_start		equ dword [edi+118]	;dword
72
fb_type_table			equ dword [edi+122]	;dword
73
fb_ini_file_start		equ dword [edi+126]	;dword
74
fb_ini_file_end			equ dword [edi+130]	;dword
75
fb_draw_scroll_bar		equ dword [edi+134]	;dword
76
fb_font_size_y			equ word [edi+138]	;dword
77
fb_font_size_x			equ word [edi+140]	;dword
78
fb_mouse_keys			equ dword [edi+142]	;dword
79
fb_mouse_keys_old		equ dword [edi+146]	;dword
80
fb_mouse_pos			equ dword [edi+150]	;dword
81
fb_mouse_keys_delta		equ dword [edi+154]	;dword
82
fb_mouse_key_delay		equ dword [edi+158]	;dword
83
fb_mouse_keys_tick		equ dword [edi+162]	;dword
84
fb_start_draw_cursor_line_2	equ word [edi+166]	;dword
85
fb_all_redraw			equ dword [edi+168]	;dword
86
fb_selected_BDVK_adress		equ dword [edi+172]	;dword
87
fb_key_action			equ word [edi+176]	;word
88
fb_key_action_num		equ word [edi+178]	;word
89
fb_name_temp_area		equ dword [edi+180]	;dword
90
fb_max_name_temp_size		equ dword [edi+184]	;dword
91
fb_display_name_max_length	equ dword [edi+188]	;dword
92
fb_draw_panel_selection_flag	equ dword [edi+192]	;dword
93
fb_mouse_pos_old		equ dword [edi+196]	;dword
94
fb_marked_counter		equ dword [edi+200]	;dword
95
fb_keymap_pointer		equ dword [edi+204]	;dword
96
;---------------------------------------------------------------------
97
align 16
98
fb_draw_panel:
99
	pusha
100
	mov	edi,dword [esp+36]
101
	call	fb_clear_panel
102
	call	fb_calc_max_panel_line
103
	call	fb_calc_folder_sysdata
104
	call	fb_draw_panel_selection
105
	call	fb_draw_folder_data
106
	call	fb_prepare_selected_BDVK_adress
107
file_browser_exit
108
;---------------------------------------------------------------------
109
fb_draw_panel_1:
110
	pusha
111
	mov	eax,fb_select_color
112
	push	eax
113
	mov	eax,fb_seclect_text_color
114
	push	eax
115
	mov	ax,fb_start_draw_cursor_line
116
	push	eax
117
	mov	eax,fb_background_color
118
	mov	fb_select_color,eax
119
	mov	eax,fb_text_color
120
	mov	fb_seclect_text_color,eax
121
	mov	ax,fb_start_draw_cursor_line_2
122
	mov	fb_start_draw_cursor_line,ax
123
	call	fb_draw_panel_selection
124
	pop	eax
125
	mov	fb_start_draw_cursor_line,ax
126
	pop	eax
127
	mov	fb_seclect_text_color,eax
128
	pop	eax
129
	mov	fb_select_color,eax
130
	call	fb_draw_panel_selection
131
	call	fb_draw_folder_data
132
	popa
133
	ret
134
;---------------------------------------------------------------------
135
align 4
136
fb_clear_panel:
137
	cmp	fb_all_redraw,1
138
	jne	@f
139
	xor	eax,eax
140
	mov	fb_max_name_temp_size,eax
141
@@:
142
	ret
143
;---------------------------------------------------------------------
144
align 4
145
fb_calc_folder_sysdata:
146
	mov	eax,fb_folder_data
147
	mov	eax,[eax+4]
148
	mov	fb_folder_block,eax
149
	ret
150
;---------------------------------------------------------------------
151
align 4
152
fb_calc_max_panel_line:
153
	xor	eax,eax
154
	xor	ebx,ebx
155
	mov	ax,fb_size_y
156
	mov	bx,fb_line_size_y
157
	test	ebx,ebx
158
	jnz	@f
159
	inc	ebx
160
@@:
161
	xor	edx,edx
162
	div	ebx
163
	mov	fb_max_panel_line,eax
164
	ret
165
;---------------------------------------------------------------------
166
align 4
167
fb_draw_panel_selection:
168
	cmp	fb_all_redraw,2
169
	je	.end
170
	mov	eax,fb_folder_block
171
	test	eax,eax
172
	jz	.end
173
	xor	eax,eax
174
	cmp	fb_select_panel_counter,eax
175
	je	.end
176
	mov	eax,fb_folder_block
177
	sub	eax,fb_start_draw_line
178
	mov	cx,fb_start_draw_cursor_line
179
	call	fb_for_all_panel_selection
180
	mov	eax,fb_folder_block
181
	dec	eax
182
	xor	edx,edx
183
	mov	dx,fb_line_size_y
184
	imul	eax,edx
185
	cmp	ax,cx
186
	jae	@f
187
	mov	cx,ax
188
@@:
189
	mov	fb_start_draw_cursor_line,cx
190
	mov	ebx,fb_size_x
191
	add	cx,fb_start_y
192
	shl	ecx,16
193
	mov	cx,fb_line_size_y
194
	mov	edx,fb_select_color
195
	xor	eax,eax
196
	mov	ax,fb_icon_size_x
197
	add	eax,2
198
	sub	ebx,eax
199
	shl	eax,16
200
	push	eax
201
	add	ebx,eax
202
	mcall	SF_DRAW_RECT
203
	pop	ebx
204
	cmp	fb_all_redraw,0
205
	je	.end
206
	mov	bx,fb_start_x
207
	ror	ebx,16
208
	mcall	SF_DRAW_RECT,,,fb_background_color
209
.end:
210
	ret
211
;---------------------------------------------------------------------
212
align 4
213
fb_for_all_panel_selection:
214
	xor	edx,edx
215
	mov	dx,fb_line_size_y
216
	imul	eax,edx
217
	cmp	ax,cx
218
	jae	@f
219
	mov	cx,ax
220
@@:
221
	mov	eax,fb_max_panel_line
222
	dec	eax
223
	imul	eax,edx
224
	cmp	ax,cx
225
	jae	@f
226
	mov	cx,ax
227
@@:
228
	ret
229
;---------------------------------------------------------------------
230
align 4
231
fb_draw_folder_data:
232
	mov	eax,fb_folder_block
233
	sub	eax,fb_max_panel_line
234
	test	eax,0x80000000
235
	jz	.ok_left
236
	mov	fb_start_draw_line,0
237
	jmp	@f
238
.ok_left:
239
	cmp	eax,fb_start_draw_line
240
	jae	@f
241
	mov	fb_start_draw_line,eax
242
@@:
243
	mov	bx,fb_start_x
244
	add	bx,3
245
	add	bx,fb_icon_size_x
246
	shl	ebx,16
247
	mov	bx,fb_start_y
248
	mov	edx,fb_start_draw_line
249
	imul	edx,304
250
	add	edx,fb_folder_data
251
	add	edx,32+40
252
	xor	eax,eax
253
.start:
254
	pusha
255
	mov	eax,edx
256
	sub	eax,fb_folder_data
257
	sub	eax,32+40
258
	xor	edx,edx
259
	mov	ebx,304
260
	div	ebx
261
	cmp	eax,fb_folder_block
262
	je	.end_1
263
	popa
264
	cmp	eax,fb_max_panel_line
265
	je	.end_2
266
	mov	fb_marked_file,0
267
	cmp	[edx+299-40],byte 0
268
	je	@f
269
	mov	fb_marked_file,1
270
@@:
271
	call	fb_clear_line
272
	call	fb_draw_type_size_date
273
	cmp	fb_all_redraw,2
274
	je	.draw_icon
275
	cmp	fb_all_redraw,0
276
	je	@f
277
.draw_icon:
278
	call	fb_draw_icon
279
@@:
280
	push	eax
281
	xor	eax,eax
282
	mov	ax,fb_size_x
283
	push	ebx edx
284
	xor	ebx,ebx
285
	mov	bx,fb_font_size_x
286
	xor	edx,edx
287
	div	ebx
288
	pop	edx ebx
9728 sober_dev 289
	sub	eax,23+2+2+2
8346 IgorA 290
	mov	esi,fb_file_name_length
291
	mov	fb_temp_counter,0
292
	mov	fb_display_name_max_length,eax
293
	cmp	esi,eax
294
	jbe	@f
295
	mov	esi,eax
296
	mov	fb_temp_counter,1
297
@@:
298
	cmp	fb_max_name_temp_size,esi
299
	jae	@f
300
	mov	fb_max_name_temp_size,esi
301
	inc	fb_max_name_temp_size
302
@@:
303
	mov	ecx,fb_text_color
304
	cmp	fb_marked_file,0
305
	je	@f
306
	mov	ecx,fb_reduct_text_color
307
@@:
308
	mov	ax,fb_line_size_y
309
	sub	ax,fb_font_size_y
310
	push	ebx
311
	mov	bx,ax
312
	shr	ax,1
313
	test	bx,1b
314
	jz	@f
315
	inc	ax
316
@@:
317
	pop	ebx
318
	push	ebx
319
	add	bx,ax
320
	call	.draw_name_temp_area
321
	cmp	fb_temp_counter,0
322
	jz	.continue
323
	xor	eax,eax
324
	mov	ax,fb_font_size_x
325
	imul	eax,fb_display_name_max_length
326
	shl	eax,16
327
	push	edx
328
	add	ebx,eax
329
	mov	esi,2
330
	mov	ecx,fb_reduct_text_color
331
	mov	edx,dword fb_truncated_filename_char
332
	mcall	SF_DRAW_TEXT
333
	pop	edx
334
.continue:
335
	pop	ebx
336
	add	bx,fb_line_size_y
337
	add	edx,304
338
	pop	eax
339
	inc	eax
340
	jmp	.start
341
;--------------------------------------
342
align 4
343
.draw_name_temp_area:
344
	pusha
345
	mov	eax,fb_max_name_temp_size
346
	add	eax,2
347
	sub	eax,esi
348
	mov	ecx,esi
349
	mov	esi,edx
350
	mov	edi,fb_name_temp_area
351
	cld
352
	jcxz	@f
353
	rep	movsb
354
	cmp	byte [edi-1],0
355
	jnz	@f
356
	dec	edi
357
	inc	eax
358
@@:
359
	mov	ecx,eax
360
	shr	ecx,2
361
	mov	eax,dword '    '
362
	rep	stosd
363
	popa
364
	pusha
365
	mov	edx,fb_name_temp_area
366
	cmp	fb_all_redraw,2
367
	jne	@f
368
	mov	esi,fb_max_name_temp_size
369
	add	esi,2
370
@@:
371
	bts	ecx,30
372
	mov	eax,fb_background_color
373
	cmp	fb_draw_panel_selection_flag,1
374
	jne	@f
375
	mov	eax,fb_select_color
376
@@:
377
	mov	edi,eax
378
	mcall	SF_DRAW_TEXT
379
	popa
380
	ret
381
;--------------------------------------
382
.end_1:
383
	popa
384
.end_2:
385
	cmp	fb_all_redraw,1
386
	jne	@f
387
	mov	ax,fb_start_y
388
	add	ax,fb_size_y
389
	mov	cx,bx
390
	rol	ecx,16
391
	mov	cx,ax
392
	mov	eax,ecx
393
	shr	eax,16
394
	sub	cx,ax
395
	cmp	cx,0
396
	jbe	@f
397
	mov	bx,fb_size_x
398
	ror	ebx,16
399
	sub	bx,fb_icon_size_x
400
	sub	bx,3
401
	rol	ebx,16
402
	mov	edx,fb_background_color	;0xffffff
403
	mcall	SF_DRAW_RECT
404
@@:
405
	ret
406
;---------------------------------------------------------------------
407
align 4
408
fb_clear_line:
409
	mov	fb_draw_panel_selection_flag,0
410
	pusha
411
	shl	ebx,16
412
	shr	ebx,16
413
	cmp	fb_select_panel_counter,0
414
	je	.continue
415
	mov	ax,fb_start_draw_cursor_line
416
	add	ax,fb_start_y
417
	cmp	bx,ax
418
	jne	.continue
419
	mov	fb_draw_panel_selection_flag,1
420
	jmp	.end
421
.continue:
422
	cmp	fb_all_redraw,2
423
	je	.end
424
	cmp	fb_all_redraw,0
425
	je	.end
426
	mov	ebx,[esp+16]
427
	mov	cx,bx
428
	rol	ecx,16
429
	mov	cx,fb_line_size_y
430
	mov	bx,fb_size_x
431
	ror	ebx,16
432
	sub	bx,fb_icon_size_x
433
	sub	bx,3
434
	rol	ebx,16
435
	mcall	SF_DRAW_RECT,,,fb_background_color
436
.end:
437
	popa
438
	ret
439
;---------------------------------------------------------------------
440
align 4
441
fb_draw_type_size_date:
442
	pusha
443
	mov	eax,fb_type_table
444
	test	[edx-40],byte 0x10
445
	jz	.copy_type
446
	mov	[eax],dword '
447
	mov	[eax+4],word '> '
448
	mov	fb_file_name_length,0
449
	mov	fb_extension_size,0
450
	jmp	.start
451
.copy_type:
452
	mov	[eax],dword '    '
453
	mov	[eax+4],word '  '
454
.start:
455
	mov	esi,edx
456
	xor	eax,eax
457
@@:
458
	cld
459
	lodsb
460
	test	eax,eax
461
	jnz	@b
462
	mov	fb_file_name_length,esi
463
	sub	fb_file_name_length,edx
464
	mov	fb_temp_counter,esi
465
	test	[edx-40],byte	0x10
466
	jnz	.size
467
	dec	esi
468
	dec	edx
469
@@:
470
	std
471
	lodsb
472
	cmp	esi,edx
473
	je	.extension_size_0
474
	cmp	al,'.'
475
	jnz	@b
476
	add	esi,2
477
	mov	fb_extension_start,esi
478
	mov	ecx,fb_temp_counter
479
	sub	ecx,esi
480
	inc	ecx
481
	mov	fb_extension_size,ecx
482
	sub	fb_file_name_length,ecx
483
	cmp	ecx,2
484
	ja	@f
485
	inc	fb_file_name_length
486
@@:
487
	sub	ecx,2
488
	cmp	ecx,4
489
	jbe	@f
490
	mov	ecx,3
491
	mov	eax,fb_type_table
492
	mov	[eax+3],word '..'
493
@@:
494
	push	edi
495
	mov	edi,fb_type_table
496
	cld
497
	rep	movsb
498
	pop	edi
499
	inc	edx
500
	jmp	.size
501
.extension_size_0:
502
	inc	edx
503
	mov	fb_extension_size,0
504
.size:
505
	mov	eax,fb_type_table
506
	test	[edx-40],byte 0x10
507
	jz	.copy_size
508
	mov	[eax+6],dword '----'
509
	mov	[eax+6+4],word '- '
510
	jmp	.date
511
;-----------------------------------------
512
align 4
513
.call_decimal_string:
514
	mov	ebx,fb_type_table
9728 sober_dev 515
	add	ebx,9
516
	call	fb_decimal_string
517
	mov	[ebx+1],dl
8346 IgorA 518
	jmp	.size_convert_end
519
;-----------------------------------------
9690 sober_dev 520
.qword_div:
521
	mov	eax,[edx-40+32]
522
	mov	ebx,[edx-40+32+4]
523
@@:	; /1024
524
	shrd	eax,ebx,5 ; /32
525
	shr	ebx,5 ; /32
526
	shrd	eax,ebx,5 ; /32
527
	shr	ebx,5 ; /32
528
	dec	ecx
529
	jnz	@b
530
; /(1024*1024)
531
	shr	eax,20
532
	test	eax,eax
533
	ret
534
;-----------------------------------------
8346 IgorA 535
align 4
536
.copy_size:
9682 sober_dev 537
;/0x1000000000000000 - EB
538
;/0x4000000000000 - PB
539
;/0x10000000000 - TB
540
;/0x40000000 - GB
541
;/0x100000 - MB
542
;/0x400 - KB
8346 IgorA 543
	mov	[eax+6],dword '    '
544
	mov	[eax+6+4],word '  '
545
	push	ebx edx
9690 sober_dev 546
	push	ecx
547
	mov	ecx,4
548
	call	.qword_div
549
	pop	ecx
8346 IgorA 550
	jz	@f
9682 sober_dev 551
	mov	dl,byte 'E' ; Exa Byte
8346 IgorA 552
	jmp	.call_decimal_string
553
@@:
9690 sober_dev 554
	push	ecx
555
	mov	ecx,3
556
	call	.qword_div
557
	pop	ecx
9682 sober_dev 558
	jz	@f
559
	mov	dl,byte 'P' ; Peta Byte
560
	jmp	.call_decimal_string
561
@@:
9690 sober_dev 562
	push	ecx
563
	mov	ecx,2
564
	call	.qword_div
565
	pop	ecx
9682 sober_dev 566
	jz	@f
567
	mov	dl,byte 'T' ; Tera Byte
568
	jmp	.call_decimal_string
569
@@:
9690 sober_dev 570
	push	ecx
571
	mov	ecx,1
572
	call	.qword_div
573
	pop	ecx
9682 sober_dev 574
	jz	@f
575
	mov	dl,byte 'G' ; Giga Byte
576
	jmp	.call_decimal_string
577
@@:
578
	mov	eax,[edx-40+32]
579
	mov	ebx,eax
8346 IgorA 580
	shr	eax,20 ; /(1024*1024)
581
	test	eax,eax
582
	jz	@f
9682 sober_dev 583
	mov	dl,byte 'M' ; Mega Byte
8346 IgorA 584
	jmp	.call_decimal_string
585
@@:
586
	mov	eax,ebx
587
	shr	eax,10 ; /1024
588
	test	eax,eax
589
	jz	@f
9682 sober_dev 590
	mov	dl,byte 'K' ; Kilo Byte
8346 IgorA 591
	jmp	.call_decimal_string
592
@@:
593
	mov	eax,ebx
594
	mov	ebx,fb_type_table
9728 sober_dev 595
	add	ebx,10
596
	call	fb_decimal_string
8346 IgorA 597
.size_convert_end:
598
	pop	edx ebx
599
;-----------------------------------------
600
.date:
9728 sober_dev 601
	cmp	[edx],word '..'
602
	jne	@f
603
 
604
	cmp	[edx+2],byte 0
605
	je	.not_show_date
606
@@:
8346 IgorA 607
	xor	eax,eax
608
	mov	al,[edx-40+28]
609
	push	ebx
610
	mov	ebx,fb_type_table
611
	add	ebx,12
612
	call	fb_decimal_string_2 ; day
613
	mov	al,[edx-40+29]
614
	mov	ebx,fb_type_table
615
	add	ebx,12+3
616
	call	fb_decimal_string_2 ; month
617
	mov	ax,[edx-40+30]
618
	mov	ebx,fb_type_table
9728 sober_dev 619
	add	ebx,12+9
620
	mov	[ebx-3], dword '0000'
621
	call	fb_decimal_string ; year
8346 IgorA 622
	pop	ebx
623
;-----------------------------------------
624
	ror	ebx,16
625
	add	bx,fb_size_x
9728 sober_dev 626
	sub	ebx,161 ; 122+12+15
8346 IgorA 627
	rol	ebx,16
628
	mov	ecx,fb_text_color
629
	cmp	fb_marked_file,0
630
	je	@f
631
	mov	ecx,fb_reduct_text_color
632
@@:
633
	mov	edx,fb_type_table
9728 sober_dev 634
	mov	esi,22
8346 IgorA 635
	mov	ax,fb_line_size_y
636
	sub	ax,fb_font_size_y
637
	push	ebx
638
	mov	bx,ax
639
	shr	ax,1
640
	test	bx,1b
641
	jz	@f
642
	inc	ax
643
@@:
644
	pop	ebx
645
	add	bx,ax
646
	bts	ecx,30
647
	mov	eax,fb_background_color
648
	cmp	fb_draw_panel_selection_flag,1
649
	jne	@f
650
	mov	eax,fb_select_color
651
@@:
652
	mov	edi,eax
653
	mcall	SF_DRAW_TEXT
9728 sober_dev 654
.not_show_date:
8346 IgorA 655
	popa
656
	ret
657
;---------------------------------------------------------------------
658
align 4
659
fb_draw_icon:
660
	pusha
661
	xor	eax,eax
662
	mov	ax,fb_icon_size_y
663
	mov	ebx,fb_resolution_raw
664
	imul	eax,ebx
665
	mov	bx,fb_icon_size_x
666
	imul	eax,ebx
667
	mov	ebx,eax
668
	shr	eax,3
669
	test	ebx,111b
670
	jz	@f
671
	inc	eax
672
@@:
673
	test	[edx-40],byte 0x10
674
	jnz	.draw_dir_pic
675
	call	fb_get_icon_number
676
	imul	ebx,eax	;16*16*3
677
	jmp	.draw
678
.draw_dir_pic:
679
	xor	ebx,ebx
680
	cmp	[edx],word '..'
681
	jne	.draw
682
	mov	ebx,eax	;16*16*3
683
.draw:
684
	add	ebx,fb_icon_raw_area
685
	mov	cx,fb_icon_size_x
686
	shl	ecx,16
687
	mov	cx,fb_icon_size_y
688
	mov	edx,[esp+16]
689
	ror	edx,16
690
	sub	edx,2
691
	sub	dx,fb_icon_size_x
692
	rol	edx,16
693
	mov	ax,fb_line_size_y
694
	sub	ax,fb_icon_size_y
695
	shr	ax,1
696
	add	dx,ax
697
	mov	esi,fb_resolution_raw
698
	xor	ebp,ebp
699
	push	edi
700
	mov	edi,fb_palette_raw
701
	mcall	SF_PUT_IMAGE_EXT
702
	pop	edi
703
	popa
704
	ret
705
;---------------------------------------------------------------------
706
; Convert of a binary number in decimal string form
707
; Input:
708
;  AX - value
709
;  EBX - address of string
710
; Output:
711
;  string contains the number, marked the end of the code 0
712
align 4
713
fb_decimal_string_2:
714
	push	eax ebx ecx edx
715
	xor	ecx,ecx
716
	mov	[ebx],byte '0'
717
	inc	ebx
718
.p3:
719
	xor	edx,edx
720
	push	ebx
721
	mov	ebx,10
722
	div	ebx
723
	pop	ebx
724
	add	edx,48
725
	push	edx
726
	inc	ecx
727
	cmp	ax,0
728
	jne	.p3
729
	cmp	ecx,1
730
	jbe	.p4
731
	mov	ecx,2
732
	dec	ebx
733
.p4:
734
	pop	edx
735
	mov	[ebx],dl
736
	inc	ebx
737
	loop	.p4
738
	pop	edx ecx ebx eax
739
	ret
740
;---------------------------------------------------------------------
741
align 4
9728 sober_dev 742
fb_decimal_string:
743
	push	eax ebx ecx edx
744
	mov	ecx,10
745
;--------------------------------------
8346 IgorA 746
.p3:
747
	xor	edx,edx
9728 sober_dev 748
	div	ecx
8346 IgorA 749
	add	edx,48
9728 sober_dev 750
	mov	[ebx],dl
8346 IgorA 751
	dec	ebx
9728 sober_dev 752
	test	eax,eax
753
	jnz	.p3
754
 
755
	pop	edx ecx ebx eax
8346 IgorA 756
	ret
757
;---------------------------------------------------------------------
758
align 4
759
fb_get_icon_number:
760
	push	eax
761
	mov	ebp,fb_extension_size
762
	test	ebp,ebp
763
	je	.end
764
	dec	ebp
765
	test	ebp,ebp
766
	je	.end
767
	dec	ebp
768
	test	ebp,ebp
9690 sober_dev 769
	je	.end
8346 IgorA 770
@@:
771
	mov	edx,fb_ini_file_end
772
	sub	edx,ebp
773
	mov	eax,fb_ini_file_start
774
	dec	eax
775
.search_association:
776
	cmp	edx,eax
777
	jbe	.end
778
	mov	esi,fb_extension_start
779
	inc	eax
780
	mov	ecx,eax
781
	mov	ebx,eax
782
	cld
783
.check:
784
	lodsb
785
	test	al,al
786
	jz	@f
787
	call	fb_char_toupper
788
	shl	ax,8
789
.search_start_of_line:
790
	mov	al,[ebx]
791
	inc	ebx
792
	call	fb_char_toupper
793
	cmp	al,ah
794
	je	.check
795
	mov	eax,ecx
796
	jmp	.search_association
797
@@:
798
	mov	esi,ecx
799
	add	esi,ebp
800
	lodsb
801
	cmp	al,byte '='
802
	mov	eax,ecx
9728 sober_dev 803
	jne	.search_association
8346 IgorA 804
	cmp	eax,fb_ini_file_start
805
	je	@f
806
	dec	eax
9690 sober_dev 807
	cmp	[eax],byte 15
8346 IgorA 808
	ja	.end
809
@@:
810
	xor	ebx,ebx
811
	xor	eax,eax
812
	mov	ecx,9
813
	call	.calculate
9690 sober_dev 814
	cmp	al,0x30
8346 IgorA 815
	jb	.end
816
	cmp	al,0x39
817
	ja	.end
818
	sub	eax,0x30
819
@@:
820
	call	.calculate_1
9690 sober_dev 821
	cmp	al,0x30
8346 IgorA 822
	jb	@f
823
	cmp	al,0x39
824
	ja	@f
825
	sub	eax,0x30
826
 
9690 sober_dev 827
	lea	ebx,[ebx+ebx*4]
8346 IgorA 828
	shl	ebx,1
829
 
830
	dec	ecx
831
	jnz	@b
832
@@:
833
	pop	eax
834
	ret
835
.end:
836
	mov	ebx,2
837
	pop	eax
838
	ret
839
;---------------------------------------------------------------------
840
align 4
841
.calculate_1:
842
	add	ebx,eax
843
.calculate:
844
	xor	eax,eax
845
	cld
846
	lodsb
847
	ret
848
;---------------------------------------------------------------------
849
align 4
850
fb_char_toupper:
851
; convert character to uppercase, using cp866 encoding
852
; in: al=symbol
853
; out: al=converted symbol
854
	cmp	al,'a'
855
	jb	.ret
856
	cmp	al, 'z'
857
	jbe	.az
858
	cmp	al, ' '
859
	jb	.ret
860
	cmp	al, 'à'
861
	jb	.rus1
862
	cmp	al, 'ï'
863
	ja	.ret
864
; 0xE0-0xEF -> 0x90-0x9F
865
	sub	al, 'à'-''
866
.ret:
867
	ret
868
.rus1:
869
; 0xA0-0xAF -> 0x80-0x8F
870
.az:
871
	and	al, not 0x20
872
	ret
873
;---------------------------------------------------------------------
874
align 4
875
fb_char_todown:
876
; convert character to lowercase, using cp866 encoding
877
; in: al=symbol
878
; out: al=converted symbol
879
	cmp	al, 'A'
880
	jb	.ret
881
	cmp	al, 'Z'
882
	jbe	.az
883
	cmp	al, '€'
884
	jb	.ret
885
	cmp	al, ''
886
	jb	.rus1
887
	cmp	al, 'Ÿ'
888
	ja	.ret
889
; 0x90-0x9F -> 0xE0-0xEF
890
	add	al, 'à'-''
891
.ret:
892
	ret
893
.rus1:
894
; 0x80-0x8F -> 0xA0-0xAF
895
.az:
896
	add	al, 0x20
897
	ret
898
;---------------------------------------------------------------------
899
fb_truncated_filename_char:
900
	db	'..'
901
;---------------------------------------------------------------------
902
;*****************************************************************************
903
;*****************************************************************************
904
; mouse event
905
;*****************************************************************************
906
;*****************************************************************************
907
align 4
908
fb_mouse:
909
	pusha
910
	mov	edi,dword [esp+36]
911
;-------------------------------------------------------
912
	mcall	SF_MOUSE_GET,SSF_BUTTON
913
	mov	ebx,fb_mouse_keys
914
	mov	fb_mouse_keys_old,ebx
915
	mov	fb_mouse_keys,eax
916
 
917
	mcall	SF_MOUSE_GET,SSF_WINDOW_POSITION
918
	mov	ebx,fb_mouse_pos
919
	mov	fb_mouse_pos_old,ebx
920
	mov	fb_mouse_pos,eax
921
 
922
	test	eax,0x80000000
923
	jnz	.exit_fb
924
	test	eax,0x8000
925
	jnz	.exit_fb
926
 
927
	mov	ebx,eax
928
	shr	ebx,16	; x position
929
	shl	eax,16
930
	shr	eax,16	; y position
931
 
932
	mov	cx,fb_start_x
933
	cmp	bx,cx
934
	jb	.exit_fb
935
 
936
	add	cx,fb_size_x
937
	cmp	bx,cx
938
	ja	.exit_fb
939
 
940
	mov	cx,fb_start_y
941
	cmp	ax,cx
942
	jb	.exit_fb
943
 
944
	add	cx,fb_size_y
945
	cmp	ax,cx
946
	ja	.exit_fb
947
 
948
	cmp	fb_mouse_keys,0
949
	jz	@f
950
	mov	fb_select_flag,1
951
@@:
952
;-------------------------------------------------------
953
	cmp	fb_mouse_keys_delta,1
954
	je	.enter_1
955
 
956
	cmp	fb_mouse_keys,0
957
	jz	.exit_fb
958
.start:
959
	sub	ax,fb_start_y
960
	xor	ebx,ebx
961
	mov	bx,fb_line_size_y
962
	xor	edx,edx
963
	push	eax
964
	div	ebx
965
	pop	eax
966
	sub	eax,edx
967
	xor	edx,edx
968
	cmp	fb_select_panel_counter,edx
969
	jne	@f
970
	mov	fb_mouse_keys_delta,0
971
	jmp	.continue
972
@@:
973
	xor	edx,edx
974
	cmp	fb_start_draw_cursor_line,ax
975
	jne	@f
976
	cmp	fb_mouse_keys,edx
977
	jnz	.continue
978
@@:
979
	mov	fb_mouse_keys_delta,edx
980
.continue:
981
	xor	ebx,ebx
982
	mov	bx,fb_line_size_y
983
	imul	ebx,fb_folder_block
984
	cmp	eax,ebx
985
	jb	@f
986
	xor	edx,edx
987
	mov	dx,fb_line_size_y
988
	sub	ebx,edx
989
	cmp	bx,fb_start_draw_cursor_line
990
	je	.enter
991
	call	.store_old_cursor_line
992
	mov	fb_start_draw_cursor_line,bx
993
	jmp	.continue_1
994
@@:
995
	cmp	ax,fb_start_draw_cursor_line
996
	je	.enter
997
	call	.store_old_cursor_line
998
	mov	fb_start_draw_cursor_line,ax
999
.continue_1:
1000
	test	fb_mouse_keys,10b
1001
	jne	.mark_mouse
1002
	jmp	.enter_1
1003
.continue_2:
1004
	mov	ax,fb_start_draw_cursor_line
1005
	cmp	ax,fb_start_draw_cursor_line_2
1006
	je	.exit_fb
1007
 
1008
	call	fb_draw_panel_1
1009
	jmp	.exit_fb
1010
.enter:
1011
	cmp	fb_mouse_keys_delta,2
1012
	je	.enter_2
1013
	cmp	fb_mouse_keys_delta,1
1014
	je	.enter_1
1015
	mov	eax,fb_mouse_keys_old
1016
	cmp	fb_mouse_keys,eax
1017
	jz	.exit_fb
1018
	test	fb_mouse_keys,10b
1019
	jne	.mark_mouse
1020
	xor	edx,edx
1021
	inc	edx
1022
	mov	fb_mouse_keys_delta,edx
1023
	jmp	.exit_fb
1024
.enter_1:
1025
;	mov	eax,fb_mouse_keys_old
1026
;	cmp	fb_mouse_keys,eax
1027
;	jz	.exit_fb
1028
	test	fb_mouse_keys,10b
1029
	jne	.mark_mouse
1030
	mov	edx,2
1031
	mov	fb_mouse_keys_delta,edx
1032
	mcall	SF_SYSTEM_GET,SSF_TIME_COUNT
1033
	add	eax,fb_mouse_key_delay
1034
	mov	fb_mouse_keys_tick,eax
1035
	jmp	.continue_2
1036
.enter_2:
1037
	mcall	SF_SYSTEM_GET,SSF_TIME_COUNT
1038
	cmp	eax,fb_mouse_keys_tick
1039
	ja	@f
1040
;	mov	eax,fb_mouse_pos_old
1041
;	cmp	eax,fb_mouse_pos
1042
;	jne	@f
1043
	mov	eax,fb_mouse_keys_old
1044
	cmp	fb_mouse_keys,eax
1045
	jz	@f
1046
	test	fb_mouse_keys,10b
1047
	jne	.mark_mouse
1048
	call	.enter_3
1049
	jmp	.exit_fb
1050
@@:
1051
	xor	eax,eax
1052
	inc	eax
1053
	mov	fb_mouse_keys_delta,eax
1054
;-------------------------------------------------------
1055
.exit_fb:
1056
	call	fb_prepare_selected_BDVK_adress
1057
file_browser_exit
1058
;-------------------------------------------------------
1059
align 4
1060
.mark_mouse:
1061
	call	fb_key.mark_1
1062
	call	fb_draw_panel_1
1063
	xor	eax,eax
1064
	mov	fb_mouse_keys_delta,eax
1065
	jmp	.exit_fb
1066
;-------------------------------------------------------
1067
align 4
1068
.enter_3:
1069
	xor	eax,eax
1070
	mov	fb_mouse_keys,eax
1071
	mov	fb_mouse_keys_old,eax
1072
	mov	eax,3
1073
	mov	fb_mouse_keys_delta,eax
1074
	xor	eax,eax
1075
	mov	fb_max_name_temp_size,eax
1076
	ret
1077
;-------------------------------------------------------
1078
align 4
1079
.store_old_cursor_line:
1080
	push	eax
1081
	mov	ax,fb_start_draw_cursor_line
1082
	mov	fb_start_draw_cursor_line_2,ax
1083
	xor	eax,eax
1084
;	mov	fb_mouse_keys_delta,eax
1085
	pop	eax
1086
	ret
1087
;*****************************************************************************
1088
;*****************************************************************************
1089
align 4
1090
fb_prepare_selected_BDVK_adress:
1091
	xor	eax,eax
1092
	mov	ax,fb_start_draw_cursor_line
1093
	xor	ebx,ebx
1094
	mov	bx,fb_line_size_y
1095
	xor	edx,edx
1096
	div	ebx
1097
	add	eax,fb_start_draw_line
1098
	imul	eax,304
1099
	add	eax,32
1100
	add	eax,fb_folder_data
1101
	mov	fb_selected_BDVK_adress,eax
1102
	ret
1103
;*****************************************************************************
1104
;*****************************************************************************
1105
; key event
1106
; 1 - arrow down
1107
; 2 - arrow up
1108
; 3 - PageDown
1109
; 4 - PageUp
1110
; 5 - Home
1111
; 6 - End
1112
; 7 - Enter
1113
; 8 - Insert (Mark)
1114
; 9 - Mark All
1115
; 10 - Unmark All
1116
; 11 - Invert Mark
1117
; 12 - Search with key
1118
;*****************************************************************************
1119
;*****************************************************************************
1120
align 4
1121
fb_key:
1122
	pusha
1123
	mov	edi,dword [esp+36]
1124
;-------------------------------------------------------
1125
	xor	eax,eax
1126
	mov	ax,fb_key_action
1127
	shl	eax,2
1128
	add	eax,dword fb_key_table
1129
	cmp	eax,fb_key_table.end
1130
	jae	.exit_fb
1131
	cmp	[eax],dword 0
1132
	je	.exit_fb
1133
	jmp	dword [eax]
1134
;-------------------------------------------------------
1135
align 4
1136
.arrow_down:
1137
	mov	ax,fb_start_draw_cursor_line
1138
	add	ax,fb_line_size_y
1139
	add	ax,fb_line_size_y
1140
	cmp	ax,word fb_size_y
1141
	ja	@f
1142
.add_1:
1143
	call	fb_mouse.store_old_cursor_line
1144
	mov	ax,fb_start_draw_cursor_line
1145
	add	ax,fb_line_size_y
1146
	mov	fb_start_draw_cursor_line,ax
1147
	call	fb_draw_panel_1
1148
	jmp	.exit_fb
1149
@@:
1150
	mov	eax,fb_folder_block
1151
	sub	eax,fb_max_panel_line
1152
	test	eax,0x80000000
1153
	jnz	.page_down_2
1154
 
1155
	call	.prepare_data_down
1156
	ja	@f
1157
 
1158
	cmp	fb_start_draw_line,eax
1159
	je	.exit_fb
1160
@@:
1161
	inc	fb_start_draw_line
1162
	call	fb_draw_panel_3
1163
	jmp	.exit_fb
1164
;-------------------------------------------------------
1165
align 4
1166
.arrow_up:
1167
	mov	ax,fb_start_draw_cursor_line
1168
	add	ax,fb_start_y
1169
	cmp	fb_start_y,ax
1170
	je	@f
1171
	call	fb_mouse.store_old_cursor_line
1172
	mov	ax,fb_start_draw_cursor_line
1173
	sub	ax,fb_line_size_y
1174
	mov	fb_start_draw_cursor_line,ax
1175
	call	fb_draw_panel_1
1176
	jmp	.exit_fb
1177
@@:
1178
	cmp	fb_start_draw_line,0
1179
	je	.exit_fb
1180
	dec	fb_start_draw_line
1181
	call	fb_draw_panel_3
1182
	jmp	.exit_fb
1183
;-------------------------------------------------------
1184
align 4
1185
.page_down:
1186
	mov	eax,fb_max_panel_line
1187
	mov	ebx,fb_folder_block
1188
	sub	ebx,eax
1189
	test	ebx,0x80000000
1190
	jnz	.page_down_2
1191
	sub	ebx,fb_start_draw_line
1192
	cmp	ebx,eax
1193
	ja	.page_down_3
1194
	mov	ebx,fb_folder_block
1195
	sub	ebx,eax
1196
	call	.prepare_data_down
1197
	ja	@f
1198
	cmp	ebx,fb_start_draw_line
1199
	je	.exit_fb
1200
@@:
1201
	mov	fb_start_draw_line,ebx
1202
.page_down_0:
1203
	dec	eax
1204
	xor	ebx,ebx
1205
	mov	bx,fb_line_size_y
1206
	imul	eax,ebx
1207
.page_down_1:
1208
	call	fb_mouse.store_old_cursor_line
1209
	mov	fb_start_draw_cursor_line,ax
1210
	call	fb_draw_panel_2
1211
	jmp	.exit_fb
1212
.page_down_2:
1213
	mov	eax,fb_folder_block
1214
	sub	eax,fb_start_draw_line
1215
	dec	eax
1216
	xor	ebx,ebx
1217
	mov	bx,fb_line_size_y
1218
	imul	eax,ebx
1219
	cmp	ax,fb_start_draw_cursor_line
1220
	jbe	.exit_fb
1221
	jmp	.page_down_1
1222
.page_down_3:
1223
	add	fb_start_draw_line,eax
1224
	call	fb_draw_panel_2
1225
	jmp	.exit_fb
1226
;-------------------------------------------------------
1227
align 4
1228
.prepare_data_down:
1229
	mov	ecx,fb_folder_block
1230
	sub	ecx,fb_start_draw_line
1231
	dec	ecx
1232
	xor	edx,edx
1233
	mov	dx,fb_line_size_y
1234
	imul	ecx,edx
1235
	cmp	cx,fb_start_draw_cursor_line
1236
	ret
1237
;-------------------------------------------------------
1238
align 4
1239
.page_up:
1240
	mov	eax,fb_max_panel_line
1241
	mov	ebx,fb_start_draw_line
1242
	sub	ebx,eax
1243
	test	ebx,0x80000000
1244
	jz	@f
1245
	cmp	fb_start_draw_line,0
1246
	jne	.page_up_1
1247
	cmp	fb_start_draw_cursor_line,0
1248
	je	.exit_fb
1249
	mov	fb_start_draw_cursor_line,0
1250
.page_up_1:
1251
	mov	fb_start_draw_line,0
1252
	call	fb_draw_panel_2
1253
	jmp	.exit_fb
1254
@@:
1255
	sub	fb_start_draw_line,eax
1256
	call	fb_draw_panel_2
1257
	jmp	.exit_fb
1258
;-------------------------------------------------------
1259
align 4
1260
.home:
1261
	cmp	fb_start_draw_line,0
1262
	jne	@f
1263
	cmp	fb_start_draw_cursor_line,0
1264
	je	.exit_fb
1265
@@:
1266
	mov	fb_start_draw_line,0
1267
	mov	fb_start_draw_cursor_line,0
1268
	call	fb_mouse.store_old_cursor_line
1269
	call	fb_draw_panel_2
1270
	jmp	.exit_fb
1271
;-------------------------------------------------------
1272
align 4
1273
.end:
1274
	mov	eax,fb_folder_block
1275
	sub	eax,fb_max_panel_line
1276
	test	eax,0x80000000
1277
	jnz	.page_down_2
1278
	call	.prepare_data_down
1279
	ja	@f
1280
	cmp	eax,fb_start_draw_line
1281
	je	.exit_fb
1282
@@:
1283
	mov	fb_start_draw_line,eax
1284
	mov	eax,fb_max_panel_line
1285
	jmp	.page_down_0
1286
;-------------------------------------------------------
1287
align 4
1288
.enter:
1289
	call	fb_mouse.enter_3
1290
	jmp	.exit_fb
1291
;-------------------------------------------------------
1292
align 4
1293
.mark:
1294
	call	.mark_1
1295
	jmp	.arrow_down
1296
;-------------------------------------------------------
1297
align 4
1298
.mark_1:
1299
	mov	eax,fb_folder_block
1300
	test	eax,eax
1301
	jz	.exit
1302
 
1303
	xor	eax,eax
1304
	mov	ax,fb_start_draw_cursor_line
1305
	xor	edx,edx
1306
	xor	ebx,ebx
1307
	mov	bx,fb_line_size_y
1308
	div	ebx
1309
	mov	esi,fb_start_draw_line
1310
	add	esi,eax
1311
	imul	esi,304
1312
	add	esi,fb_folder_data
1313
 
1314
	add	esi,32+299
1315
	mov	al,[esi]
1316
	and	al,1
1317
 
1318
	test	al,al
1319
	jnz	@f
1320
	inc	fb_marked_counter
1321
	jmp	.mark_2
1322
@@:
1323
	dec	fb_marked_counter
1324
.mark_2:
1325
	mov	al,[esi]
1326
	inc	al
1327
	and	al,1
1328
	mov	[esi],al
1329
.exit:
1330
	ret
1331
;-------------------------------------------------------
1332
align 4
1333
.mark_all:
1334
	mov	eax,fb_folder_block
1335
	test	eax,eax
1336
	jz	.exit_fb
1337
 
1338
	mov	fb_temp_counter,0
1339
.mark_all_1:
1340
	mov	ebp,fb_folder_block
1341
.mark_all_2:
1342
	mov	ebx,ebp
1343
	dec	ebx
1344
	imul	ebx,304
1345
	add	ebx,fb_folder_data
1346
	add	ebx,32+40
1347
	cmp	[ebx],word '..'
1348
	jne	.mark_all_3
1349
	cmp	[ebx+2],byte 0
1350
	je	@f
1351
.mark_all_3:
1352
	call	.select_mark_action
1353
@@:
1354
	dec	ebp
1355
	jnz	.mark_all_2
1356
 
1357
	call	fb_draw_panel_3
1358
	cmp	fb_temp_counter,0
1359
	jne	@f
1360
	mov	eax,fb_folder_block
1361
	jmp	.mark_all_4
1362
@@:
1363
	cmp	fb_temp_counter,1
1364
	jne	@f
1365
	mov	fb_marked_counter,0
1366
	jmp	.exit_fb
1367
@@:
1368
	mov	eax,fb_folder_block
1369
	sub	eax,fb_marked_counter
1370
.mark_all_4:
1371
	dec	eax
1372
	mov	fb_marked_counter,eax
1373
	jmp	.exit_fb
1374
;-------------------------------------------------------
1375
align 4
1376
.select_mark_action:
1377
	add	ebx,299-40
1378
	cmp	fb_temp_counter,0
1379
	jne	@f
1380
	mov	[ebx],byte 1
1381
	jmp	.select_mark_action_1
1382
@@:
1383
	cmp	fb_temp_counter,1
1384
	jne	@f
1385
	mov	[ebx],byte 0
1386
	jmp	.select_mark_action_1
1387
@@:
1388
	mov	al,[ebx]
1389
	inc	al
1390
	and	al,1
1391
	mov	[ebx],al
1392
.select_mark_action_1:
1393
	ret
1394
;-------------------------------------------------------
1395
align 4
1396
.unmark_all:
1397
	mov	eax,fb_folder_block
1398
	test	eax,eax
1399
	jz	.exit_fb
1400
 
1401
	mov	fb_temp_counter,1
1402
	jmp	.mark_all_1
1403
;-------------------------------------------------------
1404
align 4
1405
.invert_mark:
1406
	mov	eax,fb_folder_block
1407
	test	eax,eax
1408
	jz	.exit_fb
1409
 
1410
	mov	fb_temp_counter,2
1411
	jmp	.mark_all_1
1412
;-------------------------------------------------------
1413
;  * bit 0  (mask 1): left Shift is pressed
1414
;  * bit 1  (mask 2): right Shift is pressed
1415
;  * bit 2  (mask 4): left Ctrl is pressed
1416
;  * bit 3  (mask 8): right Ctrl is pressed
1417
;  * bit 4  (mask 0x10): left Alt is pressed
1418
;  * bit 5  (mask 0x20): right Alt is pressed
1419
;  * bit 6  (mask 0x40): CapsLock is on
1420
;  * bit 7  (mask 0x80): NumLock is on
1421
;  * bit 8  (mask 0x100): ScrollLock is on
1422
;  * bit 9  (mask 0x200): left Win is pressed
1423
;  * bit 10 (mask 0x400): right Win is pressed
1424
;-------------------------------------------------------
1425
align 4
1426
.search_with_key:
1427
	mcall	SF_BOARD,SSF_GET_CONTROL_KEYS
1428
	test	al,11b
1429
	jnz	.shift_layout
1430
 
1431
	test	al,110000b
1432
	jnz	.alt_layout
1433
 
1434
	mov	ecx,1	; Normal
1435
	jmp	.get_keyboard_layout
1436
 
1437
.shift_layout:
1438
	mov	ecx,2	; Shift
1439
	jmp	.get_keyboard_layout
1440
 
1441
.alt_layout:
1442
	mov	ecx,3	; Alt
1443
.get_keyboard_layout:
1444
	mcall	SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,fb_keymap_pointer
1445
	xor	eax,eax
1446
	mov	ax,fb_key_action_num
1447
	add	eax,fb_keymap_pointer
1448
	mov	al,[eax]
1449
	and	eax,0xff
1450
	call	fb_char_todown
1451
	mov	ah,al
1452
	xor	esi,esi
1453
	push	eax
1454
	movzx	eax,fb_start_draw_cursor_line
1455
	movzx	ebx,fb_line_size_y
1456
	xor	edx,edx
1457
	div	ebx
1458
	add	si,ax	;fb_start_draw_cursor_line
1459
	pop	eax
1460
	add	esi,fb_start_draw_line
1461
	mov	ecx,esi
1462
	xor	ebx,ebx
1463
	inc	ecx
1464
	cmp	ecx,fb_folder_block
1465
	ja	.reset_data
1466
 
1467
.first_entry:
1468
	imul	esi,304
1469
	add	esi,fb_folder_data
1470
	add	esi,40+32
1471
@@:
1472
	add	esi,304
1473
	mov	al,[esi]
1474
	call	fb_char_todown
1475
	cmp	ah,al
1476
	je	.match
1477
 
1478
	inc	ecx
1479
	cmp	ecx,fb_folder_block
1480
	jb	@b
1481
 
1482
.reset_data:
1483
	xor	esi,esi
1484
 
1485
	dec	esi
1486
	cmp	ebx,2
1487
	jae	.exit_fb
1488
 
1489
	xor	ecx,ecx
1490
	inc	ebx
1491
	jmp	.first_entry
1492
 
1493
.match:
1494
	mov	fb_start_draw_line,ecx
1495
	mov	eax,fb_folder_block
1496
	mov	ebx,fb_max_panel_line
1497
	sub	eax,ebx
1498
	jbe	.1
1499
 
1500
	cmp	eax,ecx
1501
	jbe	@f
1502
 
1503
	xor	ecx,ecx
1504
	jmp	.2
1505
@@:
1506
	mov	fb_start_draw_line,eax
1507
	mov	eax,fb_folder_block
1508
	sub	eax,ecx
1509
 
1510
	mov	ecx,fb_max_panel_line
1511
	sub	ecx,eax
1512
	jmp	.2
1513
 
1514
.1:
1515
	xor	eax,eax
1516
	mov	fb_start_draw_line,eax
1517
.2:
1518
	movzx	eax,fb_line_size_y
1519
	imul	ecx,eax
1520
	mov	fb_start_draw_cursor_line,cx
1521
	call	fb_draw_panel_2
1522
;-------------------------------------------------------
1523
.exit_fb:
1524
	call	fb_prepare_selected_BDVK_adress
1525
file_browser_exit
1526
;-------------------------------------------------------
1527
align 4
1528
fb_key_table:
1529
	dd	0
1530
	dd	fb_key.arrow_down	; 1
1531
	dd	fb_key.arrow_up		; 2
1532
	dd	fb_key.page_down	; 3
1533
	dd	fb_key.page_up		; 4
1534
	dd	fb_key.home		; 5
1535
	dd	fb_key.end		; 6
1536
	dd	fb_key.enter		; 7
1537
	dd	fb_key.mark		; 8
1538
	dd	fb_key.mark_all		; 9
1539
	dd	fb_key.unmark_all	; 10
1540
	dd	fb_key.invert_mark	; 11
1541
	dd	fb_key.search_with_key	; 12
1542
.end:
1543
	dd	0
1544
;-------------------------------------------------------
1545
align 4
1546
fb_draw_panel_3:
1547
	mov	eax,2
1548
	mov	fb_all_redraw,eax
1549
	jmp	fb_draw_panel_2.1
1550
align 4
1551
fb_draw_panel_2:
1552
	xor	eax,eax
1553
	inc	eax
1554
	mov	fb_all_redraw,eax
1555
	call	fb_draw_panel_selection
1556
.1:
1557
	call	fb_draw_folder_data
1558
	xor	eax,eax
1559
	mov	fb_all_redraw,eax
1560
	inc	eax
1561
	mov	fb_draw_scroll_bar,eax
1562
	ret
1563