Subversion Repositories Kolibri OS

Rev

Rev 9747 | 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
9748 sober_dev 682
	cmp	[edx+2],byte 0
9747 sober_dev 683
	jne	.draw
8346 IgorA 684
	mov	ebx,eax	;16*16*3
685
.draw:
686
	add	ebx,fb_icon_raw_area
687
	mov	cx,fb_icon_size_x
688
	shl	ecx,16
689
	mov	cx,fb_icon_size_y
690
	mov	edx,[esp+16]
691
	ror	edx,16
692
	sub	edx,2
693
	sub	dx,fb_icon_size_x
694
	rol	edx,16
695
	mov	ax,fb_line_size_y
696
	sub	ax,fb_icon_size_y
697
	shr	ax,1
698
	add	dx,ax
699
	mov	esi,fb_resolution_raw
700
	xor	ebp,ebp
701
	push	edi
702
	mov	edi,fb_palette_raw
703
	mcall	SF_PUT_IMAGE_EXT
704
	pop	edi
705
	popa
706
	ret
707
;---------------------------------------------------------------------
708
; Convert of a binary number in decimal string form
709
; Input:
710
;  AX - value
711
;  EBX - address of string
712
; Output:
713
;  string contains the number, marked the end of the code 0
714
align 4
715
fb_decimal_string_2:
716
	push	eax ebx ecx edx
717
	xor	ecx,ecx
718
	mov	[ebx],byte '0'
719
	inc	ebx
720
.p3:
721
	xor	edx,edx
722
	push	ebx
723
	mov	ebx,10
724
	div	ebx
725
	pop	ebx
726
	add	edx,48
727
	push	edx
728
	inc	ecx
729
	cmp	ax,0
730
	jne	.p3
731
	cmp	ecx,1
732
	jbe	.p4
733
	mov	ecx,2
734
	dec	ebx
735
.p4:
736
	pop	edx
737
	mov	[ebx],dl
738
	inc	ebx
739
	loop	.p4
740
	pop	edx ecx ebx eax
741
	ret
742
;---------------------------------------------------------------------
743
align 4
9728 sober_dev 744
fb_decimal_string:
745
	push	eax ebx ecx edx
746
	mov	ecx,10
747
;--------------------------------------
8346 IgorA 748
.p3:
749
	xor	edx,edx
9728 sober_dev 750
	div	ecx
8346 IgorA 751
	add	edx,48
9728 sober_dev 752
	mov	[ebx],dl
8346 IgorA 753
	dec	ebx
9728 sober_dev 754
	test	eax,eax
755
	jnz	.p3
756
 
757
	pop	edx ecx ebx eax
8346 IgorA 758
	ret
759
;---------------------------------------------------------------------
760
align 4
761
fb_get_icon_number:
762
	push	eax
763
	mov	ebp,fb_extension_size
764
	test	ebp,ebp
765
	je	.end
766
	dec	ebp
767
	test	ebp,ebp
768
	je	.end
769
	dec	ebp
770
	test	ebp,ebp
9690 sober_dev 771
	je	.end
8346 IgorA 772
@@:
773
	mov	edx,fb_ini_file_end
774
	sub	edx,ebp
775
	mov	eax,fb_ini_file_start
776
	dec	eax
777
.search_association:
778
	cmp	edx,eax
779
	jbe	.end
780
	mov	esi,fb_extension_start
781
	inc	eax
782
	mov	ecx,eax
783
	mov	ebx,eax
784
	cld
785
.check:
786
	lodsb
787
	test	al,al
788
	jz	@f
789
	call	fb_char_toupper
790
	shl	ax,8
791
.search_start_of_line:
792
	mov	al,[ebx]
793
	inc	ebx
794
	call	fb_char_toupper
795
	cmp	al,ah
796
	je	.check
797
	mov	eax,ecx
798
	jmp	.search_association
799
@@:
800
	mov	esi,ecx
801
	add	esi,ebp
802
	lodsb
803
	cmp	al,byte '='
804
	mov	eax,ecx
9728 sober_dev 805
	jne	.search_association
8346 IgorA 806
	cmp	eax,fb_ini_file_start
807
	je	@f
808
	dec	eax
9690 sober_dev 809
	cmp	[eax],byte 15
8346 IgorA 810
	ja	.end
811
@@:
812
	xor	ebx,ebx
813
	xor	eax,eax
814
	mov	ecx,9
815
	call	.calculate
9690 sober_dev 816
	cmp	al,0x30
8346 IgorA 817
	jb	.end
818
	cmp	al,0x39
819
	ja	.end
820
	sub	eax,0x30
821
@@:
822
	call	.calculate_1
9690 sober_dev 823
	cmp	al,0x30
8346 IgorA 824
	jb	@f
825
	cmp	al,0x39
826
	ja	@f
827
	sub	eax,0x30
828
 
9690 sober_dev 829
	lea	ebx,[ebx+ebx*4]
8346 IgorA 830
	shl	ebx,1
831
 
832
	dec	ecx
833
	jnz	@b
834
@@:
835
	pop	eax
836
	ret
837
.end:
838
	mov	ebx,2
839
	pop	eax
840
	ret
841
;---------------------------------------------------------------------
842
align 4
843
.calculate_1:
844
	add	ebx,eax
845
.calculate:
846
	xor	eax,eax
847
	cld
848
	lodsb
849
	ret
850
;---------------------------------------------------------------------
851
align 4
852
fb_char_toupper:
853
; convert character to uppercase, using cp866 encoding
854
; in: al=symbol
855
; out: al=converted symbol
856
	cmp	al,'a'
857
	jb	.ret
858
	cmp	al, 'z'
859
	jbe	.az
860
	cmp	al, ' '
861
	jb	.ret
862
	cmp	al, 'à'
863
	jb	.rus1
864
	cmp	al, 'ï'
865
	ja	.ret
866
; 0xE0-0xEF -> 0x90-0x9F
867
	sub	al, 'à'-''
868
.ret:
869
	ret
870
.rus1:
871
; 0xA0-0xAF -> 0x80-0x8F
872
.az:
873
	and	al, not 0x20
874
	ret
875
;---------------------------------------------------------------------
876
align 4
877
fb_char_todown:
878
; convert character to lowercase, using cp866 encoding
879
; in: al=symbol
880
; out: al=converted symbol
881
	cmp	al, 'A'
882
	jb	.ret
883
	cmp	al, 'Z'
884
	jbe	.az
885
	cmp	al, '€'
886
	jb	.ret
887
	cmp	al, ''
888
	jb	.rus1
889
	cmp	al, 'Ÿ'
890
	ja	.ret
891
; 0x90-0x9F -> 0xE0-0xEF
892
	add	al, 'à'-''
893
.ret:
894
	ret
895
.rus1:
896
; 0x80-0x8F -> 0xA0-0xAF
897
.az:
898
	add	al, 0x20
899
	ret
900
;---------------------------------------------------------------------
901
fb_truncated_filename_char:
902
	db	'..'
903
;---------------------------------------------------------------------
904
;*****************************************************************************
905
;*****************************************************************************
906
; mouse event
907
;*****************************************************************************
908
;*****************************************************************************
909
align 4
910
fb_mouse:
911
	pusha
912
	mov	edi,dword [esp+36]
913
;-------------------------------------------------------
914
	mcall	SF_MOUSE_GET,SSF_BUTTON
915
	mov	ebx,fb_mouse_keys
916
	mov	fb_mouse_keys_old,ebx
917
	mov	fb_mouse_keys,eax
918
 
919
	mcall	SF_MOUSE_GET,SSF_WINDOW_POSITION
920
	mov	ebx,fb_mouse_pos
921
	mov	fb_mouse_pos_old,ebx
922
	mov	fb_mouse_pos,eax
923
 
924
	test	eax,0x80000000
925
	jnz	.exit_fb
926
	test	eax,0x8000
927
	jnz	.exit_fb
928
 
929
	mov	ebx,eax
930
	shr	ebx,16	; x position
931
	shl	eax,16
932
	shr	eax,16	; y position
933
 
934
	mov	cx,fb_start_x
935
	cmp	bx,cx
936
	jb	.exit_fb
937
 
938
	add	cx,fb_size_x
939
	cmp	bx,cx
940
	ja	.exit_fb
941
 
942
	mov	cx,fb_start_y
943
	cmp	ax,cx
944
	jb	.exit_fb
945
 
946
	add	cx,fb_size_y
947
	cmp	ax,cx
948
	ja	.exit_fb
949
 
950
	cmp	fb_mouse_keys,0
951
	jz	@f
952
	mov	fb_select_flag,1
953
@@:
954
;-------------------------------------------------------
955
	cmp	fb_mouse_keys_delta,1
956
	je	.enter_1
957
 
958
	cmp	fb_mouse_keys,0
959
	jz	.exit_fb
960
.start:
961
	sub	ax,fb_start_y
962
	xor	ebx,ebx
963
	mov	bx,fb_line_size_y
964
	xor	edx,edx
965
	push	eax
966
	div	ebx
967
	pop	eax
968
	sub	eax,edx
969
	xor	edx,edx
970
	cmp	fb_select_panel_counter,edx
971
	jne	@f
972
	mov	fb_mouse_keys_delta,0
973
	jmp	.continue
974
@@:
975
	xor	edx,edx
976
	cmp	fb_start_draw_cursor_line,ax
977
	jne	@f
978
	cmp	fb_mouse_keys,edx
979
	jnz	.continue
980
@@:
981
	mov	fb_mouse_keys_delta,edx
982
.continue:
983
	xor	ebx,ebx
984
	mov	bx,fb_line_size_y
985
	imul	ebx,fb_folder_block
986
	cmp	eax,ebx
987
	jb	@f
988
	xor	edx,edx
989
	mov	dx,fb_line_size_y
990
	sub	ebx,edx
991
	cmp	bx,fb_start_draw_cursor_line
992
	je	.enter
993
	call	.store_old_cursor_line
994
	mov	fb_start_draw_cursor_line,bx
995
	jmp	.continue_1
996
@@:
997
	cmp	ax,fb_start_draw_cursor_line
998
	je	.enter
999
	call	.store_old_cursor_line
1000
	mov	fb_start_draw_cursor_line,ax
1001
.continue_1:
1002
	test	fb_mouse_keys,10b
1003
	jne	.mark_mouse
1004
	jmp	.enter_1
1005
.continue_2:
1006
	mov	ax,fb_start_draw_cursor_line
1007
	cmp	ax,fb_start_draw_cursor_line_2
1008
	je	.exit_fb
1009
 
1010
	call	fb_draw_panel_1
1011
	jmp	.exit_fb
1012
.enter:
1013
	cmp	fb_mouse_keys_delta,2
1014
	je	.enter_2
1015
	cmp	fb_mouse_keys_delta,1
1016
	je	.enter_1
1017
	mov	eax,fb_mouse_keys_old
1018
	cmp	fb_mouse_keys,eax
1019
	jz	.exit_fb
1020
	test	fb_mouse_keys,10b
1021
	jne	.mark_mouse
1022
	xor	edx,edx
1023
	inc	edx
1024
	mov	fb_mouse_keys_delta,edx
1025
	jmp	.exit_fb
1026
.enter_1:
1027
;	mov	eax,fb_mouse_keys_old
1028
;	cmp	fb_mouse_keys,eax
1029
;	jz	.exit_fb
1030
	test	fb_mouse_keys,10b
1031
	jne	.mark_mouse
1032
	mov	edx,2
1033
	mov	fb_mouse_keys_delta,edx
1034
	mcall	SF_SYSTEM_GET,SSF_TIME_COUNT
1035
	add	eax,fb_mouse_key_delay
1036
	mov	fb_mouse_keys_tick,eax
1037
	jmp	.continue_2
1038
.enter_2:
1039
	mcall	SF_SYSTEM_GET,SSF_TIME_COUNT
1040
	cmp	eax,fb_mouse_keys_tick
1041
	ja	@f
1042
;	mov	eax,fb_mouse_pos_old
1043
;	cmp	eax,fb_mouse_pos
1044
;	jne	@f
1045
	mov	eax,fb_mouse_keys_old
1046
	cmp	fb_mouse_keys,eax
1047
	jz	@f
1048
	test	fb_mouse_keys,10b
1049
	jne	.mark_mouse
1050
	call	.enter_3
1051
	jmp	.exit_fb
1052
@@:
1053
	xor	eax,eax
1054
	inc	eax
1055
	mov	fb_mouse_keys_delta,eax
1056
;-------------------------------------------------------
1057
.exit_fb:
1058
	call	fb_prepare_selected_BDVK_adress
1059
file_browser_exit
1060
;-------------------------------------------------------
1061
align 4
1062
.mark_mouse:
1063
	call	fb_key.mark_1
1064
	call	fb_draw_panel_1
1065
	xor	eax,eax
1066
	mov	fb_mouse_keys_delta,eax
1067
	jmp	.exit_fb
1068
;-------------------------------------------------------
1069
align 4
1070
.enter_3:
1071
	xor	eax,eax
1072
	mov	fb_mouse_keys,eax
1073
	mov	fb_mouse_keys_old,eax
1074
	mov	eax,3
1075
	mov	fb_mouse_keys_delta,eax
1076
	xor	eax,eax
1077
	mov	fb_max_name_temp_size,eax
1078
	ret
1079
;-------------------------------------------------------
1080
align 4
1081
.store_old_cursor_line:
1082
	push	eax
1083
	mov	ax,fb_start_draw_cursor_line
1084
	mov	fb_start_draw_cursor_line_2,ax
1085
	xor	eax,eax
1086
;	mov	fb_mouse_keys_delta,eax
1087
	pop	eax
1088
	ret
1089
;*****************************************************************************
1090
;*****************************************************************************
1091
align 4
1092
fb_prepare_selected_BDVK_adress:
1093
	xor	eax,eax
1094
	mov	ax,fb_start_draw_cursor_line
1095
	xor	ebx,ebx
1096
	mov	bx,fb_line_size_y
1097
	xor	edx,edx
1098
	div	ebx
1099
	add	eax,fb_start_draw_line
1100
	imul	eax,304
1101
	add	eax,32
1102
	add	eax,fb_folder_data
1103
	mov	fb_selected_BDVK_adress,eax
1104
	ret
1105
;*****************************************************************************
1106
;*****************************************************************************
1107
; key event
1108
; 1 - arrow down
1109
; 2 - arrow up
1110
; 3 - PageDown
1111
; 4 - PageUp
1112
; 5 - Home
1113
; 6 - End
1114
; 7 - Enter
1115
; 8 - Insert (Mark)
1116
; 9 - Mark All
1117
; 10 - Unmark All
1118
; 11 - Invert Mark
1119
; 12 - Search with key
1120
;*****************************************************************************
1121
;*****************************************************************************
1122
align 4
1123
fb_key:
1124
	pusha
1125
	mov	edi,dword [esp+36]
1126
;-------------------------------------------------------
1127
	xor	eax,eax
1128
	mov	ax,fb_key_action
1129
	shl	eax,2
1130
	add	eax,dword fb_key_table
1131
	cmp	eax,fb_key_table.end
1132
	jae	.exit_fb
1133
	cmp	[eax],dword 0
1134
	je	.exit_fb
1135
	jmp	dword [eax]
1136
;-------------------------------------------------------
1137
align 4
1138
.arrow_down:
1139
	mov	ax,fb_start_draw_cursor_line
1140
	add	ax,fb_line_size_y
1141
	add	ax,fb_line_size_y
1142
	cmp	ax,word fb_size_y
1143
	ja	@f
1144
.add_1:
1145
	call	fb_mouse.store_old_cursor_line
1146
	mov	ax,fb_start_draw_cursor_line
1147
	add	ax,fb_line_size_y
1148
	mov	fb_start_draw_cursor_line,ax
1149
	call	fb_draw_panel_1
1150
	jmp	.exit_fb
1151
@@:
1152
	mov	eax,fb_folder_block
1153
	sub	eax,fb_max_panel_line
1154
	test	eax,0x80000000
1155
	jnz	.page_down_2
1156
 
1157
	call	.prepare_data_down
1158
	ja	@f
1159
 
1160
	cmp	fb_start_draw_line,eax
1161
	je	.exit_fb
1162
@@:
1163
	inc	fb_start_draw_line
1164
	call	fb_draw_panel_3
1165
	jmp	.exit_fb
1166
;-------------------------------------------------------
1167
align 4
1168
.arrow_up:
1169
	mov	ax,fb_start_draw_cursor_line
1170
	add	ax,fb_start_y
1171
	cmp	fb_start_y,ax
1172
	je	@f
1173
	call	fb_mouse.store_old_cursor_line
1174
	mov	ax,fb_start_draw_cursor_line
1175
	sub	ax,fb_line_size_y
1176
	mov	fb_start_draw_cursor_line,ax
1177
	call	fb_draw_panel_1
1178
	jmp	.exit_fb
1179
@@:
1180
	cmp	fb_start_draw_line,0
1181
	je	.exit_fb
1182
	dec	fb_start_draw_line
1183
	call	fb_draw_panel_3
1184
	jmp	.exit_fb
1185
;-------------------------------------------------------
1186
align 4
1187
.page_down:
1188
	mov	eax,fb_max_panel_line
1189
	mov	ebx,fb_folder_block
1190
	sub	ebx,eax
1191
	test	ebx,0x80000000
1192
	jnz	.page_down_2
1193
	sub	ebx,fb_start_draw_line
1194
	cmp	ebx,eax
1195
	ja	.page_down_3
1196
	mov	ebx,fb_folder_block
1197
	sub	ebx,eax
1198
	call	.prepare_data_down
1199
	ja	@f
1200
	cmp	ebx,fb_start_draw_line
1201
	je	.exit_fb
1202
@@:
1203
	mov	fb_start_draw_line,ebx
1204
.page_down_0:
1205
	dec	eax
1206
	xor	ebx,ebx
1207
	mov	bx,fb_line_size_y
1208
	imul	eax,ebx
1209
.page_down_1:
1210
	call	fb_mouse.store_old_cursor_line
1211
	mov	fb_start_draw_cursor_line,ax
1212
	call	fb_draw_panel_2
1213
	jmp	.exit_fb
1214
.page_down_2:
1215
	mov	eax,fb_folder_block
1216
	sub	eax,fb_start_draw_line
1217
	dec	eax
1218
	xor	ebx,ebx
1219
	mov	bx,fb_line_size_y
1220
	imul	eax,ebx
1221
	cmp	ax,fb_start_draw_cursor_line
1222
	jbe	.exit_fb
1223
	jmp	.page_down_1
1224
.page_down_3:
1225
	add	fb_start_draw_line,eax
1226
	call	fb_draw_panel_2
1227
	jmp	.exit_fb
1228
;-------------------------------------------------------
1229
align 4
1230
.prepare_data_down:
1231
	mov	ecx,fb_folder_block
1232
	sub	ecx,fb_start_draw_line
1233
	dec	ecx
1234
	xor	edx,edx
1235
	mov	dx,fb_line_size_y
1236
	imul	ecx,edx
1237
	cmp	cx,fb_start_draw_cursor_line
1238
	ret
1239
;-------------------------------------------------------
1240
align 4
1241
.page_up:
1242
	mov	eax,fb_max_panel_line
1243
	mov	ebx,fb_start_draw_line
1244
	sub	ebx,eax
1245
	test	ebx,0x80000000
1246
	jz	@f
1247
	cmp	fb_start_draw_line,0
1248
	jne	.page_up_1
1249
	cmp	fb_start_draw_cursor_line,0
1250
	je	.exit_fb
1251
	mov	fb_start_draw_cursor_line,0
1252
.page_up_1:
1253
	mov	fb_start_draw_line,0
1254
	call	fb_draw_panel_2
1255
	jmp	.exit_fb
1256
@@:
1257
	sub	fb_start_draw_line,eax
1258
	call	fb_draw_panel_2
1259
	jmp	.exit_fb
1260
;-------------------------------------------------------
1261
align 4
1262
.home:
1263
	cmp	fb_start_draw_line,0
1264
	jne	@f
1265
	cmp	fb_start_draw_cursor_line,0
1266
	je	.exit_fb
1267
@@:
1268
	mov	fb_start_draw_line,0
1269
	mov	fb_start_draw_cursor_line,0
1270
	call	fb_mouse.store_old_cursor_line
1271
	call	fb_draw_panel_2
1272
	jmp	.exit_fb
1273
;-------------------------------------------------------
1274
align 4
1275
.end:
1276
	mov	eax,fb_folder_block
1277
	sub	eax,fb_max_panel_line
1278
	test	eax,0x80000000
1279
	jnz	.page_down_2
1280
	call	.prepare_data_down
1281
	ja	@f
1282
	cmp	eax,fb_start_draw_line
1283
	je	.exit_fb
1284
@@:
1285
	mov	fb_start_draw_line,eax
1286
	mov	eax,fb_max_panel_line
1287
	jmp	.page_down_0
1288
;-------------------------------------------------------
1289
align 4
1290
.enter:
1291
	call	fb_mouse.enter_3
1292
	jmp	.exit_fb
1293
;-------------------------------------------------------
1294
align 4
1295
.mark:
1296
	call	.mark_1
1297
	jmp	.arrow_down
1298
;-------------------------------------------------------
1299
align 4
1300
.mark_1:
1301
	mov	eax,fb_folder_block
1302
	test	eax,eax
1303
	jz	.exit
1304
 
1305
	xor	eax,eax
1306
	mov	ax,fb_start_draw_cursor_line
1307
	xor	edx,edx
1308
	xor	ebx,ebx
1309
	mov	bx,fb_line_size_y
1310
	div	ebx
1311
	mov	esi,fb_start_draw_line
1312
	add	esi,eax
1313
	imul	esi,304
1314
	add	esi,fb_folder_data
1315
 
1316
	add	esi,32+299
1317
	mov	al,[esi]
1318
	and	al,1
1319
 
1320
	test	al,al
1321
	jnz	@f
1322
	inc	fb_marked_counter
1323
	jmp	.mark_2
1324
@@:
1325
	dec	fb_marked_counter
1326
.mark_2:
1327
	mov	al,[esi]
1328
	inc	al
1329
	and	al,1
1330
	mov	[esi],al
1331
.exit:
1332
	ret
1333
;-------------------------------------------------------
1334
align 4
1335
.mark_all:
1336
	mov	eax,fb_folder_block
1337
	test	eax,eax
1338
	jz	.exit_fb
1339
 
1340
	mov	fb_temp_counter,0
1341
.mark_all_1:
1342
	mov	ebp,fb_folder_block
1343
.mark_all_2:
1344
	mov	ebx,ebp
1345
	dec	ebx
1346
	imul	ebx,304
1347
	add	ebx,fb_folder_data
1348
	add	ebx,32+40
1349
	cmp	[ebx],word '..'
1350
	jne	.mark_all_3
1351
	cmp	[ebx+2],byte 0
1352
	je	@f
1353
.mark_all_3:
1354
	call	.select_mark_action
1355
@@:
1356
	dec	ebp
1357
	jnz	.mark_all_2
1358
 
1359
	call	fb_draw_panel_3
1360
	cmp	fb_temp_counter,0
1361
	jne	@f
1362
	mov	eax,fb_folder_block
1363
	jmp	.mark_all_4
1364
@@:
1365
	cmp	fb_temp_counter,1
1366
	jne	@f
1367
	mov	fb_marked_counter,0
1368
	jmp	.exit_fb
1369
@@:
1370
	mov	eax,fb_folder_block
1371
	sub	eax,fb_marked_counter
1372
.mark_all_4:
1373
	dec	eax
1374
	mov	fb_marked_counter,eax
1375
	jmp	.exit_fb
1376
;-------------------------------------------------------
1377
align 4
1378
.select_mark_action:
1379
	add	ebx,299-40
1380
	cmp	fb_temp_counter,0
1381
	jne	@f
1382
	mov	[ebx],byte 1
1383
	jmp	.select_mark_action_1
1384
@@:
1385
	cmp	fb_temp_counter,1
1386
	jne	@f
1387
	mov	[ebx],byte 0
1388
	jmp	.select_mark_action_1
1389
@@:
1390
	mov	al,[ebx]
1391
	inc	al
1392
	and	al,1
1393
	mov	[ebx],al
1394
.select_mark_action_1:
1395
	ret
1396
;-------------------------------------------------------
1397
align 4
1398
.unmark_all:
1399
	mov	eax,fb_folder_block
1400
	test	eax,eax
1401
	jz	.exit_fb
1402
 
1403
	mov	fb_temp_counter,1
1404
	jmp	.mark_all_1
1405
;-------------------------------------------------------
1406
align 4
1407
.invert_mark:
1408
	mov	eax,fb_folder_block
1409
	test	eax,eax
1410
	jz	.exit_fb
1411
 
1412
	mov	fb_temp_counter,2
1413
	jmp	.mark_all_1
1414
;-------------------------------------------------------
1415
;  * bit 0  (mask 1): left Shift is pressed
1416
;  * bit 1  (mask 2): right Shift is pressed
1417
;  * bit 2  (mask 4): left Ctrl is pressed
1418
;  * bit 3  (mask 8): right Ctrl is pressed
1419
;  * bit 4  (mask 0x10): left Alt is pressed
1420
;  * bit 5  (mask 0x20): right Alt is pressed
1421
;  * bit 6  (mask 0x40): CapsLock is on
1422
;  * bit 7  (mask 0x80): NumLock is on
1423
;  * bit 8  (mask 0x100): ScrollLock is on
1424
;  * bit 9  (mask 0x200): left Win is pressed
1425
;  * bit 10 (mask 0x400): right Win is pressed
1426
;-------------------------------------------------------
1427
align 4
1428
.search_with_key:
1429
	mcall	SF_BOARD,SSF_GET_CONTROL_KEYS
1430
	test	al,11b
1431
	jnz	.shift_layout
1432
 
1433
	test	al,110000b
1434
	jnz	.alt_layout
1435
 
1436
	mov	ecx,1	; Normal
1437
	jmp	.get_keyboard_layout
1438
 
1439
.shift_layout:
1440
	mov	ecx,2	; Shift
1441
	jmp	.get_keyboard_layout
1442
 
1443
.alt_layout:
1444
	mov	ecx,3	; Alt
1445
.get_keyboard_layout:
1446
	mcall	SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,fb_keymap_pointer
1447
	xor	eax,eax
1448
	mov	ax,fb_key_action_num
1449
	add	eax,fb_keymap_pointer
1450
	mov	al,[eax]
1451
	and	eax,0xff
1452
	call	fb_char_todown
1453
	mov	ah,al
1454
	xor	esi,esi
1455
	push	eax
1456
	movzx	eax,fb_start_draw_cursor_line
1457
	movzx	ebx,fb_line_size_y
1458
	xor	edx,edx
1459
	div	ebx
1460
	add	si,ax	;fb_start_draw_cursor_line
1461
	pop	eax
1462
	add	esi,fb_start_draw_line
1463
	mov	ecx,esi
1464
	xor	ebx,ebx
1465
	inc	ecx
1466
	cmp	ecx,fb_folder_block
1467
	ja	.reset_data
1468
 
1469
.first_entry:
1470
	imul	esi,304
1471
	add	esi,fb_folder_data
1472
	add	esi,40+32
1473
@@:
1474
	add	esi,304
1475
	mov	al,[esi]
1476
	call	fb_char_todown
1477
	cmp	ah,al
1478
	je	.match
1479
 
1480
	inc	ecx
1481
	cmp	ecx,fb_folder_block
1482
	jb	@b
1483
 
1484
.reset_data:
1485
	xor	esi,esi
1486
 
1487
	dec	esi
1488
	cmp	ebx,2
1489
	jae	.exit_fb
1490
 
1491
	xor	ecx,ecx
1492
	inc	ebx
1493
	jmp	.first_entry
1494
 
1495
.match:
1496
	mov	fb_start_draw_line,ecx
1497
	mov	eax,fb_folder_block
1498
	mov	ebx,fb_max_panel_line
1499
	sub	eax,ebx
1500
	jbe	.1
1501
 
1502
	cmp	eax,ecx
1503
	jbe	@f
1504
 
1505
	xor	ecx,ecx
1506
	jmp	.2
1507
@@:
1508
	mov	fb_start_draw_line,eax
1509
	mov	eax,fb_folder_block
1510
	sub	eax,ecx
1511
 
1512
	mov	ecx,fb_max_panel_line
1513
	sub	ecx,eax
1514
	jmp	.2
1515
 
1516
.1:
1517
	xor	eax,eax
1518
	mov	fb_start_draw_line,eax
1519
.2:
1520
	movzx	eax,fb_line_size_y
1521
	imul	ecx,eax
1522
	mov	fb_start_draw_cursor_line,cx
1523
	call	fb_draw_panel_2
1524
;-------------------------------------------------------
1525
.exit_fb:
1526
	call	fb_prepare_selected_BDVK_adress
1527
file_browser_exit
1528
;-------------------------------------------------------
1529
align 4
1530
fb_key_table:
1531
	dd	0
1532
	dd	fb_key.arrow_down	; 1
1533
	dd	fb_key.arrow_up		; 2
1534
	dd	fb_key.page_down	; 3
1535
	dd	fb_key.page_up		; 4
1536
	dd	fb_key.home		; 5
1537
	dd	fb_key.end		; 6
1538
	dd	fb_key.enter		; 7
1539
	dd	fb_key.mark		; 8
1540
	dd	fb_key.mark_all		; 9
1541
	dd	fb_key.unmark_all	; 10
1542
	dd	fb_key.invert_mark	; 11
1543
	dd	fb_key.search_with_key	; 12
1544
.end:
1545
	dd	0
1546
;-------------------------------------------------------
1547
align 4
1548
fb_draw_panel_3:
1549
	mov	eax,2
1550
	mov	fb_all_redraw,eax
1551
	jmp	fb_draw_panel_2.1
1552
align 4
1553
fb_draw_panel_2:
1554
	xor	eax,eax
1555
	inc	eax
1556
	mov	fb_all_redraw,eax
1557
	call	fb_draw_panel_selection
1558
.1:
1559
	call	fb_draw_folder_data
1560
	xor	eax,eax
1561
	mov	fb_all_redraw,eax
1562
	inc	eax
1563
	mov	fb_draw_scroll_bar,eax
1564
	ret
1565