Subversion Repositories Kolibri OS

Rev

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