ХАНДЫФАР

Функция FindAllFilesEx выполняет поиск всех файлов, соответствующего указанному шаблону имени, и сохраняет его имя в предоставленный буфер. Буфер должен быть достаточно большим, чтобы вместить все имена найденных файлов. Разделителем имён в буфере является 7Fh. При выводе имени файла из буфера необходимо проверять символ на 7Fh. Функция FindAllFilesEx автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку шаблона имени файла (например, "*.txt").
  2. Указатель на буфер, куда будет сохранено имя найденного файла.
  3. Атрибуты файла, которые нужно учитывать при поиске (например, скрытые, системные и т.д.).

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____pattern db "*.obj", 0
  7. ____buffer__db 128 dup(0)
  8. data ends
  9. code segment public
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc
  12. ____include Handymac.inc
  13. ____main proc
  14. ________call____SetDataSegment
  15. ________push____0
  16. ________pushs___es:[buffer]
  17. ________pushs___ds:[pattern]
  18. ________call____FindAllFilesEx
  19. ________lea_____si, ds:[buffer]
  20. ____PrintFilesLoop:
  21. ________lodsb
  22. ________test____al, al
  23. ________jz______Done
  24. ________cmp_____al, 7Fh
  25. ________je______NewLine
  26. ________call____PutChar
  27. ________jmp_____PrintFilesLoop
  28. ____NewLine:
  29. ________call____PrintNewLine
  30. ________jmp_____PrintFilesLoop
  31. ____Done:
  32. ________push____0
  33. ________call____ExitProcessEx
  34. ____main endp
  35. code ends
  36. end main
Функция FindAllFilesEx выполняет поиск всех файлов, соответствующего указанному шаблону имени, и сохраняет его имя в предоставленный буфер. Буфер должен быть достаточно большим, чтобы вместить все имена найденных файлов. Разделителем имён в буфере является 7Fh. При выводе имени файла из буфера необходимо проверять символ на 7Fh. Функция FindAllFilesEx автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку шаблона имени файла (например, "*.txt").
  2. Указатель на буфер, куда будет сохранено имя найденного файла.
  3. Атрибуты файла, которые нужно учитывать при поиске (например, скрытые, системные и т.д.).

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____pattern db "*.obj", 0
  7. ____buffer__db 128 dup(0)
  8. data ends
  9. code segment public
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc_________; Подключаем файл с функциями
  12. ____include Handymac.inc_________; Подключаем файл с макросами
  13. ____main proc
  14. ________call____SetDataSegment___; Вызываем процедуру SetDataSegment
  15. ________push____0________________; 3-й: Ложим на вершину стека аттрибуты
  16. ________pushs___es:[buffer]______; 2-й: Ложим на вершину стека адрес buffer
  17. ________pushs___ds:[pattern]_____; 1-й: Ложим на вершину стека адрес pattern
  18. ________call____FindAllFilesEx___; Вызываем процедуру FindAllFilesEx(pattern, buffer, 0) := AX и CF
  19. ________lea_____si, ds:[buffer]__; Загружаем адрес переменной buffer в регистр источник ds:si
  20. ____PrintFilesLoop:
  21. ________lodsb____________________; Загружаем байт по адресу ds:si в регистр al
  22. ________test____al, al___________; Проверяем al на 0
  23. ________jz______Done_____________; Если ZF=1, то прыгаем на метку Done
  24. ________cmp_____al, 7Fh__________; Проверяем al на 7Fh
  25. ________je______NewLine__________; Если ZF=1, то прыгаем на метку NewLine
  26. ________call____PutChar__________; Вызываем процедуру PrintChar(al)
  27. ________jmp_____PrintFilesLoop___; Выполняем цикл пока ZF не равен 0 или AL не равен 7F
  28. ____NewLine:
  29. ________call____PrintNewLine_____; Вызываем процедуру PrintNewLine
  30. ________jmp_____PrintFilesLoop___; Выполняем безусловный переход на метку PrintFilesLoop
  31. ____Done:
  32. ________push____0________________; Ложим на вершину стека байтовое значение кода возврата
  33. ________call____ExitProcessEx____; Вызываем процедуру ExitProcess(0)
  34. ____main endp
  35. code ends
  36. end main
Made on
Tilda