Subversion Repositories Kolibri OS

Rev

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