Rev 4273 | Rev 4700 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4273 | Rev 4277 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 4273 $ |
8 | $Revision: 4277 $ |
9 | 9 | ||
10 | ERROR_SUCCESS = 0 |
10 | ERROR_SUCCESS = 0 |
11 | ERROR_DISK_BASE = 1 |
11 | ERROR_DISK_BASE = 1 |
Line 57... | Line 57... | ||
57 | db 'cd2',0 |
57 | db 'cd2',0 |
58 | dd fs_HasCd3 |
58 | dd fs_HasCd3 |
59 | db 'cd3',0 |
59 | db 'cd3',0 |
60 | ;********************************************** |
60 | ;********************************************** |
61 | dd 0 |
61 | dd 0 |
62 | - | ||
63 | fs_additional_handlers: |
- | |
64 | dd dyndisk_handler, dyndisk_enum_root |
- | |
65 | ; add new handlers here |
- | |
66 | dd 0 |
- | |
67 | - | ||
68 | endg |
62 | endg |
Line 69... | Line 63... | ||
69 | 63 | ||
70 | file_system_lfn_protected: |
64 | file_system_lfn_protected: |
71 | pushad |
65 | pushad |
Line 239... | Line 233... | ||
239 | mov dword [image_of_eax], 10 ; access denied |
233 | mov dword [image_of_eax], 10 ; access denied |
240 | ret |
234 | ret |
Line 241... | Line 235... | ||
241 | 235 | ||
242 | .readroot: |
236 | .readroot: |
243 | ; virtual root folder - special handler |
- | |
244 | mov esi, virtual_root_query |
237 | ; virtual root folder - special handler |
245 | mov ebp, [ebx+12] |
238 | mov ebp, [ebx+12] |
246 | mov edx, [ebx+16] |
239 | mov edx, [ebx+16] |
247 | ; add edx, std_application_base_address |
240 | ; add edx, std_application_base_address |
248 | push dword [ebx+4] ; first block |
241 | push dword [ebx+4] ; first block |
Line 251... | Line 244... | ||
251 | ; eax=0, [esp]=first block, ebx=flags, ebp=number of blocks, edx=return area |
244 | ; eax=0, [esp]=first block, ebx=flags, ebp=number of blocks, edx=return area |
252 | mov edi, edx |
245 | mov edi, edx |
253 | mov ecx, 32/4 |
246 | mov ecx, 32/4 |
254 | rep stosd |
247 | rep stosd |
255 | mov byte [edx], 1 ; version |
248 | mov byte [edx], 1 ; version |
- | 249 | sub esp, 16 |
|
- | 250 | .readroot_ah_loop2: |
|
- | 251 | push edi |
|
- | 252 | lea edi, [esp+4] |
|
- | 253 | call dyndisk_enum_root |
|
- | 254 | pop edi |
|
- | 255 | test eax, eax |
|
- | 256 | jz .readroot_done_dynamic |
|
- | 257 | inc dword [edx+8] |
|
- | 258 | dec dword [esp+16] |
|
- | 259 | jns .readroot_ah_loop2 |
|
- | 260 | dec ebp |
|
- | 261 | js .readroot_ah_loop2 |
|
- | 262 | push eax |
|
- | 263 | xor eax, eax |
|
- | 264 | inc dword [edx+4] |
|
- | 265 | mov dword [edi], 0x10 ; attributes: folder |
|
- | 266 | mov dword [edi+4], ebx |
|
- | 267 | add edi, 8 |
|
- | 268 | mov ecx, 40/4-2 |
|
- | 269 | rep stosd |
|
- | 270 | push esi edi |
|
- | 271 | lea esi, [esp+12] |
|
- | 272 | @@: |
|
- | 273 | lodsb |
|
- | 274 | stosb |
|
- | 275 | test bl, 1 |
|
- | 276 | jz .ansi3 |
|
- | 277 | mov byte [edi], 0 |
|
- | 278 | inc edi |
|
- | 279 | .ansi3: |
|
- | 280 | test al, al |
|
- | 281 | jnz @b |
|
- | 282 | pop edi esi eax |
|
- | 283 | add edi, 520 |
|
- | 284 | test bl, 1 |
|
- | 285 | jnz .readroot_ah_loop2 |
|
- | 286 | sub edi, 520-264 |
|
- | 287 | jmp .readroot_ah_loop2 |
|
- | 288 | .readroot_done_dynamic: |
|
- | 289 | add esp, 16 |
|
- | 290 | mov esi, virtual_root_query |
|
256 | .readroot_loop: |
291 | .readroot_loop: |
257 | cmp dword [esi], eax |
292 | cmp dword [esi], eax |
258 | jz .readroot_done_static |
293 | jz .readroot_done |
259 | call dword [esi] |
294 | call dword [esi] |
260 | add esi, 4 |
295 | add esi, 4 |
261 | test eax, eax |
296 | test eax, eax |
262 | jnz @f |
297 | jnz @f |
263 | .readroot_next: |
298 | .readroot_next: |
Line 294... | Line 329... | ||
294 | add edi, 520 |
329 | add edi, 520 |
295 | test bl, 1 |
330 | test bl, 1 |
296 | jnz .readroot_loop |
331 | jnz .readroot_loop |
297 | sub edi, 520-264 |
332 | sub edi, 520-264 |
298 | jmp .readroot_loop |
333 | jmp .readroot_loop |
299 | .readroot_done_static: |
- | |
300 | mov esi, fs_additional_handlers-8 |
- | |
301 | sub esp, 16 |
- | |
302 | .readroot_ah_loop: |
- | |
303 | add esi, 8 |
- | |
304 | cmp dword [esi], 0 |
- | |
305 | jz .readroot_done |
- | |
306 | xor eax, eax |
- | |
307 | .readroot_ah_loop2: |
- | |
308 | push edi |
- | |
309 | lea edi, [esp+4] |
- | |
310 | call dword [esi+4] |
- | |
311 | pop edi |
- | |
312 | test eax, eax |
- | |
313 | jz .readroot_ah_loop |
- | |
314 | inc dword [edx+8] |
- | |
315 | dec dword [esp+16] |
- | |
316 | jns .readroot_ah_loop2 |
- | |
317 | dec ebp |
- | |
318 | js .readroot_ah_loop2 |
- | |
319 | push eax |
- | |
320 | xor eax, eax |
- | |
321 | inc dword [edx+4] |
- | |
322 | mov dword [edi], 0x10 ; attributes: folder |
- | |
323 | mov dword [edi+4], ebx |
- | |
324 | add edi, 8 |
- | |
325 | mov ecx, 40/4-2 |
- | |
326 | rep stosd |
- | |
327 | push esi edi |
- | |
328 | lea esi, [esp+12] |
- | |
329 | @@: |
- | |
330 | lodsb |
- | |
331 | stosb |
- | |
332 | test bl, 1 |
- | |
333 | jz .ansi3 |
- | |
334 | mov byte [edi], 0 |
- | |
335 | inc edi |
- | |
336 | .ansi3: |
- | |
337 | test al, al |
- | |
338 | jnz @b |
- | |
339 | pop edi esi eax |
- | |
340 | add edi, 520 |
- | |
341 | test bl, 1 |
- | |
342 | jnz .readroot_ah_loop2 |
- | |
343 | sub edi, 520-264 |
- | |
344 | jmp .readroot_ah_loop2 |
- | |
345 | .readroot_done: |
334 | .readroot_done: |
346 | add esp, 16 |
- | |
347 | pop eax |
335 | pop eax |
348 | mov ebx, [edx+4] |
336 | mov ebx, [edx+4] |
349 | xor eax, eax |
337 | xor eax, eax |
350 | dec ebp |
338 | dec ebp |
351 | js @f |
339 | js @f |
Line 353... | Line 341... | ||
353 | @@: |
341 | @@: |
354 | mov [image_of_eax], eax |
342 | mov [image_of_eax], eax |
355 | mov [image_of_ebx], ebx |
343 | mov [image_of_ebx], ebx |
356 | ret |
344 | ret |
357 | .notfound_try: |
345 | .notfound_try: |
358 | mov edi, fs_additional_handlers |
- | |
359 | @@: |
- | |
360 | cmp dword [edi], 0 |
- | |
361 | jz .notfound |
- | |
362 | call dword [edi] |
346 | call dyndisk_handler |
363 | scasd |
- | |
364 | scasd |
- | |
365 | jmp @b |
- | |
366 | .notfound: |
347 | .notfound: |
367 | mov dword [image_of_eax], ERROR_FILE_NOT_FOUND |
348 | mov dword [image_of_eax], ERROR_FILE_NOT_FOUND |
368 | and dword [image_of_ebx], 0 |
349 | and dword [image_of_ebx], 0 |
369 | ret |
350 | ret |