Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
(Добавлено упоминание подфункции 31 функции 68. Добавлено нормальное название страницы.)
 
(94 intermediate revisions by 10 users not shown)
Line 1: Line 1:
= СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.1.0 =
{{DISPLAYTITLE:API ядра}}
 
''' СИСТЕМНЫЕ ФУНКЦИИ KolibriOS'''


Номер функции помещается в регистр eax.
Номер функции помещается в регистр eax.
Line 5: Line 7:
Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.
Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.


== Перечень функций ==


== Функция 0 - определить и нарисовать окно. ==
[[SysFn00/ru | Функция 0]] - определить и нарисовать окно.
 
Определяет окно приложения. Рисует рамку окна, заголовок и рабочую
область. Для окон со скином определяет стандартные кнопки закрытия и
минимизации.
 
Описание функции перенесено в отдельную статью: [[SysFn00 | Функция 0]]
 
== Функция 1 - поставить точку в окне. ==
 
Описание функции перенесено в отдельную статью: [[SysFn01 | Функция 1]]
 
== Функция 2 - получить код нажатой клавиши. ==
 
Извлекает из буфера код нажатой клавиши.
 
Описание функции перенесено в отдельную статью: [[SysFn02 | Функция 2]]
 
== Функция 3 - получить системное время. ==
 
Описание функции перенесено в отдельную статью: [[SysFn03 | Функция 3]]
 
== Функция 4 - вывести строку текста в окно. ==
 
Описание функции перенесено в отдельную статью: [[SysFn04 | Функция 4]]
 
== Функция 5 - пауза. ==
 
Задерживает выполнение программы на заданное время.
 
Описание функции перенесено в отдельную статью: [[SysFn05 | Функция 5]]
 
== Функция 6 - прочитать файл с рамдиска. ==
 
Описание функции перенесено в отдельную статью: [[SysFn06 | Функция 6]]
 
== Функция 7 - вывести изображение в окно. ==
 
Описание функции перенесено в отдельную статью: [[SysFn07 | Функция 7]]
 
== Функция 8 - определить/удалить кнопку. ==
 
Описание функции перенесено в отдельную статью: [[SysFn08 | Функция 8]]
 
== Функция 9 - информация о потоке выполнения. ==
 
Описание функции перенесено в отдельную статью: [[SysFn09 | Функция 9]]
 
== Функция 10 - ожидать события. ==
 
Если очередь сообщений пуста, то ждет появления сообщения в очереди. В таком состоянии поток не получает процессорного времени. Затем считывает сообщение из очереди.
 
Описание функции перенесено в отдельную статью: [[SysFn10 | Функция 10]]
 
== Функция 11 - проверить, есть ли событие, без ожидания. ==
 
Если в очереди сообщений есть какое-то событие, то считывает и
возвращает его. Если очередь пуста, возвращает нуль.
 
Описание функции перенесено в отдельную статью:  [[SysFn11|Функция 11]]
 
== Функция 12 - начать/закончить перерисовку окна. ==
 
Подфункция 1 - начать перерисовку окна.
Подфункция 2 - закончить перерисовку окна.
 
Перенесены в отдельную статью: [[SysFn12|Функция 12]]
 
== Функция 13 - нарисовать прямоугольник в окне. ==
 
Функция перенесена в статью [[SysFn13|Функция 13]]
 
== Функция 14 - получить размеры экрана. ==
 
Описание функции перенесено в отдельную статью: [[SysFn14|Функция 14]]
 
== Функция 15. ==
 
Описание функции перенесено в отдельную статью: [[SysFn15/ru | Функция 15]]
 
== Функция 16 - сохранить рамдиск на дискету. ==
 
 
Описание функции перенесено в отдельную статью: [[SysFn16/ru|Функция 16]]
 
== Функция 17 - получить код нажатой кнопки. ==
 
Описание функции перенесено в отдельную статью: [[SysFn17/ru|Функция 17]]
 
== Функция 18 == 
 
Описание функции перенесено в отдельную статью: [[SysFn18/ru|Функция 18]]
 
== Функция 20 - интерфейс MIDI. ==
 
Описание функции перенесено в отдельную статью: [[SysFn20/ru|Функция 20]]
 
== Функция 22 - установить системную дату/время. ==
 
Параметры:
  * eax = 22 - номер функции
  * ebx = 0 - установить время
    * ecx = 0x00SSMMHH - время в двоично-десятичном коде (BCD):
    * HH=час 00..23
    * MM=минута 00..59
    * SS=секунда 00..59
  * ebx = 1 - установить дату
    * ecx = 0x00DDMMYY - дата в двоично-десятичном коде (BCD):
    * DD=день 01..31
    * MM=месяц 01..12
    * YY=год 00..99
  * ebx = 2 - установить день недели
    * ecx = 1 для воскресенья, ..., 7 для субботы
  * ebx = 3 - установить будильник
    * ecx = 0x00SSMMHH
Возвращаемое значение:
  * eax = 0 - успешно
  * eax = 1 - параметр задан неверно
  * eax = 2 - CMOS-батарейки разрядились
Замечания:
  * Ценность установки дня недели представляется сомнительной,
    поскольку он мало где используется
    (день недели можно рассчитать по дате).
  * Будильник можно установить на срабатывание в заданное время
    каждые сутки. При этом отключить его существующими системными
    функциями нельзя.
  * Срабатывание будильника заключается в генерации IRQ8.
  * Вообще-то CMOS поддерживает для будильника установку значения
    0xFF в качестве одного из параметров и означает это, что
    соответствующий параметр игнорируется. Но в текущей реализации
    это не пройдёт (вернётся значение 1).
  * Будильник - глобальный системный ресурс; установка будильника
    автоматически отменяет предыдущую установку. Впрочем, на данный
    момент ни одна программа его не использует.
 
 
== Функция 23 - ожидать события с таймаутом. ==
 
Если очередь сообщений пуста, ждёт появления сообщения в очереди,
но не более указанного времени. Затем считывает сообщение из очереди.


Параметры:
[[SysFn01/ru | Функция 1]] - поставить точку в окне.
  * eax = 23 - номер функции
  * ebx = таймаут (в сотых долях секунды)
Возвращаемое значение:
  * eax = 0 - очередь сообщений пуста
  * иначе eax = событие (смотри список событий)
Замечания:
  * Учитываются только те события, которые входят в маску,
    устанавливаемую функцией 40. По умолчанию это события
    перерисовки, нажатия на клавиши и на кнопки.
  * Для проверки, есть ли сообщение в очереди, используйте функцию 11.
    Чтобы ждать сколь угодно долго, используйте функцию 10.
  * Передача ebx=0 приводит к моментальному возвращению eax=0.
  * При текущей реализации произойдёт немедленный возврат из функции
    с eax=0, если сложение ebx с текущим значением счётчика времени
    вызовет 32-битное переполнение.


[[SysFn02/ru | Функция 2]] - получить код нажатой клавиши.


=== Подфункция 1 - начать проигрывать CD-audio. ===
[[SysFn03/ru | Функция 3]] - получить системное время.


Параметры:
[[SysFn04/ru | Функция 4]] - вывести строку текста в окно.
  * eax = 24 - номер функции
  * ebx = 1 - номер подфункции
  * ecx = 0x00FRSSMM, где
    * MM = начальная минута
    * SS = начальная секунда
    * FR = начальный фрейм
Возвращаемое значение:
  * eax = 0 - успешно
  * eax = 1 - не определена база CD
Замечания:
  * Предварительно нужно определить базовый порт CD вызовом
    подфункции 3 функции 21.
  * В секунде 75 фреймов, в минуте 60 секунд.
  * Функция асинхронна (возвращает управление, когда началось
    проигрывание).


[[SysFn05/ru | Функция 5]] - пауза.


=== Подфункция 2 - получить информацию о дорожках. ===
[[SysFn07/ru | Функция 7]] - вывести изображение в окно.


Параметры:
[[SysFn08/ru | Функция 8]] - определить/удалить кнопку.
  * eax = 24 - номер функции
  * ebx = 2 - номер подфункции
  * ecx = указатель на буфер для таблицы
    (максимум 8*64h+4 байт=100 дорожек)
Возвращаемое значение:
  * eax = 0 - успешно
  * eax = 1 - не определена база CD
Замечания:
  * Формат таблицы с информацией о дорожках такой же, как и для
    ATAPI-CD команды 43h (READ TOC), обычной таблицы (подкоманда 00h).
    Адреса возвращаются в формате MSF.
  * Предварительно нужно определить базовый порт CD вызовом
    подфункции 3 функции 21.
  * Функция возвращает информацию только о не более чем 100
    первых дорожках. В большинстве случаев этого достаточно.


[[SysFn09/ru | Функция 9]] - информация о потоке выполнения.


=== Подфункция 3 - остановить проигрываемое CD-audio. ===
[[SysFn10/ru | Функция 10]] - ожидать события.


Параметры:
[[SysFn11/ru|Функция 11]] - проверить, есть ли событие, без ожидания.
  * eax = 24 - номер функции
  * ebx = 1 - номер подфункции
Возвращаемое значение:
  * eax = 0 - успешно