ХАНДЫФАР

Функция RenameFileEx переименовывает файл. Функция RenameFileEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на строку с текущим именем файла.
  2. Указатель на строку с новым именем файла.

Возвращаемое значение:

  • Если CF = 0: Файл успешно переименован.
  • Если CF = 1: AX содержит код ошибки.

Состояние флагов:

  • Функция влияет на все флаги.

Особенности:

  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____fOldName db "test.txt", 0
  7. ____fNewName db "main.txt", 0
  8. ____rSuccess db "Файл был успешно "
  9. _____________db "переименован в '%s'.\0"
  10. ____rError___db "Произошла ошибка при "
  11. _____________db "переименовании '%s' в "
  12. _____________db "'%s'. Код ошибки: %d\0"
  13. data ends
  14. code segment public
  15. ____assume _ds:data, cs:code
  16. ____include Handyfar.inc
  17. ____include Handymac.inc
  18. ____main proc
  19. ________call____SetDataSegment
  20. ________pushs___es:[fNewName]
  21. ________pushs___ds:[fOldName]
  22. ________call____RenameFileEx
  23. ________jnc_____@NoRenameFileError
  24. ________push____ax
  25. ________pushs___ds:[fNewName]
  26. ________pushs___ds:[fOldName]
  27. ________leaax___ds:[rError]
  28. ________call____PrintFormatString
  29. ________add_____sp, 6
  30. ________jmp_____@Done
  31. ____@NoRenameFileError:
  32. ________pushs___ds:[fNewName]
  33. ________leaax___ds:[rSuccess]
  34. ________call____PrintFormatString
  35. ________add_____sp, 2
  36. ____@Done:
  37. ________push____0
  38. ________call____ExitProcessEx
  39. ____main endp
  40. code ends
  41. end main
Функция RenameFileEx переименовывает файл. Функция RenameFileEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на строку с текущим именем файла.
  2. Указатель на строку с новым именем файла.

Возвращаемое значение:

  • Если CF = 0: Файл успешно переименован.
  • Если CF = 1: AX содержит код ошибки.

Состояние флагов:

  • Функция влияет на все флаги.

Особенности:

  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____fOldName db "test.txt", 0
  7. ____fNewName db "main.txt", 0
  8. ____rSuccess db "Файл был успешно переименован в '%s'.\0"
  9. ____rError___db "Произошла ошибка при переименовании '%s' в '%s'. Код ошибки: %d\0"
  10. data ends
  11. code segment public
  12. ____assume _ds:data, cs:code
  13. ____include Handyfar.inc____________; Подключаем файл с функциями
  14. ____include Handymac.inc____________; Подключаем файл с макросами
  15. ____main proc
  16. ________call____SetDataSegment______; Вызываем процедуру SetDataSegment
  17. ________pushs___es:[fNewName]_______; 2-й: Ложим на вершину стека адрес переменной fNewName
  18. ________pushs___ds:[fOldName]_______; 1-й: Ложим на вершину стека адрес переменной fOldName
  19. ________call____RenameFileEx________; Вызываем процедуру RenameFileEx(fOldName, fNewName) := AX и CF
  20. ________jnc_____@NoRenameFileError__; Если CF=0, то прыгаем на метку @NoRenameFileError
  21. ________push____ax__________________; 4-й: Ложим на вершину стека ax (код ошибки)
  22. ________pushs___ds:[fNewName]_______; 3-й: Ложим на вершину стека адрес переменной fNewName
  23. ________pushs___ds:[fOldName]_______; 2-й: Ложим на вершину стека адрес переменной fOldName
  24. ________leaax___ds:[rError]_________; 1-й: Загружаем адрес строки формата rError в регистр ds:ax
  25. ________call____PrintFormatString___; Вызываем процедуру PrintFormatString(ax:rError, ...)
  26. ________add_____sp, 6_______________; Выравниваем стек
  27. ________jmp_____@Done_______________; Выполняем безусловный переход на метку @Done
  28. ____@NoRenameFileError:
  29. ________pushs___ds:[fNewName]_______; 2-й: Ложим на вершину стека адрес переменной fNewName
  30. ________leaax___ds:[rSuccess]_______; 1-й: Загружаем адрес строки формата rSuccess в регистр ds:ax
  31. ________call____PrintFormatString___; Вызываем процедуру PrintFormatString(ax:rSuccess, fNewName)
  32. ________add_____sp, 2_______________; Выравниваем стек
  33. ____@Done:
  34. ________push____0___________________; Ложим на вершину стека байтовое значение кода возврата
  35. ________call____ExitProcessEx_______; Вызываем процедуру ExitProcess(0)
  36. ____main endp
  37. code ends
  38. end main
Made on
Tilda