Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
(Добавлено упоминание подфункции 31 функции 68. Добавлено нормальное название страницы.)
 
(120 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]] - определить и нарисовать окно.
 
Определяет окно приложения. Рисует рамку окна, заголовок и рабочую
область. Для окон со скином определяет стандартные кнопки закрытия и
минимизации.
Параметры:
  * 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 игнорируется
Возвращаемое значение: