Subversion Repositories Kolibri OS

Rev

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