Subversion Repositories Kolibri OS

Rev

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

Rev 75 Rev 78
Line 30... Line 30...
30
        dd      fs_NextHd3
30
        dd      fs_NextHd3
31
        db      0
31
        db      0
Line 32... Line 32...
32
 
32
 
33
virtual_root_query:
33
virtual_root_query:
34
        dd      fs_HasRamdisk
34
        dd      fs_HasRamdisk
35
        du      'rd',0
35
        db      'rd',0
36
        dd      fs_HasFloppy
36
        dd      fs_HasFloppy
37
        du      'fd',0
37
        db      'fd',0
38
        dd      fs_HasHd0
38
        dd      fs_HasHd0
39
        du      'hd0',0
39
        db      'hd0',0
40
        dd      fs_HasHd1
40
        dd      fs_HasHd1
41
        du      'hd1',0
41
        db      'hd1',0
42
        dd      fs_HasHd2
42
        dd      fs_HasHd2
43
        du      'hd2',0
43
        db      'hd2',0
44
        dd      fs_HasHd3
44
        dd      fs_HasHd3
45
        du      'hd3',0
45
        db      'hd3',0
46
        dd      0
46
        dd      0
Line 47... Line 47...
47
endg
47
endg
48
 
48
 
Line 102... Line 102...
102
        jnz     .access_denied
102
        jnz     .access_denied
103
        xor     eax, eax
103
        xor     eax, eax
104
        mov     ebp, [ebx+12]
104
        mov     ebp, [ebx+12]
105
        mov     edx, [ebx+16]
105
        mov     edx, [ebx+16]
106
        add     edx, std_application_base_address
106
        add     edx, std_application_base_address
-
 
107
        push    dword [ebx+4]   ; first block
107
        mov     ebx, [ebx+4]
108
        mov     ebx, [ebx+8]    ; flags
108
        mov     esi, [edi+4]
109
        mov     esi, [edi+4]
109
; ebx=first block, ebp=number of blocks, edx=return area, esi='Next' handler
110
; ebx=flags, [esp]=first block, ebp=number of blocks, edx=return area, esi='Next' handler
110
        mov     edi, edx
111
        mov     edi, edx
111
        mov     ecx, 32/4
112
        mov     ecx, 32/4
112
        rep     stosd
113
        rep     stosd
113
        mov     byte [edx], 1   ; version
114
        mov     byte [edx], 1   ; version
114
.maindir_loop:
115
.maindir_loop:
115
        call    esi
116
        call    esi
116
        jc      .maindir_done
117
        jc      .maindir_done
117
        inc     dword [edx+8]
118
        inc     dword [edx+8]
118
        dec     ebx
119
        dec     dword [esp]
119
        jns     .maindir_loop
120
        jns     .maindir_loop
120
        dec     ebp
121
        dec     ebp
121
        js      .maindir_loop
122
        js      .maindir_loop
122
        inc     dword [edx+4]
123
        inc     dword [edx+4]
123
        mov     dword [edi], 0x10       ; attributes: folder
124
        mov     dword [edi], 0x10       ; attributes: folder
Line 140... Line 141...
140
        test    eax, eax
141
        test    eax, eax
141
        jnz     @b
142
        jnz     @b
142
@@:
143
@@:
143
        pop     eax
144
        pop     eax
144
        add     al, '0'
145
        add     al, '0'
145
        stosw
146
        stosb
-
 
147
        test    bl, 1           ; UNICODE name?
-
 
148
        jz      .ansi2
-
 
149
        mov     byte [edi], 0
-
 
150
        inc     edi
-
 
151
.ansi2:
-
 
152
        test    al, al
146
        jnz     @b
153
        jnz     @b
147
        mov     byte [edi-1], 0
154
        mov     byte [edi-1], 0
148
        pop     edi
155
        pop     edi
-
 
156
; UNICODE name length is 520 bytes, ANSI - 264
149
        add     edi, 520
157
        add     edi, 520
-
 
158
        test    bl, 1
-
 
159
        jnz     @f
-
 
160
        sub     edi, 520-264
-
 
161
@@:
150
        pop     edx eax
162
        pop     edx eax
151
        jmp     .maindir_loop
163
        jmp     .maindir_loop
152
.maindir_done:
164
.maindir_done:
-
 
165
        pop     eax
153
        mov     ebx, [edx+8]
166
        mov     ebx, [edx+4]
154
        xor     eax, eax
167
        xor     eax, eax
155
        dec     ebp
168
        dec     ebp
156
        js      @f
169
        js      @f
157
        mov     al, ERROR_END_OF_FILE
170
        mov     al, ERROR_END_OF_FILE
158
@@:
171
@@:
Line 171... Line 184...
171
; virtual root folder - special handler
184
; virtual root folder - special handler
172
        mov     esi, virtual_root_query
185
        mov     esi, virtual_root_query
173
        mov     ebp, [ebx+12]
186
        mov     ebp, [ebx+12]
174
        mov     edx, [ebx+16]
187
        mov     edx, [ebx+16]
175
        add     edx, std_application_base_address
188
        add     edx, std_application_base_address
-
 
189
        push    dword [ebx+4]   ; first block
176
        mov     ebx, [ebx+4]
190
        mov     ebx, [ebx+8]    ; flags
177
        xor     eax, eax
191
        xor     eax, eax
178
; eax=0, ebx=first block, ebp=number of blocks, edx=return area
192
; eax=0, [esp]=first block, ebx=flags, ebp=number of blocks, edx=return area
179
        mov     edi, edx
193
        mov     edi, edx
180
        mov     ecx, 32/4
194
        mov     ecx, 32/4
181
        rep     stosd
195
        rep     stosd
182
        mov     byte [edx], 1   ; version
196
        mov     byte [edx], 1   ; version
183
.readroot_loop:
197
.readroot_loop:
Line 188... Line 202...
188
        test    eax, eax
202
        test    eax, eax
189
        jnz     @f
203
        jnz     @f
190
.readroot_next:
204
.readroot_next:
191
        or      ecx, -1
205
        or      ecx, -1
192
        xchg    esi, edi
206
        xchg    esi, edi
193
        repnz   scasw
207
        repnz   scasb
194
        xchg    esi, edi
208
        xchg    esi, edi
195
        jmp     .readroot_loop
209
        jmp     .readroot_loop
196
@@:
210
@@:
197
        xor     eax, eax
211
        xor     eax, eax
198
        inc     dword [edx+8]
212
        inc     dword [edx+8]
199
        dec     ebx
213
        dec     dword [esp]
200
        jns     .readroot_next
214
        jns     .readroot_next
201
        dec     ebp
215
        dec     ebp
202
        js      .readroot_next
216
        js      .readroot_next
203
        inc     dword [edx+4]
217
        inc     dword [edx+4]
204
        mov     dword [edi], 0x10       ; attributes: folder
218
        mov     dword [edi], 0x10       ; attributes: folder
Line 206... Line 220...
206
        add     edi, 8
220
        add     edi, 8
207
        mov     ecx, 40/4-2
221
        mov     ecx, 40/4-2
208
        rep     stosd
222
        rep     stosd
209
        push    edi
223
        push    edi
210
@@:
224
@@:
211
        lodsw
225
        lodsb
212
        stosw
226
        stosb
-
 
227
        test    bl, 1
-
 
228
        jz      .ansi
-
 
229
        mov     byte [edi], 0
-
 
230
        inc     edi
-
 
231
.ansi:
213
        test    eax, eax
232
        test    eax, eax
214
        jnz     @b
233
        jnz     @b
215
        pop     edi
234
        pop     edi
216
        add     edi, 520
235
        add     edi, 520
-
 
236
        test    bl, 1
-
 
237
        jnz     .readroot_loop
-
 
238
        sub     edi, 520-264
217
        jmp     .readroot_loop
239
        jmp     .readroot_loop
218
.readroot_done:
240
.readroot_done:
-
 
241
        pop     eax
219
        mov     ebx, [edx+8]
242
        mov     ebx, [edx+4]
220
        xor     eax, eax
243
        xor     eax, eax
221
        dec     ebp
244
        dec     ebp
222
        js      @f
245
        js      @f
223
        mov     al, ERROR_END_OF_FILE
246
        mov     al, ERROR_END_OF_FILE
224
@@:
247
@@: