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 |