From 191083b6c32a36878211dbcf56de4dd2e27c2edb Mon Sep 17 00:00:00 2001 From: siemargl Date: Tue, 12 Apr 2016 18:50:48 +0000 Subject: [PATCH] callin'convention fix git-svn-id: svn://kolibrios.org@6395 a494cfbc-eb01-0410-851d-a64ba20cac60 --- contrib/C_Layer/libguic_kolibri/boardmsg.c | 16 ++++--- .../C_Layer/libguic_kolibri/kolibri_button.h | 3 +- .../C_Layer/libguic_kolibri/kolibri_debug.h | 7 +-- contrib/C_Layer/libguic_kolibri/kolibri_gui.h | 47 ++++++++++--------- 4 files changed, 41 insertions(+), 32 deletions(-) diff --git a/contrib/C_Layer/libguic_kolibri/boardmsg.c b/contrib/C_Layer/libguic_kolibri/boardmsg.c index 7aff7c9662..64af3b961b 100644 --- a/contrib/C_Layer/libguic_kolibri/boardmsg.c +++ b/contrib/C_Layer/libguic_kolibri/boardmsg.c @@ -2,7 +2,7 @@ int main() { - /* Load all libraries, initialize global tables like system color table and + /* Load all libraries, initialize global tables like system color table and operations table. kolibri_gui_init() will EXIT with mcall -1 if it fails to do it's job. This is all you need to call and all libraries and GUI elements can be used after a successful call to this function @@ -16,13 +16,13 @@ int main() struct check_box *checkbox = kolibri_new_check_box(20, 40, 12, 12, "Append BOARDMSG to entered message."); struct edit_box *textbox = kolibri_new_edit_box(20, 55, 40); struct kolibri_button *button = kolibri_new_button(310, 55, 24, 14, 0x21, kolibri_color_table.color_work_button); - + kolibri_window_add_element(main_window, KOLIBRI_EDIT_BOX, textbox); kolibri_window_add_element(main_window, KOLIBRI_CHECK_BOX, checkbox); kolibri_window_add_element(main_window, KOLIBRI_BUTTON, button); - - volatile unsigned press_key2; - + + volatile unsigned press_key; + do /* Start of main activity loop */ { if(gui_event == KOLIBRI_EVENT_REDRAW) @@ -30,12 +30,13 @@ int main() kolibri_handle_event_redraw(main_window); } else if(gui_event == KOLIBRI_EVENT_KEY) - { + { +/* siemargl commented out because keys stealed from textinput key = get_key(); switch (key.code) { case 13: - if(checkbox -> flags & CHECKBOX_IS_SET) /* Append BoardMsg checkbox is set */ + if(checkbox -> flags & CHECKBOX_IS_SET) /* Append BoardMsg checkbox is set * / debug_board_write_str("BOARDMSG: "); debug_board_write_str(textbox->text); @@ -43,6 +44,7 @@ int main() break; } press_key = key.val; +*/ kolibri_handle_event_key(main_window); } else if(gui_event == KOLIBRI_EVENT_BUTTON) diff --git a/contrib/C_Layer/libguic_kolibri/kolibri_button.h b/contrib/C_Layer/libguic_kolibri/kolibri_button.h index fa5a868201..cbaf743ffd 100644 --- a/contrib/C_Layer/libguic_kolibri/kolibri_button.h +++ b/contrib/C_Layer/libguic_kolibri/kolibri_button.h @@ -9,7 +9,7 @@ struct kolibri_button { unsigned int XY; }; -struct kolibri_button *kolibri_new_button(unsigned int tlx, unsigned int tly, unsigned int sizex, unsigned int sizey, +struct kolibri_button *kolibri_new_button(unsigned int tlx, unsigned int tly, unsigned int sizex, unsigned int sizey, unsigned int identifier, unsigned int color) { struct kolibri_button* new_button = (struct kolibri_button *)malloc(sizeof(struct kolibri_button)); @@ -18,6 +18,7 @@ struct kolibri_button *kolibri_new_button(unsigned int tlx, unsigned int tly, un new_button -> color = color; new_button -> identifier = identifier; new_button -> XY = 0; + return new_button; } void draw_button(struct kolibri_button *some_button) diff --git a/contrib/C_Layer/libguic_kolibri/kolibri_debug.h b/contrib/C_Layer/libguic_kolibri/kolibri_debug.h index afab39cd32..5b0e1a3d04 100644 --- a/contrib/C_Layer/libguic_kolibri/kolibri_debug.h +++ b/contrib/C_Layer/libguic_kolibri/kolibri_debug.h @@ -1,7 +1,7 @@ #ifndef KOLIBRI_DEBUG_H #define KOLIBRI_DEBUG_H -/* Write a printf() like function (variable argument list) for +/* Write a printf() like function (variable argument list) for writing to debug board */ inline void debug_board_write_byte(const char ch){ @@ -10,8 +10,9 @@ inline void debug_board_write_byte(const char ch){ : :"a"(63), "b"(1), "c"(ch)); } - -inline void debug_board_write_str(const char* str){ + +//added noninline because incofortabre stepping in in debugger +void __attribute__ ((noinline)) debug_board_write_str(const char* str){ while(*str) debug_board_write_byte(*str++); } diff --git a/contrib/C_Layer/libguic_kolibri/kolibri_gui.h b/contrib/C_Layer/libguic_kolibri/kolibri_gui.h index 14b12392a7..1eea3eaaac 100644 --- a/contrib/C_Layer/libguic_kolibri/kolibri_gui.h +++ b/contrib/C_Layer/libguic_kolibri/kolibri_gui.h @@ -1,7 +1,7 @@ #ifndef KOLIBRI_GUI_H #define KOLIBRI_GUI_H -#include "stdlib.h" /* for malloc() */ +#include /* for malloc() */ #include #include "kolibri_debug.h" /* work with debug board */ @@ -25,34 +25,37 @@ void kolibri_handle_event_redraw(struct kolibri_window* some_window) BeginDraw(); - DrawWindow(some_window->topleftx, some_window->toplefty, + DrawWindow(some_window->topleftx, some_window->toplefty, some_window->sizex, some_window->sizey, some_window->window_title, kolibri_color_table.color_work_area, some_window->XY); - + /* Enumerate and draw all window elements here */ if(some_window->elements) /* Draw all elements added to window */ { - struct kolibri_window_element* current_element = some_window -> elements; - + struct kolibri_window_element* current_element = some_window -> elements; + do { /* The redraw_fn serves as draw_fn on initial draw */ if(kolibri_gui_op_table[current_element -> type].redraw_fn) kolibri_gui_op_table[current_element -> type].redraw_fn(current_element -> element); - + +//sie after fixing calling conventions no more needed +/* switch(current_element -> type) { case KOLIBRI_EDIT_BOX: case KOLIBRI_CHECK_BOX: - __asm__ volatile("push $0x13371337"::); /* Random value pushed to balance stack */ - /* otherwise edit_box_draw leaves stack unbalanced */ - /* and GCC jumps like a crazy motha' fucka' */ + __asm__ volatile("push $0x13371337"::); / * Random value pushed to balance stack * / + / * otherwise edit_box_draw leaves stack unbalanced * / + / * and GCC jumps like a crazy motha' fucka' * / + break; } - +*/ current_element = current_element -> next; - + } while(current_element != some_window->elements); /* Have we covered all elements? */ } } @@ -60,16 +63,16 @@ void kolibri_handle_event_redraw(struct kolibri_window* some_window) void kolibri_handle_event_key(struct kolibri_window* some_window) { /* Enumerate and trigger key handling functions of window elements here */ - if(some_window->elements) + if(some_window->elements) { - struct kolibri_window_element *current_element = some_window -> elements; + struct kolibri_window_element *current_element = some_window -> elements; do { /* Only execute if the function pointer isn't NULL */ if(kolibri_gui_op_table[current_element -> type].key_fn) kolibri_gui_op_table[current_element -> type].key_fn(current_element -> element); - + current_element = current_element -> next; } while(current_element != some_window->elements); /* Have we covered all elements? */ } @@ -78,17 +81,17 @@ void kolibri_handle_event_key(struct kolibri_window* some_window) void kolibri_handle_event_mouse(struct kolibri_window* some_window) { /* Enumerate and trigger mouse handling functions of window elements here */ - if(some_window->elements) + if(some_window->elements) { - struct kolibri_window_element *current_element = some_window -> elements; + struct kolibri_window_element *current_element = some_window -> elements; do { - if(kolibri_gui_op_table[current_element -> type].mouse_fn) kolibri_gui_op_table[current_element -> type].mouse_fn(current_element -> element); current_element = current_element -> next; + } while(current_element != some_window->elements); /* Have we covered all elements? */ } } @@ -102,9 +105,9 @@ int kolibri_gui_init(void) { int boxlib_init_status = kolibri_boxlib_init(); - if(boxlib_init_status == 0) + if(boxlib_init_status == 0) debug_board_write_str("ashmew2 is happy: Kolibri GUI Successfully Initialized.\n"); - else + else { debug_board_write_str("ashmew2 is sad: Kolibri GUI Failed to initialize.\n"); kolibri_exit(); @@ -120,10 +123,12 @@ int kolibri_gui_init(void) /* Set up system events for buttons, mouse and keyboard and redraw */ /* Also set filters so that window receives mouse events only when active and mouse inside window */ - __asm__ volatile("int $0x40"::"a"(40), "b"(0xC0000027)); + __asm__ volatile("int $0x40"::"a"(40), "b"(0xC0000027)); + + return boxlib_init_status; } -/* Note: The current implementation tries to automatically colors +/* Note: The current implementation tries to automatically colors GUI elements with system theme */ #endif /* KOLIBRI_GUI_H */