Subversion Repositories Kolibri OS

Rev

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