Rev 485 | Rev 589 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 485 | Rev 517 | ||
---|---|---|---|
Line 4... | Line 4... | ||
4 | ; PF, ZF, CF and SF set accordingly to 'cmp eax,2' (or 'cmp al,2') |
4 | ; PF, ZF, CF and SF set accordingly to 'cmp eax,2' (or 'cmp al,2') |
5 | push ebx |
5 | push ebx |
6 | push 70 |
6 | push 70 |
7 | pop eax |
7 | pop eax |
8 | mov ebx, delinfo |
8 | mov ebx, delinfo |
9 | mcall |
9 | int 0x40 |
10 | pop ebx |
10 | pop ebx |
11 | test eax, eax |
11 | test eax, eax |
12 | jz .ret |
12 | jz .ret |
13 | cmp [del_bSkipAll], 0 |
13 | cmp [del_bSkipAll], 0 |
14 | jz @f |
14 | jz @f |
Line 100... | Line 100... | ||
100 | mov [ebx+dirinfo.size-dirinfo], del_dir_query_size |
100 | mov [ebx+dirinfo.size-dirinfo], del_dir_query_size |
101 | mov [ebx+dirinfo.dirdata-dirinfo], del_dir_query_area |
101 | mov [ebx+dirinfo.dirdata-dirinfo], del_dir_query_area |
102 | mov [ebx+dirinfo.name-dirinfo], execdata |
102 | mov [ebx+dirinfo.name-dirinfo], execdata |
103 | push 70 |
103 | push 70 |
104 | pop eax |
104 | pop eax |
105 | mcall |
105 | int 0x40 |
106 | ; if we get read error, the best available action is try to delete directory itself |
106 | ; if we get read error, the best available action is try to delete directory itself |
107 | test eax, eax |
107 | test eax, eax |
108 | jz @f |
108 | jz @f |
109 | cmp eax, 6 |
109 | cmp eax, 6 |
110 | jnz .do_delete_dir |
110 | jnz .do_delete_dir |
Line 113... | Line 113... | ||
113 | mov edx, del_dir_query_area+32 |
113 | mov edx, del_dir_query_area+32 |
114 | imul ebx, 304 |
114 | imul ebx, 304 |
115 | add ebx, edx |
115 | add ebx, edx |
116 | .delete_dir_entry_loop: |
116 | .delete_dir_entry_loop: |
117 | cmp edx, ebx |
117 | cmp edx, ebx |
- | 118 | jb .do_delete_dir_entry |
|
- | 119 | cmp ebx, del_dir_query_area+32+304*del_dir_query_size |
|
118 | jae .delete_dir_entry_done |
120 | jnz .delete_dir_entry_done |
- | 121 | jmp .return_from_recursion |
|
- | 122 | .do_delete_dir_entry: |
|
119 | ; ignore special entries "." and ".." |
123 | ; ignore special entries "." and ".." |
120 | inc ebp |
124 | inc ebp |
121 | cmp word [edx+40], '.' |
125 | cmp word [edx+40], '.' |
122 | jz .delete_dir_entry_continue |
126 | jz .delete_dir_entry_continue |
123 | cmp word [edx+40], '..' |
127 | cmp word [edx+40], '..' |
Line 172... | Line 176... | ||
172 | test al, al |
176 | test al, al |
173 | jnz @b |
177 | jnz @b |
174 | dec esi |
178 | dec esi |
175 | dec esi |
179 | dec esi |
176 | .do_restore_name: |
180 | .do_restore_name: |
177 | std |
- | |
178 | @@: |
- | |
179 | lodsb |
- | |
180 | cmp al, '/' |
- | |
181 | jnz @b |
- | |
182 | cld |
- | |
183 | mov byte [esi+1], 0 |
181 | call delete_last_name |
184 | .delete_dir_entry_continue: |
182 | .delete_dir_entry_continue: |
185 | add edx, 304 |
183 | add edx, 304 |
186 | jmp .delete_dir_entry_loop |
184 | jmp .delete_dir_entry_loop |
187 | .delete_dir_entry_done: |
185 | .delete_dir_entry_done: |
188 | .do_delete_dir: |
186 | .do_delete_dir: |
Line 203... | Line 201... | ||
203 | mov ebp, [ecx] |
201 | mov ebp, [ecx] |
204 | cmp al, 2 |
202 | cmp al, 2 |
205 | sbb ebp, -1 |
203 | sbb ebp, -1 |
206 | ; restore prev directory name |
204 | ; restore prev directory name |
207 | mov esi, execdata |
205 | mov esi, execdata |
- | 206 | call delete_last_name_from_end |
|
- | 207 | jmp .return_from_recursion |
|
- | 208 | .done: |
|
- | 209 | .cancel: |
|
- | 210 | mov [dirinfo.first], 0 ; do not destroys flags |
|
- | 211 | popad |
|
- | 212 | ret |
|
- | 213 | ||
- | 214 | makedir: |
|
- | 215 | ; create directory with name from CopyDestEditBuf+12 |
|
- | 216 | ; destroys eax |
|
- | 217 | push ebx |
|
- | 218 | push 70 |
|
- | 219 | pop eax |
|
- | 220 | mov ebx, mkdirinfo |
|
- | 221 | int 0x40 |
|
- | 222 | pop ebx |
|
- | 223 | test eax, eax |
|
- | 224 | jz .ret |
|
- | 225 | cmp dword [esp+8], DeleteErrorBtn |
|
- | 226 | jnz @f |
|
- | 227 | cmp [copy_bSkipAll], 0 |
|
- | 228 | jz @f |
|
- | 229 | push 1 |
|
- | 230 | pop eax |
|
- | 231 | jmp .ret |
|
- | 232 | @@: |
|
- | 233 | push dword CopyDestEditBuf+12 |
|
- | 234 | push dword aCannotMakeFolder |
|
- | 235 | call get_error_msg |
|
- | 236 | push eax |
|
- | 237 | mov eax, esp |
|
- | 238 | push dword [eax+20] |
|
- | 239 | push dword [eax+16] |
|
- | 240 | push eax |
|
- | 241 | push 3 |
|
- | 242 | push -1 |
|
- | 243 | push -1 |
|
- | 244 | push dword aError |
|
- | 245 | call SayErr |
|
- | 246 | add esp, 3*4 |
|
- | 247 | test eax, eax |
|
- | 248 | jz makedir |
|
- | 249 | .ret: |
|
- | 250 | ret 8 |
|
- | 251 | ||
- | 252 | copy_file_worker: |
|
- | 253 | ; in: execdata = source name, CopyDestEditBuf+12 = destination name, edx = BDFE block for source |
|
- | 254 | ; out: CF and ZF not set <=> cancel job ("ja cancel_label") |
|
- | 255 | ; destroys eax,esi,edi |
|
- | 256 | push CopyDestEditBuf+12+513 |
|
- | 257 | cmp [bDestIsFolder], 0 |
|
- | 258 | jz .noaddtoname |
|
- | 259 | mov esi, CopyDestEditBuf+12 |
|
- | 260 | @@: |
|
- | 261 | lodsb |
|
- | 262 | test al, al |
|
- | 263 | jnz @b |
|
- | 264 | mov byte [esi-1], '/' |
|
- | 265 | pop edi |
|
- | 266 | push esi |
|
- | 267 | mov edi, esi |
|
- | 268 | lea esi, [edx+40] |
|
- | 269 | @@: |
|
- | 270 | cmp edi, CopyDestEditBuf+12+513 |
|
- | 271 | jae .overflow |
|
- | 272 | lodsb |
|
- | 273 | stosb |
|
- | 274 | test al, al |
|
- | 275 | jnz @b |
|
- | 276 | jmp .noaddtoname |
|
- | 277 | .overflow: |
|
- | 278 | .ret_zf: |
|
- | 279 | pop esi |
|
- | 280 | and byte [esi-1], 0 ; ZF=1 |
|
- | 281 | ret |
|
- | 282 | .noaddtoname: |
|
- | 283 | ; Íåëüçÿ ñêîïèðîâàòü ôàéë ïîâåðõ ñàìîãî ñåáÿ! |
|
- | 284 | mov esi, execdata |
|
- | 285 | mov edi, CopyDestEditBuf+12 |
|
- | 286 | push esi edi |
|
- | 287 | call strcmpi |
|
- | 288 | pop edi esi |
|
- | 289 | jnz @f |
|
- | 290 | push esi |
|
- | 291 | push aCannotCopyToSelf |
|
- | 292 | mov eax, esp |
|
- | 293 | push ContinueBtn |
|
- | 294 | push 1 |
|
- | 295 | push eax |
|
- | 296 | push 2 |
|
- | 297 | push -1 |
|
- | 298 | push -1 |
|
- | 299 | push aError |
|
- | 300 | call SayErr |
|
- | 301 | pop eax |
|
- | 302 | pop eax |
|
- | 303 | jmp .ret_zf |
|
- | 304 | @@: |
|
- | 305 | ; Ñîáñòâåííî, êîïèðóåì |
|
- | 306 | ; esi->source name, edi->destination name |
|
- | 307 | push ebx |
|
- | 308 | mov [writeinfo.code], 2 |
|
- | 309 | mov [writeinfo.name], edi |
|
- | 310 | and dword [writeinfo.first], 0 |
|
- | 311 | and dword [writeinfo.first+4], 0 |
|
- | 312 | mov [writeinfo.data], copy_buffer |
|
- | 313 | mov ebx, readinfo |
|
- | 314 | and dword [ebx+readinfo.first-readinfo], 0 |
|
- | 315 | and dword [ebx+readinfo.first+4-readinfo], 0 |
|
- | 316 | mov [ebx+readinfo.size-readinfo], copy_buffer_size |
|
- | 317 | mov [ebx+readinfo.data-readinfo], copy_buffer |
|
- | 318 | mov [ebx+readinfo.name-readinfo], esi |
|
- | 319 | .copyloop: |
|
- | 320 | mov ebx, readinfo |
|
- | 321 | push 70 |
|
- | 322 | pop eax |
|
- | 323 | int 0x40 |
|
- | 324 | test eax, eax |
|
- | 325 | jz .copyreadok |
|
- | 326 | cmp eax, 6 |
|
- | 327 | jz .copyreadok |
|
- | 328 | cmp [copy_bSkipAll2], 0 |
|
- | 329 | jnz .copyfailed_del2 |
|
- | 330 | push esi |
|
- | 331 | push dword aCannotReadFile |
|
- | 332 | call get_error_msg |
|
- | 333 | push eax |
|
- | 334 | mov eax, esp |
|
- | 335 | push dword DeleteErrorBtn |
|
- | 336 | push 4 |
|
- | 337 | push eax |
|
- | 338 | push 3 |
|
- | 339 | push -1 |
|
- | 340 | push -1 |
|
- | 341 | push dword aError |
|
- | 342 | call SayErr |
|
- | 343 | add esp, 3*4 |
|
- | 344 | test eax, eax |
|
- | 345 | jz .copyloop |
|
- | 346 | jmp .copyfailed_parseuser |
|
- | 347 | .copyreadok: |
|
- | 348 | add dword [readinfo.first], ebx |
|
- | 349 | adc dword [readinfo.first+4], 0 |
|
- | 350 | mov [writeinfo.size], ebx |
|
- | 351 | test ebx, ebx |
|
- | 352 | jnz .copywrite |
|
- | 353 | cmp byte [writeinfo.code], 2 |
|
- | 354 | jnz .copydone |
|
- | 355 | .copywrite: |
|
- | 356 | mov ebx, writeinfo |
|
- | 357 | push 70 |
|
- | 358 | pop eax |
|
- | 359 | int 0x40 |
|
- | 360 | test eax, eax |
|
- | 361 | jz .copywriteok |
|
- | 362 | cmp [copy_bSkipAll2], 0 |
|
- | 363 | jnz .copyfailed_del2 |
|
- | 364 | push edi |
|
- | 365 | push dword aCannotWriteFile |
|
- | 366 | call get_error_msg |
|
- | 367 | push eax |
|
- | 368 | mov eax, esp |
|
- | 369 | push dword DeleteErrorBtn |
|
- | 370 | push 4 |
|
- | 371 | push eax |
|
- | 372 | push 3 |
|
- | 373 | push -1 |
|
- | 374 | push -1 |
|
- | 375 | push dword aError |
|
- | 376 | call SayErr |
|
- | 377 | add esp, 3*4 |
|
- | 378 | test eax, eax |
|
- | 379 | jz .copywrite |
|
- | 380 | .copyfailed_parseuser: |
|
- | 381 | cmp al, 2 |
|
- | 382 | jnz @f |
|
- | 383 | mov [copy_bSkipAll2], 1 |
|
- | 384 | dec eax |
|
- | 385 | @@: |
|
- | 386 | cmp al, 1 |
|
- | 387 | pushf |
|
- | 388 | jmp .copyfailed |
|
- | 389 | .copywriteok: |
|
- | 390 | mov ecx, [writeinfo.size] |
|
- | 391 | add dword [writeinfo.first], ecx |
|
- | 392 | adc dword [writeinfo.first+4], 0 |
|
- | 393 | mov [writeinfo.code], 3 |
|
- | 394 | cmp ecx, copy_buffer_size |
|
- | 395 | jz .copyloop |
|
- | 396 | .copydone: |
|
- | 397 | ; now try to set attributes from source, ignore errors |
|
- | 398 | mov edi, attrinfo.attr |
|
- | 399 | mov esi, edx |
|
- | 400 | push 8 |
|
- | 401 | pop ecx |
|
- | 402 | rep movsd |
|
- | 403 | mov ebx, attrinfo |
|
- | 404 | mov [ebx+attrinfo.name-attrinfo], CopyDestEditBuf+12 |
|
- | 405 | inc dword [ebx] |
|
- | 406 | push 70 |
|
- | 407 | pop eax |
|
- | 408 | push ebx |
|
- | 409 | int 0x40 |
|
- | 410 | pop ebx |
|
- | 411 | dec dword [ebx] |
|
- | 412 | xor eax, eax ; ZF=1 |
|
- | 413 | .ret: |
|
- | 414 | pop ebx |
|
- | 415 | pop esi |
|
- | 416 | mov byte [esi-1], 0 |
|
- | 417 | ret |
|
- | 418 | .copydone2: |
|
- | 419 | popf |
|
- | 420 | jmp .ret |
|
- | 421 | .copyfailed: |
|
- | 422 | cmp [bConfirmDeleteIncomplete], 0 |
|
- | 423 | jz .copyfailed_del |
|
- | 424 | cmp [writeinfo.code], 2 |
|
- | 425 | jz .copydone2 |
|
- | 426 | push dword aIncompleteFile |
|
- | 427 | mov eax, esp |
|
- | 428 | push dword DeleteOrKeepBtn |
|
- | 429 | push 2 |
|
- | 430 | push eax |
|
- | 431 | push 1 |
|
- | 432 | push -1 |
|
- | 433 | push -1 |
|
- | 434 | push dword aCopyCaption |
|
- | 435 | call SayErr |
|
- | 436 | add esp, 4 |
|
- | 437 | test eax, eax |
|
- | 438 | jnz .copydone2 |
|
- | 439 | .copyfailed_del: |
|
- | 440 | mov ebx, delinfo |
|
- | 441 | push dword [ebx+21] |
|
- | 442 | mov dword [ebx+21], edi |
|
- | 443 | push 70 |
|
- | 444 | pop eax |
|
- | 445 | int 0x40 |
|
- | 446 | ; ignore errors |
|
- | 447 | pop dword [delinfo+21] |
|
- | 448 | jmp .copydone2 |
|
- | 449 | .copyfailed_del2: |
|
- | 450 | xor eax, eax |
|
- | 451 | pushf |
|
- | 452 | jmp .copyfailed_del |
|
- | 453 | ||
- | 454 | copy_file: |
|
- | 455 | ; in: eax->BDFE block for source, CopyDestEditBuf+12 contains ASCIIZ full name for destination |
|
- | 456 | ; out: CF and ZF not set <=> cancel job ("ja cancel_label") |
|
- | 457 | pushad |
|
- | 458 | mov [copy_dir_stack_ptr], copy_dir_stack |
|
- | 459 | mov [bNeedRestoreName], 0 |
|
- | 460 | lea esi, [ebp + panel1_dir - panel1_data] |
|
- | 461 | mov edi, execdata |
|
- | 462 | @@: |
|
- | 463 | lodsb |
|
- | 464 | test al, al |
|
- | 465 | jz @f |
|
- | 466 | stosb |
|
- | 467 | jmp @b |
|
- | 468 | @@: |
|
- | 469 | mov esi, [esp+28] |
|
- | 470 | add esi, 40 |
|
- | 471 | mov al, '/' |
|
- | 472 | stosb |
|
- | 473 | .l1: |
|
- | 474 | lodsb |
|
- | 475 | cmp edi, execdataend |
|
- | 476 | jb @f |
|
- | 477 | call panels_OnKey.bigfilename |
|
- | 478 | popad |
|
- | 479 | ret |
|
- | 480 | @@: |
|
- | 481 | stosb |
|
- | 482 | test al, al |
|
- | 483 | jnz .l1 |
|
- | 484 | mov edx, [esp+28] |
|
- | 485 | test byte [edx], 10h |
|
- | 486 | jnz .copy_dir |
|
- | 487 | call copy_file_worker |
|
- | 488 | .popad_ret: |
|
- | 489 | popad |
|
- | 490 | ret |
|
- | 491 | ||
- | 492 | .biiig: |
|
- | 493 | mov byte [edi-1], 0 |
|
- | 494 | jmp .popad_ret |
|
- | 495 | ||
- | 496 | .copy_dir: |
|
- | 497 | ; recursive copy of directory |
|
- | 498 | cmp [bDestIsFolder], 0 |
|
- | 499 | mov [bDestIsFolder], 0 |
|
- | 500 | jz .target_created |
|
- | 501 | mov [bNeedRestoreName], 1 |
|
- | 502 | mov esi, CopyDestEditBuf+12 |
|
- | 503 | @@: |
|
- | 504 | lodsb |
|
- | 505 | test al, al |
|
- | 506 | jnz @b |
|
- | 507 | mov byte [esi-1], '/' |
|
- | 508 | mov edi, esi |
|
- | 509 | lea esi, [edx+40] |
|
- | 510 | @@: |
|
- | 511 | cmp edi, CopyDestEditBuf+12+513 |
|
- | 512 | jae .biiig |
|
- | 513 | lodsb |
|
- | 514 | stosb |
|
- | 515 | test al, al |
|
- | 516 | jnz @b |
|
- | 517 | .create_target: |
|
- | 518 | .enter_recursion: |
|
- | 519 | push DeleteErrorBtn |
|
- | 520 | push 4 |
|
- | 521 | call makedir |
|
- | 522 | jz .target_created |
|
- | 523 | cmp al, 2 |
|
- | 524 | jnz @f |
|
- | 525 | dec eax |
|
- | 526 | mov [copy_bSkipAll], 1 |
|
- | 527 | @@: |
|
- | 528 | cmp al, 1 |
|
- | 529 | jz .copy_dir_entry_done |
|
- | 530 | jmp .cancel |
|
- | 531 | .target_created: |
|
- | 532 | xor ebp, ebp ; ebp will contain number of copied items |
|
- | 533 | .return_from_recursion: |
|
- | 534 | .read_retry: |
|
- | 535 | mov ebx, dirinfo |
|
- | 536 | mov [ebx+dirinfo.first-dirinfo], ebp |
|
- | 537 | mov [ebx+dirinfo.size-dirinfo], copy_dir_query_size |
|
- | 538 | mov [ebx+dirinfo.dirdata-dirinfo], copy_dir_query_area |
|
- | 539 | mov [ebx+dirinfo.name-dirinfo], execdata |
|
- | 540 | push 70 |
|
- | 541 | pop eax |
|
- | 542 | int 0x40 |
|
- | 543 | test eax, eax |
|
- | 544 | jz .readok |
|
- | 545 | cmp eax, 6 |
|
- | 546 | jz .readok |
|
- | 547 | ; read error |
|
- | 548 | cmp [copy_bSkipAll], 0 |
|
- | 549 | jz .skip1 |
|
- | 550 | push execdata |
|
- | 551 | push aCannotReadFolder |
|
- | 552 | call get_error_msg |
|
- | 553 | push eax |
|
- | 554 | mov eax, esp |
|
- | 555 | push DeleteErrorBtn |
|
- | 556 | push 4 |
|
- | 557 | push eax |
|
- | 558 | push 3 |
|
- | 559 | push -1 |
|
- | 560 | push -1 |
|
- | 561 | push aError |
|
- | 562 | call SayErr |
|
- | 563 | add esp, 3*4 |
|
- | 564 | test al, al |
|
- | 565 | jz .read_retry |
|
- | 566 | cmp al, 2 |
|
- | 567 | jnz @f |
|
- | 568 | dec eax |
|
- | 569 | mov [copy_bSkipAll], 1 |
|
- | 570 | @@: |
|
- | 571 | cmp al, 1 |
|
- | 572 | jz .skip1 |
|
- | 573 | jmp .cancel |
|
- | 574 | .readok: |
|
- | 575 | ; loop through a directory and copy items |
|
- | 576 | mov edx, copy_dir_query_area+32 |
|
- | 577 | imul ebx, 304 |
|
- | 578 | add ebx, edx |
|
- | 579 | .copy_dir_entry_loop: |
|
- | 580 | cmp edx, ebx |
|
- | 581 | jb .do_copy_dir_entry |
|
- | 582 | cmp ebx, copy_dir_query_area+32+copy_dir_query_size*304 |
|
- | 583 | jz .return_from_recursion |
|
- | 584 | jmp .copy_dir_entry_done |
|
- | 585 | .do_copy_dir_entry: |
|
- | 586 | inc ebp |
|
- | 587 | ; ignore special entries "." and ".." |
|
- | 588 | cmp word [edx+40], '.' |
|
- | 589 | jz .copy_dir_entry_continue |
|
- | 590 | cmp word [edx+40], '..' |
|
- | 591 | jnz @f |
|
- | 592 | cmp byte [edx+42], 0 |
|
- | 593 | jz .copy_dir_entry_continue |
|
- | 594 | @@: |
|
- | 595 | mov esi, execdata |
|
- | 596 | @@: |
|
- | 597 | lodsb |
|
- | 598 | test al, al |
|
- | 599 | jnz @b |
|
- | 600 | mov byte [esi-1], '/' |
|
- | 601 | mov edi, esi |
|
- | 602 | lea esi, [edx+40] |
|
- | 603 | @@: |
|
- | 604 | cmp edi, execdataend |
|
- | 605 | jae .fullname_big |
|
- | 606 | lodsb |
|
- | 607 | stosb |
|
- | 608 | test al, al |
|
- | 609 | jnz @b |
|
- | 610 | mov esi, CopyDestEditBuf+12 |
|
- | 611 | @@: |
|
- | 612 | lodsb |
|
- | 613 | test al, al |
|
- | 614 | jnz @b |
|
- | 615 | mov byte [esi-1], '/' |
|
- | 616 | mov edi, esi |
|
- | 617 | lea esi, [edx+40] |
|
- | 618 | @@: |
|
- | 619 | cmp edi, CopyDestEditBuf+513 |
|
- | 620 | jae .fullname2_big |
|
- | 621 | lodsb |
|
- | 622 | stosb |
|
- | 623 | test al, al |
|
- | 624 | jnz @b |
|
- | 625 | test byte [edx], 10h |
|
- | 626 | jnz .entry_is_folder |
|
- | 627 | call copy_file_worker |
|
- | 628 | ja .cancel |
|
- | 629 | jmp .restore_name |
|
- | 630 | .entry_is_folder: |
|
- | 631 | ; allocate new item in directory stack |
|
- | 632 | mov eax, [copy_dir_stack_ptr] |
|
- | 633 | mov [eax], ebp |
|
- | 634 | add eax, 4 |
|
- | 635 | mov [copy_dir_stack_ptr], eax |
|
- | 636 | ; do recursive copying |
|
- | 637 | jmp .enter_recursion |
|
- | 638 | .fullname_big: |
|
- | 639 | ; we will just ignore such files and continue - in real life this situation can not happen |
|
- | 640 | mov esi, execdataend-1 |
|
- | 641 | jmp .do_restore_name2 |
|
- | 642 | .fullname2_big: |
|
- | 643 | mov esi, CopyDestEditBuf+12+512 |
|
- | 644 | jmp .restore_name2 |
|
- | 645 | .skip1: |
|
- | 646 | .restore_name: |
|
- | 647 | mov esi, CopyDestEditBuf+12 |
|
208 | @@: |
648 | @@: |
209 | lodsb |
649 | lodsb |
210 | test al, al |
650 | test al, al |
211 | jnz @b |
651 | jnz @b |
212 | dec esi |
652 | dec esi |
213 | dec esi |
653 | dec esi |
- | 654 | .restore_name2: |
|
- | 655 | call delete_last_name |
|
214 | std |
656 | mov esi, execdata |
215 | @@: |
657 | @@: |
216 | lodsb |
658 | lodsb |
217 | cmp al, '/' |
659 | test al, al |
218 | jnz @b |
660 | jnz @b |
- | 661 | dec esi |
|
219 | cld |
662 | dec esi |
- | 663 | .do_restore_name2: |
|
- | 664 | call delete_last_name |
|
- | 665 | .copy_dir_entry_continue: |
|
- | 666 | add edx, 304 |
|
- | 667 | jmp .copy_dir_entry_loop |
|
- | 668 | .copy_dir_entry_done: |
|
- | 669 | ; return to previous directory |
|
- | 670 | ; pop item from directory stack |
|
- | 671 | mov ecx, [copy_dir_stack_ptr] |
|
- | 672 | cmp ecx, copy_dir_stack |
|
- | 673 | jbe .done |
|
- | 674 | sub ecx, 4 |
|
- | 675 | mov [copy_dir_stack_ptr], ecx |
|
220 | mov byte [esi+1], 0 |
676 | mov ebp, [ecx] |
- | 677 | ; restore prev directory name |
|
- | 678 | mov esi, execdata |
|
- | 679 | call delete_last_name_from_end |
|
- | 680 | mov esi, CopyDestEditBuf+12 |
|
- | 681 | call delete_last_name_from_end |
|
221 | jmp .return_from_recursion |
682 | jmp .return_from_recursion |
222 | .done: |
683 | .done: |
223 | .cancel: |
684 | .cancel: |
224 | mov [dirinfo.first], 0 ; do not destroys flags |
685 | mov [dirinfo.first], 0 ; do not destroys flags |
225 | popad |
686 | popad |
226 | ret=> |
687 | ret |
- | 688 | ||
- | 689 | delete_last_name_from_end: |
|
- | 690 | lodsb |
|
- | 691 | test al, al |
|
- | 692 | jnz delete_last_name_from_end |
|
- | 693 | dec esi |
|
- | 694 | dec esi |
|
- | 695 | delete_last_name: |
|
- | 696 | std |
|
- | 697 | @@: |
|
- | 698 | lodsb |
|
- | 699 | cmp al, '/' |
|
- | 700 | jnz @b |
|
- | 701 | cld |
|
- | 702 | mov byte [esi+1], 0 |
|
- | 703 | ret=>=>=> |