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 | @@: |