Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
(Функция 2 - перенесена)
(Добавлено упоминание подфункции 31 функции 68. Добавлено нормальное название страницы.)
 
(116 intermediate revisions by 11 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 - получить системное время. ==
 
Параметры:
  * eax = 3 - номер функции
Возвращаемое значение:
  * eax = 0x00SSMMHH, где HH:MM:SS = часы:минуты:секунды
  * каждый элемент возвращается как BCD-число, например,
    для времени 23:59:59 результат будет 0x00595923
Замечания:
  * Смотри также подфункцию 9 функции 26 - получение времени
    с момента запуска системы; она во многих случаях удобнее,
    поскольку возвращает просто DWORD-значение счетчика времени.
  * Системное время можно установить функцией 22.
 
 
== Функция 4 - вывести строку текста в окно. ==
 
Параметры:
  * eax = 4 - номер функции
  * ebx = [координата по оси x]*65536 + [координата по оси y]
  * ecx = 0xX0RRGGBB, где
    * RR, GG, BB задают цвет текста
    * X=ABnn (биты):
    * nn задает используемый шрифт: 0=системный моноширинный,
      1=системный шрифт переменной ширины
    * A=0 - выводить esi символов, A=1 - выводить ASCIIZ-строку
    * B=1 - закрашивать фон цветом edi
  * edx = указатель на начало строки
  * esi = для A=0 длина строки, должна быть не больше 255;
          для A=1 игнорируется
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Первый системный шрифт считывается при загрузке из файла char.mt,
    второй - из char2.mt.
  * Оба шрифта имеют высоту 9 пикселей, ширина моноширинного шрифта
    равна 6 пикселей.
 
 
== Функция 5 - пауза. ==
 
Задерживает выполнение программы на заданное время.
Параметры:
  * eax = 5 - номер функции
  * ebx = время в сотых долях секунды
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Передача ebx=0 не передает управление следующему процессу и
    вообще не производит никаких действий. Если действительно
    требуется передать управление следующему процессу
    (закончить текущий квант времени), используйте подфункцию 1
    функции 68.
  * При текущей реализации произойдет немедленный возврат из функции,
    если сложение ebx с текущим значением счетчика времени вызовет
    32-битное переполнение.
 
 
== Функция 6 - прочитать файл с рамдиска. ==
 
Параметры:
  * eax = 6 - номер функции
  * ebx = указатель на имя файла
  * ecx = номер стартового блока, считая с 1;
    ecx=0 - читать с начала файла (то же самое, что и ecx=1)
  * edx = число блоков для чтения;
    edx=0 - читать один блок (то же самое, что и edx=1)
  * esi = указатель на область памяти, куда будут записаны данные
Возвращаемое значение:
  * eax = длина файла в байтах, если файл успешно прочитан
  * eax = -1, если файл не найден
Замечания:
  * Данная функция является устаревшей; функция 70
    позволяет выполнять те же действия с расширенными возможностями.
  * Блок = 512 байт.
  * Для чтения всего файла можно указать заведомо большое значение
    в edx, например, edx = -1; но в этом случае будьте готовы к тому,
    что программа "упадет", если файл окажется слишком большим
    и "не влезет" в память программы.
  * Имя файла должно быть либо в формате 8+3 символов
    (первые 8 символов - собственно имя, последние 3 - расширение,
    короткие имена и расширения дополняются пробелами),
    либо в формате 8.3 символов "FILE.EXT"/"FILE.EX "
    (имя не более 8 символов, точка, расширение 3 символа,
    дополненное при необходимости пробелами).
    Имя файла должно быть записано заглавными буквами.
    Завершающий символ с кодом 0 не нужен (не ASCIIZ-строка).
  * Эта функция не поддерживает папки на рамдиске.
 
 
== Функция 7 - вывести изображение в окно. ==
 
Параметры:
  * eax = 7 - номер функции
  * ebx = указатель на изображение в формате BBGGRRBBGGRR...
  * ecx = [размер по оси x]*65536 + [размер по оси y]
  * edx = [координата по оси x]*65536 + [координата по оси y]
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Координаты изображения - это координаты верхнего левого угла
    изображения относительно окна.
  * Размер изображения в байтах есть 3*xsize*ysize.
 
 
== Функция 8 - определить/удалить кнопку. ==
 
Параметры для определения кнопки:
  * eax = 8 - номер функции
  * ebx = [координата по оси x]*65536 + [размер по оси x]
  * ecx = [координата по оси y]*65536 + [размер по оси y]
  * edx = 0xXYnnnnnn, где:
    * nnnnnn = идентификатор кнопки
    * старший (31-й) бит edx сброшен
    * если 30-й бит edx установлен - не прорисовывать кнопку
    * если 29-й бит edx установлен - не рисовать рамку
      при нажатии на кнопку
  * esi = 0x00RRGGBB - цвет кнопки
Параметры для удаления кнопки:
  * eax = 8 - номер функции
  * edx = 0x80nnnnnn, где nnnnnn - идентификатор кнопки
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Размеры кнопки должны быть больше 0 и меньше 0x8000.
  * Для окон со скином при определении окна (вызове 0-й функции)
    создаются две стандартные кнопки - закрытия окна
    с идентификатором 1 и минимизации окна с идентификатором 0xffff.
  * Создание двух кнопок с одинаковыми идентификаторами
    вполне допустимо.
  * Кнопка с идентификатором 0xffff при нажатии интерпретируется
    системой как кнопка минимизации, система обрабатывает такое
    нажатие самостоятельно, не обращаясь к приложению.
    В остальном это обычная кнопка.
  * Общее количество кнопок для всех приложений ограничено
    числом 4095.
 
 
== Функция 9 - информация о потоке выполнения. ==
 
Параметры:
  * eax = 9 - номер функции
  * ebx = указатель на буфер размера 1 Кб
  * ecx = номер слота потока
    ecx = -1 - получить информацию о текущем потоке
Возвращаемое значение:
  * eax = максимальный номер слота потока
  * буфер, на который указывает ebx, содержит следующую информацию:
    * +0: dword: использование процессора (сколько тактов в секунду
      уходит на исполнение именно этого потока)
    * +4: word: позиция окна потока в оконном стэке
    * +6: word: (не имеет отношения к запрошенному потоку)
      номер слота потока, окно которого находится в оконном стэке
      в позиции ecx
    * +8: word: зарезервировано
    * +10 = +0xA: 11 байт: имя процесса
      (имя соответствующего исполняемого файла в формате 8+3)
    * +21 = +0x15: byte: зарезервировано, этот байт не изменяется
    * +22 = +0x16: dword: адрес процесса в памяти
    * +26 = +0x1A: dword: размер используемой памяти - 1
    * +30 = +0x1E: dword: идентификатор (PID/TID)
    * +34 = +0x22: dword: координата окна потока по оси x
    * +38 = +0x26: dword: координата окна потока по оси y
    * +42 = +0x2A: dword: размер окна потока по оси x
    * +46 = +0x2E: dword: размер окна потока по оси y
    * +50 = +0x32: word: состояние слота потока:
      * 0 = поток выполняется
      * 1 = поток приостановлен
      * 2 = поток приостановлен в момент ожидания события
      * 3 = поток завершается в результате вызова функции -1 или
        насильственно как следствие вызова подфункции 2 функции 18
        или завершения работы системы
      * 4 = поток завершается в результате исключения
      * 5 = поток ожидает события
      * 9 = запрошенный слот свободен, вся остальная информация о
        слоте не имеет смысла
    * +52 = +0x34: word: зарезервировано, это слово не изменяется
    * +54 = +0x36: dword: координата начала клиентской области
                          по оси x
    * +58 = +0x3A: dword: координата начала клиентской области
                          по оси y
    * +62 = +0x3E: dword: ширина клиентской области
    * +66 = +0x42: dword: высота клиентской области
    * +70 = +0x46: byte: состояние окна - битовое поле
      * бит 0 (маска 1): окно максимизировано
      * бит 1 (маска 2): окно минимизировано в панель задач
      * бит 2 (маска 4): окно свёрнуто в заголовок