Rev 6792 | Rev 6875 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6792 | Rev 6798 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2016. 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: 6792 $ |
8 | $Revision: 6798 $ |
9 | 9 | ||
10 | ERROR_SUCCESS = 0 |
10 | ERROR_SUCCESS = 0 |
11 | ERROR_DISK_BASE = 1 |
11 | ERROR_DISK_BASE = 1 |
Line 36... | Line 36... | ||
36 | popad |
36 | popad |
37 | mov [image_of_eax], eax |
37 | mov [image_of_eax], eax |
38 | mov [image_of_ebx], ebx |
38 | mov [image_of_ebx], ebx |
39 | ret |
39 | ret |
Line -... | Line 40... | ||
- | 40 | ||
- | 41 | fileSystemUnicode: |
|
- | 42 | ; in: ebx -> f.80 parameter structure |
|
- | 43 | mov edi, [ebx+20] |
|
- | 44 | mov esi, [ebx+24] |
|
- | 45 | jmp @f |
|
40 | 46 | ||
41 | file_system_lfn: |
47 | file_system_lfn: |
- | 48 | ; in: ebx -> f.70 parameter structure |
|
42 | ; in: ebx -> parameter structure |
49 | xor edi, edi |
43 | lea ebp, [ebx+20] |
50 | lea esi, [ebx+20] |
44 | cmp byte [ebp], 0 |
51 | cmp byte [esi], 0 |
45 | jnz @f |
52 | jnz @f |
46 | mov ebp, [ebx+21] |
53 | mov esi, [ebx+21] |
47 | @@: |
54 | @@: |
48 | cmp word [ebp], '/' |
- | |
49 | jz .rootdir |
- | |
50 | cmp byte [ebp], 4 |
- | |
51 | jnc @f |
- | |
52 | cmp byte [ebp], 0 |
- | |
53 | jz @f |
- | |
54 | cmp word [ebp+1], '/' |
55 | cmp word [esi], '/' |
55 | jnz @f |
56 | jnz @f |
56 | cmp byte [ebp], 2 |
57 | cmp edi, 2 |
57 | jnz .rootdir |
58 | jnz .rootdir |
58 | cmp word [ebp+3], 0 |
59 | cmp dword[esi], '/' |
59 | jz .rootdir |
60 | jz .rootdir |
60 | @@: |
61 | @@: |
61 | stdcall kernel_alloc, maxPathLength |
62 | stdcall kernel_alloc, maxPathLength |
62 | push eax ebx |
63 | push eax ebx |
63 | xchg eax, edi |
- | |
64 | mov esi, ebp |
- | |
65 | xor eax, eax |
64 | xchg eax, edi |
66 | call getFullPath |
65 | call getFullPath |
67 | pop ebx ebp |
66 | pop ebx ebp |
68 | test eax, eax |
67 | test eax, eax |
69 | jz .notfound |
68 | jz .notfound |
Line 365... | Line 364... | ||
365 | cmp byte [edi], 0 |
364 | cmp byte [edi], 0 |
366 | jz .dest_done |
365 | jz .dest_done |
367 | lodsb |
366 | lodsb |
368 | test al, al |
367 | test al, al |
369 | jz .cont |
368 | jz .cont |
370 | or al, 20h |
- | |
371 | scasb |
369 | scasb |
372 | jz @b |
370 | jz @b |
- | 371 | or al, 20h |
|
- | 372 | cmp [edi-1], al |
|
- | 373 | jz @b |
|
373 | .cont: |
374 | .cont: |
374 | pop edi esi |
375 | pop edi esi |
375 | inc edi |
376 | inc edi |
376 | jmp .loop |
377 | jmp .loop |
Line 395... | Line 396... | ||
395 | endg |
396 | endg |
Line 396... | Line 397... | ||
396 | 397 | ||
397 | sys_current_directory: ; sysfunction 30 |
398 | sys_current_directory: ; sysfunction 30 |
398 | mov eax, [current_slot] |
399 | mov eax, [current_slot] |
- | 400 | mov edi, [eax+APPDATA.cur_dir] |
|
399 | mov edi, [eax+APPDATA.cur_dir] |
401 | xor eax, eax |
400 | dec ebx |
402 | dec ebx |
401 | jz .set |
403 | jz .set |
402 | dec ebx |
404 | dec ebx |
403 | jz .get |
405 | jz .get |
404 | dec ebx |
406 | dec ebx |
- | 407 | jz .mount_additional_directory |
|
405 | jz .mount_additional_directory |
408 | mov eax, edx |
- | 409 | dec ebx |
|
- | 410 | jz .set |
|
- | 411 | mov eax, esi |
|
406 | dec ebx |
412 | dec ebx |
407 | jz .get16 |
413 | jz .get |
408 | @@: |
414 | @@: |
Line 409... | Line 415... | ||
409 | ret |
415 | ret |
410 | 416 | ||
Line 414... | Line 420... | ||
414 | xchg [addDirSeal], al |
420 | xchg [addDirSeal], al |
415 | test al, al |
421 | test al, al |
416 | jnz @b |
422 | jnz @b |
417 | mov esi, ecx |
423 | mov esi, ecx |
418 | mov edi, sysdir_name1 |
424 | mov edi, sysdir_name1 |
419 | mov ecx, 63 |
425 | mov ecx, 64 |
420 | rep movsb ; copying fake directory name |
426 | rep movsb ; copying fake directory name |
421 | inc esi |
- | |
422 | xor eax, eax |
427 | mov byte [edi-1], 0 |
423 | stosb ; terminator of name, in case if we get the inlet trash |
- | |
424 | mov cl, 63 |
428 | mov cl, 63 |
425 | cmp word [esi], 2 |
- | |
426 | jz .utf16 |
- | |
427 | call cp866toUTF8_string |
429 | call cp866toUTF8_string |
428 | @@: |
- | |
429 | mov byte [edi], 0 |
430 | mov byte [edi], 0 |
430 | mov [full_file_name_table.size], 2 |
431 | mov [full_file_name_table.size], 2 |
431 | ret |
432 | ret |
Line 432... | Line 433... | ||
432 | 433 | ||
433 | .utf16: |
- | |
434 | add esi, 2 |
- | |
435 | call UTF16to8_string |
- | |
436 | jmp @b |
- | |
437 | 434 | .get: |
|
438 | .get: ; in: ecx -> buffer, edx = length |
435 | ; in: ecx -> buffer, edx = length, eax = encoding |
439 | mov esi, edi |
436 | mov esi, edi |
440 | inc esi |
437 | inc esi |
441 | mov edi, ecx |
438 | mov edi, ecx |
442 | cmp edx, maxPathLength |
439 | cmp edx, maxPathLength |
443 | jc @f |
440 | jc @f |
444 | mov edx, maxPathLength |
441 | mov edx, maxPathLength |
445 | @@: |
442 | @@: |
- | 443 | mov ecx, edx |
|
- | 444 | jecxz .ret |
|
- | 445 | cmp eax, 2 |
|
- | 446 | jz .get16 |
|
- | 447 | cmp eax, 3 |
|
446 | mov ecx, edx |
448 | jz .get8 |
447 | @@: |
449 | @@: |
448 | dec ecx |
450 | dec ecx |
449 | js @f |
451 | js @f |
450 | call utf8to16 |
452 | call utf8to16 |
451 | call uni2ansi_char |
453 | call uni2ansi_char |
452 | stosb |
454 | stosb |
453 | test al, al |
455 | test al, al |
454 | jnz @b |
456 | jnz @b |
455 | sub edx, ecx |
- | |
456 | mov ecx, edx |
457 | sub edx, ecx |
- | 458 | @@: |
|
- | 459 | mov byte [edi-1], 0 |
|
457 | @@: |
460 | .ret: |
458 | mov [esp+32], ecx |
461 | mov [esp+32], edx |
Line -... | Line 462... | ||
- | 462 | ret |
|
- | 463 | ||
- | 464 | .get8: |
|
- | 465 | push edi |
|
- | 466 | mov edi, esi |
|
- | 467 | xor eax, eax |
|
- | 468 | repnz scasb |
|
- | 469 | sub edx, ecx |
|
- | 470 | mov ecx, edx |
|
- | 471 | pop edi |
|
- | 472 | rep movsb |
|
459 | ret |
473 | jmp @b |
460 | - | ||
461 | .get16: |
- | |
462 | mov esi, edi |
474 | |
463 | inc esi |
- | |
464 | mov edi, ecx |
- | |
465 | cmp edx, maxPathLength |
- | |
466 | jc @f |
- | |
467 | mov edx, maxPathLength |
475 | .get16: |
468 | @@: |
- | |
469 | shr edx, 1 |
476 | shr ecx, 1 |
470 | mov ecx, edx |
477 | shr edx, 1 |
471 | @@: |
478 | @@: |
472 | dec ecx |
479 | dec ecx |
473 | js @f |
480 | js @f |
474 | call utf8to16 |
481 | call utf8to16 |
475 | stosw |
482 | stosw |
476 | test ax, ax |
483 | test ax, ax |
477 | jnz @b |
- | |
478 | sub edx, ecx |
484 | jnz @b |
- | 485 | sub edx, ecx |
|
479 | mov ecx, edx |
486 | @@: |
480 | @@: |
487 | shl edx, 1 |
Line 481... | Line 488... | ||
481 | mov [esp+32], ecx |
488 | mov word [edi-2], 0 |
482 | ret |
489 | jmp .ret |
483 | - | ||
484 | .set: |
490 | |
485 | mov esi, ecx |
491 | .set: |
486 | xor eax, eax |
492 | mov esi, ecx |
487 | getFullPath: |
493 | getFullPath: |
488 | ; in: esi -> file path, eax = string encoding, edi -> destination |
494 | ; in: esi -> file path, eax = string encoding, edi -> destination |