Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
No edit summary
Line 207: Line 207:
= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.
= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.


К зарезервированным портам можно обращаться напрямую из приложения
'''Внимание:''' Эта функция устарела и может быть удалена в следующих версиях ядра.  
командами in/out (рекомендуемый способ) и вызовом функции 43
(нерекомендуемый способ).
Параметры:
  * eax = 46 - номер функции
  * ebx = 0 - зарезервировать, 1 - освободить
  * ecx = номер начала диапазона портов
  * edx = номер конца диапазона портов (включительно)
Возвращаемое значение:
  * eax = 0 - успешно
  * eax = 1 - ошибка
Замечания:
  * В случае резервирования портов ошибкой считается выполнение
    одного из условий:
    * начальный адрес больше конечного;
    * указанный диапазон содержит некорректный номер порта
      (корректные - от 0 до 0xFFFF);
    * превышено ограничение на общее число зарезервированных областей
      - допускается максимум 255;
    * указанный диапазон пересекается с одним из
      ранее зарезервированных
  * В случае освобождения портов ошибкой считается попытка
    освобождения диапазона, который ранее не был целиком
    зарезервирован этой же функцией (с такими же значениями ecx,edx).
  * При обнаружении ошибки (в обоих случаях) никаких действий
    не производится.
  * При загрузке система резервирует за собой порты
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно).
  * При завершении потока автоматически освобождаются все
    зарезервированные им порты.


Описание функции перенесено в отдельную статью: [[SysFn46/ru|Функция 46]]


== Функция 47 - вывести число в окно. ==
== Функция 47 - вывести число в окно. ==


Параметры:
Описание функции перенесено в отдельную статью: [[SysFn47/ru|Функция 47]]
  * eax = 47 - номер функции
  * ebx = параметры преобразования числа в текст:
    * bl = 0 - ecx содержит число
    * bl = 1 - ecx содержит указатель на dword/qword-число
    * bh = 0 - отображать в десятичной системе счисления
    * bh = 1 - отображать в шестнадцатеричной системе
    * bh = 2 - отображать в двоичной системе
    * биты 16-21 = сколько цифр отображать
    * биты 22-29 зарезервированы и должны быть установлены в 0
    * бит 30 установлен = выводить qword (64-битное число);
                              при этом должно быть bl = 1
    * бит 31 установлен = не выводить ведущие нули числа
  * ecx = число (при bl=0) или указатель (при bl=1)
  * edx = [координата по оси x]*65536 + [координата по оси y]
  * esi = 0xX0RRGGBB:
    * RR, GG, BB задают цвет
    * X = ABnn (биты)
    * nn = шрифт (0/1)
    * A игнорируется
    * B=1 - закрашивать фон цветом edi
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Указанная длина не должна превосходить 60.
  * Выводится ровно указанное количество цифр. Если число мало и
    может быть записано меньшим количеством цифр, оно дополняется
    ведущими нулями; если число велико и не может быть записано
    таким количеством цифр, "лишние" ведущие цифры обрезаются.
  * Параметры шрифтов указаны в описании функции 4 (вывода текста).


== Функция 48 - стили отображения окон ==


=== Подфункция 0 - применить настройки экрана. ===
Описание функции перенесено в отдельную статью: [[SysFn48/ru|Функция 48]]
 
Параметры:
  * eax = 48 - номер функции
  * ebx = 0 - номер подфункции
  * ecx = 0 - зарезервировано
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Функция перерисовывает экран после изменения параметров
    подфункциями 1 и 2.
  * Вызов функции без предшествующих вызовов указанных подфункций
    игнорируется.
  * Вызов функции с ненулевым ecx игнорируется.
 
 
=== Подфункция 1 - установить стиль кнопок. ===
 
Параметры:
  * eax = 48 - номер функции
  * ebx = 1 - номер подфункции
  * ecx = тип кнопок:
    * 0 = плоские
    * 1 = объёмные
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * После вызова описываемой функции следует перерисовать экран
    подфункцией 0.
  * Тип кнопок влияет только на их прорисовку функцией 8.
 
 
=== Подфункция 2 - установить стандартные цвета окон. ===
 
Параметры:
  * eax = 48 - номер функции
  * ebx = 2 - номер подфункции
  * ecx = указатель на таблицу цветов
  * edx = размер таблицы цветов
    (должен быть 40 байт для будущей совместимости)
Формат таблицы цветов указан в описании подфункции 3.
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * После вызова описываемой функции следует перерисовать экран
    подфункцией 0.
  * Таблица стандартных цветов влияет только на приложения,
    которые эту таблицу явным образом получают (подфункцией 3) и
    используют (указывая цвета из неё при вызовах функций рисования).
  * Таблица стандартных цветов входит в скин и устанавливается заново
    при установке скина (подфункции 8).
  * Таблицу цветов можно просматривать/изменять интерактивно с помощью
    приложения desktop.
 
 
=== Подфункция 3 - получить стандартные цвета окон. ===
 
Параметры:
  * eax = 48 - номер функции
  * ebx = 3 - номер подфункции
  * ecx = указатель на буфер размером edx байт,
    куда будет записана таблица
  * edx = размер таблицы цветов
    (должен быть 40 байт для будущей совместимости)
Возвращаемое значение:
  * функция не возвращает значения
Формат таблицы цветов: каждый элемент -
dword-значение цвета 0x00RRGGBB
  * +0: dword: frames - цвет рамки
  * +4: dword: grab - цвет заголовка
  * +8: dword: grab_button - цвет кнопки на полосе заголовка
  * +12 = +0xC: dword: grab_button_text - цвет текста на кнопке
    на полосе заголовка
  * +16 = +0x10: dword: grab_text - цвет текста на заголовке
  * +20 = +0x14: dword: work - цвет рабочей области
  * +24 = +0x18: dword: work_button - цвет кнопки в рабочей области
  * +28 = +0x1C: dword: work_button_text - цвет текста на кнопке
    в рабочей области
  * +32 = +0x20: dword: work_text - цвет текста в рабочей области
  * +36 = +0x24: dword: work_graph - цвет графики в рабочей области
Замечания:
  * Структура таблицы цветов описана в стандартном включаемом файле
    macros.inc под названием system_colors; например, можно писать:
        sc      system_colors          ; объявление переменной
        ...                            ; где-то надо вызвать
                                        ; описываемую функцию с ecx=sc
        mov    ecx, [sc.work_button_text]      ; читаем цвет текста
                                        ; на кнопке в рабочей области
  * Использование/неиспользование этих цветов - дело исключительно
    самой программы. Для использования нужно просто при вызове функций
    рисования указывать цвет, взятый из этой таблицы.
  * При изменении таблицы стандартных цветов (подфункцией 2 с
    последующим применением изменений подфункцией 0 или
    при установке скина подфункцией 8) всем окнам посылается сообщение
    о необходимости перерисовки (событие с кодом 1).
  * Стандартные цвета можно просматривать/изменять интерактивно
    с помощью приложения desktop.
 
 
=== Подфункция 4 - получить высоту скина. ===
 
Параметры:
  * eax = 48 - номер функции
  * ebx = 4 - номер подфункции
Возвращаемое значение:
  * eax = высота скина
Замечания:
  * Высотой скина по определению считается высота заголовка окон,
    использующих скин.
  * Смотри также общую структуру окна в описании функции 0.
 
 
=== Подфункция 5 - получить рабочую область экрана. ===
 
Параметры:
  * eax = 48 - номер функции
  * ebx = 5 - номер подфункции
Возвращаемое значение:
  * eax = [left]*65536 + [right]
  * ebx = [top]*65536 + [bottom]
Замечания:
  * Рабочая область экрана определяет положение и координаты
    максимизированного окна.
  * Рабочая область экрана при нормальной работе есть весь экран
    за вычетом панели (@panel).
  * (left,top) - координаты левого верхнего угла,
    (right,bottom) - координаты правого нижнего.
    Таким образом, размер рабочей области по оси x определяется
    формулой right-left+1, по оси y - формулой bottom-right+1.
  * Смотри также функцию 14,
    позволяющую определить размеры всего экрана.
  * Есть парная функция установки рабочей области - подфункция 6.
 
 
=== Подфункция 6 - установить рабочую область экрана. ===
 
Параметры:
  * eax = 48 - номер функции
  * ebx = 6 - номер подфункции
  * ecx = [left]*65536 + [right]
  * edx = [top]*65536 + [bottom]
Возвращаемое значение: