Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
(Undo revision 4597 by Punk Joker (talk))
m (добавлено примечание для чайников)
 
(29 intermediate revisions by 5 users not shown)
Line 1: Line 1:
''' СИСТЕМНЫЕ ФУНКЦИИ KolibriOS 0.7.7.0 '''
{{DISPLAYTITLE:API ядра}}
 
''' СИСТЕМНЫЕ ФУНКЦИИ KolibriOS'''


Номер функции помещается в регистр eax.
Номер функции помещается в регистр eax.
Вызов системной функции осуществляется командой "int 0x40".
 
Вызов системной функции осуществляется командой "int 0x40" (примечание для чайников: int 0x40 — это инструкция для вызова системного вызова из пространства пользователя. Она позволяет перейти из пользовательского пространства в ядро, вызвав прерывание по определённому вектору (в данном случае это вектор 0x40).).
 
Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.
Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.


Line 18: Line 22:


[[SysFn05/ru | Функция 5]] - пауза.
[[SysFn05/ru | Функция 5]] - пауза.
[[SysFn06/ru | Функция 6]] - прочитать файл с рамдиска.


[[SysFn07/ru | Функция 7]] - вывести изображение в окно.
[[SysFn07/ru | Функция 7]] - вывести изображение в окно.
Line 32: Line 34:


[[SysFn12/ru|Функция 12]] - начать/закончить перерисовку окна.
[[SysFn12/ru|Функция 12]] - начать/закончить перерисовку окна.
* Подфункция 1 - начать перерисовку окна.
* Подфункция 2 - закончить перерисовку окна.


[[SysFn13/ru|Функция 13]] - нарисовать прямоугольник в окне.
[[SysFn13/ru|Функция 13]] - нарисовать прямоугольник в окне.
Line 38: Line 42:


[[SysFn15/ru | Функция 15]] - работа с фоновой графикой
[[SysFn15/ru | Функция 15]] - работа с фоновой графикой
* Подфункция 1 - установить размер фонового изображения.
* Подфункция 2 - поставить точку на фоновом изображении.
* Подфункция 3 - перерисовать фон.
* Подфункция 4 - установить режим отрисовки фона.
* Подфункция 5 - поместить блок пикселей на фон.
* Подфункция 6 - спроецировать данные фона на адресное пространство процесса.
* Подфункция 7 - закрыть проекцию данных фона на адресное пространство процесса.
* Подфункция 8 - получить координаты последней отрисовки фона.
* Подфункция 9 - перерисовать прямоугольную часть фона.


[[SysFn16/ru|Функция 16]] - сохранить рамдиск на дискету.
[[SysFn16/ru|Функция 16]] - сохранить рамдиск на дискету.
Line 44: Line 57:


[[SysFn18/ru|Функция 18]] - системные настройки и информация
[[SysFn18/ru|Функция 18]] - системные настройки и информация
* Подфункция 1 - сделать неактивным окно потока
* Подфункция 2 - завершить процесс/поток по слоту.
* Подфункция 3 - сделать активным окно заданного потока.
* Подфункция 4 - получить счётчик пустых тактов в секунду.
* Подфункция 5 - получить тактовую частоту.
* Подфункция 6 - сохранить рамдиск в файл на жёстком диске.
* Подфункция 7 - получить номер активного окна.
* Подфункция 8 - отключить/разрешить звук спикера.
* Подфункция 9 - завершение работы системы с параметром.
* Подфункция 10 - свернуть окно приложения.
* Подфункция 11 - получить информацию о дисковой подсистеме.
* Подфункция 13 - получить версию ядра.
* Подфункция 14 - ожидать начала обратного хода луча развёртки монитора.
* Подфункция 15 - поместить курсор мыши в центр экрана.
* Подфункция 16 - Получить размер свободной оперативной памяти.
* Подфункция 17 - получить размер имеющейся оперативной памяти.
* Подфункция 18 - завершить процесс/поток по идентификатору.
* Подфункция 19 - получить/установить настройки мыши.
* Подфункция 20 - получить информацию об оперативной памяти.
* Подфункция 21 - получить номер слота процесса/потока по идентификатору.
* Подфункция 22 - операции с окном другого процесса/потока.
* Подфункция 23 - минимизировать все окна.
* Подфункция 24 - установить пределы отрисовки.
* Подфункция 25 - управление положением окна относительно других окон.


[[SysFn20/ru|Функция 20]] - интерфейс MIDI.
[[SysFn20/ru|Функция 20]] - интерфейс MIDI.
* Подфункция 1 - сброс
* Подфункция 2 - вывести байт


[[SysFn21/ru|Функция 21]] - установка системных параметров
[[SysFn21/ru|Функция 21]] - установка системных параметров
* Подфункция 1 - установить базовый порт MPU MIDI.
* Подфункция 2 - установить раскладку клавиатуры.
* Подфункция 5 - установить язык системы.
* Подфункция 11 - разрешить/запретить низкоуровневый доступ к HD.
* Подфункция 12 - разрешить/запретить низкоуровневый доступ к PCI.


[[SysFn22/ru|Функция 22]] - установить системную дату/время.
[[SysFn22/ru|Функция 22]] - установить системную дату/время.
Line 53: Line 97:
[[SysFn23/ru|Функция 23]] - ожидать события с таймаутом.
[[SysFn23/ru|Функция 23]] - ожидать события с таймаутом.


[[SysFn24/ru|Функция 24]] - работа с проигрывателем компакт-дисков
[[SysFn24/ru|Функция 24]] - работа с проигрывателем компакт-дисков.
 
* Подфункция 4 - извлечь лоток привода диска.
Функция 25 - установить громкость SBPro. - '''Удалена'''
* Подфункция 5 - загрузить лоток привода диска.
 
[[SysFn26/ru|Функция 26]] - аппаратный сервис


Функция 27  - сведения об этой функции отсутствуют
[[SysFn25/ru|Функция 25]] - записать область на слой фона.


Функция 28 - установить громкость SB16. - '''Удалена'''
[[SysFn26/ru|Функция 26]] - аппаратный сервис.
* Подфункция 1 - получить базовый порт MPU MIDI.
* Подфункция 2 - получить раскладку клавиатуры.
* Подфункция 5 - получить язык системы.
* Подфункция 9 - получить значение счётчика времени.
* Подфункция 10 - получить значение высокоточного счётчика времени.
* Подфункция 11 - узнать, разрешён ли низкоуровневый доступ к HD.
* Подфункция 12 - узнать, разрешён ли низкоуровневый доступ к PCI.


[[SysFn29/ru|Функция 29]] - получить системную дату.
[[SysFn29/ru|Функция 29]] - получить системную дату.


[[SysFn30/ru|Функция 30]] - работа с текущей папкой.
[[SysFn30/ru|Функция 30]] - работа с текущей папкой.
* Подфункция 1 - установить текущую папку для потока.
* Подфункция 2 - получить активную папку для потока.
* Подфункция 3 - установить доп. системную директорию для ядра.
* Подфункция 4 - установить текущую папку с указанием кодировки.
* Подфункция 5 - получить текущую папку с указанием кодировки.


Функция 31 - сведения об этой функции отсутствуют
[[SysFn34/ru|Функция 34]] - узнать кому принадлежит точка экрана.
 
Функция 32 - использовалась в ранних версиях КОС для удаления файла с рамдиска.- '''удалена'''
 
Функция 33 - использовалась в ранних версиях КОС для записи файла на рамдиск.-'''удалена'''
 
Функция 34 - сведения об этой функции отсутствуют


[[SysFn35/ru|Функция 35]] - прочитать цвет точки на экране.
[[SysFn35/ru|Функция 35]] - прочитать цвет точки на экране.
Line 80: Line 128:


[[SysFn37/ru|Функция 37]] - работа с мышью.
[[SysFn37/ru|Функция 37]] - работа с мышью.
* Подфункция 0 - экранные координаты мыши
* Подфункция 1 - координаты мыши относительно окна
* Подфункция 2 - состояния кнопок мыши
* Подфункция 3 - состояния и события кнопок мыши
* Подфункция 4 - загрузить курсор
* Подфункция 5 - установить курсор
* Подфункция 6 - удалить курсор
* Подфункция 7 - данные прокрутки
* Подфункция 8 - загрузить курсор с указанием кодировки


[[SysFn38/ru|Функция 38]] - нарисовать отрезок.
[[SysFn38/ru|Функция 38]] - нарисовать отрезок.


[[SysFn39/ru|Функция 39]] - чтение фона.
[[SysFn39/ru|Функция 39]] - чтение фона.
* Подфункция 1 - получить размер фонового изображения.
* Подфункция 2 - прочитать точку с фонового изображения.
* Подфункция 4 - получить режим отрисовки фона.


[[SysFn40/ru|Функция 40]] - установить маску для ожидаемых событий.
[[SysFn40/ru|Функция 40]] - установить маску для ожидаемых событий.
Функция 41 - узнать владельца IRQ. - '''Удалена'''
Функция 42 - работа с данными, полученными по IRQ. - '''Удалена'''


[[SysFn43/ru|Функция 43]] - ввод/вывод в порт.
[[SysFn43/ru|Функция 43]] - ввод/вывод в порт.
Функция 44 - определить действия при поступлении IRQ. - '''Удалена'''
Функция 45 - зарезервировать/освободить IRQ. - '''Удалена'''


[[SysFn46/ru|Функция 46]] - зарезервировать/освободить группу портов ввода/вывода.
[[SysFn46/ru|Функция 46]] - зарезервировать/освободить группу портов ввода/вывода.
* '''Внимание:''' Эта функция устарела и может быть удалена в следующих версиях ядра.


[[SysFn47/ru|Функция 47]] - вывести число в окно.
[[SysFn47/ru|Функция 47]] - вывести число в окно.


[[SysFn48/ru|Функция 48]] - стили отображения окон
[[SysFn48/ru|Функция 48]] - стили отображения окон
* Подфункция 0 - применить настройки экрана.
* Подфункция 1 - установить стиль кнопок.
* Подфункция 2 - установить стандартные цвета окон.
* Подфункция 3 - получить стандартные цвета окон.
* Подфункция 4 - получить высоту скина.
* Подфункция 5 - получить рабочую область экрана.
* Подфункция 6 - установить рабочую область экрана.
* Подфункция 7 - получить область скина для текста заголовка.
* Подфункция 8 - установить используемый скин окон.
* Подфункция 9 - получить настройку сглаживания шрифтов.
* Подфункция 10 - настроить сглаживание шрифтов.
* Подфункция 11 - получить размер шрифтов.
* Подфункция 12 - установить размер шрифтов.
* Подфункция 13 - установить скин с указанием кодировки.


[[SysFn49/ru|Функция 49]] - Advanced Power Management (APM).
[[SysFn49/ru|Функция 49]] - Advanced Power Management (APM).
Line 110: Line 175:
[[SysFn51/ru|Функция 51]] - создать поток.
[[SysFn51/ru|Функция 51]] - создать поток.


[[SysFn52/ru|Функция 52]] - сетевой сервис.
[[SysFn54/ru|Функция 54]] - работа с буфером обмена
 
* Подфункция 0 - узнать количество слотов в буфере обмена.
[[SysFn53/ru|Функция 53]] - работа с сетевым сокетами.
* Подфункция 1 - считать данные из буфера обмена.
 
* Подфункция 2 - записать данные в буфер обмена.
Функция 54 - Зарезервирована (возвращает 0x12345678 в eax).
* Подфункция 3 - удалить последний слот с данными в буфере обмена
 
* Подфункция 4 - аварийный сброс блокировки буфера
[[SysFn55/ru | Функция 55]] - аудио сервис.
* Подфункция 0 - загрузить данные для SB16.
* Подфункция 1 - начать проигрывать данные на SB16.
* Подфункция 2 - установить формат данных SB16.
* Подфункция 55 - начать проигрывать данные на встроенном спикере.


Функция 56 - Зарезервирована.
[[SysFn55/ru | Функция 55]] - встроенный спикер.


[[SysFn57/ru | Функция 57]] - PCI BIOS.
[[SysFn57/ru | Функция 57]] - PCI BIOS.
[[SysFn58/ru | Функция 58]] - работа с файловой системой.
* Подфункция 0 - прочитать файл/папку.
* Подфункция 8 - LBA-чтение с устройства.
* Подфункция 15 - получить информацию о файловой системе.
Функция 59 - Зарезервирована.


[[SysFn60/ru | Функция 60]] - Inter Process Communication (IPC).
[[SysFn60/ru | Функция 60]] - Inter Process Communication (IPC).
* Подфункция 1 - установить область для получения IPC
* Подфункция 1 - установить область для получения IPC
* Подфункция 2 - послать сообщение IPC


[[SysFn61/ru | Функция 61]] - получить параметры для прямого доступа к графике.
[[SysFn61/ru | Функция 61]] - получить параметры для прямого доступа к графике.
* Подфункция 1 - разрешение экрана
* Подфункция 2 - число бит на пиксель
* Подфункция 3 - число байт на строку


[[SysFn62/ru|Функция 62]] - пользовательский доступ к PCI.
[[SysFn62/ru|Функция 62]] - пользовательский доступ к PCI.
Line 144: Line 201:
* подфункции 4,5,6 - прочитать PCI-регистр.
* подфункции 4,5,6 - прочитать PCI-регистр.
* подфункции 8,9,10 - записать в PCI-регистр.
* подфункции 8,9,10 - записать в PCI-регистр.
* подфункция 11 - инициализировать доступ к MMIO
* подфункция 12 - получить линейный адрес MMIO-блока
* подфункция 13 - освободить линейные адреса MMIO


[[SysFn63/ru|Функция 63]] - работа с доской отладки.
[[SysFn63/ru|Функция 63]] - работа с доской отладки.
* Подфункция 1 - запись байта
* Подфункция 2 - чтение байта


[[SysFn64/ru|Функция 64]] - перераспределить память приложения.
[[SysFn64/ru|Функция 64]] - перераспределить память приложения.
Line 160: Line 216:
* Подфункция 4 - установить общесистемную "горячую клавишу".
* Подфункция 4 - установить общесистемную "горячую клавишу".
* Подфункция 5 - удалить установленную "горячую клавишу".
* Подфункция 5 - удалить установленную "горячую клавишу".
* Подфункция 6 - заблокировать обычный ввод.
* Подфункция 7 - разблокировать обычный ввод.


[[SysFn67/ru|Функция 67]] - изменить положение/размеры окна.
[[SysFn67/ru|Функция 67]] - изменить положение/размеры окна.


[[SysFn68/ru|Функция 68]] - внутренние системные службы
[[SysFn68/ru|Функция 68]] - внутренние системные службы.
*Подфункция 0 - получить счётчик переключений задач.
* Подфункция 0 - получить счётчик переключений задач.
*Подфункция 1 - переключиться на следующий поток выполнения.
* Подфункция 1 - переключиться на следующий поток выполнения.
*Подфункция 2 - кэш + rdpmc.
* Подфункция 2 - кэш + rdpmc.
*Подфункция 3 - прочитать MSR-регистр.
* Подфункция 3 - прочитать MSR-регистр.
*Подфункция 4 - записать в MSR-регистр.
* Подфункция 4 - записать в MSR-регистр.
*Подфункция 11 - инициализировать кучу процесса.
* Подфункция 11 - инициализировать кучу процесса.
*Подфункция 12 - выделить блок памяти.
* Подфункция 12 - выделить блок памяти.
*Подфункция 13 - освободить блок памяти.
* Подфункция 13 - освободить блок памяти.
*Подфункция 14 - ожидать извещения от драйвера.
* Подфункция 14 - ожидать извещения от драйвера.
*Подфункция 15 - установить обработчик исключений FPU.
* Подфункция 16 - загрузить драйвер.
*Подфункция 16 - загрузить драйвер.
* Подфункция 17 - управление драйвером.
*Подфункция 17 - управление драйвером.
* Подфункция 18 - загрузить DLL с указанием кодировки.
*Подфункция 18 - установить обработчик исключений SSE.
* Подфункция 19 - загрузить DLL.
*Подфункция 19 - загрузить DLL.
* Подфункция 20 - перераспределить блок памяти.
*Подфункция 20 - перераспределить блок памяти.
* Подфункция 22 - открыть именованую область памяти.
*Подфункция 22 - открыть именованую область памяти.
* Подфункция 23 - закрыть именованую область памяти.
*Подфункция 23 - закрыть именованую область памяти.
* Подфункция 24 - установить обработчик исключений
* Подфункция 25 - изменить состояние активности сигнала
* Подфункция 26 - освободить страницы памяти
* Подфункция 27 - загузить файл
* Подфункция 28 - загрузить файл с указанием кодировки
* Подфункция 31 - получить данные драйвера


[[SysFn69/ru|Функция 69]] - отладка.
[[SysFn69/ru|Функция 69]] - отладка.
Line 206: Line 269:
* Подфункция 9 - создание папки.
* Подфункция 9 - создание папки.


Описание функции перенесено в отдельную статью: [[SysFn71/ru|Функция 71]] - параметры окна
[[SysFn71/ru|Функция 71]] - параметры окна.
* Подфункция 1 - установить заголовок окна программы.


[[SysFn72/ru|Функция 72]] - послать сообщение окну.
[[SysFn72/ru|Функция 72]] - послать сообщение окну.
* Подфункция 1 - послать сообщение с параметром активному окну.


[[SysFn73/ru|Функция 73]] - программный блиттер.
[[SysFn73/ru|Функция 73]] - программный блиттер.


[[SysFn-1/ru|Функция -1]] - завершить выполнение потока/процесса
[[SysFn74/ru|Функция 74]] - работа с сетевыми устройствами.
* Подфункция -1 - получить количество активных сетевых устройств.
* Подфункция 0 - получить тип сетевого устройства.
* Подфункция 1 - получить имя сетевого устройства.
* Подфункция 2 - сброс сетевого устройства.
* Подфункция 3 - остановить сетевое устройство.
* Подфункция 4 - получить указатель на устройство.
* Подфункция 6 - получить количество посланых пакетов.
* Подфункция 7 - получить количество принятых пакетов.
* Подфункция 8 - получить количество посланых байт.
* Подфункция 9 - получить количество принятых байт.
* Подфункция 10 - получить статус соединения.
 
[[SysFn75/ru|Функция 75]] - работа с сетевым сокетами.
* Подфункция 0 - Open socket (Открыть сокет).
* Подфункция 1 - Close socket (Закрыть сокет).
* Подфункция 2 - Bind (Привязка).
* Подфункция 3 - Listen (Слушать).
* Подфункция 4 - Connect (Соединение).
* Подфункция 5 - Accept (Соглашение).
* Подфункция 6 - Send (Послать).
* Подфункция 7 - Receive (Получить).
* Подфункция 8 - Set socket options (Задать опции сокета)
* Подфункция 9 - Get socket options (Получить опции сокета)
* Подфункция 10 - Get socketpair (Получить парный сокет).
 
[[SysFn76/ru|Функция 76]] - сетевые опции и статистика.
 
[[SysFn77/ru|Функция 77]] - подсистема POSIX.
* Подфункция 0 - Создать фьютекс
* Подфункция 1 - Удалить фьютекс
* Подфункция 2 - Ожидать
* Подфункция 3 - Разбудить
* Подфункция 4 - Зарезервирована
* Подфункция 5 - Зарезервирована
* Подфункция 6 - Зарезервирована
* Подфункция 7 - Зарезервирована
* Подфункция 8 - open(), пока не реализована
* Подфункция 9 - close(), пока не реализована
* Подфункция 10 - read(), чтение из файла в буфер
* Подфункция 11 - write(), запись данных из буфера в файл
* Подфункция 12 - dup3(), пока не реализована
* Подфункция 13 - pipe2(), создание канала
 
[[SysFn80/ru|Функция 80]] - работа с файловой системой с указанием кодировки.
 
[[SysFn-1/ru|Функция -1]] - завершить выполнение потока/процесса.


== Список событий ==
== Список событий ==


Очередное событие можно получить вызовом одной из функций 10
Очередное событие можно получить вызовом одной из [[SysFn10/ru|функций 10]]
(ожидать события), 11 (проверить без ожидания), 23
(ожидать события), [[SysFn11/ru|11]] (проверить без ожидания), [[SysFn23/ru|23]]
(ожидать в течение заданного времени).
(ожидать в течение заданного времени).
Эти функции возвращают только те события, которые входят в маску,
Эти функции возвращают только те события, которые входят в маску,
устанавливаемую функцией 40. По умолчанию это первые три, чего
устанавливаемую [[SysFn40/ru|функцией 40]]. По умолчанию это первые три, чего
вполне достаточно для многих приложений.
вполне достаточно для многих приложений.
Коды событий:
''Коды событий:''
* 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
* 1 = сообщение о перерисовке (сбрасывается при вызове [[SysFn00/ru|функции 0]])
* 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
* 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
** сбрасывается, когда все клавиши из буфера считаны функцией 2
** сбрасывается, когда все клавиши из буфера считаны [[SysFn02/ru|функцией 2]]
* 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
* 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
** поступает, только когда окно активно;  
** поступает, только когда окно активно;  
** сбрасывается, когда все кнопки из буфера считаны функцией 17)
** сбрасывается, когда все кнопки из буфера считаны [[SysFn17/ru|функцией 17]])
* 4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке функцией 40)
* 4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке [[SysFn40/ru|функцией 40]])
* 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
* 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
* 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
* 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
* 7 = произошло событие IPC (смотри функцию 60 - Inter Process Communication; сбрасывается при прочтении)
* 7 = произошло событие IPC (смотри [[SysFn60/ru|функцию 60]] - Inter Process Communication; сбрасывается при прочтении)
* 8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
* 8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
* 9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
* 9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
* 16..31 - ранее использовались для проверки соответвующих IRQ (16=IRQ0, 31=IRQ15) (на новых версиях ядра не генерируются)
* 16..31 - ранее использовались для проверки соответствующих IRQ (16=IRQ0, 31=IRQ15) (на новых версиях ядра не генерируются)


== Коды ошибок файловой системы ==
== Коды ошибок файловой системы ==


* 0 = успешно
* 0 = успешно
* 1 = не определена база и/или раздел жёсткого диска (подфункциями 7, 8 функции 21)
* 2 = функция не поддерживается для данной файловой системы
* 2 = функция не поддерживается для данной файловой системы
* 3 = неизвестная файловая система
* 3 = неизвестная файловая система
* 4 = зарезервировано, никогда не возвращается в текущей реализации
* 5 = файл не найден
* 5 = файл не найден
* 6 = файл закончился
* 6 = файл закончился
* 7 = указатель вне памяти приложения
* 7 = указатель вне памяти приложения
* 8 = диск заполнен
* 8 = диск заполнен
* 9 = таблица FAT разрушена
* 9 = ошибка файловой системы
* 10 = доступ запрещён
* 10 = доступ запрещён
* 11 = ошибка устройства
* 11 = ошибка устройства
* 12 = файловой системе недостаточно оперативной памяти


При запуске программы возможны также следующие коды ошибок:
При запуске программы возможны также следующие коды ошибок:
Line 259: Line 365:
* 32 = 0x20 = слишком много процессов
* 32 = 0x20 = слишком много процессов


 
{{System_functions}}
[[Category:Coding]]
[[Category:Coding]]

Latest revision as of 01:46, 16 November 2024


СИСТЕМНЫЕ ФУНКЦИИ KolibriOS

Номер функции помещается в регистр eax.

Вызов системной функции осуществляется командой "int 0x40" (примечание для чайников: int 0x40 — это инструкция для вызова системного вызова из пространства пользователя. Она позволяет перейти из пользовательского пространства в ядро, вызвав прерывание по определённому вектору (в данном случае это вектор 0x40).).

Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.

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

Функция 0 - определить и нарисовать окно.

Функция 1 - поставить точку в окне.

Функция 2 - получить код нажатой клавиши.

Функция 3 - получить системное время.

Функция 4 - вывести строку текста в окно.

Функция 5 - пауза.

Функция 7 - вывести изображение в окно.

Функция 8 - определить/удалить кнопку.

Функция 9 - информация о потоке выполнения.

Функция 10 - ожидать события.

Функция 11 - проверить, есть ли событие, без ожидания.

Функция 12 - начать/закончить перерисовку окна.

  • Подфункция 1 - начать перерисовку окна.
  • Подфункция 2 - закончить перерисовку окна.

Функция 13 - нарисовать прямоугольник в окне.

Функция 14 - получить размеры экрана.

Функция 15 - работа с фоновой графикой

  • Подфункция 1 - установить размер фонового изображения.
  • Подфункция 2 - поставить точку на фоновом изображении.
  • Подфункция 3 - перерисовать фон.
  • Подфункция 4 - установить режим отрисовки фона.
  • Подфункция 5 - поместить блок пикселей на фон.
  • Подфункция 6 - спроецировать данные фона на адресное пространство процесса.
  • Подфункция 7 - закрыть проекцию данных фона на адресное пространство процесса.
  • Подфункция 8 - получить координаты последней отрисовки фона.
  • Подфункция 9 - перерисовать прямоугольную часть фона.

Функция 16 - сохранить рамдиск на дискету.

Функция 17 - получить код нажатой кнопки.

Функция 18 - системные настройки и информация

  • Подфункция 1 - сделать неактивным окно потока
  • Подфункция 2 - завершить процесс/поток по слоту.
  • Подфункция 3 - сделать активным окно заданного потока.
  • Подфункция 4 - получить счётчик пустых тактов в секунду.
  • Подфункция 5 - получить тактовую частоту.
  • Подфункция 6 - сохранить рамдиск в файл на жёстком диске.
  • Подфункция 7 - получить номер активного окна.
  • Подфункция 8 - отключить/разрешить звук спикера.
  • Подфункция 9 - завершение работы системы с параметром.
  • Подфункция 10 - свернуть окно приложения.
  • Подфункция 11 - получить информацию о дисковой подсистеме.
  • Подфункция 13 - получить версию ядра.
  • Подфункция 14 - ожидать начала обратного хода луча развёртки монитора.
  • Подфункция 15 - поместить курсор мыши в центр экрана.
  • Подфункция 16 - Получить размер свободной оперативной памяти.
  • Подфункция 17 - получить размер имеющейся оперативной памяти.
  • Подфункция 18 - завершить процесс/поток по идентификатору.
  • Подфункция 19 - получить/установить настройки мыши.
  • Подфункция 20 - получить информацию об оперативной памяти.
  • Подфункция 21 - получить номер слота процесса/потока по идентификатору.
  • Подфункция 22 - операции с окном другого процесса/потока.
  • Подфункция 23 - минимизировать все окна.
  • Подфункция 24 - установить пределы отрисовки.
  • Подфункция 25 - управление положением окна относительно других окон.

Функция 20 - интерфейс MIDI.

  • Подфункция 1 - сброс
  • Подфункция 2 - вывести байт

Функция 21 - установка системных параметров

  • Подфункция 1 - установить базовый порт MPU MIDI.
  • Подфункция 2 - установить раскладку клавиатуры.
  • Подфункция 5 - установить язык системы.
  • Подфункция 11 - разрешить/запретить низкоуровневый доступ к HD.
  • Подфункция 12 - разрешить/запретить низкоуровневый доступ к PCI.

Функция 22 - установить системную дату/время.

Функция 23 - ожидать события с таймаутом.

Функция 24 - работа с проигрывателем компакт-дисков.

  • Подфункция 4 - извлечь лоток привода диска.
  • Подфункция 5 - загрузить лоток привода диска.

Функция 25 - записать область на слой фона.

Функция 26 - аппаратный сервис.

  • Подфункция 1 - получить базовый порт MPU MIDI.
  • Подфункция 2 - получить раскладку клавиатуры.
  • Подфункция 5 - получить язык системы.
  • Подфункция 9 - получить значение счётчика времени.
  • Подфункция 10 - получить значение высокоточного счётчика времени.
  • Подфункция 11 - узнать, разрешён ли низкоуровневый доступ к HD.
  • Подфункция 12 - узнать, разрешён ли низкоуровневый доступ к PCI.

Функция 29 - получить системную дату.

Функция 30 - работа с текущей папкой.

  • Подфункция 1 - установить текущую папку для потока.
  • Подфункция 2 - получить активную папку для потока.
  • Подфункция 3 - установить доп. системную директорию для ядра.
  • Подфункция 4 - установить текущую папку с указанием кодировки.
  • Подфункция 5 - получить текущую папку с указанием кодировки.

Функция 34 - узнать кому принадлежит точка экрана.

Функция 35 - прочитать цвет точки на экране.

Функция 36 - прочитать область экрана.

Функция 37 - работа с мышью.

  • Подфункция 0 - экранные координаты мыши
  • Подфункция 1 - координаты мыши относительно окна
  • Подфункция 2 - состояния кнопок мыши
  • Подфункция 3 - состояния и события кнопок мыши
  • Подфункция 4 - загрузить курсор
  • Подфункция 5 - установить курсор
  • Подфункция 6 - удалить курсор
  • Подфункция 7 - данные прокрутки
  • Подфункция 8 - загрузить курсор с указанием кодировки

Функция 38 - нарисовать отрезок.

Функция 39 - чтение фона.

  • Подфункция 1 - получить размер фонового изображения.
  • Подфункция 2 - прочитать точку с фонового изображения.
  • Подфункция 4 - получить режим отрисовки фона.

Функция 40 - установить маску для ожидаемых событий.

Функция 43 - ввод/вывод в порт.

Функция 46 - зарезервировать/освободить группу портов ввода/вывода.

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

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

  • Подфункция 0 - применить настройки экрана.
  • Подфункция 1 - установить стиль кнопок.
  • Подфункция 2 - установить стандартные цвета окон.
  • Подфункция 3 - получить стандартные цвета окон.
  • Подфункция 4 - получить высоту скина.
  • Подфункция 5 - получить рабочую область экрана.
  • Подфункция 6 - установить рабочую область экрана.
  • Подфункция 7 - получить область скина для текста заголовка.
  • Подфункция 8 - установить используемый скин окон.
  • Подфункция 9 - получить настройку сглаживания шрифтов.
  • Подфункция 10 - настроить сглаживание шрифтов.
  • Подфункция 11 - получить размер шрифтов.
  • Подфункция 12 - установить размер шрифтов.
  • Подфункция 13 - установить скин с указанием кодировки.

Функция 49 - Advanced Power Management (APM).

Функция 50 - установка формы окна.

Функция 51 - создать поток.

Функция 54 - работа с буфером обмена

  • Подфункция 0 - узнать количество слотов в буфере обмена.
  • Подфункция 1 - считать данные из буфера обмена.
  • Подфункция 2 - записать данные в буфер обмена.
  • Подфункция 3 - удалить последний слот с данными в буфере обмена
  • Подфункция 4 - аварийный сброс блокировки буфера

Функция 55 - встроенный спикер.

Функция 57 - PCI BIOS.

Функция 60 - Inter Process Communication (IPC).

  • Подфункция 1 - установить область для получения IPC
  • Подфункция 2 - послать сообщение IPC

Функция 61 - получить параметры для прямого доступа к графике.

  • Подфункция 1 - разрешение экрана
  • Подфункция 2 - число бит на пиксель
  • Подфункция 3 - число байт на строку

Функция 62 - пользовательский доступ к PCI.

  • Подфункция 0 - получить версию PCI-интерфейса.
  • Подфункция 1 - получить номер последней PCI-шины.
  • Подфункция 2 - Получить механизм обращения к конфигурационному пространству PCI.
  • подфункции 4,5,6 - прочитать PCI-регистр.
  • подфункции 8,9,10 - записать в PCI-регистр.

Функция 63 - работа с доской отладки.

  • Подфункция 1 - запись байта
  • Подфункция 2 - чтение байта

Функция 64 - перераспределить память приложения.

Функция 65 - вывести изображение с палитрой в окно.

Функция 66 - работа с клавиатурой.

  • Подфункция 1 - установить режим ввода с клавиатуры.
  • Подфункция 2 - получить режим ввода с клавиатуры.
  • Подфункция 3 - получить состояние управляющих клавиш.
  • Подфункция 4 - установить общесистемную "горячую клавишу".
  • Подфункция 5 - удалить установленную "горячую клавишу".
  • Подфункция 6 - заблокировать обычный ввод.
  • Подфункция 7 - разблокировать обычный ввод.

Функция 67 - изменить положение/размеры окна.

Функция 68 - внутренние системные службы.

  • Подфункция 0 - получить счётчик переключений задач.
  • Подфункция 1 - переключиться на следующий поток выполнения.
  • Подфункция 2 - кэш + rdpmc.
  • Подфункция 3 - прочитать MSR-регистр.
  • Подфункция 4 - записать в MSR-регистр.
  • Подфункция 11 - инициализировать кучу процесса.
  • Подфункция 12 - выделить блок памяти.
  • Подфункция 13 - освободить блок памяти.
  • Подфункция 14 - ожидать извещения от драйвера.
  • Подфункция 16 - загрузить драйвер.
  • Подфункция 17 - управление драйвером.
  • Подфункция 18 - загрузить DLL с указанием кодировки.
  • Подфункция 19 - загрузить DLL.
  • Подфункция 20 - перераспределить блок памяти.
  • Подфункция 22 - открыть именованую область памяти.
  • Подфункция 23 - закрыть именованую область памяти.
  • Подфункция 24 - установить обработчик исключений
  • Подфункция 25 - изменить состояние активности сигнала
  • Подфункция 26 - освободить страницы памяти
  • Подфункция 27 - загузить файл
  • Подфункция 28 - загрузить файл с указанием кодировки
  • Подфункция 31 - получить данные драйвера

Функция 69 - отладка.

  • Подфункция 0 - определить область данных для отладочных сообщений.
  • Подфункция 1 - получить состояние регистров отлаживаемого потока.
  • Подфункция 2 - установить состояние регистров отлаживаемого потока.
  • Подфункция 3 - отключиться от отлаживаемого процесса.
  • Подфункция 4 - приостановить поток.
  • Подфункция 5 - возобновить выполнение потока.
  • Подфункция 6 - прочитать из памяти отлаживаемого процесса.
  • Подфункция 7 - записать в память отлаживаемого процесса.
  • Подфункция 8 - завершить отлаживаемый поток.
  • Подфункция 9 - установить/снять аппаратную точку останова.

Функция 70 - работа с файловой системой с поддержкой длинных имён.

  • Подфункция 0 - чтение файла с поддержкой длинных имён.
  • Подфункция 1 - чтение папки с поддержкой длинных имён.
  • Подфункция 2 - создание/перезапись файла с поддержкой длинных имён.
  • Подфункция 3 - запись в существующий файл с поддержкой длинных имён.
  • Подфункция 4 - установка размера файла.
  • Подфункция 5 - получение информации о файле/папке.
  • Подфункция 6 - установка атрибутов файла/папки.
  • Подфункция 7 - запуск программы.
  • Подфункция 8 - удаление файла/папки.
  • Подфункция 9 - создание папки.

Функция 71 - параметры окна.

Функция 72 - послать сообщение окну.

Функция 73 - программный блиттер.

Функция 74 - работа с сетевыми устройствами.

  • Подфункция -1 - получить количество активных сетевых устройств.
  • Подфункция 0 - получить тип сетевого устройства.
  • Подфункция 1 - получить имя сетевого устройства.
  • Подфункция 2 - сброс сетевого устройства.
  • Подфункция 3 - остановить сетевое устройство.
  • Подфункция 4 - получить указатель на устройство.
  • Подфункция 6 - получить количество посланых пакетов.
  • Подфункция 7 - получить количество принятых пакетов.
  • Подфункция 8 - получить количество посланых байт.
  • Подфункция 9 - получить количество принятых байт.
  • Подфункция 10 - получить статус соединения.

Функция 75 - работа с сетевым сокетами.

  • Подфункция 0 - Open socket (Открыть сокет).
  • Подфункция 1 - Close socket (Закрыть сокет).
  • Подфункция 2 - Bind (Привязка).
  • Подфункция 3 - Listen (Слушать).
  • Подфункция 4 - Connect (Соединение).
  • Подфункция 5 - Accept (Соглашение).
  • Подфункция 6 - Send (Послать).
  • Подфункция 7 - Receive (Получить).
  • Подфункция 8 - Set socket options (Задать опции сокета)
  • Подфункция 9 - Get socket options (Получить опции сокета)
  • Подфункция 10 - Get socketpair (Получить парный сокет).

Функция 76 - сетевые опции и статистика.

Функция 77 - подсистема POSIX.

  • Подфункция 0 - Создать фьютекс
  • Подфункция 1 - Удалить фьютекс
  • Подфункция 2 - Ожидать
  • Подфункция 3 - Разбудить
  • Подфункция 4 - Зарезервирована
  • Подфункция 5 - Зарезервирована
  • Подфункция 6 - Зарезервирована
  • Подфункция 7 - Зарезервирована
  • Подфункция 8 - open(), пока не реализована
  • Подфункция 9 - close(), пока не реализована
  • Подфункция 10 - read(), чтение из файла в буфер
  • Подфункция 11 - write(), запись данных из буфера в файл
  • Подфункция 12 - dup3(), пока не реализована
  • Подфункция 13 - pipe2(), создание канала

Функция 80 - работа с файловой системой с указанием кодировки.

Функция -1 - завершить выполнение потока/процесса.

Список событий

Очередное событие можно получить вызовом одной из функций 10 (ожидать события), 11 (проверить без ожидания), 23 (ожидать в течение заданного времени). Эти функции возвращают только те события, которые входят в маску, устанавливаемую функцией 40. По умолчанию это первые три, чего вполне достаточно для многих приложений. Коды событий:

  • 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
  • 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
    • сбрасывается, когда все клавиши из буфера считаны функцией 2
  • 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
    • поступает, только когда окно активно;
    • сбрасывается, когда все кнопки из буфера считаны функцией 17)
  • 4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке функцией 40)
  • 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
  • 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
  • 7 = произошло событие IPC (смотри функцию 60 - Inter Process Communication; сбрасывается при прочтении)
  • 8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
  • 9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
  • 16..31 - ранее использовались для проверки соответствующих IRQ (16=IRQ0, 31=IRQ15) (на новых версиях ядра не генерируются)

Коды ошибок файловой системы

  • 0 = успешно
  • 2 = функция не поддерживается для данной файловой системы
  • 3 = неизвестная файловая система
  • 5 = файл не найден
  • 6 = файл закончился
  • 7 = указатель вне памяти приложения
  • 8 = диск заполнен
  • 9 = ошибка файловой системы
  • 10 = доступ запрещён
  • 11 = ошибка устройства
  • 12 = файловой системе недостаточно оперативной памяти

При запуске программы возможны также следующие коды ошибок:

  • 30 = 0x1E = недостаточно памяти
  • 31 = 0x1F = файл не является исполнимым
  • 32 = 0x20 = слишком много процессов