Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9756 → Rev 9757

/contrib/sdk/sources/newlib/libc/include/sys/kos.h
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;