1,14 → 1,10 |
//////////////////////////////////////////// |
// KolibriOS Syscalls // |
// sys/kos.h // |
// Based on kos32sys and other wrappers // |
// // |
// Syscalls scheme: kos_XxxYyy // |
// (e.g. kos_DrawWindow) // |
//////////////////////////////////////////// |
/* |
sys/kos.h |
An attempt to create new C/C++ wrapper for syscalls |
Based on kos32sys.h |
KolibriOS Team |
*/ |
|
// Some code was written by maxcodehack |
|
#include <stdint.h> |
#include <string.h> |
|
15,10 → 11,9 |
/*********************** Types *************************/ |
typedef unsigned int color_t; |
|
// Struct for App running |
// struct for sysfn 70 |
#pragma pack(push,1) |
typedef struct |
{ |
typedef struct { |
unsigned p00; |
unsigned p04; |
char *p08; |
29,27 → 24,23 |
} kos_Struct70; |
#pragma pack(pop) |
|
// Blitter struct |
struct blit_call |
{ |
// struct for blitter |
struct blit_call { |
int dstx; |
int dsty; |
int w; |
int h; |
|
int srcx; |
int srcy; |
int srcw; |
int srch; |
|
void *bitmap; |
int stride; |
}; |
|
// Process info for sysfn 9 |
// struct for sysfn 9 |
#pragma pack(push, 1) |
struct proc_info |
{ |
struct proc_info { |
unsigned long cpu_usage; |
unsigned short pos_in_stack; |
unsigned short slot; |
68,7 → 59,7 |
}; |
#pragma pack(pop) |
|
// Color struct for sysfn 48 |
// struct for sysfn 48 |
struct kolibri_system_colors { |
color_t frame_area; |
color_t grab_bar; |
82,11 → 73,9 |
color_t work_graph; |
}; |
|
typedef union __attribute__((packed)) |
{ |
typedef union __attribute__((packed)) { |
uint32_t val; |
struct |
{ |
struct { |
short x; |
short y; |
}; |
94,24 → 83,17 |
|
|
/*********************** Window Syscalls *************************/ |
// Start drawing |
static inline void kos_BeginDraw(void) |
{ |
static inline void kos_BeginDraw(void) { |
__asm__ __volatile__( |
"int $0x40" ::"a"(12),"b"(1)); |
}; |
|
// End drawing |
static inline void kos_EndDraw(void) |
{ |
static inline void kos_EndDraw(void) { |
__asm__ __volatile__( |
"int $0x40" ::"a"(12),"b"(2)); |
}; |
|
// Draw window |
static inline void kos_DrawWindow(int x, int y, int w, int h, const char *title, |
color_t bgcolor, uint32_t style) |
{ |
static inline void kos_DrawWindow(int x, int y, int w, int h, const char *title, color_t bgcolor, uint32_t style) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(0), |
122,14 → 104,11 |
"S"(0) : "memory"); |
}; |
|
// Set window layer behaviour |
#define ZPOS_DESKTOP -2 |
#define ZPOS_ALWAYS_BACK -1 |
#define ZPOS_NORMAL 0 |
#define ZPOS_ALWAYS_TOP 1 |
|
static inline void kos_SetWindowLayerBehaviour(int zpos) |
{ |
static inline void kos_SetWindowLayerBehaviour(int zpos) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(18), |
139,10 → 118,8 |
"S"(zpos) : "memory"); |
}; |
|
// Change window size |
#define OLD -1 |
static inline void kos_ChangeWindow(int new_x, int new_y, int new_w, int new_h) |
{ |
static inline void kos_ChangeWindow(int new_x, int new_y, int new_w, int new_h) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(67), "b"(new_x), "c"(new_y), "d"(new_w),"S"(new_h) |
150,9 → 127,7 |
} |
|
/*********************** Other GUI functions *************************/ |
// Draw text |
static inline void kos_DrawText(int x, int y, const char *text, color_t color) |
{ |
static inline void kos_DrawText(int x, int y, const char *text, color_t color) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(4),"d"(text), |
161,9 → 136,7 |
:"memory"); |
} |
|
// Draw button |
static inline void kos_DrawButton(int x, int y, int w, int h, int id, color_t color) |
{ |
static inline void kos_DrawButton(int x, int y, int w, int h, int id, color_t color) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(8), |
173,9 → 146,7 |
"S"(color)); |
}; |
|
// Draw button with text |
void kos_DrawButtonWithText(int x, int y, int w, int h, int id, color_t color, const char* text) |
{ |
static inline void kos_DrawButtonWithText(int x, int y, int w, int h, int id, color_t color, const char* text) { |
kos_DrawButton(x, y, w, h, id, color); |
|
int tx = ((((-strlen(text))*8)+w)/2)+x; |
184,9 → 155,7 |
kos_DrawText(tx, ty, text, 0x90000000); |
}; |
|
// Draw line |
static inline void kos_DrawLine(int x_start, int y_start, int x_end, int y_end, color_t color) |
{ |
static inline void kos_DrawLine(int x_start, int y_start, int x_end, int y_end, color_t color) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(38), "d"(color), |
194,9 → 163,7 |
"c"((y_start << 16) | y_end)); |
} |
|
// Draw bar |
static inline void kos_DrawBar(int x, int y, int w, int h, color_t color) |
{ |
static inline void kos_DrawBar(int x, int y, int w, int h, color_t color) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(13), "d"(color), |
204,8 → 171,7 |
"c"((y << 16) | h)); |
} |
|
// Put one pixel |
void kos_PutPixel(int x, int y, color_t color) { |
static inline void kos_PutPixel(int x, int y, color_t color) { |
__asm__ __volatile__("int $0x40" |
::"a"(1), |
"b"(x), |
213,9 → 179,7 |
"d"(color)); |
} |
|
// Draw bitmap image |
static inline void kos_DrawBitmap(void *bitmap, int x, int y, int w, int h) |
{ |
static inline void kos_DrawBitmap(void *bitmap, int x, int y, int w, int h) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(7), "b"(bitmap), |
223,7 → 187,6 |
"d"((x << 16) | y)); |
} |
|
// Blitter |
static inline void Blit(void *bitmap, int dst_x, int dst_y, |
int src_x, int src_y, int w, int h, |
int src_w, int src_h, int stride) |
247,8 → 210,7 |
}; |
|
// Get screen part as image |
static inline void kos_ScreenShot(char* image, int x, int y, int w, int h) |
{ |
static inline void kos_ScreenShot(char* image, int x, int y, int w, int h) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(36), |
258,9 → 220,8 |
}; |
|
/*********************** Skin *************************/ |
// Return skin height |
static inline uint32_t kos_SkinHeight(void) |
{ |
// Get skin height |
static inline uint32_t kos_SkinHeight(void) { |
uint32_t height; |
|
__asm__ __volatile__( |
271,15 → 232,11 |
}; |
|
/*********************** Mouse *************************/ |
// Get mouse position |
#define POS_SCREEN 0 |
#define POS_WINDOW 1 |
|
static inline |
pos_t kos_GetMousePos(int origin) |
{ |
static inline pos_t kos_GetMousePos(int origin) { |
pos_t val; |
|
__asm__ __volatile__( |
"int $0x40 \n\t" |
"rol $16, %%eax" |
288,10 → 245,7 |
return val; |
} |
|
// Get mouse buttons |
static inline |
uint32_t kos_GetMouseButtons(void) |
{ |
static inline uint32_t kos_GetMouseButtons(void) { |
uint32_t val; |
|
__asm__ __volatile__( |
301,10 → 255,7 |
return val; |
}; |
|
// Get mouse wheels |
static inline |
uint32_t kos_GetMouseWheels(void) |
{ |
static inline uint32_t kos_GetMouseWheels(void) { |
uint32_t val; |
|
__asm__ __volatile__( |
314,9 → 265,7 |
return val; |
}; |
|
// Load cursor |
static inline uint32_t kos_LoadCursor(void *path, uint32_t flags) |
{ |
static inline uint32_t kos_LoadCursor(void *path, uint32_t flags) { |
uint32_t val; |
__asm__ __volatile__( |
"int $0x40" |
325,9 → 274,7 |
return val; |
} |
|
// Set cursor |
static inline uint32_t kos_SetCursor(uint32_t cursor) |
{ |
static inline uint32_t kos_SetCursor(uint32_t cursor) { |
uint32_t old; |
__asm__ __volatile__( |
"int $0x40" |
336,9 → 283,7 |
return old; |
}; |
|
// Destroy cursor |
static inline int kos_DestroyCursor(uint32_t cursor) |
{ |
static inline int kos_DestroyCursor(uint32_t cursor) { |
int ret; |
__asm__ __volatile__( |
"int $0x40" |
359,9 → 304,7 |
#define evNetwork 8 |
#define evDebug 9 |
|
static inline |
uint32_t kos_WaitForEventTimeout(uint32_t time) |
{ |
static inline uint32_t kos_WaitForEventTimeout(uint32_t time) { |
uint32_t val; |
__asm__ __volatile__( |
"int $0x40" |
370,8 → 313,7 |
return val; |
}; |
|
static inline uint32_t kos_CheckForEvent(void) |
{ |
static inline uint32_t kos_CheckForEvent(void) { |
uint32_t val; |
__asm__ __volatile__( |
"int $0x40" |
380,8 → 322,7 |
return val; |
}; |
|
static inline uint32_t kos_WaitForEvent(void) |
{ |
static inline uint32_t kos_WaitForEvent(void) { |
uint32_t val; |
__asm__ __volatile__( |
"int $0x40" |
404,8 → 345,7 |
#define EVM_MOUSE_FILTER 0x80000000 |
#define EVM_CURSOR_FILTER 0x40000000 |
|
static inline uint32_t kos_SetMaskForEvents(uint32_t event_mask) |
{ |
static inline uint32_t kos_SetMaskForEvents(uint32_t event_mask) { |
uint32_t old_event_mask; |
__asm__ __volatile__( |
"int $0x40" |
416,18 → 356,13 |
}; |
|
/*********************** Other *************************/ |
// Get key |
int kos_GetKey() |
{ |
static inline int kos_GetKey() { |
unsigned short key; |
__asm__ __volatile__("int $0x40":"=a"(key):"0"(2)); |
if(!(key & 0xFF)) return (key>>8)&0xFF; else return 0; |
} |
|
// Get pressed button ID |
static inline |
uint32_t kos_GetButtonID(void) |
{ |
static inline uint32_t kos_GetButtonID(void) { |
uint32_t val; |
__asm__ __volatile__( |
"int $0x40" |
436,9 → 371,7 |
return val>>8; |
}; |
|
// Sleep.. |
static inline void kos_Delay(uint32_t time) |
{ |
static inline void kos_Delay(uint32_t time) { |
__asm__ __volatile__( |
"int $0x40" |
::"a"(5), "b"(time) |
445,10 → 378,7 |
:"memory"); |
}; |
|
// Get screen size |
static inline |
pos_t kos_ScreenSize() |
{ |
static inline pos_t kos_ScreenSize() { |
pos_t size; |
__asm__ __volatile__( |
"int $0x40" |
458,9 → 388,7 |
return size; |
}; |
|
// Get system color table |
static inline void kos_GetSystemColors(struct kolibri_system_colors *color_table) |
{ |
static inline void kos_GetSystemColors(struct kolibri_system_colors *color_table) { |
__asm__ __volatile__ ("int $0x40" |
: |
:"a"(48),"b"(3),"c"(color_table),"d"(40) |
467,9 → 395,8 |
); |
} |
|
// SysFn 9 |
static inline void kos_ProcessInfo(char *info) |
{ |
// sysfn 9 |
static inline void kos_ProcessInfo(char *info) { |
__asm__ __volatile__( |
"int $0x40" |
: |
477,8 → 404,7 |
:"memory"); |
}; |
|
void kos_RunApp(char* app, char* param) |
{ |
static inline void kos_RunApp(char* app, char* param) { |
kos_Struct70 r; |
r.p00 = 7; |
r.p04 = 0; |