Pathoswithin wrote:В начале буфера указывается размер буфера, а не символа.
Я имел ввиду, по отношенмю к моему примеру. Но даже для буфера. Зачем, если функция, сама может вычислить размер буфера? Благо, в регистрах, уже всё есть.
Pathoswithin wrote:Вертикальный размер реально не используется, но горизонтальный по любому нужен.
Тогда зачем, нужны лишние 4 байта?
Pathoswithin wrote:Такой стандарт придумал Марио,
Ясно.
Pathoswithin wrote:а на счёт документации — предлагай, как лучше.
Должен уточнить; я говорил, не про всю документацию, а про документацию на 4-ую функцию, хотя где-то ещё, было что-то. Придлогать ничего не собирался, просто выразил свои эмоции.
Но, коли на то пошло, то, хотя бы так:
Code: Select all
======================================================================
============== Функция 4 - вывести строку текста. ====================
======================================================================
Особенность:
* может выводить строку текста в окно.
* может выводить строку текста в область пользователя.
Параметры:
* eax = 4 - номер функции
* ebx = [координата по оси x]*65536 + [координата по оси y]
* ecx = 0xXYRRGGBB, где
* RR, GG, BB задают цвет текста
* X=ABFF (биты):
* A=1 - выводить ASCIIZ-строку
* B=1 - закрашивать фон цветом edi
* FF задает шрифт и кодировку:
0 = 6x9 cp866
2 = 8x16 UTF-16LE
3 = 8x16 UTF-8
* Y=CDDD (биты):
* C=1 перенаправить вывод в область пользователя, задано в edi
* DDD = (множитель размера)-1, то-есть 0 = x1, 7 = x8
* edx = указатель на начало строки
* esi = для A=0 длина строки, для A=1 игнорируется
* edi = если B=1, цвет для закраски фона,
если C=1, указатель на область пользователя
Возвращаемое значение:
* функция не возвращает значения.
Формат области пользователя:
* dword: со значением ширины области пользователя.
* dword: со значением высоты области пользователя.
* field: остаток области, где будет храниться строка.
Замечания:
* Нельзя одновременно использовать B=1 и C=1,
поскольку в обоих случаях используется регистр edi.
* при С=1 (вывод в область пользователя):
* координаты в регистре ebx, являются координатами
внутри пользовательской области.
* размер цвета пикселя = 32 бита.
* область field - берётся из расчёта:
field=width*height*4
* вывод области пользователя в окно, можно сделать функцией 65,
указав поле field, в качестве отправной точки.
* в область пользователя, записываются только пиксели символов.
======================================================================
IMHO так лучше. Всё ясно и понятно.