Difference between revisions of "SysFn04/ru"

From KolibriOS wiki
Jump to navigation Jump to search
 
(One intermediate revision by one other user not shown)
Line 4: Line 4:
  
 
Параметры:
 
Параметры:
:* eax = 4 - номер функции
+
* eax = 4 - номер функции
:* ebx = [координата по оси x]*65536 + [координата по оси y]
+
* ebx = [координата по оси x]*65536 + [координата по оси y]
:* ecx = 0xXYRRGGBB, где
+
* ecx = 0xXXRRGGBB, где
::* RR, GG, BB задают цвет текста
+
:* RR, GG, BB задают цвет текста
::* X=ABnn (биты):
+
:* XX=ABFFCSSS (биты):
::::* nn задает используемый шрифт: 0=системный моноширинный,
+
::* A=1 - рисуемая строка заканчивается нулём
::::1=системный шрифт переменной ширины
+
::* B=1 - закрашивать фон (цвет = edi)
:::* A=0 - выводить esi символов, A=1 - выводить ASCIIZ-строку
+
::* FF задает шрифт и кодировку:
:::* B=1 - закрашивать фон цветом edi
+
::: 0 = 6x9  cp866
::* Y=Cnnn (биты):
+
::: 1 = 8x16 cp866
:::* C=1 перенаправить вывод в область пользователя, задано в edi
+
::: 2 = 8x16 UTF-16LE
:::* nnn - не используется в текущем виде, должно быть 0 (zero)
+
::: 3 = 8x16 UTF-8
:* edx = указатель на начало строки
+
::* C=0 - рисовать в окно, С=1 - рисовать в буфер (edi)
:* esi = для A=0 длина строки, должна быть не больше 255;
+
::* SSS = (множитель размера)-1, то-есть 0 = x1, 7 = x8
:::::для A=1 игнорируется
+
* edx = указатель на начало строки
:* edi = цвет для закраски фона, если B=1
+
* esi = для A=0 длина строки, для A=1 игнорируется
:* edi = указатель на область пользователя, если C=1
+
* edi = если B=1 - цвет для закраски фона, если C=1 - указатель на буфер
 +
 
 
Возвращаемое значение:
 
Возвращаемое значение:
:* функция не возвращает значения
+
* функция не возвращает значения
 
Замечания:
 
Замечания:
:* Первый системный шрифт считывается при загрузке из файла char.mt,
+
* Нельзя одновременно использовать B=1 и C=1, поскольку в обоих случаях используется регистр edi.
::второй - из char2.mt.
+
* Если SSS=0, шрифт может сглаживаться, в зависимости от системной настройки.
:* Оба шрифта имеют высоту 9 пикселей, ширина моноширинного шрифта
+
* Структура буфера:
::равна 6 пикселей.
+
: Xsize dd ?
:* C=1, глубина точки = 32 бита, область пользователя выглядит так:
+
: Ysize dd ?
::dword Xsize
+
: picture rb Xsize * Ysize * 4 ; 32 бита
::dword Ysize
+
 
::остаток области = Xsize * Y size * 4
+
'''Константы для регистров:'''
:* Нельзя одновременно использовать B=1 и C=1, поскольку в обоих
+
::eax - SF_DRAW_TEXT (4)
::случаях использован регистр edi для разных целей.
 
  
 
{{System_functions}}
 
{{System_functions}}
 
[[Category: SysCalls]]
 
[[Category: SysCalls]]

Latest revision as of 15:28, 12 February 2016

Функция 4 - вывести строку текста в окно


Параметры:

  • eax = 4 - номер функции
  • ebx = [координата по оси x]*65536 + [координата по оси y]
  • ecx = 0xXXRRGGBB, где
  • RR, GG, BB задают цвет текста
  • XX=ABFFCSSS (биты):
  • A=1 - рисуемая строка заканчивается нулём
  • B=1 - закрашивать фон (цвет = edi)
  • FF задает шрифт и кодировку:
0 = 6x9 cp866
1 = 8x16 cp866
2 = 8x16 UTF-16LE
3 = 8x16 UTF-8
  • C=0 - рисовать в окно, С=1 - рисовать в буфер (edi)
  • SSS = (множитель размера)-1, то-есть 0 = x1, 7 = x8
  • edx = указатель на начало строки
  • esi = для A=0 длина строки, для A=1 игнорируется
  • edi = если B=1 - цвет для закраски фона, если C=1 - указатель на буфер

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

  • функция не возвращает значения

Замечания:

  • Нельзя одновременно использовать B=1 и C=1, поскольку в обоих случаях используется регистр edi.
  • Если SSS=0, шрифт может сглаживаться, в зависимости от системной настройки.
  • Структура буфера:
Xsize dd ?
Ysize dd ?
picture rb Xsize * Ysize * 4 ; 32 бита

Константы для регистров:

eax - SF_DRAW_TEXT (4)