Headers for emWin lib

Dependents:   DISCO-F746NG_rtos_test

Revision:
0:1bf8f02b0770
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin_header/GUI.h	Sat Mar 26 22:49:50 2016 +0000
@@ -0,0 +1,2219 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2014  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.24 - Graphical user interface for embedded applications **
+All  Intellectual Property rights  in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product.  This file may
+only be used in accordance with the following terms:
+
+The software has been licensed to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+File        : GUI.h
+Purpose     : GUI API include file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef  GUI_H
+#define  GUI_H
+
+#include "GUI_ConfDefaults.h"
+#include "GUI_Type.h"
+#include "GUI_Version.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Disable string function warning with newer MSVC versions
+*/
+#if defined (_MSC_VER)
+  #if (_MSC_VER > 1200)
+    #pragma warning( disable : 4996)
+  #endif
+#endif
+
+/*********************************************************************
+*
+*       Macros, function replacement
+*/
+#define GUI_COUNTOF(a)          (sizeof(a) / sizeof(a[0]))
+#define GUI_MIN(a,b)            (((a) < (b)) ? (a) : (b))
+#define GUI_MAX(a,b)            (((a) > (b)) ? (a) : (b))
+#define GUI_ZEROFILL(p, Size)   (memset(p, 0, Size))
+
+/*********************************************************************
+*
+*       Support for multitasking systems (locking)
+*/
+typedef struct GUI_CONTEXT GUI_CONTEXT;
+
+#if !GUI_OS
+  #define GUI_LOCK()
+  #define GUI_UNLOCK()
+  #define GUITASK_INIT()
+  #define GUITASK_COPY_CONTEXT()
+#else
+  void GUI_Lock(void);
+  void GUI_Unlock(void);
+  void GUITASK_Init(void);
+  void GUITASK_CopyContext(void);
+  void GUITASK_SetMaxTask(int MaxTask);
+  GUI_CONTEXT * GUITASK_GetpContext(int Index);
+  #define GUI_LOCK()             GUI_Lock()
+  #define GUI_UNLOCK()           GUI_Unlock()
+  #define GUITASK_INIT()         GUITASK_Init()
+  #define GUITASK_COPY_CONTEXT() GUITASK_CopyContext()
+#endif
+
+/*********************************************************************
+*
+*       API table of a display driver
+*/
+struct GUI_DEVICE_API {
+  //
+  // Data
+  //
+  int DeviceClassIndex;
+  //
+  // Drawing functions
+  //
+  void     (* pfDrawBitmap   )(GUI_DEVICE *  pDevice,  int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+  void     (* pfDrawHLine    )(GUI_DEVICE *  pDevice,  int x0, int y0,  int x1);
+  void     (* pfDrawVLine    )(GUI_DEVICE *  pDevice,  int x , int y0,  int y1);
+  void     (* pfFillRect     )(GUI_DEVICE *  pDevice,  int x0, int y0, int x1, int y1);
+  unsigned (* pfGetPixelIndex)(GUI_DEVICE *  pDevice,  int x, int y);
+  void     (* pfSetPixelIndex)(GUI_DEVICE *  pDevice,  int x, int y, int ColorIndex);
+  void     (* pfXorPixel     )(GUI_DEVICE *  pDevice,  int x, int y);
+  //
+  // Set origin
+  //
+  void     (* pfSetOrg       )(GUI_DEVICE *  pDevice,  int x, int y);
+  //
+  // Request information
+  //
+  void   (*(* pfGetDevFunc)   (GUI_DEVICE ** ppDevice, int Index))(void);
+  I32      (* pfGetDevProp   )(GUI_DEVICE *  pDevice,  int Index);
+  void    *(* pfGetDevData   )(GUI_DEVICE *  pDevice,  int Index);
+  void     (* pfGetRect      )(GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+};
+
+/*********************************************************************
+*
+*       Device classes
+*/
+typedef enum {
+  DEVICE_CLASS_DRIVER = 0,
+  DEVICE_CLASS_DRIVER_MODIFIER,   // Zoom or delta-pixel modifier
+  DEVICE_CLASS_VNC,
+  DEVICE_CLASS_SPRITE,
+  DEVICE_CLASS_MEMDEV,
+  DEVICE_CLASS_ALPHA,
+  DEVICE_CLASS_AUTOALPHA,
+  DEVICE_CLASS_MEASDEV
+} DEVICE_CLASS;
+
+#define GUI_DEVICE_STAYONTOP 1
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_Template_API;
+
+//
+// Macros to be used in configuration files
+//
+#define GUIDRV_WIN32       &GUIDRV_Win_API
+
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_TEMPLATE         &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_TEMPLATE         &GUIDRV_Template_API
+
+#endif
+
+/*********************************************************************
+*
+*       Definition of GUI_DEVICE structure
+*/
+struct GUI_DEVICE {
+  //
+  // Linking
+  //
+  GUI_DEVICE * pNext;
+  GUI_DEVICE * pPrev;
+  //
+  // Data
+  //
+  union {
+    GUI_HMEM hContext; // Handle of payload data like sprite- or memory device context
+    void   * pContext; // Pointer for context data in a fixed block
+  } u;
+  //
+  // API pointers
+  //
+  const GUI_DEVICE_API     * pDeviceAPI;
+  const LCD_API_COLOR_CONV * pColorConvAPI;
+  U16 Flags;
+  int LayerIndex;
+};
+
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_1;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_8;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_16;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_32;
+
+/*********************************************************************
+*
+*       GUI_CONTEXT
+*
+*  This structure is public for one reason only:
+*  To allow the application to save and restore the context.
+*/
+typedef union {
+  U8  aColorIndex8[2];
+  U16 aColorIndex16[2];
+  U32 aColorIndex32[2];
+} LCD_COLORINDEX_UNION;
+
+struct GUI_CONTEXT {
+  //
+  // Variables in LCD module
+  //
+  LCD_COLORINDEX_UNION uLCD;
+  LCD_RECT       ClipRect;
+  U8             DrawMode;
+  U8             SelLayer;
+  U8             TextStyle;
+  //
+  // Variables in GL module
+  //
+  GUI_RECT * pClipRect_HL;                 // High level clip rectangle ... Speed optimization so drawing routines can optimize
+  U8         PenSize;
+  U8         PenShape;
+  U8         LineStyle;
+  //
+  // Variables in GUICHAR module
+  //
+  const GUI_FONT * pAFont;
+  I16P LBorder;
+  I16P DispPosX, DispPosY;
+  I16P DrawPosX, DrawPosY;
+  I16P TextMode, TextAlign;
+  GUI_COLOR Color, BkColor;                // Required only when changing devices and for speed opt (caching)
+  //
+  // Pointer to  color indices
+  //
+  LCD_PIXELINDEX * LCD_pBkColorIndex;
+  LCD_PIXELINDEX * LCD_pColorIndex;
+  LCD_PIXELINDEX * LCD_pAColorIndex;
+  //
+  // Variables in WM module
+  //
+  #if GUI_WINSUPPORT
+    const GUI_RECT * WM__pUserClipRect;
+    GUI_HWIN hAWin;
+    int xOff, yOff;
+    U8 WM_IsActive;
+  #endif
+  //
+  // Array of pointers to device chains
+  //
+  //GUI_DEVICE * apDevice[GUI_NUM_LAYERS];
+  GUI_DEVICE * apDriver[GUI_NUM_LAYERS];
+  //
+  // Variables in MEMDEV module (with memory devices only)
+  //
+  GUI_HMEM    hDevData;
+  //
+  // Variables in Anitaliasing module
+  //
+  const tLCD_HL_APIList * pLCD_HL;       // Required to reroute drawing (HLine & Pixel) to the AA module
+  U8 AA_Factor;
+  U8 AA_HiResEnable;
+  void (* AA_pfSetPixelAA)(int x, int y, U8 Intens); // Function to be used for drawing a single pixel
+};
+
+/* Rename GUI_SaveContext in order to avoid crashes if wrong GUIConf is used */
+#if (GUI_WINSUPPORT == 1)
+  #define GUI_SaveContext GUI_SaveContext_W
+#else
+  #define GUI_SaveContext GUI_SaveContext_
+#endif
+
+/*********************************************************************
+*
+*       Device management
+*/
+GUI_DEVICE * GUI_DEVICE_Create       (const GUI_DEVICE_API * pDeviceAPI, const LCD_API_COLOR_CONV * pColorConvAPI, U16 Flags, int LayerIndex);
+GUI_DEVICE * GUI_DEVICE_CreateAndLink(const GUI_DEVICE_API * pDeviceAPI, const LCD_API_COLOR_CONV * pColorConvAPI, U16 Flags, int LayerIndex);
+void         GUI_DEVICE_Delete       (GUI_DEVICE * pDevice);
+int          GUI_DEVICE_Link         (GUI_DEVICE * pDevice);
+void         GUI_DEVICE_Unlink       (GUI_DEVICE * pDevice);
+GUI_DEVICE * GUI_DEVICE__GetpDriver  (int LayerIndex);
+GUI_DEVICE * GUI_DEVICE__GetpDevice  (int LayerIndex, int DeviceClass);
+
+GUI_DEVICE * GUI_DEVICE_UnlinkTaskDevices(void);
+void         GUI_DEVICE_LinkDevices      (GUI_DEVICE * pDevice);
+
+/*********************************************************************
+*
+*       GUI_DIRTYDEVICE
+*/
+typedef struct {
+  void * pData;         // Pointer to first pixel
+  int    x0, y0;        // Coordinates of the upper left pixel
+  int    xSize, ySize;  // Size of dirty rectangle
+  int    LineOff;       // Virtual xSize in pixels
+  int    BytesPerPixel; // Number of bytes required per pixel
+} GUI_DIRTYDEVICE_INFO;
+
+int GUI_DIRTYDEVICE_Fetch (int LayerIndex, GUI_DIRTYDEVICE_INFO * pInfo);
+int GUI_DIRTYDEVICE_Delete(int LayerIndex);
+int GUI_DIRTYDEVICE_Create(int LayerIndex);
+
+/*********************************************************************
+*
+*       General routines
+*/
+int          GUI_Init             (void);
+void         GUI_Exit             (void);
+void         GUI_SetDefaultFont   (const GUI_FONT * pFont);
+void         GUI_SetDefault       (void);
+GUI_DRAWMODE GUI_SetDrawMode      (GUI_DRAWMODE dm);
+const char * GUI_GetVersionString (void);
+void         GUI_SaveContext      (      GUI_CONTEXT * pContext);
+void         GUI_RestoreContext   (const GUI_CONTEXT * pContext);
+void         GUI_SetScreenSizeX   (int xSize);
+void         GUI_SetScreenSizeY   (int ySize);
+int          GUI_GetScreenSizeX   (void);
+int          GUI_GetScreenSizeY   (void);
+const GUI_RECT * GUI_SetClipRect  (const GUI_RECT * pRect);
+
+void         MainTask             (void);
+
+/*********************************************************************
+*
+*       Rectangle helper functions
+*/
+int  GUI_RectsIntersect(const GUI_RECT * pr0, const GUI_RECT * pr1);
+void GUI_MoveRect       (GUI_RECT * pRect, int x, int y);
+void GUI_MergeRect      (GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+int  GUI__IntersectRects(GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+void GUI__IntersectRect (GUI_RECT * pDest, const GUI_RECT * pr0);
+void GUI__ReduceRect    (GUI_RECT * pDest, const GUI_RECT * pRect, int Dist);
+
+/*********************************************************************
+*
+*       Misc helper functions
+*/
+I32  GUI__ATan2(I32 x, I32 y, I32 * ph);
+I32  GUI__ASinHQ(I32 SinHQ);
+int  GUI__CompactPixelIndices  (LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel);
+int  GUI__CompactPixelIndicesEx(LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI);
+void GUI__Config(void);
+I32  GUI__CosHQ(I32 Ang1000);
+int  GUI__DivideRound     (int a, int b);
+I32  GUI__DivideRound32   (I32 a, I32 b);
+void GUI__ExpandPixelIndices   (void * pBuffer, int NumPixels, int BitsPerPixel);
+void GUI__ExpandPixelIndicesEx (void * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI);
+void GUI__memcpy(void * pDest, const void * pSrc, int NumBytes);
+int  GUI__SetText(GUI_HMEM * phText, const char * s);
+I32  GUI__SinHQ(I32 Ang1000);
+I32  GUI__sqrt32(I32 Square);
+void GUI__DrawTwinArc2(int xl, int xr, int y0,         int r, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorFill);
+void GUI__DrawTwinArc4(int x0, int y0, int x1, int y1, int r, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorFill);
+void GUI__FillTrippleArc(int x0, int y0, int Size, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorR2, GUI_COLOR ColorFill);
+void GUI__RegisterExit(GUI_REGISTER_EXIT * pRegisterExit);
+
+/*********************************************************************
+*
+*       Get / Set Attributes
+*/
+GUI_COLOR GUI_GetBkColor     (void);
+int       GUI_GetBkColorIndex(void);
+GUI_COLOR GUI_GetColor       (void);
+int       GUI_GetColorIndex  (void);
+U8        GUI_GetLineStyle   (void);
+U8        GUI_GetPenSize     (void);
+U8        GUI_GetPenShape    (void);
+unsigned  GUI_GetPixelIndex  (int x, int y);
+
+void      GUI_SetBkColor   (GUI_COLOR);
+void      GUI_SetColor     (GUI_COLOR);
+void      GUI_SetBkColorIndex(int Index);
+void      GUI_SetColorIndex(int Index);
+
+U8        GUI_SetPenSize   (U8 Size);
+U8        GUI_SetPenShape  (U8 Shape);
+U8        GUI_SetLineStyle (U8 Style);
+
+/* Get/Set Character used as decimal point (usually '.' or ',') */
+char      GUI_GetDecChar(void);
+char      GUI_SetDecChar(char c);
+
+/*********************************************************************
+*
+*       Color / Index related functions
+*/
+int       GUI_Color2Index(GUI_COLOR color);
+GUI_COLOR GUI_Color2VisColor(GUI_COLOR color);
+char      GUI_ColorIsAvailable(GUI_COLOR color);
+GUI_COLOR GUI_Index2Color(int Index);
+U32       GUI_CalcColorDist (GUI_COLOR Color0, GUI_COLOR  Color1);
+U32       GUI_CalcVisColorError(GUI_COLOR color);
+
+/*********************************************************************
+*
+*       Error handler
+*/
+void GUI_SetOnErrorFunc(void (* pFunc)(const char * s));
+
+/*********************************************************************
+*
+*       Logging (for debugging primarily)
+*/
+void GUI_Log      (const char * s);
+void GUI_Log1     (const char * s, I32 p0);
+void GUI_Log2     (const char * s, I32 p0, I32 p1);
+void GUI_Log3     (const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_Log4     (const char * s, I32 p0, I32 p1, I32 p2,I32 p3);
+void GUI_Warn     (const char * s);
+void GUI_Warn1    (const char * s, I32 p0);
+void GUI_Warn2    (const char * s, I32 p0, I32 p1);
+void GUI_Warn3    (const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_Warn4    (const char * s, I32 p0, I32 p1, I32 p2, I32 p3);
+void GUI_ErrorOut (const char * s);
+void GUI_ErrorOut1(const char * s, I32 p0);
+void GUI_ErrorOut2(const char * s, I32 p0, I32 p1);
+void GUI_ErrorOut3(const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_ErrorOut4(const char * s, I32 p0, I32 p1, I32 p2, I32 p3);
+
+/*********************************************************************
+*
+*       2d - GL
+*/
+void GUI_Clear            (void);
+void GUI_ClearRect        (int x0, int y0, int x1, int y1);
+void GUI_ClearRectEx      (const GUI_RECT * pRect);
+void GUI_CopyRect         (int x0, int y0, int x1, int y1, int dx, int dy);
+void GUI_DrawArc          (int x0, int y0, int rx, int ry, int a0, int a1);
+void GUI_DrawBitmap       (const GUI_BITMAP * pBM, int x0, int y0);
+void GUI_DrawBitmapMag    (const GUI_BITMAP * pBM, int x0, int y0, int XMul, int YMul);
+void GUI_DrawBitmapEx     (const GUI_BITMAP * pBM, int x0, int y0, int xCenter, int yCenter, int xMag, int yMag);
+void GUI_DrawBitmapExp    (int x0, int y0, int XSize, int YSize, int XMul,  int YMul, int BitsPerPixel, int BytesPerLine, const U8 * pData, const GUI_LOGPALETTE * pPal);
+void GUI_DrawBitmapHWAlpha(const GUI_BITMAP * pBM, int x0, int y0);
+void GUI_DrawCircle       (int x0, int y0, int r);
+void GUI_DrawEllipse      (int x0, int y0, int rx, int ry);
+void GUI_DrawGradientH    (int x0, int y0, int x1, int y1, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientV    (int x0, int y0, int x1, int y1, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientRoundedH(int x0, int y0, int x1, int y1, int rd, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientRoundedV(int x0, int y0, int x1, int y1, int rd, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGraph        (I16 * pay, int NumPoints, int x0, int y0);
+void GUI_DrawGraphEx      (I16 * pay, int NumPoints, int x0, int y0, int Numerator, int Denominator, int MirrorX);
+void GUI_DrawHLine        (int y0, int x0, int x1);
+void GUI_DrawLine         (int x0, int y0, int x1, int y1);
+void GUI_DrawLineRel      (int dx, int dy);
+void GUI_DrawLineTo       (int x, int y);
+void GUI_DrawPie          (int x0, int y0, int r, int a0, int a1, int Type);
+void GUI_DrawPixel        (int x, int y);
+void GUI_DrawPoint        (int x, int y);
+void GUI_DrawPolygon      (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_DrawPolyLine     (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_DrawFocusRect    (const GUI_RECT  * pRect, int Dist);
+void GUI_DrawRect         (int x0, int y0, int x1, int y1);
+void GUI_DrawRectEx       (const GUI_RECT * pRect);
+void GUI_DrawRoundedFrame (int x0, int y0, int x1, int y1, int r, int w);
+void GUI_DrawRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_DrawVLine        (int x0, int y0, int y1);
+void GUI_FillCircle       (int x0, int y0, int r);
+void GUI_FillEllipse      (int x0, int y0, int rx, int ry);
+void GUI_FillPolygon      (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_FillRect         (int x0, int y0, int x1, int y1);
+void GUI_FillRectEx       (const GUI_RECT * pRect);
+void GUI_FillRoundedFrame (int x0, int y0, int x1, int y1, int r, int w);
+void GUI_FillRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_FillRoundedRectB (int x0, int y0, int x1, int y1, int r);
+void GUI_FillRoundedRectT (int x0, int y0, int x1, int y1, int r);
+void GUI_GetClientRect    (GUI_RECT * pRect);
+void GUI_InvertRect       (int x0, int y0, int x1, int y1);
+void GUI_MoveRel          (int dx, int dy);
+void GUI_MoveTo           (int x, int y);
+
+/*********************************************************************
+*
+*       Graphic file support
+*/
+typedef int GUI_GET_DATA_FUNC(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off);
+
+/*********************************************************************
+*
+*       GIF file support
+*/
+int GUI_GIF_Draw           (const void * pGIF, U32 NumBytes,         int x0, int y0);
+int GUI_GIF_DrawEx         (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_GIF_DrawSub        (const void * pGIF, U32 NumBytes,         int x0, int y0, int Index);
+int GUI_GIF_DrawSubEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Index);
+int GUI_GIF_DrawSubScaled  (const void * pGIF, U32 NumBytes,         int x0, int y0, int Index, int Num, int Denom);
+int GUI_GIF_DrawSubScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Index, int Num, int Denom);
+int GUI_GIF_GetComment     (const void * pGIF, U32 NumBytes,         U8 * pBuffer, int MaxSize, int Index);
+int GUI_GIF_GetCommentEx   (GUI_GET_DATA_FUNC * pfGetData, void * p, U8 * pBuffer, int MaxSize, int Index);
+int GUI_GIF_GetImageInfo   (const void * pGIF, U32 NumBytes,         GUI_GIF_IMAGE_INFO * pInfo, int Index);
+int GUI_GIF_GetImageInfoEx (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_GIF_IMAGE_INFO * pInfo, int Index);
+int GUI_GIF_GetInfo        (const void * pGIF, U32 NumBytes,         GUI_GIF_INFO * pInfo);
+int GUI_GIF_GetInfoEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_GIF_INFO * pInfo);
+int GUI_GIF_GetXSize       (const void * pGIF);
+int GUI_GIF_GetXSizeEx     (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_GIF_GetYSize       (const void * pGIF);
+int GUI_GIF_GetYSizeEx     (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_GIF_SetFillTrans   (int OnOff);
+
+/*********************************************************************
+*
+*       BMP file support
+*/
+int  GUI_BMP_Draw        (const void * pFileData,                  int x0, int y0);
+int  GUI_BMP_DrawEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int  GUI_BMP_DrawScaled  (const void * pFileData,                  int x0, int y0, int Num, int Denom);
+int  GUI_BMP_DrawScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Num, int Denom);
+int  GUI_BMP_GetXSize    (const void * pFileData);
+int  GUI_BMP_GetXSizeEx  (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int  GUI_BMP_GetYSize    (const void * pFileData);
+int  GUI_BMP_GetYSizeEx  (GUI_GET_DATA_FUNC * pfGetData, void * p);
+void GUI_BMP_EnableAlpha (void);
+void GUI_BMP_DisableAlpha(void);
+
+/*********************************************************************
+*
+*       PNG file support
+*/
+int GUI_PNG_Draw      (const void * pFileData, int DataSize, int x0, int y0);
+int GUI_PNG_DrawEx    (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_PNG_GetXSize  (const void * pFileData, int FileSize);
+int GUI_PNG_GetXSizeEx(GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_PNG_GetYSize  (const void * pFileData, int FileSize);
+int GUI_PNG_GetYSizeEx(GUI_GET_DATA_FUNC * pfGetData, void * p);
+
+/*********************************************************************
+*
+*       JPEG file support
+*/
+typedef struct {
+  int XSize;
+  int YSize;
+} GUI_JPEG_INFO;
+
+int GUI_JPEG_Draw        (const void * pFileData, int DataSize,    int x0, int y0);
+int GUI_JPEG_DrawEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_JPEG_DrawScaled  (const void * pFileData, int DataSize,    int x0, int y0, int Num, int Denom);
+int GUI_JPEG_DrawScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Num, int Denom);
+int GUI_JPEG_GetInfo     (const void * pFileData, int DataSize,    GUI_JPEG_INFO * pInfo);
+int GUI_JPEG_GetInfoEx   (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_JPEG_INFO * pInfo);
+
+/*********************************************************************
+*
+*       MOVIE file support
+*/
+#define GUI_MOVIE_NOTIFICATION_PREDRAW  0 // Immediately before frame is drawn
+#define GUI_MOVIE_NOTIFICATION_POSTDRAW 1 // Immediately after a frame is drawn
+#define GUI_MOVIE_NOTIFICATION_START    2 // Send when start playing a movie
+#define GUI_MOVIE_NOTIFICATION_STOP     3 // Movie has stopped
+#define GUI_MOVIE_NOTIFICATION_DELETE   4 // Movie has been deleted
+
+typedef GUI_HMEM GUI_MOVIE_HANDLE;
+
+typedef void GUI_MOVIE_FUNC(GUI_MOVIE_HANDLE hMovie, int Notification, U32 CurrentFrame);
+
+typedef struct {
+  int xSize;         // X-size of images
+  int ySize;         // Y-size of images
+  int msPerFrame;    // Default duration of 1 frame
+  U32 NumFrames;     // Number of frames
+} GUI_MOVIE_INFO;
+
+GUI_MOVIE_HANDLE GUI_MOVIE_Create       (const void * pFileData, U32 FileSize, GUI_MOVIE_FUNC * pfNotify);
+GUI_MOVIE_HANDLE GUI_MOVIE_CreateEx     (GUI_GET_DATA_FUNC * pfGetData, void * pParam, GUI_MOVIE_FUNC * pfNotify);
+int              GUI_MOVIE_Delete       (GUI_MOVIE_HANDLE hMovie);
+U32              GUI_MOVIE_GetFrameIndex(GUI_MOVIE_HANDLE hMovie);
+int              GUI_MOVIE_GetInfo      (const void * pFileData, U32 FileSize, GUI_MOVIE_INFO * pInfo);
+int              GUI_MOVIE_GetInfoEx    (GUI_GET_DATA_FUNC * pfGetData, void * pParam, GUI_MOVIE_INFO * pInfo);
+int              GUI_MOVIE_GetPos       (GUI_MOVIE_HANDLE hMovie, int * pxPos, int * pyPos, int * pxSize, int * pySize);
+int              GUI_MOVIE_GotoFrame    (GUI_MOVIE_HANDLE hMovie, U32 Frame);
+int              GUI_MOVIE_Pause        (GUI_MOVIE_HANDLE hMovie);
+int              GUI_MOVIE_Play         (GUI_MOVIE_HANDLE hMovie);
+int              GUI_MOVIE_SetPeriod    (GUI_MOVIE_HANDLE hMovie, unsigned Period);
+int              GUI_MOVIE_SetPos       (GUI_MOVIE_HANDLE hMovie, int xPos, int yPos);
+int              GUI_MOVIE_Show         (GUI_MOVIE_HANDLE hMovie, int xPos, int yPos, int DoLoop);
+
+/*********************************************************************
+*
+*       Cursor routines
+*/
+#define GUI_CURSOR_SHOW 0
+#define GUI_CURSOR_HIDE 1
+
+typedef struct {
+  const GUI_BITMAP  * pBitmap;
+  int                 xHot;
+  int                 yHot;
+} GUI_CURSOR;
+
+typedef struct {
+  const GUI_BITMAP ** ppBm;
+  int                 xHot;
+  int                 yHot;
+  unsigned            Period;
+  const unsigned    * pPeriod;
+  int                 NumItems;
+} GUI_CURSOR_ANIM;
+
+#if GUI_SUPPORT_CURSOR
+  int                GUI_CURSOR_GetState     (void);
+  int                GUI_CURSOR_GetStateEx   (int Layer);
+  void               GUI_CURSOR_Hide         (void);
+  void               GUI_CURSOR_HideEx       (int Layer);
+  const GUI_CURSOR * GUI_CURSOR_Select       (const GUI_CURSOR * pCursor);
+  const GUI_CURSOR * GUI_CURSOR_SelectEx     (const GUI_CURSOR * pCursor, int Layer);
+  int                GUI_CURSOR_SelectAnim   (const GUI_CURSOR_ANIM * pCursorAnim);
+  int                GUI_CURSOR_SelectAnimEx (const GUI_CURSOR_ANIM * pCursorAnim, int LayerIndex);
+  int                GUI_CURSOR_SetBitmap    (const GUI_BITMAP * pBM);
+  int                GUI_CURSOR_SetBitmapEx  (const GUI_BITMAP * pBM, int Layer);
+  void               GUI_CURSOR_SetPosition  (int x, int y);
+  void               GUI_CURSOR_SetPositionEx(int xNewPos, int yNewPos, int Layer);
+  void               GUI_CURSOR_Show         (void);
+  void               GUI_CURSOR_ShowEx       (int Layer);
+  GUI_HSPRITE        GUI_CURSOR__GetSpriteEx (int LayerIndex, int * pxPos, int * pyPos);
+  void               GUI_CURSOR__SetSpriteEx (GUI_HSPRITE hSprite, const GUI_CURSOR * pCursor, int LayerIndex);
+#else
+  #define GUI_CURSOR_Show();
+  #define GUI_CURSOR_Clear();
+#endif
+
+/*********************************************************************
+*
+*       Sprite support
+*/
+#define GUI_SPRITE_CF_STAYONTOP (1 << 0)
+#define GUI_SPRITE_CF_SHOW      (1 << 1)
+
+#define GUI_SPRITE_SHOW 0
+#define GUI_SPRITE_HIDE 1
+
+GUI_HSPRITE GUI_SPRITE__CreateEx           (const GUI_BITMAP * pBM, int x, int y, int Layer, U16 Flags); /* Not to be documented, only used by cursor modul */
+void        GUI_SPRITE__SetCallback        (GUI_HSPRITE hSprite, GUI_HMEM hContext, void (* pCB)(GUI_HSPRITE, int));
+GUI_HSPRITE GUI_SPRITE_Create              (const GUI_BITMAP * pBM, int x, int y);
+GUI_HSPRITE GUI_SPRITE_CreateAnim          (const GUI_BITMAP ** ppBm, int x, int y, unsigned Period, const unsigned * pPeriod, int NumItems);
+GUI_HSPRITE GUI_SPRITE_CreateEx            (const GUI_BITMAP * pBM, int x, int y, int Layer);
+GUI_HSPRITE GUI_SPRITE_CreateExAnim        (const GUI_BITMAP ** ppBm, int x, int y, unsigned Period, const unsigned * pPeriod, int NumItems, int LayerIndex);
+GUI_HSPRITE GUI_SPRITE_CreateHidden        (const GUI_BITMAP * pBM, int x, int y);
+GUI_HSPRITE GUI_SPRITE_CreateHiddenEx      (const GUI_BITMAP * pBM, int x, int y, int Layer);
+void        GUI_SPRITE_Delete              (GUI_HSPRITE hSprite);
+int         GUI_SPRITE_GetState            (GUI_HSPRITE hSprite);
+void        GUI_SPRITE_Hide                (GUI_HSPRITE hSprite);
+int         GUI_SPRITE_SetBitmap           (GUI_HSPRITE hSprite, const GUI_BITMAP * pBM);
+int         GUI_SPRITE_SetBitmapAndPosition(GUI_HSPRITE hSprite, const GUI_BITMAP * pBM, int x, int y);
+int         GUI_SPRITE_SetLoop             (GUI_HSPRITE hSprite, int OnOff);
+void        GUI_SPRITE_SetPosition         (GUI_HSPRITE hSprite, int x, int y);
+int         GUI_SPRITE_StartAnim           (GUI_HSPRITE hSprite);
+int         GUI_SPRITE_StopAnim            (GUI_HSPRITE hSprite);
+void        GUI_SPRITE_Show                (GUI_HSPRITE hSprite);
+
+/*********************************************************************
+*
+*       Cursors and their bitmaps
+*/
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowS,  GUI_CursorArrowSI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowM,  GUI_CursorArrowMI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowL,  GUI_CursorArrowLI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossS,  GUI_CursorCrossSI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossM,  GUI_CursorCrossMI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossL,  GUI_CursorCrossLI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorHeaderM, GUI_CursorHeaderMI;
+
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapArrowS, GUI_BitmapArrowSI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapArrowM, GUI_BitmapArrowMI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapArrowL, GUI_BitmapArrowLI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapCrossS, GUI_BitmapCrossSI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapCrossM, GUI_BitmapCrossMI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapCrossL, GUI_BitmapCrossLI;
+
+extern GUI_CONST_STORAGE GUI_CURSOR_ANIM GUI_CursorAnimHourglassM;
+
+/*********************************************************************
+*
+*       Wrap modes
+*/
+typedef enum { GUI_WRAPMODE_NONE, GUI_WRAPMODE_WORD, GUI_WRAPMODE_CHAR } GUI_WRAPMODE;
+
+/*********************************************************************
+*
+*       Text related routines
+*/
+void  GUI_DispCEOL             (void);
+void  GUI_DispChar             (U16 c);
+void  GUI_DispCharAt           (U16 c, I16P x, I16P y);
+void  GUI_DispChars            (U16 c, int Cnt);
+void  GUI_DispNextLine         (void);
+void  GUI_DispString           (const char * s);
+void  GUI_DispStringAt         (const char * s, int x, int y);
+void  GUI_DispStringAtCEOL     (const char * s, int x, int y);
+void  GUI_DispStringHCenterAt  (const char * s, int x, int y);
+void  GUI__DispStringInRect    (const char * s, GUI_RECT * pRect, int TextAlign, int MaxNumChars);
+void  GUI_DispStringInRect     (const char * s, GUI_RECT * pRect, int TextAlign);
+#if GUI_SUPPORT_ROTATION
+  void  GUI_DispStringInRectEx (const char * s, GUI_RECT * pRect, int TextAlign, int MaxLen, const GUI_ROTATION * pLCD_Api);
+#endif
+void  GUI_DispStringInRectMax  (const char * s, GUI_RECT * pRect, int TextAlign, int MaxLen); /* Not to be doc. */
+void  GUI_DispStringInRectWrap (const char * s, GUI_RECT * pRect, int TextAlign, GUI_WRAPMODE WrapMode); /* Not to be doc. */
+void  GUI_DispStringLen        (const char * s, int Len);
+void  GUI_GetTextExtend        (GUI_RECT* pRect, const char * s, int Len);
+int   GUI_GetYAdjust           (void);
+int   GUI_GetDispPosX          (void);
+int   GUI_GetDispPosY          (void);
+const GUI_FONT * GUI_GetFont(void);
+int   GUI_GetCharDistX         (U16 c);
+int   GUI_GetCharDistXEx       (U16 c, int * pSizeX);
+int   GUI_GetStringDistX       (const char * s);
+GUI_DRAWMODE GUI_GetDrawMode   (void);
+int   GUI_GetFontDistY         (void);
+int   GUI_GetFontSizeY         (void);
+void  GUI_GetFontInfo          (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+void  GUI_GetOrg               (int * px, int * py);
+int   GUI_GetYSizeOfFont       (const GUI_FONT * pFont);
+int   GUI_GetYDistOfFont       (const GUI_FONT * pFont);
+int   GUI_GetTextAlign         (void);
+int   GUI_GetTextMode          (void);
+char  GUI_IsInFont             (const GUI_FONT * pFont, U16 c);
+int   GUI_SetTextAlign         (int Align);
+int   GUI_SetTextMode          (int Mode);
+char  GUI_SetTextStyle         (char Style);
+int   GUI_SetLBorder           (int x);
+const GUI_FONT * GUI_SetFont(const GUI_FONT * pNewFont);
+char  GUI_GotoXY               (int x, int y);
+char  GUI_GotoX                (int x);
+char  GUI_GotoY                (int y);
+int   GUI_WrapGetNumLines      (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+
+int   GUI_GetLeadingBlankCols (U16 c);
+int   GUI_GetTrailingBlankCols(U16 c);
+
+
+/*********************************************************************
+*
+*       System independent fonts (SIF)
+*/
+void GUI_SIF_CreateFont(const void * pFontData, GUI_FONT * pFont, const GUI_SIF_TYPE * pFontType);
+void GUI_SIF_DeleteFont(GUI_FONT * pFont);
+
+/*********************************************************************
+*
+*       External binary fonts (XBF)
+*/
+int  GUI_XBF_CreateFont(GUI_FONT * pFont, GUI_XBF_DATA * pXBF, const GUI_XBF_TYPE * pFontType, GUI_XBF_GET_DATA_FUNC * pfGetData, void * pVoid);
+void GUI_XBF_DeleteFont(GUI_FONT * pFont);
+
+/*********************************************************************
+*
+*       TrueType support (TTF)
+*/
+int  GUI_TTF_CreateFont   (GUI_FONT * pFont, GUI_TTF_CS * pCS);
+int  GUI_TTF_CreateFontAA (GUI_FONT * pFont, GUI_TTF_CS * pCS);
+void GUI_TTF_DestroyCache (void);
+void GUI_TTF_Done         (void);
+int  GUI_TTF_GetFamilyName(GUI_FONT * pFont, char * pBuffer, int NumBytes);
+int  GUI_TTF_GetStyleName (GUI_FONT * pFont, char * pBuffer, int NumBytes);
+void GUI_TTF_SetCacheSize (unsigned MaxFaces, unsigned MaxSizes, U32 MaxBytes);
+
+/*********************************************************************
+*
+*       Resource file support
+*/
+int          GUI_LANG_GetNumItems      (int IndexLang);
+const char * GUI_LANG_GetText          (int IndexText);
+int          GUI_LANG_GetTextBuffered  (int IndexText, char * pBuffer, int SizeOfBuffer);
+int          GUI_LANG_GetTextBufferedEx(int IndexText, int IndexLang, char * pBuffer, int SizeOfBuffer);
+const char * GUI_LANG_GetTextEx        (int IndexText, int IndexLang);
+int          GUI_LANG_LoadCSV          (U8 * pFileData, U32 FileSize);
+int          GUI_LANG_LoadCSVEx        (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int          GUI_LANG_LoadText         (U8 * pFileData, U32 FileSize, int IndexLang);
+int          GUI_LANG_LoadTextEx       (GUI_GET_DATA_FUNC * pfGetData, void * p, int IndexLang);
+int          GUI_LANG_SetLang          (int IndexLang);
+unsigned     GUI_LANG_SetMaxNumLang    (unsigned MaxNumLang);
+U16          GUI_LANG_SetSep           (U16 Sep);
+
+/*********************************************************************
+*
+*       Unicode support
+*/
+int   GUI_UC_ConvertUC2UTF8   (const U16 * s, int Len, char * pBuffer, int BufferSize);
+int   GUI_UC_ConvertUTF82UC   (const char * s, int Len, U16 * pBuffer, int BufferSize);
+int   GUI_UC_Encode           (char * s, U16 Char);
+int   GUI_UC_GetCharSize      (const char * s);
+U16   GUI_UC_GetCharCode      (const char * s);
+void  GUI_UC_SetEncodeNone    (void);
+void  GUI_UC_SetEncodeUTF8    (void);
+int   GUI_UC_EnableBIDI       (int OnOff);
+
+void GUI_UC_DispString(const U16 * s);
+void GUI_UC2DB (U16 Code, U8 * pOut);
+U16  GUI_DB2UC (U8 Byte0, U8 Byte1);
+
+/*********************************************************************
+*
+*       Drawing of binary, decimal and hexadecimal values
+*/
+void GUI_DispBin  (U32  v, U8 Len);
+void GUI_DispBinAt(U32  v, I16P x, I16P y, U8 Len);
+void GUI_DispDec  (I32 v, U8 Len);
+void GUI_DispDecAt (I32 v, I16P x, I16P y, U8 Len);
+void GUI_DispDecMin(I32 v);
+void GUI_DispDecShift(I32 v, U8 Len, U8 Shift);
+void GUI_DispDecSpace(I32 v, U8 MaxDigits);
+void GUI_DispHex  (U32 v, U8 Len);
+void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len);
+void GUI_DispSDec(I32 v, U8 Len);
+void GUI_DispSDecShift(I32 v, U8 Len, U8 Shift);
+
+/*********************************************************************
+*
+*       Drawing of floating point values
+*/
+void GUI_DispFloat    (float v, char Len);
+void GUI_DispFloatFix (float v, char Len, char Fract);
+void GUI_DispFloatMin (float v, char Fract);
+void GUI_DispSFloatFix(float v, char Len, char Fract);
+void GUI_DispSFloatMin(float v, char Fract);
+
+/*********************************************************************
+*
+*       Dynamic memory management
+*/
+#if !defined(GUI_ALLOC_ALLOC)
+  /* diagnostics */
+  GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBlocks(void);
+  GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBytes (void);
+  GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBlocks(void);
+  GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBytes (void);
+#else
+  #define GUI_ALLOC_GetNumFreeBlocks() 0
+  #define GUI_ALLOC_GetNumFreeBytes()  0
+  #define GUI_ALLOC_GetNumUsedBlocks() 0
+  #define GUI_ALLOC_GetNumUsedBytes()  0
+#endif
+
+GUI_HMEM           GUI_ALLOC_AllocInit       (const void * pInitData, GUI_ALLOC_DATATYPE Size);
+GUI_HMEM           GUI_ALLOC_AllocNoInit     (GUI_ALLOC_DATATYPE size);
+GUI_HMEM           GUI_ALLOC_AllocZero       (GUI_ALLOC_DATATYPE size);
+void               GUI_ALLOC_AssignMemory    (void * p, U32 NumBytes);
+void               GUI_ALLOC_Free            (GUI_HMEM  hMem);
+void               GUI_ALLOC_FreeFixedBlock  (void * p);
+void               GUI_ALLOC_FreePtrArray    (GUI_HMEM * pArray, int NumElems);
+void               GUI_ALLOC_FreePtr         (GUI_HMEM * phMem);
+void *             GUI_ALLOC_GetFixedBlock   (GUI_ALLOC_DATATYPE Size);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxSize      (void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetSize         (GUI_HMEM  hMem);
+void *             GUI_ALLOC_h2p             (GUI_HMEM  hMem);
+GUI_HMEM           GUI_ALLOC_p2h             (void * p);
+void               GUI_ALLOC_Init            (void);
+void               GUI_ALLOC_Lock            (void);
+void *             GUI_ALLOC_LockH           (GUI_HMEM  hMem);
+GUI_HMEM           GUI_ALLOC_Realloc         (GUI_HMEM hOld, int NewSize);
+GUI_ALLOC_DATATYPE GUI_ALLOC_RequestSize     (void);
+void               GUI_ALLOC_SetAvBlockSize  (U32 BlockSize);
+void               GUI_ALLOC_Unlock          (void);
+void *             GUI_ALLOC_UnlockH         (void ** pp);
+int                GUI_ALLOC_SetMaxPercentage(int MaxPercentage);
+
+
+/*********************************************************************
+*
+*       Memory devices: GUI_MEMDEV
+*/
+#define GUI_MEMDEV_HASTRANS       0
+#define GUI_MEMDEV_NOTRANS    (1<<0)
+
+typedef GUI_HMEM GUI_MEMDEV_Handle;
+typedef void     GUI_CALLBACK_VOID_P        (void * p);
+typedef int      GUI_ANIMATION_CALLBACK_FUNC(int TimeRem, void * pVoid);
+
+extern GUI_ANIMATION_CALLBACK_FUNC * GUI_MEMDEV__pCbAnimation;
+extern void                        * GUI_MEMDEV__pVoid;
+
+typedef struct {
+  GUI_RECT rView, rPrev;
+  char FirstCall;
+} GUI_AUTODEV;
+
+typedef struct {
+  char DrawFixed;
+  char IsMeasurement;
+} GUI_AUTODEV_INFO;
+
+int  GUI_MEMDEV_CreateAuto(GUI_AUTODEV * pAutoDev);
+void GUI_MEMDEV_DeleteAuto(GUI_AUTODEV * pAutoDev);
+int  GUI_MEMDEV_DrawAuto  (GUI_AUTODEV * pAutoDev, GUI_AUTODEV_INFO * pAutoDevInfo, GUI_CALLBACK_VOID_P * pfDraw, void * pData);
+
+/* Create a memory device which is compatible to the selected LCD */
+GUI_MEMDEV_Handle GUI_MEMDEV_Create       (int x0, int y0, int xSize, int ySize);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateEx     (int x0, int y0, int xSize, int ySize, int Flags);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateFixed  (int x0, int y0, int xSize, int ySize, int Flags,
+                                           const GUI_DEVICE_API     * pDeviceAPI,
+                                           const LCD_API_COLOR_CONV * pColorConvAPI);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateFixed32(int x0, int y0, int xSize, int ySize);
+
+void GUI_MEMDEV_Clear                (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_ClearAlpha           (GUI_MEMDEV_Handle hMemData, GUI_MEMDEV_Handle hMemMask);
+void GUI_MEMDEV_CopyFromLCD          (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyFromLCDAA        (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCD            (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCDAA          (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCDAt          (GUI_MEMDEV_Handle hMem, int x, int y);
+int  GUI_MEMDEV_CompareWithLCD       (GUI_MEMDEV_Handle hMem, int * px, int * py, int * pExp, int * pAct);
+void GUI_MEMDEV_Delete               (GUI_MEMDEV_Handle MemDev);
+void GUI_MEMDEV_DrawPerspectiveX     (GUI_MEMDEV_Handle hMem, int x, int y, int h0, int h1, int dx, int dy);
+int  GUI_MEMDEV_GetXPos              (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_GetXSize             (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_GetYPos              (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_GetYSize             (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_MarkDirty            (GUI_MEMDEV_Handle hMem, int x0, int y0, int x1, int y1);
+void GUI_MEMDEV_ReduceYSize          (GUI_MEMDEV_Handle hMem, int YSize);
+void GUI_MEMDEV_Rotate               (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateHR             (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag);
+void GUI_MEMDEV__Rotate              (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag, U32 AndMask);
+void GUI_MEMDEV__RotateHR            (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag, U32 AndMask);
+void GUI_MEMDEV_RotateHQ             (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQHR           (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQT            (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+GUI_MEMDEV_Handle GUI_MEMDEV_Select  (GUI_MEMDEV_Handle hMem);  /* Select (activate) a particular memory device. */
+void  GUI_MEMDEV_SetOrg              (GUI_MEMDEV_Handle hMem, int x0, int y0);
+void  GUI_MEMDEV_WriteAt             (GUI_MEMDEV_Handle hMem, int x, int y);
+void  GUI_MEMDEV_Write               (GUI_MEMDEV_Handle hMem);
+void  GUI_MEMDEV_WriteAlphaAt        (GUI_MEMDEV_Handle hMem, int Alpha, int x, int y);
+void  GUI_MEMDEV_WriteAlpha          (GUI_MEMDEV_Handle hMem, int Alpha);
+void  GUI_MEMDEV_WriteExAt           (GUI_MEMDEV_Handle hMem, int x, int y, int xMag, int yMag, int Alpha);
+void  GUI_MEMDEV_WriteEx             (GUI_MEMDEV_Handle hMem, int xMag, int yMag, int Alpha);
+int   GUI_MEMDEV_Draw                (GUI_RECT * pRect, GUI_CALLBACK_VOID_P * pfDraw, void * pData, int NumLines, int Flags);
+void* GUI_MEMDEV_GetDataPtr          (GUI_MEMDEV_Handle hMem);
+void  GUI_MEMDEV_SetColorConv        (GUI_MEMDEV_Handle hMem, const LCD_API_COLOR_CONV * pColorConvAPI);
+const LCD_API_COLOR_CONV * GUI_MEMDEV_GetColorConv(GUI_MEMDEV_Handle hMemDev);
+int   GUI_MEMDEV_GetBitsPerPixel     (GUI_MEMDEV_Handle hMemDev);
+int   GUI_MEMDEV_FadeDevices         (GUI_MEMDEV_Handle hMem0, GUI_MEMDEV_Handle hMem1, int Period);
+void  GUI_MEMDEV_SerializeBMP        (GUI_MEMDEV_Handle hDev, GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p);
+void  GUI_MEMDEV_SetAnimationCallback(GUI_ANIMATION_CALLBACK_FUNC * pCbAnimation, void * pVoid);
+void  GUI_MEMDEV__FadeDevice         (GUI_MEMDEV_Handle hMemWin, GUI_MEMDEV_Handle hMemBk, GUI_MEMDEV_Handle hMemDst, U8 Intens);
+void  GUI_MEMDEV__FadeDeviceEx       (GUI_MEMDEV_Handle hMemWin, GUI_MEMDEV_Handle hMemBk, GUI_MEMDEV_Handle hMemDst, U8 Intens, int xPosWin, int yPosWin);
+int   GUI_MEMDEV_PunchOutDevice      (GUI_MEMDEV_Handle hMemData, GUI_MEMDEV_Handle hMemMask);
+void  GUI_SelectLCD(void);
+
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32  (GUI_MEMDEV_Handle hMem, U8 Depth);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32HQ(GUI_MEMDEV_Handle hMem, U8 Depth);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32LQ(GUI_MEMDEV_Handle hMem, U8 Depth);
+void              GUI_MEMDEV_SetBlurHQ              (void);
+void              GUI_MEMDEV_SetBlurLQ              (void);
+int               GUI_MEMDEV_BlendColor32           (GUI_MEMDEV_Handle hMem, U32 BlendColor, U8 BlendIntens);
+
+/*********************************************************************
+*
+*       Alpha blending
+*/
+typedef struct {
+  U32 UserAlpha;
+} GUI_ALPHA_STATE;
+
+#define GUI_MAKE_ALPHA(Alpha, Color) ((U32)(((U32)Alpha << 24) | Color))
+
+unsigned GUI_EnableAlpha         (unsigned OnOff);
+U32      GUI_RestoreUserAlpha    (GUI_ALPHA_STATE * pAlphaState);
+unsigned GUI_SetAlpha            (U8 Alpha);
+U32      GUI_SetUserAlpha        (GUI_ALPHA_STATE * pAlphaState, U32 UserAlpha);
+void     GUI_SetFuncAlphaBlending(void (* pfAlphaBlending)(LCD_COLOR *, LCD_COLOR *, LCD_COLOR *, U32));
+void     GUI_SetFuncMixColors    (LCD_COLOR (* pFunc)(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens));
+void     GUI_SetFuncMixColorsBulk(void (* pFunc)(U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens));
+
+/*********************************************************************
+*
+*       Multi layer support
+*/
+unsigned GUI_SelectLayer(unsigned Index);
+unsigned GUI_GetSelLayer(void);
+
+int  GUI_SetLayerPosEx  (unsigned Index, int xPos, int yPos);
+int  GUI_SetLayerSizeEx (unsigned Index, int xSize, int ySize);
+int  GUI_SetLayerVisEx  (unsigned Index, int OnOff);
+int  GUI_SetLayerAlphaEx(unsigned Index, int Alpha);
+void GUI_GetLayerPosEx  (unsigned Index, int * pxPos, int * pyPos);
+
+void     GUI_AssignCursorLayer(unsigned Index, unsigned CursorLayer);
+unsigned GUI_GetCursorLayer   (unsigned Index);
+
+/*********************************************************************
+*
+*       Multiple buffers and display origin
+*/
+void GUI_SetOrg(int x, int y);
+
+void GUI_MULTIBUF_Begin          (void);
+void GUI_MULTIBUF_BeginEx        (int LayerIndex);
+void GUI_MULTIBUF_End            (void);
+void GUI_MULTIBUF_EndEx          (int LayerIndex);
+void GUI_MULTIBUF_Config         (int NumBuffers);
+void GUI_MULTIBUF_ConfigEx       (int LayerIndex, int NumBuffers);
+void GUI_MULTIBUF_Confirm        (int Index);
+void GUI_MULTIBUF_ConfirmEx      (int LayerIndex, int BufferIndex);
+int  GUI_MULTIBUF_GetNumBuffers  (void);
+int  GUI_MULTIBUF_GetNumBuffersEx(int LayerIndex);
+void GUI_MULTIBUF_UseSingleBuffer(void);
+
+/*********************************************************************
+*
+*       Display orientation
+*/
+/*********************************************************************
+*
+*       GUI_ORIENTATION_API
+*/
+typedef struct {
+  void     (* pfDrawBitmap   )(GUI_DEVICE * pDevice, int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+  void     (* pfDrawHLine    )(GUI_DEVICE * pDevice, int x0, int y0,  int x1);
+  void     (* pfDrawVLine    )(GUI_DEVICE * pDevice, int x , int y0,  int y1);
+  void     (* pfFillRect     )(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1);
+  unsigned (* pfGetPixelIndex)(GUI_DEVICE * pDevice, int x, int y);
+  void     (* pfSetPixelIndex)(GUI_DEVICE * pDevice, int x, int y, int ColorIndex);
+  void     (* pfXorPixel     )(GUI_DEVICE * pDevice, int x, int y);
+  int      BytesPerPixel;
+} GUI_ORIENTATION_API;
+
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C0;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C8;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C16;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C32;
+
+#define GUI_ORIENTATION_C0  &GUI_OrientationAPI_C0
+#define GUI_ORIENTATION_C8  &GUI_OrientationAPI_C8
+#define GUI_ORIENTATION_C16 &GUI_OrientationAPI_C16
+#define GUI_ORIENTATION_C32 &GUI_OrientationAPI_C32
+
+int GUI_SetOrientation        (int Orientation);
+int GUI_SetOrientationEx      (int Orientation, int LayerIndex);
+int GUI_SetOrientationExCached(int Orientation, int LayerIndex, const GUI_ORIENTATION_API * pAPI);
+
+/*********************************************************************
+*
+*       Measure device: GUI_MEASDEV
+*/
+typedef GUI_HMEM GUI_MEASDEV_Handle;
+
+GUI_MEASDEV_Handle GUI_MEASDEV_Create (void);
+void               GUI_MEASDEV_Delete (GUI_MEASDEV_Handle hMemDev);
+void               GUI_MEASDEV_Select (GUI_MEASDEV_Handle hMem);
+void               GUI_MEASDEV_GetRect(GUI_MEASDEV_Handle hMem, GUI_RECT * pRect);
+void               GUI_MEASDEV_ClearRect(GUI_MEASDEV_Handle hMem);
+
+/*********************************************************************
+*
+*       Polygon helpers
+*/
+void GUI_RotatePolygon (GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, float Angle);
+void GUI_MagnifyPolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, int Mag);
+void GUI_EnlargePolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, int Len);
+
+/*********************************************************************
+*
+*       Streamed bitmaps
+*/
+#define GUI_BITMAPSTREAM_GET_BUFFER     1
+#define GUI_BITMAPSTREAM_RELEASE_BUFFER 2
+#define GUI_BITMAPSTREAM_MODIFY_PALETTE 3
+
+#define DECLARE_CREATE_FROM_STREAM(ID) int GUI_CreateBitmapFromStream##ID(GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const void * p);
+
+DECLARE_CREATE_FROM_STREAM(IDX)
+DECLARE_CREATE_FROM_STREAM(RLE4)
+DECLARE_CREATE_FROM_STREAM(RLE8)
+DECLARE_CREATE_FROM_STREAM(565)
+DECLARE_CREATE_FROM_STREAM(M565)
+DECLARE_CREATE_FROM_STREAM(555)
+DECLARE_CREATE_FROM_STREAM(M555)
+DECLARE_CREATE_FROM_STREAM(A565)
+DECLARE_CREATE_FROM_STREAM(AM565)
+DECLARE_CREATE_FROM_STREAM(A555)
+DECLARE_CREATE_FROM_STREAM(AM555)
+DECLARE_CREATE_FROM_STREAM(RLE16)
+DECLARE_CREATE_FROM_STREAM(RLEM16)
+DECLARE_CREATE_FROM_STREAM(24)
+DECLARE_CREATE_FROM_STREAM(Alpha)
+DECLARE_CREATE_FROM_STREAM(RLEAlpha)
+DECLARE_CREATE_FROM_STREAM(RLE32)
+DECLARE_CREATE_FROM_STREAM(444_12)
+DECLARE_CREATE_FROM_STREAM(M444_12)
+DECLARE_CREATE_FROM_STREAM(444_12_1)
+DECLARE_CREATE_FROM_STREAM(M444_12_1)
+DECLARE_CREATE_FROM_STREAM(444_16)
+DECLARE_CREATE_FROM_STREAM(M444_16)
+
+int  GUI_CreateBitmapFromStream   (GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const void * p);
+void GUI_DrawStreamedBitmap       (const void * p, int x, int y);
+void GUI_DrawStreamedBitmapAuto   (const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapEx     (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapExAuto (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmap555Ex  (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapM555Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmap565Ex  (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapM565Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapA555Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapAM555Ex(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapA565Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapAM565Ex(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmap24Ex   (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+void GUI_GetStreamedBitmapInfo    (const void * p, GUI_BITMAPSTREAM_INFO * pInfo);
+int  GUI_GetStreamedBitmapInfoEx  (GUI_GET_DATA_FUNC * pfGetData, const void * p, GUI_BITMAPSTREAM_INFO * pInfo);
+void GUI_SetStreamedBitmapHook    (GUI_BITMAPSTREAM_CALLBACK pfStreamedBitmapHook);
+
+void LCD__RLE4_SetFunc (GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off, const LCD_LOGPALETTE * pLogPal);
+void LCD__RLE8_SetFunc (GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off, const LCD_LOGPALETTE * pLogPal);
+void LCD__RLE16_SetFunc(GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off);
+void LCD__RLE32_SetFunc(GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off);
+
+/*********************************************************************
+*
+*       BMP-export
+*/
+void GUI_BMP_Serialize     (GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p);
+void GUI_BMP_SerializeEx   (GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p);
+void GUI_BMP_SerializeExBpp(GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p, int BitsPerPixel);
+
+/*********************************************************************
+*
+*       Time / execution related routines
+*/
+void           GUI_Delay  (int Period);
+GUI_TIMER_TIME GUI_GetTime(void);
+int            GUI_Exec(void);         /* Execute all jobs ... Return 0 if nothing was done. */
+int            GUI_Exec1(void);        /* Execute one job  ... Return 0 if nothing was done. */
+
+/*********************************************************************
+*
+*       MessageBox
+*/
+int     GUI_MessageBox   (const char * sMessage, const char * sCaption, int Flags);
+#define GUI_MESSAGEBOX_CF_MOVEABLE (1 << 0)
+#define GUI_MESSAGEBOX_CF_MODAL    (1 << 1)
+
+#define GUI_MB_OK                20
+#define GUI_MB_WARNING           21
+
+/*********************************************************************
+*
+*       GUI_TIMER module
+*/
+#define GUI_TIMER_CF_WINDOW (1 << 0)
+#define GUI_TIMER_CF_CURSOR (1 << 1)
+
+typedef GUI_HMEM GUI_TIMER_HANDLE;
+
+typedef struct {
+  GUI_TIMER_TIME   Time;
+  U32              Context;
+  GUI_TIMER_HANDLE hTimer;
+} GUI_TIMER_MESSAGE;
+
+typedef void GUI_TIMER_CALLBACK(/*const*/ GUI_TIMER_MESSAGE* pTM);
+
+GUI_TIMER_HANDLE GUI_TIMER_Create   (GUI_TIMER_CALLBACK * cb, GUI_TIMER_TIME Time, U32 Context, U16 Flags);
+void             GUI_TIMER_Delete   (GUI_TIMER_HANDLE hObj);
+
+/* Methods changing properties */
+GUI_TIMER_TIME GUI_TIMER_GetPeriod(GUI_TIMER_HANDLE hObj);
+void           GUI_TIMER_SetPeriod(GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Period);
+void           GUI_TIMER_SetTime  (GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Period);
+void           GUI_TIMER_SetDelay (GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Delay);
+void           GUI_TIMER_Restart  (GUI_TIMER_HANDLE hObj);
+int            GUI_TIMER_GetFlag  (GUI_TIMER_HANDLE hObj, int Flag); /* Not to be documented */
+int            GUI_TIMER_Exec     (void);
+
+/*********************************************************************
+*
+*       Anti Aliasing
+*/
+#define GUI_AA_TRANS   0 // Foreground color mixed up with current content of framebuffer
+#define GUI_AA_NOTRANS 1 // Foreground color mixed up with current background color
+
+void GUI_AA_DisableHiRes     (void);
+void GUI_AA_EnableHiRes      (void);
+int  GUI_AA_GetFactor        (void);
+void GUI_AA_SetFactor        (int Factor);
+void GUI_AA_DrawArc          (int x0, int y0, int rx, int ry, int a0, int a1);
+void GUI_AA_DrawLine         (int x0, int y0, int x1, int y1);
+void GUI_AA_DrawPolyOutline  (const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y);
+void GUI_AA_DrawPolyOutlineEx(const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y, GUI_POINT * pBuffer);
+void GUI_AA_DrawRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_AA_DrawRoundedRectEx(GUI_RECT * pRect, int r);
+void GUI_AA_FillCircle       (int x0, int y0, int r);
+void GUI_AA_FillPolygon      (GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_AA_FillRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_AA_FillRoundedRectEx(GUI_RECT * pRect, int r);
+int  GUI_AA_PreserveTrans    (int OnOff);
+int  GUI_AA_SetDrawMode      (int Mode);
+
+/*********************************************************************
+*
+*       Keyboard
+*/
+/* Message layer */
+void GUI_StoreKeyMsg(int Key, int Pressed);
+void GUI_SendKeyMsg (int Key, int Pressed);
+int  GUI_PollKeyMsg (void);
+void GUI_GetKeyState(GUI_KEY_STATE * pState);
+
+/* Application layer */
+int  GUI_GetKey(void);
+int  GUI_WaitKey(void);
+void GUI_StoreKey(int c);
+void GUI_ClearKeyBuffer(void);
+
+/*********************************************************************
+*
+*       Task synchronization
+*/
+void GUI_WaitEvent            (void);
+void GUI_SignalEvent          (void);
+void GUI_SetSignalEventFunc   (GUI_SIGNAL_EVENT_FUNC     pfSignalEvent);
+void GUI_SetWaitEventFunc     (GUI_WAIT_EVENT_FUNC       pfWaitEvent);
+void GUI_SetWaitEventTimedFunc(GUI_WAIT_EVENT_TIMED_FUNC pfWaitEventTimed);
+
+/*********************************************************************
+*
+*       Joystick, generic
+*/
+void GUI_JOYSTICK_StoreState(const GUI_PID_STATE * pState);
+
+/*********************************************************************
+*
+*       PID  (Pointer input device ... mouse/touch)
+*/
+void GUI_PID_StoreState     (const GUI_PID_STATE * pState);
+int  GUI_PID_GetState       (      GUI_PID_STATE * pState);
+void GUI_PID_GetCurrentState(      GUI_PID_STATE * pState);
+int  GUI_PID_IsEmpty        (void);
+int  GUI_PID_IsPressed      (void);
+
+/*********************************************************************
+*
+*       Mouse, generic
+*/
+int  GUI_MOUSE_GetState  (      GUI_PID_STATE * pState);
+void GUI_MOUSE_StoreState(const GUI_PID_STATE * pState);
+
+/*********************************************************************
+*
+*       TOUCH screen, generic
+*/
+int  GUI_TOUCH_GetState     (GUI_PID_STATE * pState);
+void GUI_TOUCH_GetUnstable  (int * px, int * py);  /* for diagnostics only */
+void GUI_TOUCH_SetLayer     (int Layer);
+void GUI_TOUCH_StoreState   (int x, int y);
+void GUI_TOUCH_StoreStateEx (const GUI_PID_STATE * pState);
+void GUI_TOUCH_StoreUnstable(int x, int y);
+
+/*********************************************************************
+*
+*       Mouse, PS2 driver
+*/
+void GUI_MOUSE_DRIVER_PS2_Init(void);               /* optional */
+void GUI_MOUSE_DRIVER_PS2_OnRx(unsigned char Data);
+
+/*********************************************************************
+*
+*       TOUCH screen, analog driver
+*/
+void GUI_TOUCH_Exec                 (void);
+int  GUI_TOUCH_Calibrate            (int Coord, int Log0, int Log1, int Phys0, int Phys1);
+void GUI_TOUCH_SetDefaultCalibration(void);
+int  GUI_TOUCH_GetxPhys             (void);    /* for diagnostics only */
+int  GUI_TOUCH_GetyPhys             (void);    /* for diagnostics only */
+void GUI_TOUCH_GetCalData           (int Coord, int * pMin, int * pMax);
+void GUI_TOUCH_SetOrientation       (unsigned Orientation);
+void GUI_TOUCH_SetOrientationPhys   (unsigned Orientation);
+
+/*********************************************************************
+*
+*       TOUCH: imports
+*
+* Please note: The following functions are required by the module.
+* They need to be part of your application software (or rather, part
+* of the hardware-layer of your software).
+*/
+void GUI_TOUCH_X_ActivateX(void);
+void GUI_TOUCH_X_ActivateY(void);
+void GUI_TOUCH_X_Disable  (void);
+int  GUI_TOUCH_X_MeasureX (void);
+int  GUI_TOUCH_X_MeasureY (void);
+
+/*********************************************************************
+*
+*       GUI_X_
+*
+* Externals, to be defined by application
+*
+* The externals defined below should be defined by the
+* application. They are per default contained in the module
+* GUI_X.c.
+* Note that a lot if not all of these are not required in most target
+* systems.
+* For this module, samples are available for configurations
+* with or without operating system.
+*/
+
+//
+// Configuration
+//
+void GUI_X_Config(void);
+void GUI_X_Init  (void);
+
+//
+// Timing routines
+//
+GUI_TIMER_TIME GUI_X_GetTime(void);
+void           GUI_X_Delay  (int Period);
+
+//
+// Multitask routines - required only if multitasking is used (#define GUI_OS 1)
+//
+void GUI_X_Unlock   (void);
+void GUI_X_Lock     (void);
+U32  GUI_X_GetTaskId(void);
+void GUI_X_InitOS   (void);
+
+//
+// Event driving (optional with multitasking)
+//
+void GUI_X_ExecIdle      (void);
+void GUI_X_WaitEvent     (void);
+void GUI_X_WaitEventTimed(int Period);
+void GUI_X_SignalEvent   (void);
+
+//
+// Recording (logs/warnings and errors) - required only for higher levels
+//
+void GUI_X_Log     (const char * s);
+void GUI_X_Warn    (const char * s);
+void GUI_X_ErrorOut(const char * s);
+
+/*********************************************************************
+*
+*       Constants for fonts and bitmaps
+*/
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE4;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE4Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE8;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE8Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE16Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEM16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEM16Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE32;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE32Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEAlpha;
+
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_12;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_12;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_12_1;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_12_1;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods24;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods8888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsA565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsAM565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsA555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsAM555;
+
+#define GUI_COMPRESS_RLE4 0
+#define GUI_COMPRESS_RLE8 0
+
+#define GUI_DRAW_RLE4         &GUI_BitmapMethodsRLE4       /* Method table ! */
+#define GUI_DRAW_RLE8         &GUI_BitmapMethodsRLE8       /* Method table ! */
+#define GUI_DRAW_RLE16        &GUI_BitmapMethodsRLE16      /* Method table ! */
+#define GUI_DRAW_RLEM16       &GUI_BitmapMethodsRLEM16     /* Method table ! */
+#define GUI_DRAW_RLE32        &GUI_BitmapMethodsRLE32      /* Method table ! */
+#define GUI_DRAW_RLEALPHA     &GUI_BitmapMethodsRLEAlpha   /* Method table ! */
+
+#define GUI_DRAW_BMP444_12    &GUI_BitmapMethods444_12     /* Method table ! */
+#define GUI_DRAW_BMPM444_12   &GUI_BitmapMethodsM444_12    /* Method table ! */
+#define GUI_DRAW_BMP444_12_1  &GUI_BitmapMethods444_12_1   /* Method table ! */
+#define GUI_DRAW_BMPM444_12_1 &GUI_BitmapMethodsM444_12_1  /* Method table ! */
+#define GUI_DRAW_BMP444_16    &GUI_BitmapMethods444_16     /* Method table ! */
+#define GUI_DRAW_BMPM444_16   &GUI_BitmapMethodsM444_16    /* Method table ! */
+#define GUI_DRAW_BMP555       &GUI_BitmapMethods555        /* Method table ! */
+#define GUI_DRAW_BMPM555      &GUI_BitmapMethodsM555       /* Method table ! */
+#define GUI_DRAW_BMP565       &GUI_BitmapMethods565        /* Method table ! */
+#define GUI_DRAW_BMPM565      &GUI_BitmapMethodsM565       /* Method table ! */
+#define GUI_DRAW_BMP24        &GUI_BitmapMethods24         /* Method table ! */
+#define GUI_DRAW_BMP888       &GUI_BitmapMethods888        /* Method table ! */
+#define GUI_DRAW_BMPM888      &GUI_BitmapMethodsM888       /* Method table ! */
+#define GUI_DRAW_BMP8888      &GUI_BitmapMethods8888       /* Method table ! */
+#define GUI_DRAW_BMPA555      &GUI_BitmapMethodsA555       /* Method table ! */
+#define GUI_DRAW_BMPAM555     &GUI_BitmapMethodsAM555      /* Method table ! */
+#define GUI_DRAW_BMPA565      &GUI_BitmapMethodsA565       /* Method table ! */
+#define GUI_DRAW_BMPAM565     &GUI_BitmapMethodsAM565      /* Method table ! */
+
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_Ext;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_Frm;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA2;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA4;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA2_EXT;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA4_EXT;
+
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_Ext;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_Frm;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_AA2_Ext;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_AA4_Ext;
+
+/*********************************************************************
+*
+*       GUI_KEY_...
+*
+* These ID values are basically meant to be used with widgets
+* Note that we have chosen the values to be close to existing
+* "standards", so do not change them unless forced to.
+*
+*/
+#define GUI_KEY_BACKSPACE         8         /* ASCII: BACKSPACE Crtl-H */
+#define GUI_KEY_TAB               9         /* ASCII: TAB       Crtl-I */
+#define GUI_KEY_BACKTAB           10
+#define GUI_KEY_ENTER             13        /* ASCII: ENTER     Crtl-M */
+#define GUI_KEY_LEFT              16
+#define GUI_KEY_UP                17
+#define GUI_KEY_RIGHT             18
+#define GUI_KEY_DOWN              19
+#define GUI_KEY_HOME              23
+#define GUI_KEY_END               24
+#define GUI_KEY_SHIFT             25
+#define GUI_KEY_CONTROL           26
+#define GUI_KEY_ESCAPE            27        /* ASCII: ESCAPE    0x1b   */
+#define GUI_KEY_INSERT            29
+#define GUI_KEY_DELETE            30
+#define GUI_KEY_SPACE             32
+#define GUI_KEY_PGUP              33
+#define GUI_KEY_PGDOWN            34
+
+#define GUI_KEY_F1                40
+#define GUI_KEY_F2                41
+
+/*********************************************************************
+*
+*       Dialog item IDs
+*
+*  The IDs below are arbitrary values. They just have to be unique
+*  within the dialog.
+*
+*  If you use your own Ids, we recommend to use values above GUI_ID_USER.
+*/
+#define GUI_ID_OK                1
+#define GUI_ID_CANCEL            2
+#define GUI_ID_YES               3
+#define GUI_ID_NO                4
+#define GUI_ID_CLOSE             5
+#define GUI_ID_HELP              6
+#define GUI_ID_MAXIMIZE          7
+#define GUI_ID_MINIMIZE          8
+
+#define GUI_ID_VSCROLL    0xFE
+#define GUI_ID_HSCROLL    0xFF
+
+#define GUI_ID_EDIT0      0x100
+#define GUI_ID_EDIT1      0x101
+#define GUI_ID_EDIT2      0x102
+#define GUI_ID_EDIT3      0x103
+#define GUI_ID_EDIT4      0x104
+#define GUI_ID_EDIT5      0x105
+#define GUI_ID_EDIT6      0x106
+#define GUI_ID_EDIT7      0x107
+#define GUI_ID_EDIT8      0x108
+#define GUI_ID_EDIT9      0x109
+
+#define GUI_ID_LISTBOX0   0x110
+#define GUI_ID_LISTBOX1   0x111
+#define GUI_ID_LISTBOX2   0x112
+#define GUI_ID_LISTBOX3   0x113
+#define GUI_ID_LISTBOX4   0x114
+#define GUI_ID_LISTBOX5   0x115
+#define GUI_ID_LISTBOX6   0x116
+#define GUI_ID_LISTBOX7   0x117
+#define GUI_ID_LISTBOX8   0x118
+#define GUI_ID_LISTBOX9   0x119
+
+#define GUI_ID_CHECK0     0x120
+#define GUI_ID_CHECK1     0x121
+#define GUI_ID_CHECK2     0x122
+#define GUI_ID_CHECK3     0x123
+#define GUI_ID_CHECK4     0x124
+#define GUI_ID_CHECK5     0x125
+#define GUI_ID_CHECK6     0x126
+#define GUI_ID_CHECK7     0x127
+#define GUI_ID_CHECK8     0x128
+#define GUI_ID_CHECK9     0x129
+
+#define GUI_ID_SLIDER0    0x130
+#define GUI_ID_SLIDER1    0x131
+#define GUI_ID_SLIDER2    0x132
+#define GUI_ID_SLIDER3    0x133
+#define GUI_ID_SLIDER4    0x134
+#define GUI_ID_SLIDER5    0x135
+#define GUI_ID_SLIDER6    0x136
+#define GUI_ID_SLIDER7    0x137
+#define GUI_ID_SLIDER8    0x138
+#define GUI_ID_SLIDER9    0x139
+
+#define GUI_ID_SCROLLBAR0 0x140
+#define GUI_ID_SCROLLBAR1 0x141
+#define GUI_ID_SCROLLBAR2 0x142
+#define GUI_ID_SCROLLBAR3 0x143
+
+#define GUI_ID_RADIO0     0x150
+#define GUI_ID_RADIO1     0x151
+#define GUI_ID_RADIO2     0x152
+#define GUI_ID_RADIO3     0x153
+#define GUI_ID_RADIO4     0x154
+#define GUI_ID_RADIO5     0x155
+#define GUI_ID_RADIO6     0x156
+#define GUI_ID_RADIO7     0x157
+
+#define GUI_ID_TEXT0      0x160
+#define GUI_ID_TEXT1      0x161
+#define GUI_ID_TEXT2      0x162
+#define GUI_ID_TEXT3      0x163
+#define GUI_ID_TEXT4      0x164
+#define GUI_ID_TEXT5      0x165
+#define GUI_ID_TEXT6      0x166
+#define GUI_ID_TEXT7      0x167
+#define GUI_ID_TEXT8      0x168
+#define GUI_ID_TEXT9      0x169
+
+#define GUI_ID_BUTTON0    0x170
+#define GUI_ID_BUTTON1    0x171
+#define GUI_ID_BUTTON2    0x172
+#define GUI_ID_BUTTON3    0x173
+#define GUI_ID_BUTTON4    0x174
+#define GUI_ID_BUTTON5    0x175
+#define GUI_ID_BUTTON6    0x176
+#define GUI_ID_BUTTON7    0x177
+#define GUI_ID_BUTTON8    0x178
+#define GUI_ID_BUTTON9    0x179
+
+#define GUI_ID_DROPDOWN0  0x180
+#define GUI_ID_DROPDOWN1  0x181
+#define GUI_ID_DROPDOWN2  0x182
+#define GUI_ID_DROPDOWN3  0x183
+
+#define GUI_ID_MULTIEDIT0 0x190
+#define GUI_ID_MULTIEDIT1 0x191
+#define GUI_ID_MULTIEDIT2 0x192
+#define GUI_ID_MULTIEDIT3 0x193
+
+#define GUI_ID_LISTVIEW0  0x200
+#define GUI_ID_LISTVIEW1  0x201
+#define GUI_ID_LISTVIEW2  0x202
+#define GUI_ID_LISTVIEW3  0x203
+
+#define GUI_ID_PROGBAR0   0x210
+#define GUI_ID_PROGBAR1   0x211
+#define GUI_ID_PROGBAR2   0x212
+#define GUI_ID_PROGBAR3   0x213
+
+#define GUI_ID_GRAPH0     0x220
+#define GUI_ID_GRAPH1     0x221
+#define GUI_ID_GRAPH2     0x222
+#define GUI_ID_GRAPH3     0x223
+
+#define GUI_ID_MULTIPAGE0 0x230
+#define GUI_ID_MULTIPAGE1 0x231
+#define GUI_ID_MULTIPAGE2 0x232
+#define GUI_ID_MULTIPAGE3 0x233
+
+#define GUI_ID_TREEVIEW0  0x240
+#define GUI_ID_TREEVIEW1  0x241
+#define GUI_ID_TREEVIEW2  0x242
+#define GUI_ID_TREEVIEW3  0x243
+
+#define GUI_ID_ICONVIEW0  0x250
+#define GUI_ID_ICONVIEW1  0x251
+#define GUI_ID_ICONVIEW2  0x252
+#define GUI_ID_ICONVIEW3  0x253
+
+#define GUI_ID_LISTWHEEL0 0x260
+#define GUI_ID_LISTWHEEL1 0x261
+#define GUI_ID_LISTWHEEL2 0x262
+#define GUI_ID_LISTWHEEL3 0x263
+
+#define GUI_ID_IMAGE0     0x270
+#define GUI_ID_IMAGE1     0x271
+#define GUI_ID_IMAGE2     0x272
+#define GUI_ID_IMAGE3     0x273
+#define GUI_ID_IMAGE4     0x274
+#define GUI_ID_IMAGE5     0x275
+#define GUI_ID_IMAGE6     0x276
+#define GUI_ID_IMAGE7     0x277
+#define GUI_ID_IMAGE8     0x278
+#define GUI_ID_IMAGE9     0x279
+
+#define GUI_ID_SPINBOX0   0x280
+#define GUI_ID_SPINBOX1   0x281
+#define GUI_ID_SPINBOX2   0x282
+#define GUI_ID_SPINBOX3   0x283
+#define GUI_ID_SPINBOX4   0x284
+#define GUI_ID_SPINBOX5   0x285
+#define GUI_ID_SPINBOX6   0x286
+#define GUI_ID_SPINBOX7   0x287
+#define GUI_ID_SPINBOX8   0x288
+#define GUI_ID_SPINBOX9   0x289
+
+#define GUI_ID_CALENDAR0  0x290
+
+#define GUI_ID_KNOB0      0x300
+#define GUI_ID_KNOB1      0x301
+#define GUI_ID_KNOB2      0x302
+#define GUI_ID_KNOB3      0x303
+#define GUI_ID_KNOB4      0x304
+#define GUI_ID_KNOB5      0x305
+#define GUI_ID_KNOB6      0x306
+#define GUI_ID_KNOB7      0x307
+#define GUI_ID_KNOB8      0x308
+#define GUI_ID_KNOB9      0x309
+
+#define GUI_ID_USER       0x800
+
+/*********************************************************************
+*
+*       Mouse buttons
+*/
+#define GUI_LBUTTON (1 << 0) /* Left button */
+#define GUI_RBUTTON (1 << 1) /* Right button */
+#define GUI_MBUTTON (1 << 2) /* Middle button */
+#define GUI_DBUTTON (1 << 7) /* Double-click button */
+
+/*********************************************************************
+*
+*       Text styles
+*/
+#define GUI_TS_NORMAL           (0)
+#define GUI_TS_UNDERLINE        (1 << 0)
+#define GUI_TS_STRIKETHRU       (1 << 1)
+#define GUI_TS_OVERLINE         (1 << 2)
+
+/*********************************************************************
+*
+*       Line styles
+*/
+#define GUI_LS_SOLID        (0)
+#define GUI_LS_DASH         (1)
+#define GUI_LS_DOT          (2)
+#define GUI_LS_DASHDOT      (3)
+#define GUI_LS_DASHDOTDOT   (4)
+
+/*********************************************************************
+*
+*       Pen shapes
+*/
+#define GUI_PS_ROUND        (0)
+#define GUI_PS_FLAT         (1)
+#define GUI_PS_SQUARE       (2)
+
+/*********************************************************************
+*
+*       Standard colors
+*/
+#define GUI_BLUE          0x00FF0000
+#define GUI_GREEN         0x0000FF00
+#define GUI_RED           0x000000FF
+#define GUI_CYAN          0x00FFFF00
+#define GUI_MAGENTA       0x00FF00FF
+#define GUI_YELLOW        0x0000FFFF
+#define GUI_LIGHTBLUE     0x00FF8080
+#define GUI_LIGHTGREEN    0x0080FF80
+#define GUI_LIGHTRED      0x008080FF
+#define GUI_LIGHTCYAN     0x00FFFF80
+#define GUI_LIGHTMAGENTA  0x00FF80FF
+#define GUI_LIGHTYELLOW   0x0080FFFF
+#define GUI_DARKBLUE      0x00800000
+#define GUI_DARKGREEN     0x00008000
+#define GUI_DARKRED       0x00000080
+#define GUI_DARKCYAN      0x00808000
+#define GUI_DARKMAGENTA   0x00800080
+#define GUI_DARKYELLOW    0x00008080
+#define GUI_WHITE         0x00FFFFFF
+#define GUI_LIGHTGRAY     0x00D3D3D3
+#define GUI_GRAY          0x00808080
+#define GUI_DARKGRAY      0x00404040
+#define GUI_BLACK         0x00000000
+#define GUI_BROWN         0x002A2AA5
+#define GUI_ORANGE        0x0000A5FF
+#define GUI_TRANSPARENT   0xFF000000
+
+#define GUI_INVALID_COLOR 0xFFFFFFF      /* Invalid color - more than 24 bits */
+
+/*********************************************************************
+*
+*       MultiTouch-Support
+*/
+//
+// Defines
+//
+#define GUI_MTOUCH_FLAG_DOWN (1 << 0)
+#define GUI_MTOUCH_FLAG_MOVE (1 << 1)
+#define GUI_MTOUCH_FLAG_UP   (1 << 2)
+
+//
+// Variables
+//
+extern T_GUI_MTOUCH_STOREEVENT GUI_MTOUCH__pStoreEvent;
+
+//
+// Interface
+//
+void GUI_MTOUCH_Enable          (int OnOff);
+int  GUI_MTOUCH_GetEvent        (GUI_MTOUCH_EVENT * pEvent);
+int  GUI_MTOUCH_GetTouchInput   (GUI_MTOUCH_EVENT * pEvent, GUI_MTOUCH_INPUT * pBuffer, unsigned Index);
+int  GUI_MTOUCH_IsEmpty         (void);
+void GUI_MTOUCH_SetOrientation  (int Orientation);
+void GUI_MTOUCH_SetOrientationEx(int Orientation, int LayerIndex);
+void GUI_MTOUCH_StoreEvent      (GUI_MTOUCH_EVENT * pEvent, GUI_MTOUCH_INPUT * pInput);
+
+/*********************************************************************
+*
+*       Coordinates used in touch driver
+*/
+#define GUI_COORD_X 0
+#define GUI_COORD_Y 1
+
+/*********************************************************************
+*
+*       Addresses of standard fonts
+*/
+//
+// Proportional fonts
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8_ASCII,        GUI_Font8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font10S_ASCII,      GUI_Font10S_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font10_ASCII,       GUI_Font10_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13_ASCII,       GUI_Font13_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13B_ASCII,      GUI_Font13B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13H_ASCII,      GUI_Font13H_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13HB_ASCII,     GUI_Font13HB_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font16_ASCII,       GUI_Font16_1,       GUI_Font16_HK,    GUI_Font16_1HK;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font16B_ASCII,      GUI_Font16B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20_ASCII,       GUI_Font20_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20B_ASCII,      GUI_Font20B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font24_ASCII,       GUI_Font24_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font24B_ASCII,      GUI_Font24B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font32_ASCII,       GUI_Font32_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font32B_ASCII,      GUI_Font32B_1;
+
+//
+// Proportional fonts, framed
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20F_ASCII;
+
+//
+// Monospaced
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font4x6;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font6x8,            GUI_Font6x9;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font6x8_ASCII,      GUI_Font6x8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x8,            GUI_Font8x9;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x8_ASCII,      GUI_Font8x8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x10_ASCII;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x12_ASCII;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x13_ASCII,     GUI_Font8x13_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x15B_ASCII,    GUI_Font8x15B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16,           GUI_Font8x17,       GUI_Font8x18;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16x1x2,       GUI_Font8x16x2x2,   GUI_Font8x16x3x3;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16_ASCII,     GUI_Font8x16_1;
+
+//
+// Digits
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD24x32;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD32;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD36x48;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD48;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD48x64;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD64;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD60x80;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD80;
+
+//
+// Comic fonts
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontComic18B_ASCII, GUI_FontComic18B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontComic24B_ASCII, GUI_FontComic24B_1;
+
+/*********************************************************************
+*
+*       Macros to be used
+*/
+//
+// Proportional fonts
+//
+#define GUI_FONT_8_ASCII        &GUI_Font8_ASCII
+#define GUI_FONT_8_1            &GUI_Font8_1
+#define GUI_FONT_10S_ASCII      &GUI_Font10S_ASCII
+#define GUI_FONT_10S_1          &GUI_Font10S_1
+#define GUI_FONT_10_ASCII       &GUI_Font10_ASCII
+#define GUI_FONT_10_1           &GUI_Font10_1
+#define GUI_FONT_13_ASCII       &GUI_Font13_ASCII
+#define GUI_FONT_13_1           &GUI_Font13_1
+#define GUI_FONT_13B_ASCII      &GUI_Font13B_ASCII
+#define GUI_FONT_13B_1          &GUI_Font13B_1
+#define GUI_FONT_13H_ASCII      &GUI_Font13H_ASCII
+#define GUI_FONT_13H_1          &GUI_Font13H_1
+#define GUI_FONT_13HB_ASCII     &GUI_Font13HB_ASCII
+#define GUI_FONT_13HB_1         &GUI_Font13HB_1
+#define GUI_FONT_16_ASCII       &GUI_Font16_ASCII
+#define GUI_FONT_16_1           &GUI_Font16_1
+#define GUI_FONT_16_HK          &GUI_Font16_HK
+#define GUI_FONT_16_1HK         &GUI_Font16_1HK
+#define GUI_FONT_16B_ASCII      &GUI_Font16B_ASCII
+#define GUI_FONT_16B_1          &GUI_Font16B_1
+#define GUI_FONT_20_ASCII       &GUI_Font20_ASCII
+#define GUI_FONT_20_1           &GUI_Font20_1
+#define GUI_FONT_20B_ASCII      &GUI_Font20B_ASCII
+#define GUI_FONT_20B_1          &GUI_Font20B_1
+#define GUI_FONT_24_ASCII       &GUI_Font24_ASCII
+#define GUI_FONT_24_1           &GUI_Font24_1
+#define GUI_FONT_24B_ASCII      &GUI_Font24B_ASCII
+#define GUI_FONT_24B_1          &GUI_Font24B_1
+#define GUI_FONT_32_ASCII       &GUI_Font32_ASCII
+#define GUI_FONT_32_1           &GUI_Font32_1
+#define GUI_FONT_32B_ASCII      &GUI_Font32B_ASCII
+#define GUI_FONT_32B_1          &GUI_Font32B_1
+
+//
+// Proportional fonts, framed
+//
+#define GUI_FONT_20F_ASCII      &GUI_Font20F_ASCII
+
+//
+// Monospaced
+//
+#define GUI_FONT_4X6            &GUI_Font4x6
+#define GUI_FONT_6X8            &GUI_Font6x8
+#define GUI_FONT_6X8_ASCII      &GUI_Font6x8_ASCII
+#define GUI_FONT_6X8_1          &GUI_Font6x8_1
+#define GUI_FONT_6X9            &GUI_Font6x9
+#define GUI_FONT_8X8            &GUI_Font8x8
+#define GUI_FONT_8X8_ASCII      &GUI_Font8x8_ASCII
+#define GUI_FONT_8X8_1          &GUI_Font8x8_1
+#define GUI_FONT_8X9            &GUI_Font8x9
+#define GUI_FONT_8X10_ASCII     &GUI_Font8x10_ASCII
+#define GUI_FONT_8X12_ASCII     &GUI_Font8x12_ASCII
+#define GUI_FONT_8X13_ASCII     &GUI_Font8x13_ASCII
+#define GUI_FONT_8X13_1         &GUI_Font8x13_1
+#define GUI_FONT_8X15B_ASCII    &GUI_Font8x15B_ASCII
+#define GUI_FONT_8X15B_1        &GUI_Font8x15B_1
+#define GUI_FONT_8X16           &GUI_Font8x16
+#define GUI_FONT_8X17           &GUI_Font8x17
+#define GUI_FONT_8X18           &GUI_Font8x18
+#define GUI_FONT_8X16X1X2       &GUI_Font8x16x1x2
+#define GUI_FONT_8X16X2X2       &GUI_Font8x16x2x2
+#define GUI_FONT_8X16X3X3       &GUI_Font8x16x3x3
+#define GUI_FONT_8X16_ASCII     &GUI_Font8x16_ASCII
+#define GUI_FONT_8X16_1         &GUI_Font8x16_1
+
+//
+// Digits
+//
+#define GUI_FONT_D24X32         &GUI_FontD24x32
+#define GUI_FONT_D32            &GUI_FontD32
+#define GUI_FONT_D36X48         &GUI_FontD36x48
+#define GUI_FONT_D48            &GUI_FontD48
+#define GUI_FONT_D48X64         &GUI_FontD48x64
+#define GUI_FONT_D64            &GUI_FontD64
+#define GUI_FONT_D60X80         &GUI_FontD60x80
+#define GUI_FONT_D80            &GUI_FontD80
+
+//
+// Comic fonts
+//
+#define GUI_FONT_COMIC18B_ASCII &GUI_FontComic18B_ASCII
+#define GUI_FONT_COMIC18B_1     &GUI_FontComic18B_1
+#define GUI_FONT_COMIC24B_ASCII &GUI_FontComic24B_ASCII
+#define GUI_FONT_COMIC24B_1     &GUI_FontComic24B_1
+
+/*********************************************************************
+*
+*       Text and drawing modes
+*
+* These defines come in two flavors: the long version (.._DRAWMODE_..)
+* and the short ones (.._DM_..). They are identical, feel free to use
+* which ever one you like best.
+*/
+#define GUI_DRAWMODE_NORMAL  LCD_DRAWMODE_NORMAL
+#define GUI_DRAWMODE_XOR     LCD_DRAWMODE_XOR
+#define GUI_DRAWMODE_TRANS   LCD_DRAWMODE_TRANS
+#define GUI_DRAWMODE_REV     LCD_DRAWMODE_REV
+#define GUI_DM_NORMAL        LCD_DRAWMODE_NORMAL
+#define GUI_DM_XOR           LCD_DRAWMODE_XOR
+#define GUI_DM_TRANS         LCD_DRAWMODE_TRANS
+#define GUI_DM_REV           LCD_DRAWMODE_REV
+
+#define GUI_TEXTMODE_NORMAL  LCD_DRAWMODE_NORMAL
+#define GUI_TEXTMODE_XOR     LCD_DRAWMODE_XOR
+#define GUI_TEXTMODE_TRANS   LCD_DRAWMODE_TRANS
+#define GUI_TEXTMODE_REV     LCD_DRAWMODE_REV
+#define GUI_TM_NORMAL        LCD_DRAWMODE_NORMAL
+#define GUI_TM_XOR           LCD_DRAWMODE_XOR
+#define GUI_TM_TRANS         LCD_DRAWMODE_TRANS
+#define GUI_TM_REV           LCD_DRAWMODE_REV
+
+/* Text alignment flags, horizontal */
+#define GUI_TA_HORIZONTAL  (3<<0)
+#define GUI_TA_LEFT        (0<<0)
+#define GUI_TA_RIGHT	     (1<<0)
+#define GUI_TA_CENTER	     (2<<0)
+#define GUI_TA_HCENTER	   GUI_TA_CENTER  /* easier to remember :-)  */
+
+/* Text alignment flags, vertical */
+#define GUI_TA_VERTICAL   (3<<2)
+#define GUI_TA_TOP	      (0<<2)
+#define GUI_TA_BOTTOM	    (1<<2)
+#define GUI_TA_BASELINE   (2<<2)
+#define GUI_TA_VCENTER    (3<<2)
+
+/* General orientation flags */
+#define GUI_MIRROR_X (1 << 0)
+#define GUI_MIRROR_Y (1 << 1)
+#define GUI_SWAP_XY  (1 << 2)
+
+/*********************************************************************
+*
+*       Min/Max coordinates
+*
+* Define minimum and maximum coordinates in x and y
+*/
+#if 1
+  #define GUI_XMIN -16383
+  #define GUI_XMAX  16383
+  #define GUI_YMIN -16383
+  #define GUI_YMAX  16383
+#else
+  #define GUI_XMIN -4095
+  #define GUI_XMAX  4095
+  #define GUI_YMIN -4095
+  #define GUI_YMAX  4095
+#endif
+
+/*********************************************************************
+*
+*       Defines for constants
+*/
+#define	________	0x0
+#define	_______X	0x1
+#define	______X_	0x2
+#define	______XX	0x3
+#define	_____X__	0x4
+#define	_____X_X	0x5
+#define	_____XX_	0x6
+#define	_____XXX	0x7
+#define	____X___	0x8
+#define	____X__X	0x9
+#define	____X_X_	0xa
+#define	____X_XX	0xb
+#define	____XX__	0xc
+#define	____XX_X	0xd
+#define	____XXX_	0xe
+#define	____XXXX	0xf
+#define	___X____	0x10
+#define	___X___X	0x11
+#define	___X__X_	0x12
+#define	___X__XX	0x13
+#define	___X_X__	0x14
+#define	___X_X_X	0x15
+#define	___X_XX_	0x16
+#define	___X_XXX	0x17
+#define	___XX___	0x18
+#define	___XX__X	0x19
+#define	___XX_X_	0x1a
+#define	___XX_XX	0x1b
+#define	___XXX__	0x1c
+#define	___XXX_X	0x1d
+#define	___XXXX_	0x1e
+#define	___XXXXX	0x1f
+#define	__X_____	0x20
+#define	__X____X	0x21
+#define	__X___X_	0x22
+#define	__X___XX	0x23
+#define	__X__X__	0x24
+#define	__X__X_X	0x25
+#define	__X__XX_	0x26
+#define	__X__XXX	0x27
+#define	__X_X___	0x28
+#define	__X_X__X	0x29
+#define	__X_X_X_	0x2a
+#define	__X_X_XX	0x2b
+#define	__X_XX__	0x2c
+#define	__X_XX_X	0x2d
+#define	__X_XXX_	0x2e
+#define	__X_XXXX	0x2f
+#define	__XX____	0x30
+#define	__XX___X	0x31
+#define	__XX__X_	0x32
+#define	__XX__XX	0x33
+#define	__XX_X__	0x34
+#define	__XX_X_X	0x35
+#define	__XX_XX_	0x36
+#define	__XX_XXX	0x37
+#define	__XXX___	0x38
+#define	__XXX__X	0x39
+#define	__XXX_X_	0x3a
+#define	__XXX_XX	0x3b
+#define	__XXXX__	0x3c
+#define	__XXXX_X	0x3d
+#define	__XXXXX_	0x3e
+#define	__XXXXXX	0x3f
+#define	_X______	0x40
+#define	_X_____X	0x41
+#define	_X____X_	0x42
+#define	_X____XX	0x43
+#define	_X___X__	0x44
+#define	_X___X_X	0x45
+#define	_X___XX_	0x46
+#define	_X___XXX	0x47
+#define	_X__X___	0x48
+#define	_X__X__X	0x49
+#define	_X__X_X_	0x4a
+#define	_X__X_XX	0x4b
+#define	_X__XX__	0x4c
+#define	_X__XX_X	0x4d
+#define	_X__XXX_	0x4e
+#define	_X__XXXX	0x4f
+#define	_X_X____	0x50
+#define	_X_X___X	0x51
+#define	_X_X__X_	0x52
+#define	_X_X__XX	0x53
+#define	_X_X_X__	0x54
+#define	_X_X_X_X	0x55
+#define	_X_X_XX_	0x56
+#define	_X_X_XXX	0x57
+#define	_X_XX___	0x58
+#define	_X_XX__X	0x59
+#define	_X_XX_X_	0x5a
+#define	_X_XX_XX	0x5b
+#define	_X_XXX__	0x5c
+#define	_X_XXX_X	0x5d
+#define	_X_XXXX_	0x5e
+#define	_X_XXXXX	0x5f
+#define	_XX_____	0x60
+#define	_XX____X	0x61
+#define	_XX___X_	0x62
+#define	_XX___XX	0x63
+#define	_XX__X__	0x64
+#define	_XX__X_X	0x65
+#define	_XX__XX_	0x66
+#define	_XX__XXX	0x67
+#define	_XX_X___	0x68
+#define	_XX_X__X	0x69
+#define	_XX_X_X_	0x6a
+#define	_XX_X_XX	0x6b
+#define	_XX_XX__	0x6c
+#define	_XX_XX_X	0x6d
+#define	_XX_XXX_	0x6e
+#define	_XX_XXXX	0x6f
+#define	_XXX____	0x70
+#define	_XXX___X	0x71
+#define	_XXX__X_	0x72
+#define	_XXX__XX	0x73
+#define	_XXX_X__	0x74
+#define	_XXX_X_X	0x75
+#define	_XXX_XX_	0x76
+#define	_XXX_XXX	0x77
+#define	_XXXX___	0x78
+#define	_XXXX__X	0x79
+#define	_XXXX_X_	0x7a
+#define	_XXXX_XX	0x7b
+#define	_XXXXX__	0x7c
+#define	_XXXXX_X	0x7d
+#define	_XXXXXX_	0x7e
+#define	_XXXXXXX	0x7f
+#define	X_______	0x80
+#define	X______X	0x81
+#define	X_____X_	0x82
+#define	X_____XX	0x83
+#define	X____X__	0x84
+#define	X____X_X	0x85
+#define	X____XX_	0x86
+#define	X____XXX	0x87
+#define	X___X___	0x88
+#define	X___X__X	0x89
+#define	X___X_X_	0x8a
+#define	X___X_XX	0x8b
+#define	X___XX__	0x8c
+#define	X___XX_X	0x8d
+#define	X___XXX_	0x8e
+#define	X___XXXX	0x8f
+#define	X__X____	0x90
+#define	X__X___X	0x91
+#define	X__X__X_	0x92
+#define	X__X__XX	0x93
+#define	X__X_X__	0x94
+#define	X__X_X_X	0x95
+#define	X__X_XX_	0x96
+#define	X__X_XXX	0x97
+#define	X__XX___	0x98
+#define	X__XX__X	0x99
+#define	X__XX_X_	0x9a
+#define X__XX_XX	0x9b
+#define X__XXX__	0x9c
+#define X__XXX_X	0x9d
+#define	X__XXXX_	0x9e
+#define	X__XXXXX	0x9f
+#define	X_X_____	0xa0
+#define	X_X____X	0xa1
+#define	X_X___X_	0xa2
+#define	X_X___XX	0xa3
+#define	X_X__X__	0xa4
+#define	X_X__X_X	0xa5
+#define	X_X__XX_	0xa6
+#define	X_X__XXX	0xa7
+#define	X_X_X___	0xa8
+#define	X_X_X__X	0xa9
+#define	X_X_X_X_	0xaa
+#define	X_X_X_XX	0xab
+#define	X_X_XX__	0xac
+#define	X_X_XX_X	0xad
+#define	X_X_XXX_	0xae
+#define	X_X_XXXX	0xaf
+#define	X_XX____	0xb0
+#define X_XX___X	0xb1
+#define	X_XX__X_	0xb2
+#define	X_XX__XX	0xb3
+#define	X_XX_X__	0xb4
+#define	X_XX_X_X	0xb5
+#define	X_XX_XX_	0xb6
+#define	X_XX_XXX	0xb7
+#define	X_XXX___	0xb8
+#define	X_XXX__X	0xb9
+#define	X_XXX_X_	0xba
+#define	X_XXX_XX	0xbb
+#define	X_XXXX__	0xbc
+#define	X_XXXX_X	0xbd
+#define	X_XXXXX_	0xbe
+#define	X_XXXXXX	0xbf
+#define	XX______	0xc0
+#define	XX_____X	0xc1
+#define	XX____X_	0xc2
+#define	XX____XX	0xc3
+#define	XX___X__	0xc4
+#define	XX___X_X	0xc5
+#define	XX___XX_	0xc6
+#define	XX___XXX	0xc7
+#define	XX__X___	0xc8
+#define	XX__X__X	0xc9
+#define	XX__X_X_	0xca
+#define	XX__X_XX	0xcb
+#define	XX__XX__	0xcc
+#define	XX__XX_X	0xcd
+#define	XX__XXX_	0xce
+#define XX__XXXX	0xcf
+#define	XX_X____	0xd0
+#define	XX_X___X	0xd1
+#define	XX_X__X_	0xd2
+#define	XX_X__XX	0xd3
+#define	XX_X_X__	0xd4
+#define	XX_X_X_X	0xd5
+#define	XX_X_XX_	0xd6
+#define	XX_X_XXX	0xd7
+#define	XX_XX___	0xd8
+#define	XX_XX__X	0xd9
+#define	XX_XX_X_	0xda
+#define	XX_XX_XX	0xdb
+#define	XX_XXX__	0xdc
+#define	XX_XXX_X	0xdd
+#define	XX_XXXX_	0xde
+#define	XX_XXXXX	0xdf
+#define	XXX_____	0xe0
+#define	XXX____X	0xe1
+#define	XXX___X_	0xe2
+#define	XXX___XX	0xe3
+#define	XXX__X__	0xe4
+#define	XXX__X_X	0xe5
+#define	XXX__XX_	0xe6
+#define	XXX__XXX	0xe7
+#define	XXX_X___	0xe8
+#define	XXX_X__X	0xe9
+#define	XXX_X_X_	0xea
+#define	XXX_X_XX	0xeb
+#define	XXX_XX__	0xec
+#define	XXX_XX_X	0xed
+#define	XXX_XXX_	0xee
+#define	XXX_XXXX	0xef
+#define	XXXX____	0xf0
+#define	XXXX___X	0xf1
+#define	XXXX__X_	0xf2
+#define	XXXX__XX	0xf3
+#define	XXXX_X__	0xf4
+#define	XXXX_X_X	0xf5
+#define	XXXX_XX_	0xf6
+#define	XXXX_XXX	0xf7
+#define	XXXXX___	0xf8
+#define	XXXXX__X	0xf9
+#define	XXXXX_X_	0xfa
+#define	XXXXX_XX	0xfb
+#define	XXXXXX__	0xfc
+#define	XXXXXX_X	0xfd
+#define	XXXXXXX_	0xfe
+#define	XXXXXXXX	0xff
+
+/*********************************************************************
+*
+*       Compatibility with older versions
+*/
+#define GUI_DispString_UC  GUI_UC_DispString
+#define TOUCH_X_ActivateX  GUI_TOUCH_X_ActivateX
+#define TOUCH_X_ActivateY  GUI_TOUCH_X_ActivateY
+#define TOUCH_X_Disable    GUI_TOUCH_X_Disable
+#define TOUCH_X_MeasureX   GUI_TOUCH_X_MeasureX
+#define TOUCH_X_MeasureY   GUI_TOUCH_X_MeasureY
+#define GUI_SelLayer       GUI_SelectLayer
+#if defined(__cplusplus)
+}
+#endif
+
+#endif   /* ifdef GUI_H */
+
+/*************************** End of file ****************************/