Subversion Repositories Kolibri OS

Rev

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