Subversion Repositories Kolibri OS

Rev

Rev 9682 | Rev 9728 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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