Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
m (take II)
(Добавлено упоминание подфункции 31 функции 68. Добавлено нормальное название страницы.)
 
(122 intermediate revisions by 12 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]] - определить и нарисовать окно.
 
Определяет окно приложения. Рисует рамку окна, заголовок и рабочую
область. Для окон со скином определяет стандартные кнопки закрытия и
минимизации.
Параметры:
  * eax = 0 - номер функции
  * ebx = [координата по оси x]*65536 + [размер по оси x]
  * ecx = [координата по оси y]*65536 + [размер по оси y]
  * edx = 0xXYRRGGBB, где:
    * Y = стиль окна:
      * Y=0 - тип I - окно фиксированных размеров
      * Y=1 - только определить область окна, ничего не рисовать
      * Y=2 - тип II - окно изменяемых размеров
      * Y=3 - окно со скином
      * Y=4 - окно со скином фиксированных размеров
      * остальные возможные значения (от 5 до 15) зарезервированы,
        вызов функции с такими Y игнорируется
    * RR, GG, BB = соответственно красная, зеленая, синяя
      составляющие цвета рабочей области окна
      (игнорируется для стиля Y=2)
    * X = DCBA (биты)
      * A = 1 - у окна есть заголовок; для стилей Y=3,4 адрес строки
                  заголовка задаётся в edi, для прочих стилей
                  используется подфункция 1 функции 71
      * B = 1 - координаты всех графических примитивов задаются
                  относительно клиентской области окна
      * C = 1 - не закрашивать рабочую область при отрисовке окна
      * D = 0 - нормальная заливка рабочей области, 1 - градиентная
    Следующие параметры предназначены для окон типа I и II и
    игнорируются для стилей Y=1,3:
  * esi = 0xXYRRGGBB - цвет заголовка
    * RR, GG, BB определяют сам цвет
    * Y=0 - обычное окно, Y=1 - неперемещаемое окно
    * X определяет градиент заголовка: X=0 - нет градиента,
      X=8 - обычный градиент,
      для окон типа II X=4 - негативный градиент
    * прочие значения X и Y зарезервированы
  * edi = 0x00RRGGBB - цвет рамки
Возвращаемое значение:
  * функция не возвращает значения
Замечания:
  * Положение и размеры окна устанавливаются при первом вызове
    этой функции и игнорируются при последующих; для изменения
    положения и/или размеров уже созданного окна используйте
    67-ю функцию.
  * Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка
    устанавливается при первом вызове этой функции и игнорируется при
    последующих (точнее говоря, игнорируется после вызова
    подфункции 2 функции 12 - конца перерисовки);
    для изменения строки заголовка уже созданного окна используйте
    подфункцию 1 функции 71.
  * Если использовать окна соответствующих стилей, то положение
    и/или размеры окна могут меняться пользователем.
    Текущие положение и размеры могут быть получены вызовом функции 9.
  * Окно должно умещаться на экране. Если переданные координаты
    и размеры не удовлетворяют этому условию, то соответствующая
    координата (или, возможно, обе) считается нулем, а если и это
    не помогает, то соответствующий размер (или, возможно, оба)
    устанавливается в размер экрана.
 
    Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые
    в ebx,ecx. Координаты приводятся относительно левого верхнего
    угла окна, который, таким образом, задается как (0,0), координаты
    правого нижнего угла суть (xsize,ysize).
  * Размеры окна понимаются в смысле координат правого нижнего угла.
    Это же относится и ко всем остальным функциям.
    Это означает, что реальные размеры на 1 пиксель больше.
  * Вид окна типа I:
    * рисуется внешняя рамка цвета, указанного в edi,
      шириной 1 пиксель
    * рисуется заголовок - прямоугольник с левым верхним углом (1,1)
      и правым нижним (xsize-1,min(25,ysize)) цвета, указанного в esi
      (с учетом градиента)
    * если ysize>=26, то закрашивается рабочая область окна -
      прямоугольник с левым верхним углом (1,21) и правым нижним
      (xsize-1,ysize-1) (размерами (xsize-1)*(ysize-21)) - цветом,
      указанным в edx (с учетом градиента)
    * если A=1 и строка заголовка установлена подфункцией 1
      функции 71, то она выводится в соответствующем месте заголовка
  * Вид окна стиля Y=1:
    * полностью определяется приложением
  * Вид окна типа II:
    * рисуется внешняя рамка шириной 1 пиксель "затенённого" цвета
      edi (все составляющие цвета уменьшаются в два раза)
    * рисуется промежуточная рамка шириной 3 пикселя цвета edi
    * рисуется внутренняя рамка шириной 1 пиксель
      "затенённого" цвета edi
    * рисуется заголовок - прямоугольник с левым верхним углом (4,4)
      и правым нижним (xsize-4,min(20,ysize)) цвета, указанного в esi
      (с учетом градиента)
    * если ysize>=26, то закрашивается рабочая область окна -
      прямоугольник с левым верхним углом (5,20) и правым нижним
      (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
    * если A=1 и строка заголовка установлена подфункцией 1
      функции 71, то она выводится в соответствующем месте заголовка
  * Вид окна со скином:
    * рисуется внешняя рамка шириной 1 пиксель
      цвета 'outer' из скина
    * рисуется промежуточная рамка шириной 3 пикселя
      цвета 'frame' из скина
    * рисуется внутренняя рамка шириной 1 пиксель
      цвета 'inner' из скина
    * рисуется заголовок (по картинкам из скина) в прямоугольнике
      (0,0) - (xsize,_skinh-1)
    * если ysize>=26, то закрашивается рабочая область окна -
      прямоугольник с левым верхним углом (5,_skinh) и правым нижним
      (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
    * определяются две стандартные кнопки: закрытия и минимизации
      (смотри функцию 8)
    * если A=1 и в edi (ненулевой) указатель на строку заголовка,
      то она выводится в заголовке в месте, определяемом скином
    * Значение переменной _skinh доступно как результат вызова
      подфункции 4 функции 48
 
 
== Функция 1 - поставить точку в окне. ==
 
Параметры:
  * eax = 1 - номер функции
  * ebx = x-координата (относительно окна)
  * ecx = y-координата (относительно окна)
  * edx = 0x00RRGGBB - цвет точки
    edx = 0x01xxxxxx - инвертировать цвет точки
          (младшие 24 бита игнорируются)
Возвращаемое значение:
  * функция не возвращает значения
 
 
== Функция 2 - получить код нажатой клавиши. ==
 
Забирает код нажатой клавиши из буфера.
Параметры:
  * eax = 2 - номер функции
Возвращаемое значение:
  * если буфер пуст, возвращается eax=1
  * если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
    старшее слово регистра eax обнулено
  * если есть "горячая клавиша", то возвращается
    al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
    старшее слово регистра eax содержит состояние управляющих клавиш
    в момент нажатия горячей клавиши
Замечания:
  * Существует общесистемный буфер нажатых клавиш размером 120 байт,
    организованный как очередь.
  * Существует ещё один общесистемный буфер на 120 "горячих клавиш".
  * При вызове этой функции приложением с неактивным окном
    считается, что буфер нажатых клавиш пуст.
  * По умолчанию эта функция возвращает ASCII-коды; переключиться на
    режим сканкодов (и назад) можно с использованием функции 66.
    Однако, горячие клавиши всегда возвращаются как сканкоды.
  * Узнать, какие комбинации клавиш соответствуют каким кодам, можно,
    запустив приложения keyascii и scancode.
  * Сканкоды возвращаются непосредственно клавиатурой и фиксированы;
    ASCII-коды получаются с использованием таблиц преобразования,
    которые можно установить подфункцией 2 функции 21 и прочитать
    подфункцией 2 функции 26.
  * Как следствие, ASCII-коды учитывают текущую раскладку клавиатуры
    (rus/en) в отличие от сканкодов.
  * Поступает информация только о тех горячих клавишах, которые были
    определены этим потоком подфункцией 4 функции 66.
 
 
== Функция 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 игнорируется
Возвращаемое значение:
  * функция не возвращает значения