Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

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