Microcontroller GUI library from embeddedlightning.com

Dependents:   Bicycl_Computer_NUCLEO-F411RE Bicycl_Computer_NUCLEO-L476RG

Revision:
0:42ded5e50e40
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ugui.h	Tue Nov 17 14:52:50 2015 +0000
@@ -0,0 +1,815 @@
+/* -------------------------------------------------------------------------------- */
+/* -- µGUI - Generic GUI module (C)Achim Döbler, 2015                            -- */
+/* -------------------------------------------------------------------------------- */
+// µGUI is a generic GUI module for embedded systems.
+// This is a free software that is open for education, research and commercial
+// developments under license policy of following terms.
+//
+//  Copyright (C) 2015, Achim Döbler, all rights reserved.
+//  URL: http://www.embeddedlightning.com/
+//  URL: https://github.com/achimdoebler/UGUI
+//
+//
+// * The µGUI module is a free software and there is NO WARRANTY.
+// * No restriction on use. You can use, modify and redistribute it for
+//   personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
+// * Redistributions of source code must retain the above copyright notice.
+//
+/* -------------------------------------------------------------------------------- */
+#ifndef __UGUI_H
+#define __UGUI_H
+
+#include "mbed.h"
+#include "ugui_config.h"
+
+
+/* -------------------------------------------------------------------------------- */
+/* -- µGUI FONTS                                                                 -- */
+/* -- Source: http://www.mikrocontroller.net/user/show/benedikt                  -- */
+/* -------------------------------------------------------------------------------- */
+typedef enum
+{
+    FONT_TYPE_1BPP,
+    FONT_TYPE_8BPP
+} FONT_TYPE;
+
+typedef struct
+{
+   unsigned char* p;
+   FONT_TYPE font_type;
+   UG_S16 char_width;
+   UG_S16 char_height;
+   UG_U16 start_char;
+   UG_U16 end_char;
+   UG_U8  *widths;
+} UG_FONT;
+
+#ifdef USE_FONT_4X6
+   extern const UG_FONT FONT_4X6;
+#endif
+#ifdef USE_FONT_5X8
+   extern const UG_FONT FONT_5X8;
+#endif
+#ifdef USE_FONT_5X12
+   extern const UG_FONT FONT_5X12;
+#endif
+#ifdef USE_FONT_6X8
+   extern const UG_FONT FONT_6X8;
+#endif
+#ifdef USE_FONT_6X10
+   extern const UG_FONT FONT_6X10;
+#endif
+#ifdef USE_FONT_7X12
+   extern const UG_FONT FONT_7X12;
+#endif
+#ifdef USE_FONT_8X8
+   extern const UG_FONT FONT_8X8;
+#endif
+#ifdef USE_FONT_8X12
+   extern const UG_FONT FONT_8X12;
+#endif
+#ifdef USE_FONT_8X14
+   extern const UG_FONT FONT_8X14;
+#endif
+#ifdef USE_FONT_10X16
+   extern const UG_FONT FONT_10X16;
+#endif
+#ifdef USE_FONT_12X16
+   extern const UG_FONT FONT_12X16;
+#endif
+#ifdef USE_FONT_12X20
+   extern const UG_FONT FONT_12X20;
+#endif
+#ifdef USE_FONT_16X26
+   extern const UG_FONT FONT_16X26;
+#endif
+#ifdef USE_FONT_22X36
+   extern const UG_FONT FONT_22X36;
+#endif
+#ifdef USE_FONT_24X40
+   extern const UG_FONT FONT_24X40;
+#endif
+#ifdef USE_FONT_32X53
+   extern const UG_FONT FONT_32X53;
+#endif
+
+/* -------------------------------------------------------------------------------- */
+/* -- TYPEDEFS                                                                   -- */
+/* -------------------------------------------------------------------------------- */
+typedef struct S_OBJECT                               UG_OBJECT;
+typedef struct S_WINDOW                               UG_WINDOW;
+typedef UG_S8                                         UG_RESULT;
+typedef UG_U32                                        UG_COLOR;
+/* -------------------------------------------------------------------------------- */
+/* -- DEFINES                                                                    -- */
+/* -------------------------------------------------------------------------------- */
+#ifndef NULL
+   #define NULL ((void*) 0)
+#endif
+
+/* Alignments */
+#define ALIGN_H_LEFT                                  (1<<0)
+#define ALIGN_H_CENTER                                (1<<1)
+#define ALIGN_H_RIGHT                                 (1<<2)
+#define ALIGN_V_TOP                                   (1<<3)
+#define ALIGN_V_CENTER                                (1<<4)
+#define ALIGN_V_BOTTOM                                (1<<5)
+#define ALIGN_BOTTOM_RIGHT                            (ALIGN_V_BOTTOM|ALIGN_H_RIGHT)
+#define ALIGN_BOTTOM_CENTER                           (ALIGN_V_BOTTOM|ALIGN_H_CENTER)
+#define ALIGN_BOTTOM_LEFT                             (ALIGN_V_BOTTOM|ALIGN_H_LEFT)
+#define ALIGN_CENTER_RIGHT                            (ALIGN_V_CENTER|ALIGN_H_RIGHT)
+#define ALIGN_CENTER                                  (ALIGN_V_CENTER|ALIGN_H_CENTER)
+#define ALIGN_CENTER_LEFT                             (ALIGN_V_CENTER|ALIGN_H_LEFT)
+#define ALIGN_TOP_RIGHT                               (ALIGN_V_TOP|ALIGN_H_RIGHT)
+#define ALIGN_TOP_CENTER                              (ALIGN_V_TOP|ALIGN_H_CENTER)
+#define ALIGN_TOP_LEFT                                (ALIGN_V_TOP|ALIGN_H_LEFT)
+
+/* Default IDs */
+#define OBJ_ID_0                                      0
+#define OBJ_ID_1                                      1
+#define OBJ_ID_2                                      2
+#define OBJ_ID_3                                      3
+#define OBJ_ID_4                                      4
+#define OBJ_ID_5                                      5
+#define OBJ_ID_6                                      6
+#define OBJ_ID_7                                      7
+#define OBJ_ID_8                                      8
+#define OBJ_ID_9                                      9
+#define OBJ_ID_10                                     10
+#define OBJ_ID_11                                     11
+#define OBJ_ID_12                                     12
+#define OBJ_ID_13                                     13
+#define OBJ_ID_14                                     14
+#define OBJ_ID_15                                     15
+#define OBJ_ID_16                                     16
+#define OBJ_ID_17                                     17
+#define OBJ_ID_18                                     18
+#define OBJ_ID_19                                     19
+
+/* -------------------------------------------------------------------------------- */
+/* -- FUNCTION RESULTS                                                           -- */
+/* -------------------------------------------------------------------------------- */
+#define UG_RESULT_FAIL                               -1
+#define UG_RESULT_OK                                  0
+
+/* -------------------------------------------------------------------------------- */
+/* -- UNIVERSAL STRUCTURES                                                       -- */
+/* -------------------------------------------------------------------------------- */
+/* Area structure */
+typedef struct
+{
+   UG_S16 xs;
+   UG_S16 ys;
+   UG_S16 xe;
+   UG_S16 ye;
+} UG_AREA;
+
+/* Text structure */
+typedef struct
+{
+   char* str;
+   const UG_FONT* font;
+   UG_AREA a;
+   UG_COLOR fc;
+   UG_COLOR bc;
+   UG_U8 align;
+   UG_S16 h_space;
+   UG_S16 v_space;
+} UG_TEXT;
+
+/* -------------------------------------------------------------------------------- */
+/* -- BITMAP                                                                     -- */
+/* -------------------------------------------------------------------------------- */
+typedef struct
+{
+   void* p;
+   UG_U16 width;
+   UG_U16 height;
+   UG_U8 bpp;
+   UG_U8 colors;
+} UG_BMP;
+
+#define BMP_BPP_1                                     (1<<0)
+#define BMP_BPP_2                                     (1<<1)
+#define BMP_BPP_4                                     (1<<2)
+#define BMP_BPP_8                                     (1<<3)
+#define BMP_BPP_16                                    (1<<4)
+#define BMP_BPP_32                                    (1<<5)
+#define BMP_RGB888                                    (1<<0)
+#define BMP_RGB565                                    (1<<1)
+#define BMP_RGB555                                    (1<<2)
+
+/* -------------------------------------------------------------------------------- */
+/* -- MESSAGE                                                                    -- */
+/* -------------------------------------------------------------------------------- */
+/* Message structure */
+typedef struct
+{
+   UG_U8 type;
+   UG_U8 id;
+   UG_U8 sub_id;
+   UG_U8 event;
+   void* src;
+} UG_MESSAGE;
+
+/* Message types */
+#define MSG_TYPE_NONE                                 0
+#define MSG_TYPE_WINDOW                               1
+#define MSG_TYPE_OBJECT                               2
+
+/* -------------------------------------------------------------------------------- */
+/* -- TOUCH                                                                      -- */
+/* -------------------------------------------------------------------------------- */
+/* Touch structure */
+typedef struct
+{
+   UG_U8 state;
+   UG_S16 xp;
+   UG_S16 yp;
+} UG_TOUCH;
+
+
+#define TOUCH_STATE_PRESSED                           1
+#define TOUCH_STATE_RELEASED                          0
+
+/* -------------------------------------------------------------------------------- */
+/* -- OBJECTS                                                                    -- */
+/* -------------------------------------------------------------------------------- */
+/* Object structure */
+struct S_OBJECT
+{
+   UG_U8 state;                              /* object state                               */
+   UG_U8 touch_state;                        /* object touch state                         */
+   void (*update) (UG_WINDOW*,UG_OBJECT*);   /* pointer to object-specific update function */
+   UG_AREA a_abs;                            /* absolute area of the object                */
+   UG_AREA a_rel;                            /* relative area of the object                */
+   UG_U8 type;                               /* object type                                */
+   UG_U8 id;                                 /* object ID                                  */
+   UG_U8 event;                              /* object-specific events                     */
+   void* data;                               /* pointer to object-specific data            */
+};
+
+/* Currently supported objects */
+#define OBJ_TYPE_NONE                                 0
+#define OBJ_TYPE_BUTTON                               1
+#define OBJ_TYPE_TEXTBOX                              2
+#define OBJ_TYPE_IMAGE                                3
+
+/* Standard object events */
+#define OBJ_EVENT_NONE                                0
+#define OBJ_EVENT_CLICKED                             1
+#ifdef USE_PRERENDER_EVENT
+#define OBJ_EVENT_PRERENDER                           2
+#endif
+#ifdef USE_POSTRENDER_EVENT
+#define OBJ_EVENT_POSTRENDER                          3
+#endif
+#define OBJ_EVENT_PRESSED                             4
+#define OBJ_EVENT_RELEASED                            5
+
+
+/* Object states */
+#define OBJ_STATE_FREE                                (1<<0)
+#define OBJ_STATE_VALID                               (1<<1)
+#define OBJ_STATE_BUSY                                (1<<2)
+#define OBJ_STATE_VISIBLE                             (1<<3)
+#define OBJ_STATE_ENABLE                              (1<<4)
+#define OBJ_STATE_UPDATE                              (1<<5)
+#define OBJ_STATE_REDRAW                              (1<<6)
+#define OBJ_STATE_TOUCH_ENABLE                        (1<<7)
+#define OBJ_STATE_INIT                                (OBJ_STATE_FREE | OBJ_STATE_VALID)
+
+/* Object touch states */
+#define OBJ_TOUCH_STATE_CHANGED                       (1<<0)
+#define OBJ_TOUCH_STATE_PRESSED_ON_OBJECT             (1<<1)
+#define OBJ_TOUCH_STATE_PRESSED_OUTSIDE_OBJECT        (1<<2)
+#define OBJ_TOUCH_STATE_RELEASED_ON_OBJECT            (1<<3)
+#define OBJ_TOUCH_STATE_RELEASED_OUTSIDE_OBJECT       (1<<4)
+#define OBJ_TOUCH_STATE_IS_PRESSED_ON_OBJECT          (1<<5)
+#define OBJ_TOUCH_STATE_IS_PRESSED                    (1<<6)
+#define OBJ_TOUCH_STATE_CLICK_ON_OBJECT               (1<<7)
+#define OBJ_TOUCH_STATE_INIT                          0
+
+/* -------------------------------------------------------------------------------- */
+/* -- WINDOW                                                                     -- */
+/* -------------------------------------------------------------------------------- */
+/* Title structure */
+typedef struct
+{
+   char* str;
+   const UG_FONT* font;
+   UG_S8 h_space;
+   UG_S8 v_space;
+   UG_U8 align;
+   UG_COLOR fc;
+   UG_COLOR bc;
+   UG_COLOR ifc;
+   UG_COLOR ibc;
+   UG_U8 height;
+} UG_TITLE;
+
+/* Window structure */
+struct S_WINDOW
+{
+   UG_U8 objcnt;
+   UG_OBJECT* objlst;
+   UG_U8 state;
+   UG_COLOR fc;
+   UG_COLOR bc;
+   UG_S16 xs;
+   UG_S16 ys;
+   UG_S16 xe;
+   UG_S16 ye;
+   UG_U8 style;
+   UG_TITLE title;
+   void (*cb)( UG_MESSAGE* );
+};
+
+/* Window states */
+#define WND_STATE_FREE                                (1<<0)
+#define WND_STATE_VALID                               (1<<1)
+#define WND_STATE_BUSY                                (1<<2)
+#define WND_STATE_VISIBLE                             (1<<3)
+#define WND_STATE_ENABLE                              (1<<4)
+#define WND_STATE_UPDATE                              (1<<5)
+#define WND_STATE_REDRAW_TITLE                        (1<<6)
+
+/* Window styles */
+#define WND_STYLE_2D                                  (0<<0)
+#define WND_STYLE_3D                                  (1<<0)
+#define WND_STYLE_HIDE_TITLE                          (0<<1)
+#define WND_STYLE_SHOW_TITLE                          (1<<1)
+
+/* -------------------------------------------------------------------------------- */
+/* -- BUTTON OBJECT                                                              -- */
+/* -------------------------------------------------------------------------------- */
+/* Button structure */
+typedef struct
+{
+   UG_U8 state;
+   UG_U8 style;
+   UG_COLOR fc;
+   UG_COLOR bc;
+   UG_COLOR afc;
+   UG_COLOR abc;
+   const UG_FONT* font;
+   UG_U8 align;
+   UG_S8 h_space;
+   UG_S8 v_space;
+   char* str;
+}UG_BUTTON;
+
+/* Default button IDs */
+#define BTN_ID_0                                      OBJ_ID_0
+#define BTN_ID_1                                      OBJ_ID_1
+#define BTN_ID_2                                      OBJ_ID_2
+#define BTN_ID_3                                      OBJ_ID_3
+#define BTN_ID_4                                      OBJ_ID_4
+#define BTN_ID_5                                      OBJ_ID_5
+#define BTN_ID_6                                      OBJ_ID_6
+#define BTN_ID_7                                      OBJ_ID_7
+#define BTN_ID_8                                      OBJ_ID_8
+#define BTN_ID_9                                      OBJ_ID_9
+#define BTN_ID_10                                     OBJ_ID_10
+#define BTN_ID_11                                     OBJ_ID_11
+#define BTN_ID_12                                     OBJ_ID_12
+#define BTN_ID_13                                     OBJ_ID_13
+#define BTN_ID_14                                     OBJ_ID_14
+#define BTN_ID_15                                     OBJ_ID_15
+#define BTN_ID_16                                     OBJ_ID_16
+#define BTN_ID_17                                     OBJ_ID_17
+#define BTN_ID_18                                     OBJ_ID_18
+#define BTN_ID_19                                     OBJ_ID_19
+
+/* Button states */
+#define BTN_STATE_RELEASED                            (0<<0)
+#define BTN_STATE_PRESSED                             (1<<0)
+#define BTN_STATE_ALWAYS_REDRAW                       (1<<1)
+
+/* Button style */
+#define BTN_STYLE_2D                                  (0<<0)
+#define BTN_STYLE_3D                                  (1<<0)
+#define BTN_STYLE_TOGGLE_COLORS                       (1<<1)
+#define BTN_STYLE_USE_ALTERNATE_COLORS                (1<<2)
+#define BTN_STYLE_NO_BORDERS                          (1<<3)
+#define BTN_STYLE_NO_FILL                             (1<<4)
+
+/* Button events */
+#define BTN_EVENT_CLICKED                             OBJ_EVENT_CLICKED
+
+/* -------------------------------------------------------------------------------- */
+/* -- TEXTBOX OBJECT                                                             -- */
+/* -------------------------------------------------------------------------------- */
+/* Textbox structure */
+typedef struct
+{
+   char* str;
+   const UG_FONT* font;
+   UG_U8 style;
+   UG_COLOR fc;
+   UG_COLOR bc;
+   UG_U8 align;
+   UG_S8 h_space;
+   UG_S8 v_space;
+} UG_TEXTBOX;
+
+/* Default textbox IDs */
+#define TXB_ID_0                                      OBJ_ID_0
+#define TXB_ID_1                                      OBJ_ID_1
+#define TXB_ID_2                                      OBJ_ID_2
+#define TXB_ID_3                                      OBJ_ID_3
+#define TXB_ID_4                                      OBJ_ID_4
+#define TXB_ID_5                                      OBJ_ID_5
+#define TXB_ID_6                                      OBJ_ID_6
+#define TXB_ID_7                                      OBJ_ID_7
+#define TXB_ID_8                                      OBJ_ID_8
+#define TXB_ID_9                                      OBJ_ID_9
+#define TXB_ID_10                                     OBJ_ID_10
+#define TXB_ID_11                                     OBJ_ID_11
+#define TXB_ID_12                                     OBJ_ID_12
+#define TXB_ID_13                                     OBJ_ID_13
+#define TXB_ID_14                                     OBJ_ID_14
+#define TXB_ID_15                                     OBJ_ID_15
+#define TXB_ID_16                                     OBJ_ID_16
+#define TXB_ID_17                                     OBJ_ID_17
+#define TXB_ID_18                                     OBJ_ID_18
+#define TXB_ID_19                                     OBJ_ID_19
+
+/* -------------------------------------------------------------------------------- */
+/* -- IMAGE OBJECT                                                               -- */
+/* -------------------------------------------------------------------------------- */
+/* Image structure */
+typedef struct
+{
+   void* img;
+   UG_U8 type;
+} UG_IMAGE;
+
+/* Default image IDs */
+#define IMG_ID_0                                      OBJ_ID_0
+#define IMG_ID_1                                      OBJ_ID_1
+#define IMG_ID_2                                      OBJ_ID_2
+#define IMG_ID_3                                      OBJ_ID_3
+#define IMG_ID_4                                      OBJ_ID_4
+#define IMG_ID_5                                      OBJ_ID_5
+#define IMG_ID_6                                      OBJ_ID_6
+#define IMG_ID_7                                      OBJ_ID_7
+#define IMG_ID_8                                      OBJ_ID_8
+#define IMG_ID_9                                      OBJ_ID_9
+#define IMG_ID_10                                     OBJ_ID_10
+#define IMG_ID_11                                     OBJ_ID_11
+#define IMG_ID_12                                     OBJ_ID_12
+#define IMG_ID_13                                     OBJ_ID_13
+#define IMG_ID_14                                     OBJ_ID_14
+#define IMG_ID_15                                     OBJ_ID_15
+#define IMG_ID_16                                     OBJ_ID_16
+#define IMG_ID_17                                     OBJ_ID_17
+#define IMG_ID_18                                     OBJ_ID_18
+#define IMG_ID_19                                     OBJ_ID_19
+
+/* Image types */
+#define IMG_TYPE_BMP                                  (1<<0)
+
+/* -------------------------------------------------------------------------------- */
+/* -- µGUI DRIVER                                                                -- */
+/* -------------------------------------------------------------------------------- */
+typedef struct
+{
+  void* driver;
+  UG_U8 state;
+} UG_DRIVER;
+
+#define DRIVER_REGISTERED                             (1<<0)
+#define DRIVER_ENABLED                                (1<<1)
+
+/* Supported drivers */
+#define NUMBER_OF_DRIVERS                             3
+#define DRIVER_DRAW_LINE                              0
+#define DRIVER_FILL_FRAME                             1
+#define DRIVER_FILL_AREA                              2
+
+/* -------------------------------------------------------------------------------- */
+/* -- µGUI CORE STRUCTURE                                                        -- */
+/* -------------------------------------------------------------------------------- */
+typedef struct
+{
+   void (*pset)(UG_S16,UG_S16,UG_COLOR);
+   UG_S16 x_dim;
+   UG_S16 y_dim;
+   UG_TOUCH touch;
+   UG_WINDOW* next_window;
+   UG_WINDOW* active_window;
+   UG_WINDOW* last_window;
+   struct
+   {
+      UG_S16 x_pos;
+      UG_S16 y_pos;
+      UG_S16 x_start;
+      UG_S16 y_start;
+      UG_S16 x_end;
+      UG_S16 y_end;
+      UG_COLOR fore_color;
+      UG_COLOR back_color;
+   } console;
+   UG_FONT font;
+   UG_S8 char_h_space;
+   UG_S8 char_v_space;
+   UG_COLOR fore_color;
+   UG_COLOR back_color;
+   UG_COLOR desktop_color;
+   UG_U8 state;
+   UG_DRIVER driver[NUMBER_OF_DRIVERS];
+} UG_GUI;
+
+#define UG_SATUS_WAIT_FOR_UPDATE                      (1<<0)
+
+/* -------------------------------------------------------------------------------- */
+/* -- µGUI COLORS                                                                -- */
+/* -- Source: http://www.rapidtables.com/web/color/RGB_Color.htm                 -- */
+/* -------------------------------------------------------------------------------- */
+#define  C_MAROON                     0x800000
+#define  C_DARK_RED                   0x8B0000
+#define  C_BROWN                      0xA52A2A
+#define  C_FIREBRICK                  0xB22222
+#define  C_CRIMSON                    0xDC143C
+#define  C_RED                        0xFF0000
+#define  C_TOMATO                     0xFF6347
+#define  C_CORAL                      0xFF7F50
+#define  C_INDIAN_RED                 0xCD5C5C
+#define  C_LIGHT_CORAL                0xF08080
+#define  C_DARK_SALMON                0xE9967A
+#define  C_SALMON                     0xFA8072
+#define  C_LIGHT_SALMON               0xFFA07A
+#define  C_ORANGE_RED                 0xFF4500
+#define  C_DARK_ORANGE                0xFF8C00
+#define  C_ORANGE                     0xFFA500
+#define  C_GOLD                       0xFFD700
+#define  C_DARK_GOLDEN_ROD            0xB8860B
+#define  C_GOLDEN_ROD                 0xDAA520
+#define  C_PALE_GOLDEN_ROD            0xEEE8AA
+#define  C_DARK_KHAKI                 0xBDB76B
+#define  C_KHAKI                      0xF0E68C
+#define  C_OLIVE                      0x808000
+#define  C_YELLOW                     0xFFFF00
+#define  C_YELLOW_GREEN               0x9ACD32
+#define  C_DARK_OLIVE_GREEN           0x556B2F
+#define  C_OLIVE_DRAB                 0x6B8E23
+#define  C_LAWN_GREEN                 0x7CFC00
+#define  C_CHART_REUSE                0x7FFF00
+#define  C_GREEN_YELLOW               0xADFF2F
+#define  C_DARK_GREEN                 0x006400
+#define  C_GREEN                      0x00FF00
+#define  C_FOREST_GREEN               0x228B22
+#define  C_LIME                       0x00FF00
+#define  C_LIME_GREEN                 0x32CD32
+#define  C_LIGHT_GREEN                0x90EE90
+#define  C_PALE_GREEN                 0x98FB98
+#define  C_DARK_SEA_GREEN             0x8FBC8F
+#define  C_MEDIUM_SPRING_GREEN        0x00FA9A
+#define  C_SPRING_GREEN               0x00FF7F
+#define  C_SEA_GREEN                  0x2E8B57
+#define  C_MEDIUM_AQUA_MARINE         0x66CDAA
+#define  C_MEDIUM_SEA_GREEN           0x3CB371
+#define  C_LIGHT_SEA_GREEN            0x20B2AA
+#define  C_DARK_SLATE_GRAY            0x2F4F4F
+#define  C_TEAL                       0x008080
+#define  C_DARK_CYAN                  0x008B8B
+#define  C_AQUA                       0x00FFFF
+#define  C_CYAN                       0x00FFFF
+#define  C_LIGHT_CYAN                 0xE0FFFF
+#define  C_DARK_TURQUOISE             0x00CED1
+#define  C_TURQUOISE                  0x40E0D0
+#define  C_MEDIUM_TURQUOISE           0x48D1CC
+#define  C_PALE_TURQUOISE             0xAFEEEE
+#define  C_AQUA_MARINE                0x7FFFD4
+#define  C_POWDER_BLUE                0xB0E0E6
+#define  C_CADET_BLUE                 0x5F9EA0
+#define  C_STEEL_BLUE                 0x4682B4
+#define  C_CORN_FLOWER_BLUE           0x6495ED
+#define  C_DEEP_SKY_BLUE              0x00BFFF
+#define  C_DODGER_BLUE                0x1E90FF
+#define  C_LIGHT_BLUE                 0xADD8E6
+#define  C_SKY_BLUE                   0x87CEEB
+#define  C_LIGHT_SKY_BLUE             0x87CEFA
+#define  C_MIDNIGHT_BLUE              0x191970
+#define  C_NAVY                       0x000080
+#define  C_DARK_BLUE                  0x00008B
+#define  C_MEDIUM_BLUE                0x0000CD
+#define  C_BLUE                       0x0000FF
+#define  C_ROYAL_BLUE                 0x4169E1
+#define  C_BLUE_VIOLET                0x8A2BE2
+#define  C_INDIGO                     0x4B0082
+#define  C_DARK_SLATE_BLUE            0x483D8B
+#define  C_SLATE_BLUE                 0x6A5ACD
+#define  C_MEDIUM_SLATE_BLUE          0x7B68EE
+#define  C_MEDIUM_PURPLE              0x9370DB
+#define  C_DARK_MAGENTA               0x8B008B
+#define  C_DARK_VIOLET                0x9400D3
+#define  C_DARK_ORCHID                0x9932CC
+#define  C_MEDIUM_ORCHID              0xBA55D3
+#define  C_PURPLE                     0x800080
+#define  C_THISTLE                    0xD8BFD8
+#define  C_PLUM                       0xDDA0DD
+#define  C_VIOLET                     0xEE82EE
+#define  C_MAGENTA                    0xFF00FF
+#define  C_ORCHID                     0xDA70D6
+#define  C_MEDIUM_VIOLET_RED          0xC71585
+#define  C_PALE_VIOLET_RED            0xDB7093
+#define  C_DEEP_PINK                  0xFF1493
+#define  C_HOT_PINK                   0xFF69B4
+#define  C_LIGHT_PINK                 0xFFB6C1
+#define  C_PINK                       0xFFC0CB
+#define  C_ANTIQUE_WHITE              0xFAEBD7
+#define  C_BEIGE                      0xF5F5DC
+#define  C_BISQUE                     0xFFE4C4
+#define  C_BLANCHED_ALMOND            0xFFEBCD
+#define  C_WHEAT                      0xF5DEB3
+#define  C_CORN_SILK                  0xFFF8DC
+#define  C_LEMON_CHIFFON              0xFFFACD
+#define  C_LIGHT_GOLDEN_ROD_YELLOW    0xFAFAD2
+#define  C_LIGHT_YELLOW               0xFFFFE0
+#define  C_SADDLE_BROWN               0x8B4513
+#define  C_SIENNA                     0xA0522D
+#define  C_CHOCOLATE                  0xD2691E
+#define  C_PERU                       0xCD853F
+#define  C_SANDY_BROWN                0xF4A460
+#define  C_BURLY_WOOD                 0xDEB887
+#define  C_TAN                        0xD2B48C
+#define  C_ROSY_BROWN                 0xBC8F8F
+#define  C_MOCCASIN                   0xFFE4B5
+#define  C_NAVAJO_WHITE               0xFFDEAD
+#define  C_PEACH_PUFF                 0xFFDAB9
+#define  C_MISTY_ROSE                 0xFFE4E1
+#define  C_LAVENDER_BLUSH             0xFFF0F5
+#define  C_LINEN                      0xFAF0E6
+#define  C_OLD_LACE                   0xFDF5E6
+#define  C_PAPAYA_WHIP                0xFFEFD5
+#define  C_SEA_SHELL                  0xFFF5EE
+#define  C_MINT_CREAM                 0xF5FFFA
+#define  C_SLATE_GRAY                 0x708090
+#define  C_LIGHT_SLATE_GRAY           0x778899
+#define  C_LIGHT_STEEL_BLUE           0xB0C4DE
+#define  C_LAVENDER                   0xE6E6FA
+#define  C_FLORAL_WHITE               0xFFFAF0
+#define  C_ALICE_BLUE                 0xF0F8FF
+#define  C_GHOST_WHITE                0xF8F8FF
+#define  C_HONEYDEW                   0xF0FFF0
+#define  C_IVORY                      0xFFFFF0
+#define  C_AZURE                      0xF0FFFF
+#define  C_SNOW                       0xFFFAFA
+#define  C_BLACK                      0x000000
+#define  C_DIM_GRAY                   0x696969
+#define  C_GRAY                       0x808080
+#define  C_DARK_GRAY                  0xA9A9A9
+#define  C_SILVER                     0xC0C0C0
+#define  C_LIGHT_GRAY                 0xD3D3D3
+#define  C_GAINSBORO                  0xDCDCDC
+#define  C_WHITE_SMOKE                0xF5F5F5
+#define  C_WHITE                      0xFFFFFF
+
+/* -------------------------------------------------------------------------------- */
+/* -- PROTOTYPES                                                                 -- */
+/* -------------------------------------------------------------------------------- */
+/* Classic functions */
+UG_S16 UG_Init( UG_GUI* g, void (*p)(UG_S16,UG_S16,UG_COLOR), UG_S16 x, UG_S16 y );
+UG_S16 UG_SelectGUI( UG_GUI* g );
+void UG_FontSelect( const UG_FONT* font );
+void UG_FillScreen( UG_COLOR c );
+void UG_FillFrame( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_COLOR c );
+void UG_FillRoundFrame( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_S16 r, UG_COLOR c );
+void UG_DrawMesh( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_COLOR c );
+void UG_DrawFrame( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_COLOR c );
+void UG_DrawRoundFrame( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_S16 r, UG_COLOR c );
+void UG_DrawPixel( UG_S16 x0, UG_S16 y0, UG_COLOR c );
+void UG_DrawCircle( UG_S16 x0, UG_S16 y0, UG_S16 r, UG_COLOR c );
+void UG_FillCircle( UG_S16 x0, UG_S16 y0, UG_S16 r, UG_COLOR c );
+void UG_DrawArc( UG_S16 x0, UG_S16 y0, UG_S16 r, UG_U8 s, UG_COLOR c );
+void UG_DrawLine( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_COLOR c );
+void UG_PutString( UG_S16 x, UG_S16 y, char* str );
+void UG_PutChar( char chr, UG_S16 x, UG_S16 y, UG_COLOR fc, UG_COLOR bc );
+void UG_ConsolePutString( char* str );
+void UG_ConsoleSetArea( UG_S16 xs, UG_S16 ys, UG_S16 xe, UG_S16 ye );
+void UG_ConsoleSetForecolor( UG_COLOR c );
+void UG_ConsoleSetBackcolor( UG_COLOR c );
+void UG_SetForecolor( UG_COLOR c );
+void UG_SetBackcolor( UG_COLOR c );
+UG_S16 UG_GetXDim( void );
+UG_S16 UG_GetYDim( void );
+void UG_FontSetHSpace( UG_U16 s );
+void UG_FontSetVSpace( UG_U16 s );
+
+/* Miscellaneous functions */
+void UG_WaitForUpdate( void );
+void UG_Update( void );
+void UG_DrawBMP( UG_S16 xp, UG_S16 yp, UG_BMP* bmp );
+void UG_TouchUpdate( UG_S16 xp, UG_S16 yp, UG_U8 state );
+
+/* Driver functions */
+void UG_DriverRegister( UG_U8 type, void* driver );
+void UG_DriverEnable( UG_U8 type );
+void UG_DriverDisable( UG_U8 type );
+
+/* Window functions */
+UG_RESULT UG_WindowCreate( UG_WINDOW* wnd, UG_OBJECT* objlst, UG_U8 objcnt, void (*cb)( UG_MESSAGE* ) );
+UG_RESULT UG_WindowDelete( UG_WINDOW* wnd );
+UG_RESULT UG_WindowShow( UG_WINDOW* wnd );
+UG_RESULT UG_WindowHide( UG_WINDOW* wnd );
+UG_RESULT UG_WindowResize( UG_WINDOW* wnd, UG_S16 xs, UG_S16 ys, UG_S16 xe, UG_S16 ye );
+UG_RESULT UG_WindowAlert( UG_WINDOW* wnd );
+UG_RESULT UG_WindowSetForeColor( UG_WINDOW* wnd, UG_COLOR fc );
+UG_RESULT UG_WindowSetBackColor( UG_WINDOW* wnd, UG_COLOR bc );
+UG_RESULT UG_WindowSetTitleTextColor( UG_WINDOW* wnd, UG_COLOR c );
+UG_RESULT UG_WindowSetTitleColor( UG_WINDOW* wnd, UG_COLOR c );
+UG_RESULT UG_WindowSetTitleInactiveTextColor( UG_WINDOW* wnd, UG_COLOR c );
+UG_RESULT UG_WindowSetTitleInactiveColor( UG_WINDOW* wnd, UG_COLOR c );
+UG_RESULT UG_WindowSetTitleText( UG_WINDOW* wnd, char* str );
+UG_RESULT UG_WindowSetTitleTextFont( UG_WINDOW* wnd, const UG_FONT* font );
+UG_RESULT UG_WindowSetTitleTextHSpace( UG_WINDOW* wnd, UG_S8 hs );
+UG_RESULT UG_WindowSetTitleTextVSpace( UG_WINDOW* wnd, UG_S8 vs );
+UG_RESULT UG_WindowSetTitleTextAlignment( UG_WINDOW* wnd, UG_U8 align );
+UG_RESULT UG_WindowSetTitleHeight( UG_WINDOW* wnd, UG_U8 height );
+UG_RESULT UG_WindowSetXStart( UG_WINDOW* wnd, UG_S16 xs );
+UG_RESULT UG_WindowSetYStart( UG_WINDOW* wnd, UG_S16 ys );
+UG_RESULT UG_WindowSetXEnd( UG_WINDOW* wnd, UG_S16 xe );
+UG_RESULT UG_WindowSetYEnd( UG_WINDOW* wnd, UG_S16 ye );
+UG_RESULT UG_WindowSetStyle( UG_WINDOW* wnd, UG_U8 style );
+UG_COLOR UG_WindowGetForeColor( UG_WINDOW* wnd );
+UG_COLOR UG_WindowGetBackColor( UG_WINDOW* wnd );
+UG_COLOR UG_WindowGetTitleTextColor( UG_WINDOW* wnd );
+UG_COLOR UG_WindowGetTitleColor( UG_WINDOW* wnd );
+UG_COLOR UG_WindowGetTitleInactiveTextColor( UG_WINDOW* wnd );
+UG_COLOR UG_WindowGetTitleInactiveColor( UG_WINDOW* wnd );
+char* UG_WindowGetTitleText( UG_WINDOW* wnd );
+UG_FONT* UG_WindowGetTitleTextFont( UG_WINDOW* wnd );
+UG_S8 UG_WindowGetTitleTextHSpace( UG_WINDOW* wnd );
+UG_S8 UG_WindowGetTitleTextVSpace( UG_WINDOW* wnd );
+UG_U8 UG_WindowGetTitleTextAlignment( UG_WINDOW* wnd );
+UG_U8 UG_WindowGetTitleHeight( UG_WINDOW* wnd );
+UG_S16 UG_WindowGetXStart( UG_WINDOW* wnd );
+UG_S16 UG_WindowGetYStart( UG_WINDOW* wnd );
+UG_S16 UG_WindowGetXEnd( UG_WINDOW* wnd );
+UG_S16 UG_WindowGetYEnd( UG_WINDOW* wnd );
+UG_U8 UG_WindowGetStyle( UG_WINDOW* wnd );
+UG_RESULT UG_WindowGetArea( UG_WINDOW* wnd, UG_AREA* a );
+UG_S16 UG_WindowGetInnerWidth( UG_WINDOW* wnd );
+UG_S16 UG_WindowGetOuterWidth( UG_WINDOW* wnd );
+UG_S16 UG_WindowGetInnerHeight( UG_WINDOW* wnd );
+UG_S16 UG_WindowGetOuterHeight( UG_WINDOW* wnd );
+
+/* Button functions */
+UG_RESULT UG_ButtonCreate( UG_WINDOW* wnd, UG_BUTTON* btn, UG_U8 id, UG_S16 xs, UG_S16 ys, UG_S16 xe, UG_S16 ye );
+UG_RESULT UG_ButtonDelete( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_ButtonShow( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_ButtonHide( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_ButtonSetForeColor( UG_WINDOW* wnd, UG_U8 id, UG_COLOR fc );
+UG_RESULT UG_ButtonSetBackColor( UG_WINDOW* wnd, UG_U8 id, UG_COLOR bc );
+UG_RESULT UG_ButtonSetAlternateForeColor( UG_WINDOW* wnd, UG_U8 id, UG_COLOR afc );
+UG_RESULT UG_ButtonSetAlternateBackColor( UG_WINDOW* wnd, UG_U8 id, UG_COLOR abc );
+UG_RESULT UG_ButtonSetText( UG_WINDOW* wnd, UG_U8 id, char* str );
+UG_RESULT UG_ButtonSetFont( UG_WINDOW* wnd, UG_U8 id, const UG_FONT* font );
+UG_RESULT UG_ButtonSetStyle( UG_WINDOW* wnd, UG_U8 id, UG_U8 style );
+UG_RESULT UG_ButtonSetHSpace( UG_WINDOW* wnd, UG_U8 id, UG_S8 hs );
+UG_RESULT UG_ButtonSetVSpace( UG_WINDOW* wnd, UG_U8 id, UG_S8 vs );
+UG_RESULT UG_ButtonSetAlignment( UG_WINDOW* wnd, UG_U8 id, UG_U8 align );
+UG_COLOR UG_ButtonGetForeColor( UG_WINDOW* wnd, UG_U8 id );
+UG_COLOR UG_ButtonGetBackColor( UG_WINDOW* wnd, UG_U8 id );
+UG_COLOR UG_ButtonGetAlternateForeColor( UG_WINDOW* wnd, UG_U8 id );
+UG_COLOR UG_ButtonGetAlternateBackColor( UG_WINDOW* wnd, UG_U8 id );
+char* UG_ButtonGetText( UG_WINDOW* wnd, UG_U8 id );
+UG_FONT* UG_ButtonGetFont( UG_WINDOW* wnd, UG_U8 id );
+UG_U8 UG_ButtonGetStyle( UG_WINDOW* wnd, UG_U8 id );
+UG_S8 UG_ButtonGetHSpace( UG_WINDOW* wnd, UG_U8 id );
+UG_S8 UG_ButtonGetVSpace( UG_WINDOW* wnd, UG_U8 id );
+UG_U8 UG_ButtonGetAlignment( UG_WINDOW* wnd, UG_U8 id );
+
+/* Textbox functions */
+UG_RESULT UG_TextboxCreate( UG_WINDOW* wnd, UG_TEXTBOX* txb, UG_U8 id, UG_S16 xs, UG_S16 ys, UG_S16 xe, UG_S16 ye );
+UG_RESULT UG_TextboxDelete( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_TextboxShow( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_TextboxHide( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_TextboxSetForeColor( UG_WINDOW* wnd, UG_U8 id, UG_COLOR fc );
+UG_RESULT UG_TextboxSetBackColor( UG_WINDOW* wnd, UG_U8 id, UG_COLOR bc );
+UG_RESULT UG_TextboxSetText( UG_WINDOW* wnd, UG_U8 id, char* str );
+UG_RESULT UG_TextboxSetFont( UG_WINDOW* wnd, UG_U8 id, const UG_FONT* font );
+UG_RESULT UG_TextboxSetHSpace( UG_WINDOW* wnd, UG_U8 id, UG_S8 hs );
+UG_RESULT UG_TextboxSetVSpace( UG_WINDOW* wnd, UG_U8 id, UG_S8 vs );
+UG_RESULT UG_TextboxSetAlignment( UG_WINDOW* wnd, UG_U8 id, UG_U8 align );
+UG_COLOR UG_TextboxGetForeColor( UG_WINDOW* wnd, UG_U8 id );
+UG_COLOR UG_TextboxGetBackColor( UG_WINDOW* wnd, UG_U8 id );
+char* UG_TextboxGetText( UG_WINDOW* wnd, UG_U8 id );
+UG_FONT* UG_TextboxGetFont( UG_WINDOW* wnd, UG_U8 id );
+UG_S8 UG_TextboxGetHSpace( UG_WINDOW* wnd, UG_U8 id );
+UG_S8 UG_TextboxGetVSpace( UG_WINDOW* wnd, UG_U8 id );
+UG_U8 UG_TextboxGetAlignment( UG_WINDOW* wnd, UG_U8 id );
+
+/* Image functions */
+UG_RESULT UG_ImageCreate( UG_WINDOW* wnd, UG_IMAGE* img, UG_U8 id, UG_S16 xs, UG_S16 ys, UG_S16 xe, UG_S16 ye );
+UG_RESULT UG_ImageDelete( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_ImageShow( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_ImageHide( UG_WINDOW* wnd, UG_U8 id );
+UG_RESULT UG_ImageSetBMP( UG_WINDOW* wnd, UG_U8 id, const UG_BMP* bmp );
+
+
+
+#endif
+