Subversion Repositories Kolibri OS

Rev

Rev 6798 | Rev 7736 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6798 Rev 6875
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: 6798 $
8
$Revision: 6875 $
9
 
9
 
10
ERROR_SUCCESS        = 0
10
ERROR_SUCCESS        = 0
11
ERROR_DISK_BASE      = 1
11
ERROR_DISK_BASE      = 1
Line 146... Line 146...
146
        stdcall kernel_free, ebp
146
        stdcall kernel_free, ebp
147
        ret
147
        ret
Line 148... Line 148...
148
 
148
 
149
.nextCD:
149
.nextCD:
150
        test    eax, eax    ; partition number
150
        test    eax, eax    ; partition number
151
        stc
-
 
152
        jnz     @f      ; no more partitions
151
        jnz     @f
153
        mov     al, 1   ; /cdX/1
152
        inc     eax     ; /cdX/1
-
 
153
        ret
154
        clc
154
 
-
 
155
@@:
155
@@:
156
        stc
Line 156... Line 157...
156
        ret
157
        ret
157
 
158
 
-
 
159
.maindir:   ; list partitions
158
.maindir:   ; list partitions
160
        mov     esi, .nextCD
159
        mov     esi, .nextCD
161
        xor     ecx, ecx
160
.maindir_noesi:     ; backjump from dyndisk_handler
162
.maindir_noesi:     ; backjump from dyndisk_handler
161
        push    ebp
163
        push    ebp
-
 
164
        mov     ebp, ecx
162
        mov     ebp, ecx
165
        call    kernel_free
-
 
166
        mov     edi, [ebx+16]   ; buffer
163
        call    kernel_free
167
        cmp     byte [ebx], 5
-
 
168
        jz      .deviceInfo
164
        cmp     dword[ebx], 1
169
        cmp     byte [ebx], 1   ; read folder?
165
        jnz     .access_denied  ; read folder?
170
        jnz     .access_denied
166
        push    ebp
171
        push    ebp
167
        pushd   [ebx+4]         ; first block
-
 
168
        mov     ebp, [ebx+12]   ; the number of blocks to read
172
        pushd   [ebx+4]         ; first block
169
        mov     edx, [ebx+16]   ; buffer
173
        mov     ebp, [ebx+12]   ; the number of blocks to read
170
        mov     ebx, [ebx+8]    ; flags
174
        mov     ebx, [ebx+8]    ; flags
171
        mov     ecx, 32/4
175
        mov     ecx, 32/4
172
        mov     edi, edx
176
        mov     edx, edi
173
        xor     eax, eax
177
        xor     eax, eax
174
        rep stosd
178
        rep stosd
175
        mov     byte [edx], 1   ; version
179
        mov     byte [edx], 1   ; version
Line 198... Line 202...
198
        xor     edx, edx
202
        xor     edx, edx
199
        div     ecx
203
        div     ecx
200
        push    edx
204
        push    edx
201
        test    eax, eax
205
        test    eax, eax
202
        jnz     @b
206
        jnz     @b
203
        cmp     ebx, 1
207
        cmp     ebx, 2
204
        jz      .uni
208
        jz      .uni
205
@@:
209
@@:
206
        pop     eax
210
        pop     eax
207
        add     eax, '0'
211
        add     eax, '0'
208
        stosb
212
        stosb
209
        test    eax, eax
213
        test    eax, eax
210
        jnz     @b
214
        jnz     @b
211
        pop     edi edx eax
215
        pop     edi edx eax
-
 
216
        cmp     ebx, 3
-
 
217
        jz      @f
212
        add     edi, 264
218
        add     edi, 264
213
        jmp     .maindir_loop
219
        jmp     .maindir_loop
Line 214... Line 220...
214
 
220
 
215
.uni:
221
.uni:
216
        pop     eax
222
        pop     eax
217
        add     eax, '0'
223
        add     eax, '0'
218
        stosw
224
        stosw
219
        test    eax, eax
225
        test    eax, eax
220
        jnz     .uni
226
        jnz     .uni
-
 
227
        pop     edi edx eax
221
        pop     edi edx eax
228
@@:
222
        add     edi, 520
229
        add     edi, 520
Line 223... Line 230...
223
        jmp     .maindir_loop
230
        jmp     .maindir_loop
224
 
231
 
Line 236... Line 243...
236
 
243
 
237
.access_denied:
244
.access_denied:
238
        mov     dword[image_of_eax], ERROR_ACCESS_DENIED
245
        mov     dword[image_of_eax], ERROR_ACCESS_DENIED
Line -... Line 246...
-
 
246
        ret
-
 
247
 
-
 
248
.deviceInfo:
-
 
249
        test    ebp, ebp
-
 
250
        jz      @f
-
 
251
        mov     eax, dword[ebp+DISK.MediaInfo.Capacity]
-
 
252
        mov     edx, dword[ebp+DISK.MediaInfo.Capacity+4]
-
 
253
        shld    edx, eax, 9
-
 
254
        shl     eax, 9
-
 
255
        mov     [edi+36], edx
-
 
256
        mov     [edi+32], eax
-
 
257
@@:
-
 
258
        and     dword[image_of_eax], 0
239
        ret
259
        ret
-
 
260
 
-
 
261
.rootdir:   ; / - virtual root folder
240
 
262
        cmp     byte [ebx], 5
241
.rootdir:   ; / - virtual root folder
263
        jz      @b
242
        cmp     dword[ebx], 1   ; read folder?
264
        cmp     byte [ebx], 1   ; read folder?
243
        jnz     .access_denied
265
        jnz     .access_denied
244
        mov     ebp, [ebx+12]   ; number of blocks
266
        mov     ebp, [ebx+12]   ; number of blocks
245
        mov     edx, [ebx+16]   ; return area
267
        mov     edx, [ebx+16]   ; return area
Line 271... Line 293...
271
        add     edi, 8
293
        add     edi, 8
272
        xor     eax, eax
294
        xor     eax, eax
273
        rep stosd
295
        rep stosd
274
        push    edi
296
        push    edi
275
        lea     esi, [esp+8]
297
        lea     esi, [esp+8]
276
        cmp     ebx, 1
298
        cmp     ebx, 2
277
        jz      .uni2
299
        jz      .uni2
278
@@:
300
@@:
279
        lodsb
301
        lodsb
280
        stosb
302
        stosb
281
        test    eax, eax
303
        test    eax, eax
282
        jnz     @b
304
        jnz     @b
283
        pop     edi eax
305
        pop     edi eax
-
 
306
        cmp     ebx, 3
-
 
307
        jz      @f
284
        add     edi, 264
308
        add     edi, 264
285
        jmp     .rootdir_loop
309
        jmp     .rootdir_loop
Line 286... Line 310...
286
 
310
 
287
.uni2:
311
.uni2:
288
        lodsb
312
        lodsb
289
        stosw
313
        stosw
290
        test    eax, eax
314
        test    eax, eax
291
        jnz     .uni2
315
        jnz     .uni2
-
 
316
        pop     edi eax
292
        pop     edi eax
317
@@:
293
        add     edi, 520
318
        add     edi, 520
Line 294... Line 319...
294
        jmp     .rootdir_loop
319
        jmp     .rootdir_loop
295
 
320