ХАНДЫФАР

Функция StringSplitEx разбивает строку на токены, используя разделители, и сохраняет их в подготовленном пользователем буфере. Функция StringSplitEx автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку, завершающуюся (\0) или 0.
  2. Указатель на строку разделителей, завершающуюся (\0) или 0.
  3. Указатель на подготовленный пользователем буфер для сохранения токенов.

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

  • CX: Количество токенов, сохранённых в буфере. Если строка или буфер недействительны, возвращается 0.

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

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

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

  • Токены сохраняются в подготовленном буфере, каждый токен завершается (\0) или 0.

Вспомогательная функция PrintSplitString выводит разделённую строку на экран. Если функция PrintSplitString третьим параметром получает значение FALSE, то она выводит токены, разделённые пробелом, если третьим параметром указано значение TRUE, то она выводит каждый токен с новой строки. Эта функция автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку, заканчивающуюся (\0) или 0.
  2. Количество токенов.
  3. Выводить токен через пробел или с каждой новой строки TRUE или FALSE.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string db "Весенний ветер, лаская "
  7. ___________db "листву, шепчет тайны, "
  8. ___________db "даря аромат цветущих "
  9. ___________db "садов.\0"
  10. ____buffer db 80 dup(0)
  11. ____delims db " ,.\0"
  12. data ends
  13. code segment public
  14. ____assume _ds:data, cs:code
  15. ____include Handyfar.inc
  16. ____include Handymac.inc
  17. ____main proc
  18. ________call____SetDataSegment
  19. ________pushs___ds:[buffer]
  20. ________pushs___es:[delims]
  21. ________pushs___ds:[string]
  22. ________call____StringSplitEx
  23. ________push____FALSE
  24. ________push____cx
  25. ________pushs___ds:[buffer]
  26. ________call____PrintSplitString
  27. ________push____0
  28. ________call____ExitProcessEx
  29. ____main endp
  30. code ends
  31. end main
Функция StringSplitEx разбивает строку на токены, используя разделители, и сохраняет их в подготовленном пользователем буфере. Функция StringSplitEx автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку, завершающуюся (\0) или 0.
  2. Указатель на строку разделителей, завершающуюся (\0) или 0.
  3. Указатель на подготовленный пользователем буфер для сохранения токенов.

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

  • CX: Количество токенов, сохранённых в буфере. Если строка или буфер недействительны, возвращается 0.

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

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

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

  • Токены сохраняются в подготовленном буфере, каждый токен завершается (\0) или 0.

Вспомогательная функция PrintSplitString выводит разделённую строку на экран. Если функция PrintSplitString третьим параметром получает значение FALSE, то она выводит токены, разделённые пробелом, если третьим параметром указано значение TRUE, то она выводит каждый токен с новой строки. Эта функция автоматически выравнивает стек на 6 байт.

Параметры:

  1. Указатель на строку, заканчивающуюся (\0) или 0.
  2. Количество токенов.
  3. Выводить токен через пробел или с каждой новой строки TRUE или FALSE.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____string db "Весенний ветер, лаская листву, шепчет тайны, даря аромат цветущих садов.\0"
  7. ____buffer db 80 dup(0)
  8. ____delims db " ,.\0"
  9. data ends
  10. code segment public
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc__________; Подключаем файл с функциями
  13. ____include Handymac.inc__________; Подключаем файл с макросами
  14. ____main proc
  15. ________call____SetDataSegment____; Вызываем процедуру SetDataSegment
  16. ________pushs___ds:[buffer]_______; 3-й: Ложим на вершину стека адрес переменной buffer
  17. ________pushs___es:[delims]_______; 2-й: Ложим на вершину стека адрес переменной delims
  18. ________pushs___ds:[string]_______; 1-й: Ложим на вершину стека адрес переменной string
  19. ________call____StringSplitEx_____; Вызываем процедуру StringSplitEx(string, delims, buffer) := CX
  20. ________push____FALSE_____________; 3-й: Значение FALSE выводит строку через пробел
  21. ________push____cx________________; 2-й: Ложим на вершину стека количество токенов
  22. ________pushs___ds:[buffer]_______; 1-й: Ложим на вершину стека адрес переменной buffer
  23. ________call____PrintSplitString__; Вызываем процедуру PrintSplitString(buffer, cx, FALSE)
  24. ________push____0_________________; Ложим на вершину стека байтовое значение кода возврата
  25. ________call____ExitProcessEx_____; Вызываем процедуру ExitProcess(0)
  26. ____main endp
  27. code ends
  28. end main
Made on
Tilda