sysfuncr.txt: added missing docs for SysFn77.10, SysFn77.11, SysFn77.13 from wiki

ksys.h:
- libc.obj's file synced with newlib's (r9788)
- added scancodes enum
- added wrappers for SysFn66.4 and SysFn66.5 (sys. hotkeys)
- added wrappers for SysFn77.0 -- SysFn77.3 (futexes)

git-svn-id: svn://kolibrios.org@9829 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
vitalkrilov 2022-06-04 22:48:35 +00:00
parent 4b862c1c0b
commit c48822e03e
3 changed files with 509 additions and 9 deletions

View File

@ -245,6 +245,118 @@ enum KSYS_TITLE_ENCODING {
KSYS_TITLE_UTF8 = 3
};
enum KSYS_SCANCODES {
KSYS_SCANCODE_ANY = 0,
KSYS_SCANCODE_ESC = 1,
KSYS_SCANCODE_1 = 2,
KSYS_SCANCODE_2 = 3,
KSYS_SCANCODE_3 = 4,
KSYS_SCANCODE_4 = 5,
KSYS_SCANCODE_5 = 6,
KSYS_SCANCODE_6 = 7,
KSYS_SCANCODE_7 = 8,
KSYS_SCANCODE_8 = 9,
KSYS_SCANCODE_9 = 10,
KSYS_SCANCODE_0 = 11,
KSYS_SCANCODE_MINUS = 12,
KSYS_SCANCODE_EQUAL = 13,
KSYS_SCANCODE_BACKSPACE = 14,
KSYS_SCANCODE_TAB = 15,
KSYS_SCANCODE_Q = 16,
KSYS_SCANCODE_W = 17,
KSYS_SCANCODE_E = 18,
KSYS_SCANCODE_R = 19,
KSYS_SCANCODE_T = 20,
KSYS_SCANCODE_Y = 21,
KSYS_SCANCODE_U = 22,
KSYS_SCANCODE_I = 23,
KSYS_SCANCODE_O = 24,
KSYS_SCANCODE_P = 25,
KSYS_SCANCODE_LBRACE = 26,
KSYS_SCANCODE_RBRACE = 27,
KSYS_SCANCODE_ENTER = 28,
KSYS_SCANCODE_EXT_NUMPAD_ENTER = 28,
KSYS_SCANCODE_LCTRL = 29,
KSYS_SCANCODE_EXT_RCTRL = 29,
KSYS_SCANCODE_A = 30,
KSYS_SCANCODE_S = 31,
KSYS_SCANCODE_D = 32,
KSYS_SCANCODE_F = 33,
KSYS_SCANCODE_G = 34,
KSYS_SCANCODE_H = 35,
KSYS_SCANCODE_J = 36,
KSYS_SCANCODE_K = 37,
KSYS_SCANCODE_L = 38,
KSYS_SCANCODE_SEMICOLON = 39,
KSYS_SCANCODE_SQUOTE = 40,
KSYS_SCANCODE_BQUOTE = 41,
KSYS_SCANCODE_LSHIFT = 42,
KSYS_SCANCODE_BACKSLASH = 43,
KSYS_SCANCODE_Z = 44,
KSYS_SCANCODE_X = 45,
KSYS_SCANCODE_C = 46,
KSYS_SCANCODE_V = 47,
KSYS_SCANCODE_B = 48,
KSYS_SCANCODE_N = 49,
KSYS_SCANCODE_M = 50,
KSYS_SCANCODE_COMMA = 51,
KSYS_SCANCODE_POINT = 52,
KSYS_SCANCODE_SLASH = 53,
KSYS_SCANCODE_EXT_NUMPAD_DIV = 53,
KSYS_SCANCODE_RSHIFT = 54,
KSYS_SCANCODE_NUMPAD_MULT = 55,
KSYS_SCANCODE_EXT_PRTSCR = 55,
KSYS_SCANCODE_LALT = 56,
KSYS_SCANCODE_EXT_RALT = 56,
KSYS_SCANCODE_SPACE = 57,
KSYS_SCANCODE_CAPSLOCK = 58,
KSYS_SCANCODE_F1 = 59,
KSYS_SCANCODE_F2 = 60,
KSYS_SCANCODE_F3 = 61,
KSYS_SCANCODE_F4 = 62,
KSYS_SCANCODE_F5 = 63,
KSYS_SCANCODE_F6 = 64,
KSYS_SCANCODE_F7 = 65,
KSYS_SCANCODE_F8 = 66,
KSYS_SCANCODE_F9 = 67,
KSYS_SCANCODE_F10 = 68,
KSYS_SCANCODE_NUMLOCK = 69,
KSYS_SCANCODE_SCRLOCK = 70,
KSYS_SCANCODE_NUMPAD_7 = 71,
KSYS_SCANCODE_EXT_HOME = 71,
KSYS_SCANCODE_NUMPAD_8 = 72,
KSYS_SCANCODE_EXT_UP = 72,
KSYS_SCANCODE_NUMPAD_9 = 73,
KSYS_SCANCODE_EXT_PGUP = 73,
KSYS_SCANCODE_NUMPAD_MINUS = 74,
KSYS_SCANCODE_NUMPAD_4 = 75,
KSYS_SCANCODE_EXT_LEFT = 75,
KSYS_SCANCODE_NUMPAD_5 = 76,
KSYS_SCANCODE_NUMPAD_6 = 77,
KSYS_SCANCODE_EXT_RIGHT = 77,
KSYS_SCANCODE_NUMPAD_PLUS = 78,
KSYS_SCANCODE_NUMPAD_1 = 79,
KSYS_SCANCODE_EXT_END = 79,
KSYS_SCANCODE_NUMPAD_2 = 80,
KSYS_SCANCODE_EXT_DOWN = 80,
KSYS_SCANCODE_NUMPAD_3 = 81,
KSYS_SCANCODE_EXT_PGDOWN = 81,
KSYS_SCANCODE_NUMPAD_0 = 82,
KSYS_SCANCODE_EXT_INSERT = 82,
KSYS_SCANCODE_NUMPAD_COMMA = 83,
KSYS_SCANCODE_EXT_DELETE = 83,
//84-86 doesn't exist
KSYS_SCANCODE_F11 = 87,
KSYS_SCANCODE_F12 = 88,
//89,90 doesn't exist
KSYS_SCANCODE_EXT_LWIN = 91,
KSYS_SCANCODE_EXT_RWIN = 92,
KSYS_SCANCODE_EXT_MENU = 93,
KSYS_SCANCODE_EXT = 0xE0,
KSYS_SCANCODE_UNK_M_UP = 250 // Is it needed?
};
KOSAPI int __strcmp(const char* s1, const char* s2)
{
while ((*s1) && (*s1 == *s2)) {
@ -1092,6 +1204,50 @@ KOSAPI uint32_t _ksys_get_control_key_state(void)
return key_state;
}
/*========= Function 66, subfunction 4 - set system-wide hotkey. ========*/
enum KSYS_SYS_HOTKEY_CONTROL_KEY_STATES {
KSYS_SYS_HOTKEY_SHIFT_NONE = 0x0,
KSYS_SYS_HOTKEY_SHIFT_ONE = 0x1,
KSYS_SYS_HOTKEY_SHIFT_BOTH = 0x2,
KSYS_SYS_HOTKEY_SHIFT_LEFTONLY = 0x3,
KSYS_SYS_HOTKEY_SHIFT_RIGHTONLY = 0x4,
KSYS_SYS_HOTKEY_CTRL_NONE = 0x00,
KSYS_SYS_HOTKEY_CTRL_ONE = 0x10,
KSYS_SYS_HOTKEY_CTRL_BOTH = 0x20,
KSYS_SYS_HOTKEY_CTRL_LEFTONLY = 0x30,
KSYS_SYS_HOTKEY_CTRL_RIGHTONLY = 0x40,
KSYS_SYS_HOTKEY_ALT_NONE = 0x000,
KSYS_SYS_HOTKEY_ALT_ONE = 0x100,
KSYS_SYS_HOTKEY_ALT_BOTH = 0x200,
KSYS_SYS_HOTKEY_ALT_LEFTONLY = 0x300,
KSYS_SYS_HOTKEY_ALT_RIGHTONLY = 0x400,
};
KOSAPI int _ksys_set_sys_hotkey(uint8_t scancode, uint16_t control_key_states) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(66), "b"(4), "c"(scancode), "d"(control_key_states)
: "memory");
return res;
}
/*========= Function 66, subfunction 5 - delete installed hotkey. ========*/
KOSAPI int _ksys_del_sys_hotkey(uint8_t scancode, uint16_t control_key_states) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(66), "b"(5), "c"(scancode), "d"(control_key_states)
: "memory");
return res;
}
/*========= Function 67 - change position/sizes of the window. =========*/
KOSAPI void _ksys_change_window(int new_x, int new_y, int new_w, int new_h)
@ -1388,7 +1544,7 @@ KOSAPI int _ksys_file_delete(const char* name)
return _ksys70(&k).status;
}
/*============= Function 70, subfunction 9 - create folder. ============*/
/*============= Function 70, subfunction 9 - create folder. =============*/
KOSAPI int _ksys_mkdir(const char* path)
{
@ -1412,7 +1568,7 @@ KOSAPI int _ksys_file_rename(const char* name, const char* new_name)
#define _ksys_dir_rename _ksys_file_rename
/*============ Function 71, subfunction 1 - set window title ============= */
/*============= Function 71, subfunction 1 - set window title =============*/
KOSAPI void _ksys_set_window_title(const char* title)
{
@ -1422,7 +1578,55 @@ KOSAPI void _ksys_set_window_title(const char* title)
#define _ksys_clear_window_title() _ksys_set_window_title(NULL)
/*============= Function 77 - implements the POSIX subsystem. =============*/
/*============= Function 77, subfunction 0 - create futex object =============*/
KOSAPI void* _ksys_futex_create(void* futexControlAddr) {
void* futexDesc;
asm_inline(
"int $0x40"
: "=a"(futexDesc)
: "a"(77), "b"(0), "c"(futexControlAddr)
: "memory");
return futexDesc;
}
/*============= Function 77, subfunction 1 - destroy futex object =============*/
KOSAPI int _ksys_futex_destroy(void* futexDesc) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(77), "b"(1), "c"(futexDesc)
: "memory");
return res;
}
/*============= Function 77, subfunction 2 - futex wait =============*/
KOSAPI int _ksys_futex_wait(void* futexDesc, int controlVal, int timeout) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(77), "b"(2), "c"(futexDesc), "d"(controlVal), "S"(timeout)
: "memory");
return res;
}
/*============= Function 77, subfunction 3 - futex wake =============*/
KOSAPI int _ksys_futex_wake(void* futexDesc, int maxWakeCount) {
int count;
asm_inline(
"int $0x40"
: "=a"(count)
: "a"(77), "b"(3), "c"(futexDesc), "d"(maxWakeCount)
: "memory");
return count;
}
/*============= Function 77, subfunction 10 - read from file to buffer =============*/
KOSAPI int _ksys_posix_read(int pipefd, void* buff, int n)
{
@ -1435,6 +1639,8 @@ KOSAPI int _ksys_posix_read(int pipefd, void* buff, int n)
return count;
}
/*============= Function 77, subfunction 11 - write from buffer to file =============*/
KOSAPI int _ksys_posix_write(int pipefd, void* buff, int n)
{
int count;
@ -1446,6 +1652,8 @@ KOSAPI int _ksys_posix_write(int pipefd, void* buff, int n)
return count;
}
/*============= Function 77, subfunction 13 - create new pipe =============*/
KOSAPI int _ksys_posix_pipe2(int pipefd[2], int flags)
{
int err;

View File

@ -5056,6 +5056,56 @@ Remarks:
eax - SF_FUTEX (77)
ebx - SSF_WAKE (3)
======================================================================
======= Функция 77, подфункция 10, Прочитать из файла в буфер. =======
======================================================================
Параметры:
* eax = 77 - номер функции
* ebx = 10 - номер подфункции
* ecx = дескриптор файла
* edx = указатель на буфер, куда читать
* esi = сколько байт прочитать
Возвращаемое значение:
* eax = количество прочитанных байт
---------------------- Константы для регистров: ----------------------
eax - SF_FUTEX (77)
ebx - ...
======================================================================
======== Функция 77, подфункция 11, Записать из буфера в файл. =======
======================================================================
Параметры:
* eax = 77 - номер функции
* ebx = 11 - номер подфункции
* ecx = дескриптор файла
* edx = указатель на буфер, откуда брать данные для записи
* esi = сколько байт записать
Возвращаемое значение:
* eax = количество записанных байт
---------------------- Константы для регистров: ----------------------
eax - SF_FUTEX (77)
ebx - ...
======================================================================
=========== Функция 77, подфункция 13, Создать новый pipe. ===========
======================================================================
Создает новый pipe. В 4 байта по адресу pipefd будет записан
дескриптор для чтения из канала.
В 4 байта по адресу pipefd + 4 будет записан дескриптор для записи в
канал.
Параметры:
* eax = 77 - номер функции
* ebx = 13 - номер подфункции
* ecx = адрес pipefd
* edx = флаги. На данный момент если поднят O_CLOEXEC (0x40000), то
сисфункция завершится с ошибкой. Поэтому в качестве флагов можно
передать просто 0.
Возвращаемое значение:
* eax = 0 если успех, иначе ошибка.
---------------------- Константы для регистров: ----------------------
eax - SF_FUTEX (77)
ebx - ...
======================================================================
========== Функция -1 - завершить выполнение потока/процесса =========
======================================================================
Параметры:

View File

@ -1,3 +1,6 @@
#ifndef _KSYS_H_
#define _KSYS_H_
/* Copyright (C) KolibriOS team 2004-2021. All rights reserved. */
/* Distributed under terms of the GNU General Public License */
@ -16,9 +19,6 @@
* They are for compatibility... Better not to use them.
*/
#ifndef _KSYS_H_
#define _KSYS_H_
#include <stddef.h>
#include <stdint.h>
@ -193,6 +193,14 @@ typedef struct {
char path[64];
} ksys_dir_key_t;
typedef union {
uint8_t raw_data[24];
struct {
uint32_t id;
uint8_t data[20];
};
} ksys_signal_info_t;
#pragma pack(pop)
typedef rgb_t ksys_bitmap_t;
@ -237,6 +245,118 @@ enum KSYS_TITLE_ENCODING {
KSYS_TITLE_UTF8 = 3
};
enum KSYS_SCANCODES {
KSYS_SCANCODE_ANY = 0,
KSYS_SCANCODE_ESC = 1,
KSYS_SCANCODE_1 = 2,
KSYS_SCANCODE_2 = 3,
KSYS_SCANCODE_3 = 4,
KSYS_SCANCODE_4 = 5,
KSYS_SCANCODE_5 = 6,
KSYS_SCANCODE_6 = 7,
KSYS_SCANCODE_7 = 8,
KSYS_SCANCODE_8 = 9,
KSYS_SCANCODE_9 = 10,
KSYS_SCANCODE_0 = 11,
KSYS_SCANCODE_MINUS = 12,
KSYS_SCANCODE_EQUAL = 13,
KSYS_SCANCODE_BACKSPACE = 14,
KSYS_SCANCODE_TAB = 15,
KSYS_SCANCODE_Q = 16,
KSYS_SCANCODE_W = 17,
KSYS_SCANCODE_E = 18,
KSYS_SCANCODE_R = 19,
KSYS_SCANCODE_T = 20,
KSYS_SCANCODE_Y = 21,
KSYS_SCANCODE_U = 22,
KSYS_SCANCODE_I = 23,
KSYS_SCANCODE_O = 24,
KSYS_SCANCODE_P = 25,
KSYS_SCANCODE_LBRACE = 26,
KSYS_SCANCODE_RBRACE = 27,
KSYS_SCANCODE_ENTER = 28,
KSYS_SCANCODE_EXT_NUMPAD_ENTER = 28,
KSYS_SCANCODE_LCTRL = 29,
KSYS_SCANCODE_EXT_RCTRL = 29,
KSYS_SCANCODE_A = 30,
KSYS_SCANCODE_S = 31,
KSYS_SCANCODE_D = 32,
KSYS_SCANCODE_F = 33,
KSYS_SCANCODE_G = 34,
KSYS_SCANCODE_H = 35,
KSYS_SCANCODE_J = 36,
KSYS_SCANCODE_K = 37,
KSYS_SCANCODE_L = 38,
KSYS_SCANCODE_SEMICOLON = 39,
KSYS_SCANCODE_SQUOTE = 40,
KSYS_SCANCODE_BQUOTE = 41,
KSYS_SCANCODE_LSHIFT = 42,
KSYS_SCANCODE_BACKSLASH = 43,
KSYS_SCANCODE_Z = 44,
KSYS_SCANCODE_X = 45,
KSYS_SCANCODE_C = 46,
KSYS_SCANCODE_V = 47,
KSYS_SCANCODE_B = 48,
KSYS_SCANCODE_N = 49,
KSYS_SCANCODE_M = 50,
KSYS_SCANCODE_COMMA = 51,
KSYS_SCANCODE_POINT = 52,
KSYS_SCANCODE_SLASH = 53,
KSYS_SCANCODE_EXT_NUMPAD_DIV = 53,
KSYS_SCANCODE_RSHIFT = 54,
KSYS_SCANCODE_NUMPAD_MULT = 55,
KSYS_SCANCODE_EXT_PRTSCR = 55,
KSYS_SCANCODE_LALT = 56,
KSYS_SCANCODE_EXT_RALT = 56,
KSYS_SCANCODE_SPACE = 57,
KSYS_SCANCODE_CAPSLOCK = 58,
KSYS_SCANCODE_F1 = 59,
KSYS_SCANCODE_F2 = 60,
KSYS_SCANCODE_F3 = 61,
KSYS_SCANCODE_F4 = 62,
KSYS_SCANCODE_F5 = 63,
KSYS_SCANCODE_F6 = 64,
KSYS_SCANCODE_F7 = 65,
KSYS_SCANCODE_F8 = 66,
KSYS_SCANCODE_F9 = 67,
KSYS_SCANCODE_F10 = 68,
KSYS_SCANCODE_NUMLOCK = 69,
KSYS_SCANCODE_SCRLOCK = 70,
KSYS_SCANCODE_NUMPAD_7 = 71,
KSYS_SCANCODE_EXT_HOME = 71,
KSYS_SCANCODE_NUMPAD_8 = 72,
KSYS_SCANCODE_EXT_UP = 72,
KSYS_SCANCODE_NUMPAD_9 = 73,
KSYS_SCANCODE_EXT_PGUP = 73,
KSYS_SCANCODE_NUMPAD_MINUS = 74,
KSYS_SCANCODE_NUMPAD_4 = 75,
KSYS_SCANCODE_EXT_LEFT = 75,
KSYS_SCANCODE_NUMPAD_5 = 76,
KSYS_SCANCODE_NUMPAD_6 = 77,
KSYS_SCANCODE_EXT_RIGHT = 77,
KSYS_SCANCODE_NUMPAD_PLUS = 78,
KSYS_SCANCODE_NUMPAD_1 = 79,
KSYS_SCANCODE_EXT_END = 79,
KSYS_SCANCODE_NUMPAD_2 = 80,
KSYS_SCANCODE_EXT_DOWN = 80,
KSYS_SCANCODE_NUMPAD_3 = 81,
KSYS_SCANCODE_EXT_PGDOWN = 81,
KSYS_SCANCODE_NUMPAD_0 = 82,
KSYS_SCANCODE_EXT_INSERT = 82,
KSYS_SCANCODE_NUMPAD_COMMA = 83,
KSYS_SCANCODE_EXT_DELETE = 83,
//84-86 doesn't exist
KSYS_SCANCODE_F11 = 87,
KSYS_SCANCODE_F12 = 88,
//89,90 doesn't exist
KSYS_SCANCODE_EXT_LWIN = 91,
KSYS_SCANCODE_EXT_RWIN = 92,
KSYS_SCANCODE_EXT_MENU = 93,
KSYS_SCANCODE_EXT = 0xE0,
KSYS_SCANCODE_UNK_M_UP = 250 // Is it needed?
};
KOSAPI int __strcmp(const char* s1, const char* s2)
{
while ((*s1) && (*s1 == *s2)) {
@ -354,6 +474,18 @@ KOSAPI void _ksys_delete_button(uint32_t id)
/*============ Function 9 - information on execution thread. ===========*/
#define KSYS_THIS_SLOT -1
enum KSYS_SLOT_STATES {
KSYS_SLOT_STATE_RUNNING = 0,
KSYS_SLOT_STATE_SUSPENDED = 1,
KSYS_SLOT_STATE_SUSPENDED_WAIT_EVENT = 2,
KSYS_SLOT_STATE_NORMAL_TERM = 3,
KSYS_SLOT_STATE_EXCEPT_TERM = 4,
KSYS_SLOT_STATE_WAIT_EVENT = 5,
KSYS_SLOT_STATE_FREE = 6
};
KOSAPI int _ksys_thread_info(ksys_thread_t* table, int slot)
{
int val;
@ -1072,6 +1204,50 @@ KOSAPI uint32_t _ksys_get_control_key_state(void)
return key_state;
}
/*========= Function 66, subfunction 4 - set system-wide hotkey. ========*/
enum KSYS_SYS_HOTKEY_CONTROL_KEY_STATES {
KSYS_SYS_HOTKEY_SHIFT_NONE = 0x0,
KSYS_SYS_HOTKEY_SHIFT_ONE = 0x1,
KSYS_SYS_HOTKEY_SHIFT_BOTH = 0x2,
KSYS_SYS_HOTKEY_SHIFT_LEFTONLY = 0x3,
KSYS_SYS_HOTKEY_SHIFT_RIGHTONLY = 0x4,
KSYS_SYS_HOTKEY_CTRL_NONE = 0x00,
KSYS_SYS_HOTKEY_CTRL_ONE = 0x10,
KSYS_SYS_HOTKEY_CTRL_BOTH = 0x20,
KSYS_SYS_HOTKEY_CTRL_LEFTONLY = 0x30,
KSYS_SYS_HOTKEY_CTRL_RIGHTONLY = 0x40,
KSYS_SYS_HOTKEY_ALT_NONE = 0x000,
KSYS_SYS_HOTKEY_ALT_ONE = 0x100,
KSYS_SYS_HOTKEY_ALT_BOTH = 0x200,
KSYS_SYS_HOTKEY_ALT_LEFTONLY = 0x300,
KSYS_SYS_HOTKEY_ALT_RIGHTONLY = 0x400,
};
KOSAPI int _ksys_set_sys_hotkey(uint8_t scancode, uint16_t control_key_states) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(66), "b"(4), "c"(scancode), "d"(control_key_states)
: "memory");
return res;
}
/*========= Function 66, subfunction 5 - delete installed hotkey. ========*/
KOSAPI int _ksys_del_sys_hotkey(uint8_t scancode, uint16_t control_key_states) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(66), "b"(5), "c"(scancode), "d"(control_key_states)
: "memory");
return res;
}
/*========= Function 67 - change position/sizes of the window. =========*/
KOSAPI void _ksys_change_window(int new_x, int new_y, int new_w, int new_h)
@ -1080,6 +1256,13 @@ KOSAPI void _ksys_change_window(int new_x, int new_y, int new_w, int new_h)
"int $0x40" ::"a"(67), "b"(new_x), "c"(new_y), "d"(new_w), "S"(new_h));
}
/*===== Function 68, subfunction 1 - switch to the next thread of execution ====*/
KOSAPI void _ksys_thread_yield(void)
{
asm_inline("int $0x40" :: "a"(68),"b"(1));
}
/*======== Function 68, subfunction 12 - allocate memory block. ========*/
KOSAPI void* _ksys_alloc(size_t size)
@ -1104,6 +1287,13 @@ KOSAPI int _ksys_free(void* mem)
return val;
}
/*====== Function 68, subfunction 14 - Wait signal from other applications/drivers. =====*/
KOSAPI void _ksys_wait_signal(ksys_signal_info_t* signal)
{
asm_inline("int $0x40" :: "a"(68),"b"(14),"c"(signal) : "memory");
}
/*============= Function 68, subfunction 16 - load driver. =============*/
KOSAPI ksys_drv_hand_t _ksys_load_driver(char* driver_name)
@ -1354,7 +1544,7 @@ KOSAPI int _ksys_file_delete(const char* name)
return _ksys70(&k).status;
}
/*============= Function 70, subfunction 9 - create folder. ============*/
/*============= Function 70, subfunction 9 - create folder. =============*/
KOSAPI int _ksys_mkdir(const char* path)
{
@ -1378,7 +1568,7 @@ KOSAPI int _ksys_file_rename(const char* name, const char* new_name)
#define _ksys_dir_rename _ksys_file_rename
/*============ Function 71, subfunction 1 - set window title ============= */
/*============= Function 71, subfunction 1 - set window title =============*/
KOSAPI void _ksys_set_window_title(const char* title)
{
@ -1388,7 +1578,55 @@ KOSAPI void _ksys_set_window_title(const char* title)
#define _ksys_clear_window_title() _ksys_set_window_title(NULL)
/*============= Function 77 - implements the POSIX subsystem. =============*/
/*============= Function 77, subfunction 0 - create futex object =============*/
KOSAPI void* _ksys_futex_create(void* futexControlAddr) {
void* futexDesc;
asm_inline(
"int $0x40"
: "=a"(futexDesc)
: "a"(77), "b"(0), "c"(futexControlAddr)
: "memory");
return futexDesc;
}
/*============= Function 77, subfunction 1 - destroy futex object =============*/
KOSAPI int _ksys_futex_destroy(void* futexDesc) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(77), "b"(1), "c"(futexDesc)
: "memory");
return res;
}
/*============= Function 77, subfunction 2 - futex wait =============*/
KOSAPI int _ksys_futex_wait(void* futexDesc, int controlVal, int timeout) {
int res;
asm_inline(
"int $0x40"
: "=a"(res)
: "a"(77), "b"(2), "c"(futexDesc), "d"(controlVal), "S"(timeout)
: "memory");
return res;
}
/*============= Function 77, subfunction 3 - futex wake =============*/
KOSAPI int _ksys_futex_wake(void* futexDesc, int maxWakeCount) {
int count;
asm_inline(
"int $0x40"
: "=a"(count)
: "a"(77), "b"(3), "c"(futexDesc), "d"(maxWakeCount)
: "memory");
return count;
}
/*============= Function 77, subfunction 10 - read from file to buffer =============*/
KOSAPI int _ksys_posix_read(int pipefd, void* buff, int n)
{
@ -1401,6 +1639,8 @@ KOSAPI int _ksys_posix_read(int pipefd, void* buff, int n)
return count;
}
/*============= Function 77, subfunction 11 - write from buffer to file =============*/
KOSAPI int _ksys_posix_write(int pipefd, void* buff, int n)
{
int count;
@ -1412,6 +1652,8 @@ KOSAPI int _ksys_posix_write(int pipefd, void* buff, int n)
return count;
}
/*============= Function 77, subfunction 13 - create new pipe =============*/
KOSAPI int _ksys_posix_pipe2(int pipefd[2], int flags)
{
int err;