forked from KolibriOS/kolibrios
d59b725fc3
git-svn-id: svn://kolibrios.org@1157 a494cfbc-eb01-0410-851d-a64ba20cac60
242 lines
7.4 KiB
C
Executable File
242 lines
7.4 KiB
C
Executable File
/*
|
|
libGUI dinamic library SDK
|
|
load library and link function
|
|
*/
|
|
|
|
#include "libGUI.h"
|
|
|
|
|
|
struct IMPORT
|
|
{
|
|
char *name;
|
|
void *function;
|
|
}__attribute__((packed));
|
|
|
|
typedef struct IMPORT import_t;
|
|
|
|
static char *sys_libGUI_path="/sys/lib/libGUI.obj";
|
|
|
|
static char* funcnames[] = {"LibGUIversion","InitLibGUI","LibGUImain","QuitLibGUI",
|
|
|
|
"CreateWindow","SetWindowSizeRequest",
|
|
|
|
"PackControls","DestroyControl","SetControlSizeRequest","GetControlSizeX",
|
|
"GetControlSizeY","SetControlNewPosition","GetControlPositionX",
|
|
"GetControlPositionY","SetFocuse","RedrawControl","SpecialRedrawControl",
|
|
|
|
"SetCallbackFunction","BlockCallbackFunction","UnblockCallbackFunction",
|
|
|
|
"SetIDL_Function","DestroyIDL_Function",
|
|
|
|
"SetTimerCallbackForFunction","DestroyTimerCallbackForFunction",
|
|
|
|
"SetCallbackFunctionForEvent","DestroyCallbackFunctionForEvent",
|
|
|
|
"CreateButton","CreateButtonWithText",
|
|
|
|
"CreateProgressBar","SetProgressBarPulse","ProgressBarSetText","ProgressBarGetText",
|
|
|
|
"CreateHorizontalScrollBar","CreateVerticalScrollBar",
|
|
|
|
"CreateScrolledWindow","ScrolledWindowPackControls",
|
|
|
|
"CreateImage",
|
|
|
|
"CreateText","TextBackgroundOn","TextBackgroundOff",
|
|
|
|
"LoadFont","FreeFont"};
|
|
|
|
|
|
static inline void* gui_ksys_load_dll(char *path)
|
|
{
|
|
void *dll_export;
|
|
|
|
__asm__ __volatile__(
|
|
"int $0x40"
|
|
:"=a"(dll_export)
|
|
:"a"(68),"b"(19),"c"(path));
|
|
|
|
return(dll_export);
|
|
}
|
|
|
|
static inline void gui_ksys_debug_out(int c)
|
|
{
|
|
__asm__ __volatile__(
|
|
"int $0x40"
|
|
:
|
|
:"a"(63),"b"(1),"c"(c));
|
|
}
|
|
|
|
static void gui_debug_out_str(char *s)
|
|
{
|
|
|
|
while(*s)
|
|
{
|
|
if (*s=='\n') gui_ksys_debug_out(13);
|
|
|
|
gui_ksys_debug_out(*s);
|
|
s++;
|
|
}
|
|
}
|
|
|
|
static int gui_strcmp(const char* string1, const char* string2)
|
|
{
|
|
while (1)
|
|
{
|
|
if (*string1<*string2)
|
|
return -1;
|
|
if (*string1>*string2)
|
|
return 1;
|
|
if (*string1=='\0')
|
|
return 0;
|
|
string1++;
|
|
string2++;
|
|
}
|
|
}
|
|
|
|
static void* gui_cofflib_getproc(import_t *lib, char *name)
|
|
{
|
|
int i;
|
|
|
|
for(i = 0; lib[i].name && gui_strcmp(name, lib[i].name); i++);
|
|
|
|
if(lib[i].name) return lib[i].function;
|
|
else return NULL;
|
|
}
|
|
|
|
static inline void gui_ksys_exit(int value)
|
|
{
|
|
__asm__ __volatile__(
|
|
"int $0x40"
|
|
:
|
|
:"a"(-1),"b"(value));
|
|
}
|
|
|
|
void link_libGUI(import_t *exp,char **imports)
|
|
{
|
|
LibGUIversion=(DWORD stdcall (*)(void))
|
|
gui_cofflib_getproc(exp,imports[0]);
|
|
InitLibGUI=(char stdcall (*)(void))
|
|
gui_cofflib_getproc(exp,imports[1]);
|
|
LibGUImain=(void stdcall (*)(parent_t *WindowParent))
|
|
gui_cofflib_getproc(exp,imports[2]);
|
|
QuitLibGUI=(void stdcall (*)(parent_t *window))
|
|
gui_cofflib_getproc(exp,imports[3]);
|
|
CreateWindow=(void* stdcall (*)(void))
|
|
gui_cofflib_getproc(exp,imports[4]);
|
|
SetWindowSizeRequest=(void stdcall (*)(parent_t *WindowParent,int size_x,int size_y))
|
|
gui_cofflib_getproc(exp,imports[5]);
|
|
PackControls=(void stdcall (*)(void *Parent,void *control))
|
|
gui_cofflib_getproc(exp,imports[6]);
|
|
DestroyControl=(void stdcall (*)(void *control))
|
|
gui_cofflib_getproc(exp,imports[7]);
|
|
SetControlSizeRequest=(void stdcall (*)(void *Control,int new_size_x,int new_size_y))
|
|
gui_cofflib_getproc(exp,imports[8]);
|
|
GetControlSizeX=(int stdcall (*)(void *Control))
|
|
gui_cofflib_getproc(exp,imports[9]);
|
|
GetControlSizeY=(int stdcall (*)(void *Control))
|
|
gui_cofflib_getproc(exp,imports[10]);
|
|
SetControlNewPosition=(void stdcall (*)(void *Control,int new_x,int new_y))
|
|
gui_cofflib_getproc(exp,imports[11]);
|
|
GetControlPositionX=(int stdcall (*)(void *Control))
|
|
gui_cofflib_getproc(exp,imports[12]);
|
|
GetControlPositionY=(int stdcall (*)(void *Control))
|
|
gui_cofflib_getproc(exp,imports[13]);
|
|
SetFocuse=(void* stdcall (*)(void *Control))
|
|
gui_cofflib_getproc(exp,imports[14]);
|
|
RedrawControl=(void stdcall (*)(void *Control))
|
|
gui_cofflib_getproc(exp,imports[15]);
|
|
SpecialRedrawControl=(void stdcall (*)(void *Control))
|
|
gui_cofflib_getproc(exp,imports[16]);
|
|
SetCallbackFunction=(gui_callback_t* stdcall (*)(void *Control,
|
|
int event_name,void *callback_func,void *callback_func_data))
|
|
gui_cofflib_getproc(exp,imports[17]);
|
|
BlockCallbackFunction=(void stdcall (*)(void *Control,gui_callback_t *callback_ID))
|
|
gui_cofflib_getproc(exp,imports[18]);
|
|
UnblockCallbackFunction=(void stdcall (*)(void *Control,gui_callback_t *callback_ID))
|
|
gui_cofflib_getproc(exp,imports[19]);
|
|
SetIDL_Function=(void stdcall (*)(parent_t *Parent,void *function,void *function_data))
|
|
gui_cofflib_getproc(exp,imports[20]);
|
|
DestroyIDL_Function=(void stdcall (*)(parent_t *Parent))
|
|
gui_cofflib_getproc(exp,imports[21]);
|
|
SetTimerCallbackForFunction=(gui_timer_t* stdcall (*)(parent_t *parent_window,
|
|
int time_tick,void *func,void *func_data))
|
|
gui_cofflib_getproc(exp,imports[22]);
|
|
DestroyTimerCallbackForFunction=(void stdcall (*)(gui_timer_t *timer))
|
|
gui_cofflib_getproc(exp,imports[23]);
|
|
SetCallbackFunctionForEvent=(gui_callbackevent_t* stdcall (*)(parent_t *parent_window,
|
|
int event_type,void *func,void *func_data))
|
|
gui_cofflib_getproc(exp,imports[24]);
|
|
DestroyCallbackFunctionForEvent=(void stdcall (*)(gui_callbackevent_t *callback_event))
|
|
gui_cofflib_getproc(exp,imports[25]);
|
|
CreateButton=(gui_button_t* stdcall (*)(gui_button_data_t *info_for_control))
|
|
gui_cofflib_getproc(exp,imports[26]);
|
|
CreateButtonWithText=(gui_button_t* stdcall (*)(gui_button_data_t *info,char *txt))
|
|
gui_cofflib_getproc(exp,imports[27]);
|
|
CreateProgressBar=(gui_progress_bar_t* stdcall (*)(gui_progress_bar_data_t *info_for_control))
|
|
gui_cofflib_getproc(exp,imports[28]);
|
|
SetProgressBarPulse=(void stdcall (*)(gui_progress_bar_t *ProgressBar,int time_update))
|
|
gui_cofflib_getproc(exp,imports[29]);
|
|
ProgressBarSetText=(void stdcall (*)(gui_progress_bar_t *pbar,char *txt))
|
|
gui_cofflib_getproc(exp,imports[30]);
|
|
ProgressBarGetText=(char* stdcall (*)(gui_progress_bar_t *pbar))
|
|
gui_cofflib_getproc(exp,imports[31]);
|
|
CreateHorizontalScrollBar=(gui_scroll_bar_t* stdcall (*)(gui_scroll_bar_data_t *info_for_control))
|
|
gui_cofflib_getproc(exp,imports[32]);
|
|
CreateVerticalScrollBar=(gui_scroll_bar_t* stdcall (*)(gui_scroll_bar_data_t *info_for_control))
|
|
gui_cofflib_getproc(exp,imports[33]);
|
|
CreateScrolledWindow=(gui_scrolled_window_t* stdcall (*)(gui_scrolled_window_data_t *info_for_control))
|
|
gui_cofflib_getproc(exp,imports[34]);
|
|
ScrolledWindowPackControls=(void stdcall (*)(gui_scrolled_window_t *parent,void *Control))
|
|
gui_cofflib_getproc(exp,imports[35]);
|
|
CreateImage=(gui_image_t* stdcall (*)(gui_image_data_t *info_for_control))
|
|
gui_cofflib_getproc(exp,imports[36]);
|
|
CreateText=(gui_text_t* stdcall (*)(gui_text_data_t *info_for_control))
|
|
gui_cofflib_getproc(exp,imports[37]);
|
|
TextBackgroundOn=(void stdcall (*)(gui_text_t *Text))
|
|
gui_cofflib_getproc(exp,imports[38]);
|
|
TextBackgroundOff=(void stdcall (*)(gui_text_t *Text))
|
|
gui_cofflib_getproc(exp,imports[39]);
|
|
LoadFont=(font_t* stdcall (*)(char *fullfontname))
|
|
gui_cofflib_getproc(exp,imports[40]);
|
|
FreeFont=(void stdcall (*)(font_t *font))
|
|
gui_cofflib_getproc(exp,imports[41]);
|
|
}
|
|
|
|
void LoadLibGUI(char *lib_path)
|
|
{
|
|
import_t *export;
|
|
char *path;
|
|
|
|
if (lib_path==NULL)
|
|
{
|
|
path=sys_libGUI_path;
|
|
export=(import_t*)gui_ksys_load_dll(path);
|
|
}
|
|
else
|
|
{
|
|
path=lib_path;
|
|
export=(import_t*)gui_ksys_load_dll(path);
|
|
}
|
|
|
|
if (export==NULL)
|
|
{
|
|
gui_debug_out_str("\ncan't load lib=");
|
|
gui_debug_out_str(path);
|
|
gui_ksys_exit(0);
|
|
}
|
|
else
|
|
{
|
|
link_libGUI(export,funcnames);
|
|
if (InitLibGUI())
|
|
{
|
|
gui_debug_out_str("\ncan't initialize libGUI");
|
|
gui_ksys_exit(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|