summaryrefslogtreecommitdiff
path: root/src/user/include/pland
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/include/pland')
-rw-r--r--src/user/include/pland/pcrt.h7
-rw-r--r--src/user/include/pland/syscall.h206
2 files changed, 78 insertions, 135 deletions
diff --git a/src/user/include/pland/pcrt.h b/src/user/include/pland/pcrt.h
index 07ad453..42158cd 100644
--- a/src/user/include/pland/pcrt.h
+++ b/src/user/include/pland/pcrt.h
@@ -1,6 +1,8 @@
#ifndef PLAND_PCRT_H
#define PLAND_PCRT_H
+#include <pland/syscall.h>
+
#define BEFORE_MAIN(f) \
__attribute__ ((section (".__pcrt_before_main"))) \
__attribute__ ((unused)) \
@@ -13,4 +15,7 @@
void __pcrt_quit() __attribute__ ((noreturn));
-#endif \ No newline at end of file
+extern _task_handle_t calling_task;
+extern _task_handle_t stdio_task;
+
+#endif
diff --git a/src/user/include/pland/syscall.h b/src/user/include/pland/syscall.h
index ead5fea..6d327d5 100644
--- a/src/user/include/pland/syscall.h
+++ b/src/user/include/pland/syscall.h
@@ -4,119 +4,12 @@
#include <stdint.h>
#include <stdbool.h>
+#include <winact.h>
+
typedef uint32_t _file_handle_t;
typedef uint32_t _task_handle_t;
typedef uint32_t _drive_number_t;
-typedef uint32_t _process_handle_t;
-
-typedef enum {
- _KEY_LSHIFT = 0x00000100,
- _KEY_RSHIFT = 0x00000200,
- _KEY_CAPS = 0x00000400,
- _KEY_INSERT = 0x00000800,
- _KEY_NUM = 0x00001000,
- _KEY_SCROLL = 0x00002000,
- _KEY_LALT = 0x00004000,
- _KEY_RALT = 0x00008000,
- _KEY_LCTRL = 0x00010000,
- _KEY_RCTRL = 0x00020000,
- _KEY_LMETA = 0x00040000,
- _KEY_RMETA = 0x00080000,
-
- _KEY_SHIFT = 0x00000300,
- _KEY_SCAPS = 0x00000700,
- _KEY_ALT = 0x0000c000,
- _KEY_CTRL = 0x00030000,
- _KEY_META = 0x000c0000,
-
- _KEY_BEGIN_CAPS = 0x80,
- _KEY_BEGIN_INSERT,
- _KEY_BEGIN_NUM,
- _KEY_BEGIN_SCROLL,
- _KEY_BEGIN_LSHIFT,
- _KEY_BEGIN_RSHIFT,
- _KEY_BEGIN_LALT,
- _KEY_BEGIN_RALT,
- _KEY_BEGIN_LCTRL,
- _KEY_BEGIN_RCTRL,
- _KEY_BEGIN_LMETA,
- _KEY_BEGIN_RMETA,
- /* 0x8c - 0x97 reserved */
- /* 0x98 - 0x9f unassigned */
- _KEY_F1 = 0xa0,
- _KEY_F2,
- _KEY_F3,
- _KEY_F4,
- _KEY_F5,
- _KEY_F6,
- _KEY_F7,
- _KEY_F8,
- _KEY_F9,
- _KEY_F10,
- _KEY_F11,
- _KEY_F12,
- /* 0xac - 0xaf unassigned */
- _KEY_NUM0 = 0xb0,
- _KEY_NUM1,
- _KEY_NUM2,
- _KEY_NUM3,
- _KEY_NUM4,
- _KEY_NUM5,
- _KEY_NUM6,
- _KEY_NUM7,
- _KEY_NUM8,
- _KEY_NUM9,
- _KEY_NTIMES,
- _KEY_NPLUS,
- _KEY_NENTER,
- _KEY_NMINUS,
- _KEY_NDOT,
- _KEY_NSLASH,
- /* 0xc0 unassigned */
- _KEY_DELETE = 0xc1,
- _KEY_HOME,
- _KEY_END,
- _KEY_PUP,
- _KEY_PDOWN,
- _KEY_UP,
- _KEY_DOWN,
- _KEY_LEFT,
- _KEY_RIGHT,
- _KEY_ESC,
- _KEY_MENU,
- _KEY_PAUSE,
- _KEY_PRSCR,
- /* 0xce - 0xef unassigned */
-} _key_code_t;
-
-typedef enum {
- _COLOR_FG_BLACK = 0x00,
- _COLOR_FG_BLUE = 0x01,
- _COLOR_FG_GREEN = 0x02,
- _COLOR_FG_CYAN = 0x03,
- _COLOR_FG_RED = 0x04,
- _COLOR_FG_MAGENTA = 0x05,
- _COLOR_FG_BROWN = 0x06,
- _COLOR_FG_LGRAY = 0x07,
-
- _COLOR_FG_DGRAY = 0x08,
- _COLOR_FG_LBLUE = 0x09,
- _COLOR_FG_LGREEN = 0x0a,
- _COLOR_FG_LCYAN = 0x0b,
- _COLOR_FG_LRED = 0x0c,
- _COLOR_FG_PINK = 0x0d,
- _COLOR_FG_YELLOW = 0x0e,
- _COLOR_FG_WHITE = 0x0f,
-
- _COLOR_BG_BLACK = 0x00,
- _COLOR_BG_BLUE = 0x10,
- _COLOR_BG_GREEN = 0x20,
- _COLOR_BG_CYAN = 0x30,
- _COLOR_BG_RED = 0x40,
- _COLOR_BG_MAGENTA = 0x50,
- _COLOR_BG_BROWN = 0x60,
- _COLOR_BG_LGRAY = 0x70
-} _vga_color_t;
+typedef void *_window_handle_t;
typedef struct __attribute__ ((packed)) {
char name[100];
@@ -131,17 +24,26 @@ enum _scn {
_SCN_FILE_READ,
_SCN_FILE_SIZE,
_SCN_START_TASK,
- _SCN_LOG_STRING,
- _SCN_GET_KEY,
+ _SCN_IPC_SEND,
+ _SCN_IPC_READ,
_SCN_ALLOCATE_RAM,
_SCN_MEMORY_INFO,
_SCN_WAIT_FOR_TASK,
_SCN_ENUMERATE_DIR,
- _SCN_PRINT_AT,
+ _SCN_SYSTEM_LOG,
_SCN_COUNT_OF_DIR,
- _SCN_CLEAR_SCREEN,
- _SCN_SET_COLOR,
- _SCN_SWAP_COLOR
+ _SCN_NEW_WINDOW,
+ _SCN_DELETE_WINDOW,
+ _SCN_RESIZE_WINDOW,
+ _SCN_REASSIGN_PIXBUF,
+ _SCN_PAINT_WINDOW,
+ _SCN_GET_WIN_ACTION,
+ _SCN_WAIT_FOR_ACTION,
+ _SCN_WAIT_IPC_SEND,
+ _SCN_WAIT_FOR_ANY_IPC,
+ _SCN_FIND_UNREAD_IPC,
+ _SCN_WAIT_IPC_READ,
+ _SCN_IS_TASK_RUNNING
};
static inline uint32_t _sc0(enum _scn eax) {
@@ -211,7 +113,7 @@ static inline void _exit_task() {
}
static inline _file_handle_t _open_file(_drive_number_t drive_number, const char *path) {
- return _sc2(_SCN_OPEN_FILE, drive_number, (uint32_t)path);
+ return (_file_handle_t)_sc2(_SCN_OPEN_FILE, drive_number, (uint32_t)path);
}
static inline void _close_file(_file_handle_t handle) {
@@ -226,16 +128,16 @@ static inline uint32_t _file_size(_file_handle_t handle) {
return _sc1(_SCN_FILE_SIZE, handle);
}
-static inline _process_handle_t _start_task(_drive_number_t drive_number, const char *path, const char *pass) {
- return _sc3(_SCN_START_TASK, drive_number, (uint32_t)path, (uint32_t)pass);
+static inline _task_handle_t _start_task(_drive_number_t drive_number, const char *path, const char *pass, _task_handle_t stdio_task) {
+ return (_task_handle_t)_sc4(_SCN_START_TASK, drive_number, (uint32_t)path, (uint32_t)pass, (uint32_t)stdio_task);
}
-static inline void _log_string(const char *sz) {
- _sc1(_SCN_LOG_STRING, (uint32_t)sz);
+static inline uint32_t _ipc_send(_task_handle_t handle, uint32_t count, const void *buffer) {
+ return _sc3(_SCN_IPC_SEND, handle, count, (uint32_t)buffer);
}
-static inline _key_code_t _get_key() {
- return _sc0(_SCN_GET_KEY);
+static inline uint32_t _ipc_read(_task_handle_t handle, uint32_t count, void *buffer) {
+ return _sc3(_SCN_IPC_SEND, handle, count, (uint32_t)buffer);
}
static inline void *_allocate_ram(uint32_t pages) {
@@ -262,7 +164,7 @@ static inline uint32_t _this_process_memory_left() {
return _sc1(_SCN_MEMORY_INFO, 0x4);
}
-static inline void _wait_for_task(_process_handle_t handle) {
+static inline void _wait_for_task(_task_handle_t handle) {
_sc1(_SCN_WAIT_FOR_TASK, handle);
}
@@ -270,24 +172,60 @@ static inline uint32_t _enumerate_dir(_drive_number_t drive_number, const char *
return _sc4(_SCN_ENUMERATE_DIR, drive_number, (uint32_t)path, (uint32_t)buffer, max_count);
}
-static inline void _print_at(uint8_t row, uint8_t col, const char *sz) {
- _sc2(_SCN_PRINT_AT, (row << 8) | col, (uint32_t)sz);
-}
-
static inline uint32_t _count_of_dir(uint8_t drive_number, const char *path) {
return _sc2(_SCN_COUNT_OF_DIR, drive_number, (uint32_t)path);
}
-static inline void _clear_screen() {
- _sc0(_SCN_CLEAR_SCREEN);
+static inline _window_handle_t _new_window(uint16_t width, uint16_t height, void *pixel_buffer) {
+ return (_window_handle_t)_sc3(_SCN_NEW_WINDOW, width, height, (uint32_t)pixel_buffer);
+}
+
+static inline void _delete_window(_window_handle_t window) {
+ _sc1(_SCN_DELETE_WINDOW, (uint32_t)window);
+}
+
+static inline void _resize_window(_window_handle_t window, uint16_t width, uint16_t height) {
+ _sc3(_SCN_RESIZE_WINDOW, (uint32_t)window, width, height);
+}
+
+static inline void _reassign_pixbuf(_window_handle_t window, void *pixel_buffer) {
+ _sc2(_SCN_REASSIGN_PIXBUF, (uint32_t)window, (uint32_t)pixel_buffer);
+}
+
+static inline void _paint_window(_window_handle_t window) {
+ _sc1(_SCN_PAINT_WINDOW, (uint32_t)window);
+}
+
+static inline void _get_win_action(_window_handle_t window, struct window_action *action_pointer) {
+ _sc2(_SCN_GET_WIN_ACTION, (uint32_t)window, (uint32_t)action_pointer);
+}
+
+static inline void _wait_for_action() {
+ _sc0(_SCN_WAIT_FOR_ACTION);
+}
+
+static inline void _wait_ipc_send(_task_handle_t sending_task) {
+ _sc1(_SCN_WAIT_IPC_SEND, sending_task);
+}
+
+static inline void _system_log(const char *sz) {
+ _sc1(_SCN_SYSTEM_LOG, (uint32_t)sz);
+}
+
+static inline void _wait_for_any_ipc() {
+ _sc0(_SCN_WAIT_FOR_ANY_IPC);
+}
+
+static inline _task_handle_t _find_unread_ipc() {
+ return _sc0(_SCN_FIND_UNREAD_IPC);
}
-static inline void _set_color(_vga_color_t color) {
- _sc1(_SCN_SET_COLOR, color);
+static inline void _wait_ipc_read(_task_handle_t reading_task) {
+ _sc1(_SCN_WAIT_IPC_READ, reading_task);
}
-static inline void _swap_color(uint8_t row, uint8_t col) {
- _sc1(_SCN_SWAP_COLOR, (row << 8) | col);
+static inline bool _is_task_running(_task_handle_t handle) {
+ return (bool)_sc1(_SCN_IS_TASK_RUNNING, handle);
}
#endif \ No newline at end of file