Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1176 | andrew_pro | 1 | /* |
2 | libGUI dinamic library SDK |
||
3 | load library and link function |
||
4 | */ |
||
5 | |||
6 | #include "libGUI.h" |
||
7 | |||
8 | |||
9 | struct IMPORT |
||
10 | { |
||
11 | char *name; |
||
12 | void *function; |
||
13 | }__attribute__((packed)); |
||
14 | |||
15 | typedef struct IMPORT import_t; |
||
16 | |||
17 | static char *sys_libGUI_path="/sys/lib/libGUI.obj"; |
||
18 | |||
19 | static char* funcnames[] = {"LibGUIversion","InitLibGUI","LibGUImain","QuitLibGUI", |
||
20 | |||
21 | "CreateWindow","SetWindowSizeRequest", |
||
22 | |||
23 | "PackControls","DestroyControl","SetControlSizeRequest","GetControlSizeX", |
||
24 | "GetControlSizeY","SetControlNewPosition","GetControlPositionX", |
||
25 | "GetControlPositionY","SetFocuse","RedrawControl","SpecialRedrawControl", |
||
26 | |||
27 | "SetCallbackFunction","BlockCallbackFunction","UnblockCallbackFunction", |
||
28 | |||
29 | "SetIDL_Function","DestroyIDL_Function", |
||
30 | |||
31 | "SetTimerCallbackForFunction","DestroyTimerCallbackForFunction", |
||
32 | |||
33 | "SetCallbackFunctionForEvent","DestroyCallbackFunctionForEvent", |
||
34 | |||
35 | "CreateButton","CreateButtonWithText", |
||
36 | |||
37 | "CreateProgressBar","SetProgressBarPulse","ProgressBarSetText","ProgressBarGetText", |
||
38 | |||
39 | "CreateHorizontalScrollBar","CreateVerticalScrollBar", |
||
40 | |||
41 | "CreateScrolledWindow","ScrolledWindowPackControls", |
||
42 | |||
43 | "CreateImage", |
||
44 | |||
45 | "CreateText","TextBackgroundOn","TextBackgroundOff", |
||
46 | |||
47 | "LoadFont","FreeFont"}; |
||
48 | |||
49 | |||
50 | static inline void* gui_ksys_load_dll(char *path) |
||
51 | { |
||
52 | void *dll_export; |
||
53 | |||
54 | __asm__ __volatile__( |
||
55 | "int $0x40" |
||
56 | :"=a"(dll_export) |
||
57 | :"a"(68),"b"(19),"c"(path)); |
||
58 | |||
59 | return(dll_export); |
||
60 | } |
||
61 | |||
62 | static inline void gui_ksys_debug_out(int c) |
||
63 | { |
||
64 | __asm__ __volatile__( |
||
65 | "int $0x40" |
||
66 | : |
||
67 | :"a"(63),"b"(1),"c"(c)); |
||
68 | } |
||
69 | |||
70 | static void gui_debug_out_str(char *s) |
||
71 | { |
||
72 | |||
73 | while(*s) |
||
74 | { |
||
75 | if (*s=='\n') gui_ksys_debug_out(13); |
||
76 | |||
77 | gui_ksys_debug_out(*s); |
||
78 | s++; |
||
79 | } |
||
80 | } |
||
81 | |||
82 | static int gui_strcmp(const char* string1, const char* string2) |
||
83 | { |
||
84 | while (1) |
||
85 | { |
||
86 | if (*string1<*string2) |
||
87 | return -1; |
||
88 | if (*string1>*string2) |
||
89 | return 1; |
||
90 | if (*string1=='\0') |
||
91 | return 0; |
||
92 | string1++; |
||
93 | string2++; |
||
94 | } |
||
95 | } |
||
96 | |||
97 | static void* gui_cofflib_getproc(import_t *lib, char *name) |
||
98 | { |
||
99 | int i; |
||
100 | |||
101 | for(i = 0; lib[i].name && gui_strcmp(name, lib[i].name); i++); |
||
102 | |||
103 | if(lib[i].name) return lib[i].function; |
||
104 | else return NULL; |
||
105 | } |
||
106 | |||
107 | static inline void gui_ksys_exit(int value) |
||
108 | { |
||
109 | __asm__ __volatile__( |
||
110 | "int $0x40" |
||
111 | : |
||
112 | :"a"(-1),"b"(value)); |
||
113 | } |
||
114 | |||
115 | void link_libGUI(import_t *exp,char **imports) |
||
116 | { |
||
117 | LibGUIversion=(DWORD stdcall (*)(void)) |
||
118 | gui_cofflib_getproc(exp,imports[0]); |
||
119 | InitLibGUI=(char stdcall (*)(void)) |
||
120 | gui_cofflib_getproc(exp,imports[1]); |
||
121 | LibGUImain=(void stdcall (*)(parent_t *WindowParent)) |
||
122 | gui_cofflib_getproc(exp,imports[2]); |
||
123 | QuitLibGUI=(void stdcall (*)(parent_t *window)) |
||
124 | gui_cofflib_getproc(exp,imports[3]); |
||
125 | CreateWindow=(void* stdcall (*)(void)) |
||
126 | gui_cofflib_getproc(exp,imports[4]); |
||
127 | SetWindowSizeRequest=(void stdcall (*)(parent_t *WindowParent,int size_x,int size_y)) |
||
128 | gui_cofflib_getproc(exp,imports[5]); |
||
129 | PackControls=(void stdcall (*)(void *Parent,void *control)) |
||
130 | gui_cofflib_getproc(exp,imports[6]); |
||
131 | DestroyControl=(void stdcall (*)(void *control)) |
||
132 | gui_cofflib_getproc(exp,imports[7]); |
||
133 | SetControlSizeRequest=(void stdcall (*)(void *Control,int new_size_x,int new_size_y)) |
||
134 | gui_cofflib_getproc(exp,imports[8]); |
||
135 | GetControlSizeX=(int stdcall (*)(void *Control)) |
||
136 | gui_cofflib_getproc(exp,imports[9]); |
||
137 | GetControlSizeY=(int stdcall (*)(void *Control)) |
||
138 | gui_cofflib_getproc(exp,imports[10]); |
||
139 | SetControlNewPosition=(void stdcall (*)(void *Control,int new_x,int new_y)) |
||
140 | gui_cofflib_getproc(exp,imports[11]); |
||
141 | GetControlPositionX=(int stdcall (*)(void *Control)) |
||
142 | gui_cofflib_getproc(exp,imports[12]); |
||
143 | GetControlPositionY=(int stdcall (*)(void *Control)) |
||
144 | gui_cofflib_getproc(exp,imports[13]); |
||
145 | SetFocuse=(void* stdcall (*)(void *Control)) |
||
146 | gui_cofflib_getproc(exp,imports[14]); |
||
147 | RedrawControl=(void stdcall (*)(void *Control)) |
||
148 | gui_cofflib_getproc(exp,imports[15]); |
||
149 | SpecialRedrawControl=(void stdcall (*)(void *Control)) |
||
150 | gui_cofflib_getproc(exp,imports[16]); |
||
151 | SetCallbackFunction=(gui_callback_t* stdcall (*)(void *Control, |
||
152 | int event_name,void *callback_func,void *callback_func_data)) |
||
153 | gui_cofflib_getproc(exp,imports[17]); |
||
154 | BlockCallbackFunction=(void stdcall (*)(void *Control,gui_callback_t *callback_ID)) |
||
155 | gui_cofflib_getproc(exp,imports[18]); |
||
156 | UnblockCallbackFunction=(void stdcall (*)(void *Control,gui_callback_t *callback_ID)) |
||
157 | gui_cofflib_getproc(exp,imports[19]); |
||
158 | SetIDL_Function=(void stdcall (*)(parent_t *Parent,void *function,void *function_data)) |
||
159 | gui_cofflib_getproc(exp,imports[20]); |
||
160 | DestroyIDL_Function=(void stdcall (*)(parent_t *Parent)) |
||
161 | gui_cofflib_getproc(exp,imports[21]); |
||
162 | SetTimerCallbackForFunction=(gui_timer_t* stdcall (*)(parent_t *parent_window, |
||
163 | int time_tick,void *func,void *func_data)) |
||
164 | gui_cofflib_getproc(exp,imports[22]); |
||
165 | DestroyTimerCallbackForFunction=(void stdcall (*)(gui_timer_t *timer)) |
||
166 | gui_cofflib_getproc(exp,imports[23]); |
||
167 | SetCallbackFunctionForEvent=(gui_callbackevent_t* stdcall (*)(parent_t *parent_window, |
||
168 | int event_type,void *func,void *func_data)) |
||
169 | gui_cofflib_getproc(exp,imports[24]); |
||
170 | DestroyCallbackFunctionForEvent=(void stdcall (*)(gui_callbackevent_t *callback_event)) |
||
171 | gui_cofflib_getproc(exp,imports[25]); |
||
172 | CreateButton=(gui_button_t* stdcall (*)(gui_button_data_t *info_for_control)) |
||
173 | gui_cofflib_getproc(exp,imports[26]); |
||
174 | CreateButtonWithText=(gui_button_t* stdcall (*)(gui_button_data_t *info,char *txt)) |
||
175 | gui_cofflib_getproc(exp,imports[27]); |
||
176 | CreateProgressBar=(gui_progress_bar_t* stdcall (*)(gui_progress_bar_data_t *info_for_control)) |
||
177 | gui_cofflib_getproc(exp,imports[28]); |
||
178 | SetProgressBarPulse=(void stdcall (*)(gui_progress_bar_t *ProgressBar,int time_update)) |
||
179 | gui_cofflib_getproc(exp,imports[29]); |
||
180 | ProgressBarSetText=(void stdcall (*)(gui_progress_bar_t *pbar,char *txt)) |
||
181 | gui_cofflib_getproc(exp,imports[30]); |
||
182 | ProgressBarGetText=(char* stdcall (*)(gui_progress_bar_t *pbar)) |
||
183 | gui_cofflib_getproc(exp,imports[31]); |
||
184 | CreateHorizontalScrollBar=(gui_scroll_bar_t* stdcall (*)(gui_scroll_bar_data_t *info_for_control)) |
||
185 | gui_cofflib_getproc(exp,imports[32]); |
||
186 | CreateVerticalScrollBar=(gui_scroll_bar_t* stdcall (*)(gui_scroll_bar_data_t *info_for_control)) |
||
187 | gui_cofflib_getproc(exp,imports[33]); |
||
188 | CreateScrolledWindow=(gui_scrolled_window_t* stdcall (*)(gui_scrolled_window_data_t *info_for_control)) |
||
189 | gui_cofflib_getproc(exp,imports[34]); |
||
190 | ScrolledWindowPackControls=(void stdcall (*)(gui_scrolled_window_t *parent,void *Control)) |
||
191 | gui_cofflib_getproc(exp,imports[35]); |
||
192 | CreateImage=(gui_image_t* stdcall (*)(gui_image_data_t *info_for_control)) |
||
193 | gui_cofflib_getproc(exp,imports[36]); |
||
194 | CreateText=(gui_text_t* stdcall (*)(gui_text_data_t *info_for_control)) |
||
195 | gui_cofflib_getproc(exp,imports[37]); |
||
196 | TextBackgroundOn=(void stdcall (*)(gui_text_t *Text)) |
||
197 | gui_cofflib_getproc(exp,imports[38]); |
||
198 | TextBackgroundOff=(void stdcall (*)(gui_text_t *Text)) |
||
199 | gui_cofflib_getproc(exp,imports[39]); |
||
200 | LoadFont=(font_t* stdcall (*)(char *fullfontname)) |
||
201 | gui_cofflib_getproc(exp,imports[40]); |
||
202 | FreeFont=(void stdcall (*)(font_t *font)) |
||
203 | gui_cofflib_getproc(exp,imports[41]); |
||
204 | } |
||
205 | |||
206 | void LoadLibGUI(char *lib_path) |
||
207 | { |
||
208 | import_t *export; |
||
209 | char *path; |
||
210 | |||
211 | if (lib_path==NULL) |
||
212 | { |
||
213 | path=sys_libGUI_path; |
||
214 | export=(import_t*)gui_ksys_load_dll(path); |
||
215 | } |
||
216 | else |
||
217 | { |
||
218 | path=lib_path; |
||
219 | export=(import_t*)gui_ksys_load_dll(path); |
||
220 | } |
||
221 | |||
222 | if (export==NULL) |
||
223 | { |
||
224 | gui_debug_out_str("\ncan't load lib="); |
||
225 | gui_debug_out_str(path); |
||
226 | gui_ksys_exit(0); |
||
227 | } |
||
228 | else |
||
229 | { |
||
230 | link_libGUI(export,funcnames); |
||
231 | if (InitLibGUI()) |
||
232 | { |
||
233 | gui_debug_out_str("\ncan't initialize libGUI"); |
||
234 | gui_ksys_exit(0); |
||
235 | } |
||
236 | } |
||
237 | }*string2) |
||
238 | |||
239 |