common.h
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:35k
源码类别:

GPS编程

开发平台:

C/C++

  1. /**
  2.  * file common.h
  3.  * author Wei Yongming <ymwei@minigui.org>
  4.  * date 2002/01/06
  5.  * 
  6.  * This file includes macro definitions and typedefs that commonly used 
  7.  * by MiniGUI.
  8.  *
  9.  verbatim
  10.     Copyright (C) 1998-2002 Wei Yongming.
  11.     Copyright (C) 2002-2004 Feynman Software.
  12.     This file is part of MiniGUI, a compact cross-platform Graphics 
  13.     User Interface (GUI) support system for real-time embedded systems.
  14.     This program is free software; you can redistribute it and/or modify
  15.     it under the terms of the GNU General Public License as published by
  16.     the Free Software Foundation; either version 2 of the License, or
  17.     (at your option) any later version.
  18.     This program is distributed in the hope that it will be useful,
  19.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.     GNU General Public License for more details.
  22.     You should have received a copy of the GNU General Public License
  23.     along with this program; if not, write to the Free Software
  24.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  25.  endverbatim
  26.  */
  27. /*
  28.  * $Id: common.h,v 1.64 2004/10/20 02:02:11 weiym Exp $
  29.  *
  30.  *             MiniGUI for Linux/uClinux, eCos, uC/OS-II, and VxWorks version 1.6.x
  31.  *             Copyright (C) 1998-2002 Wei Yongming.
  32.  *             Copyright (C) 2002-2004 Feynman Software.
  33.  *
  34.  *             Some data types and byte order macros come from
  35.  *             LGPL'ed SDL by (Sam Lantinga, slouken@devolution.com).
  36.  *             Copyright (C) 1997-2001 Sam Lantinga
  37.  *
  38.  *             Fix point math routines come from Allegro (a gift software)
  39.  *             By Shawn Hargreaves and others.
  40.  */
  41. #ifndef _MGUI_COMMON_H
  42.   #define _MGUI_COMMON_H
  43.  
  44. #ifdef __MINIGUI_LIB__
  45.     #include "../config.h"
  46. #else
  47. //    #include "config.h"
  48. #endif
  49.     /**
  50.      * defgroup macros_types Macros and data types commonly used
  51.      * @{
  52.      */
  53.     /**
  54.      * defgroup version_info Version information
  55.      * @{
  56.      */
  57. /**
  58.  * def _VERSION_CODE(major, minor, micro)
  59.  * brief A macro that returns the version code from a major, a minor 
  60.  * and a micro version number.
  61.  *
  62.  * MiniGUI uses this macro to evaluate the version code of current MiniGUI 
  63.  * library installed in your system, and define it to _MINIGUI_VERSION_CODE. 
  64.  *
  65.  * sa _MINIGUI_VERSION_CODE
  66.  */
  67. #define _VERSION_CODE(major, minor, micro)  (((major)<<16) | ((minor)<<8) | (micro))
  68. /**
  69.  * def _MINIGUI_VERSION_CODE
  70.  * brief Version code of MiniGUI.
  71.  *
  72.  * sa _VERSION_CODE
  73.  */
  74. #define _MINIGUI_VERSION_CODE 
  75.         ((MINIGUI_MAJOR_VERSION << 16) | (MINIGUI_MINOR_VERSION << 8) | MINIGUI_MICRO_VERSION)
  76.     /** @} end of version_info */
  77.     /**
  78.      * defgroup basic_types Basic data types
  79.      * @{
  80.      */
  81. /**
  82.  * var typedef unsigned char Uint8
  83.  * brief A type definition for an 8-bit unsigned character.
  84.  */
  85. typedef unsigned char   Uint8;
  86. /**
  87.  * var typedef signed char Sint8
  88.  * brief A type definition for an 8-bit signed character.
  89.  */
  90. typedef signed char     Sint8;
  91. /**
  92.  * var typedef unsigned short Uint16
  93.  * brief A type definition for a 16-bit unsigned integer.
  94.  */
  95. typedef unsigned short  Uint16;
  96. /**
  97.  * var typedef signed short Sint16
  98.  * brief A type definition for a 16-bit signed integer.
  99.  */
  100. typedef signed short    Sint16;
  101. /**
  102.  * var typedef unsigned int Uint32
  103.  * brief A type definition for a 32-bit unsigned integer.
  104.  */
  105. typedef unsigned int    Uint32;
  106. /**
  107.  * var typedef signed int Sint32
  108.  * brief A type definition for a 32-bit signed integer.
  109.  */
  110. typedef signed int      Sint32;
  111. /* Figure out how to support 64-bit datatypes */
  112. #if !defined(__STRICT_ANSI__)
  113. #if defined(__GNUC__)
  114. #define MGUI_HAS_64BIT_TYPE long long
  115. #endif
  116. #if defined(__CC_ARM)
  117. #define MGUI_HAS_64BIT_TYPE long long
  118. #endif
  119. #endif /* !__STRICT_ANSI__ */
  120. /* The 64-bit datatype isn't supported on all platforms */
  121. #ifdef MGUI_HAS_64BIT_TYPE
  122. /**
  123.  * var typedef unsigned long long Uint64
  124.  * brief A type definition for a 64-bit unsigned integer.
  125.  *
  126.  * warning Only available under GNU C.
  127.  */
  128. typedef unsigned MGUI_HAS_64BIT_TYPE Uint64;
  129. /**
  130.  * var typedef signed long long Sint64
  131.  * brief A type definition for a 64-bit signed integer.
  132.  *
  133.  * warning Only available under GNU C.
  134.  */
  135. typedef signed MGUI_HAS_64BIT_TYPE Sint64;
  136. #else
  137. /* This is really just a hack to prevent the compiler from complaining */
  138. typedef struct {
  139. Uint32 hi;
  140. Uint32 lo;
  141. } Uint64, Sint64;
  142. #endif
  143. /* Make sure the types really have the right sizes */
  144. #define MGUI_COMPILE_TIME_ASSERT(name, x)               
  145.        typedef int MGUI_dummy_ ## name[(x) * 2 - 1]
  146. MGUI_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
  147. MGUI_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1);
  148. MGUI_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2);
  149. MGUI_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2);
  150. MGUI_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4);
  151. MGUI_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4);
  152. MGUI_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
  153. MGUI_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
  154. #undef MGUI_COMPILE_TIME_ASSERT
  155.     /** @} end of basic_types */
  156.     /**
  157.      * defgroup endian_info Endianness information
  158.      * @{
  159.      */
  160. /**
  161.  * def MGUI_LIL_ENDIAN
  162.  * brief Little endianness.
  163.  */
  164. #define MGUI_LIL_ENDIAN  1234
  165. /**
  166.  * def MGUI_BIG_ENDIAN
  167.  * brief Big endianness.
  168.  */
  169. #define MGUI_BIG_ENDIAN  4321
  170. /* Pardon the mess, I'm trying to determine the endianness of this host.
  171.  *    I'm doing it by preprocessor defines rather than some sort of configure
  172.  *    script so that application code can use this too.  The "right" way would
  173.  *    be to dynamically generate this file on install, but that's a lot of work.
  174.  */
  175. /**
  176.  * def MGUI_BYTEORDER
  177.  * brief The byte order (endianness) of the target system.
  178.  *
  179.  * This macro will be either defined to MGUI_LIL_ENDIAN or MGUI_BIG_ENDIAN.
  180.  * You can use the code like below
  181.  *
  182.  * code
  183.  * #if MGUI_BYTEORDER == MGUI_LIL_ENDIAN
  184.  *     ... // code for little endian system.
  185.  * #else
  186.  *     ... // code for big endian system.
  187.  * #endif
  188.  * endcode
  189.  *
  190.  * to write endianness independent code.
  191.  */
  192. #if  defined(__i386__) || defined(__ia64__) || 
  193.     (defined(__alpha__) || defined(__alpha)) || 
  194.      defined(__arm__) || 
  195.     (defined(__CC_ARM) && !defined(__BIG_ENDIAN)) || 
  196.     (defined(__mips__) && defined(__MIPSEL__)) || 
  197.      defined(__LITTLE_ENDIAN__)
  198. #define MGUI_BYTEORDER   MGUI_LIL_ENDIAN
  199. #else
  200. #define MGUI_BYTEORDER   MGUI_BIG_ENDIAN
  201. #endif
  202.     /** @} end of endian_info */
  203.     /**
  204.      * defgroup simple_types Simple and common types and macros
  205.      * @{
  206.      */
  207. /**
  208.  * var typedef int BOOL
  209.  * brief A type definition for boolean value.
  210.  */
  211. #ifndef __VXSIM__
  212. typedef int BOOL;
  213. #endif
  214. /**
  215.  * def FALSE
  216.  * brief FALSE value, defined as 0 by MiniGUI.
  217.  */
  218. #ifndef FALSE
  219.     #define FALSE       0
  220. #endif
  221. /**
  222.  * def TRUE
  223.  * brief TRUE value, defined as 1 by MiniGUI.
  224.  */
  225. #ifndef TRUE
  226.     #define TRUE        1
  227. #endif
  228. /**
  229.  * def NULL
  230.  * brief A value indicates null pointer.
  231.  */
  232. #ifndef NULL
  233. #define NULL            ((void *)0)
  234. #endif
  235. #define VOID            void
  236. #define GUIAPI
  237.     /** @} end of simple_types */
  238.     /**
  239.      * defgroup handles MiniGUI handles
  240.      * @{
  241.      */
  242. /**
  243.  * var typedef unsigned int GHANDLE
  244.  * brief General handle.
  245.  */
  246. typedef unsigned int GHANDLE;
  247. /**
  248.  * var typedef unsigned int HWND
  249.  * brief Handle to main window or control.
  250.  */
  251. typedef unsigned int HWND;
  252. /**
  253.  * var typedef unsigned int HDC
  254.  * brief Handle to device context.
  255.  */
  256. typedef unsigned int HDC;
  257. /**
  258.  * var typedef unsigned int HCURSOR
  259.  * brief Handle to cursor.
  260.  */
  261. typedef unsigned int HCURSOR;
  262. /**
  263.  * var typedef unsigned int HICON
  264.  * brief Handle to icon.
  265.  */
  266. typedef unsigned int HICON;
  267. /**
  268.  * var typedef unsigned int HMENU
  269.  * brief Handle to menu.
  270.  */
  271. typedef unsigned int HMENU;
  272. /**
  273.  * var typedef unsigned int HACCEL
  274.  * brief Handle to accelarator.
  275.  */
  276. typedef unsigned int HACCEL;
  277. /**
  278.  * var typedef unsigned int HDLG
  279.  * brief Handle to dialog box, same as HWND.
  280.  */
  281. typedef unsigned int HDLG;
  282. /**
  283.  * var typedef unsigned int HHOOK
  284.  * brief Handle to keyboard or mouse event hook.
  285.  */
  286. typedef unsigned int HHOOK;
  287.     /** @} end of handles */
  288.     /**
  289.      * defgroup win32_types Win32-like data types and macros
  290.      * @{
  291.      */
  292. /**
  293.  * var typedef unsigned char BYTE
  294.  * brief A type definition for unsigned character (byte).
  295.  */
  296. typedef unsigned char   BYTE;
  297. /**
  298.  * var typedef signed char BYTE
  299.  * brief A type definition for signed character.
  300.  */
  301. typedef signed char     SBYTE;
  302. /**
  303.  * var typedef unsigned short WORD 
  304.  * brief A type definition for unsigned short integer (word).
  305.  */
  306. #ifndef __VXSIM__
  307. typedef unsigned short  WORD;
  308. #endif
  309. /**
  310.  * var typedef signed short SWORD 
  311.  * brief A type definition for signed short integer.
  312.  */
  313. typedef signed short    SWORD;
  314. /**
  315.  * var typedef unsigned long DWORD
  316.  * brief A type definition for unsigned long integer (double word).
  317.  */
  318. #ifndef __VXSIM__
  319. typedef unsigned long   DWORD;
  320. #endif
  321. /**
  322.  * var typedef signed long SDWORD
  323.  * brief A type definition for signed long integer.
  324.  */
  325. typedef signed long     SDWORD;
  326. /**
  327.  * var typedef unsigned int UINT
  328.  * brief A type definition for unsigned integer.
  329.  */
  330. #ifndef __VXSIM__
  331. typedef unsigned int    UINT;
  332. #endif
  333. /**
  334.  * var typedef long LONG
  335.  * brief A type definition for long integer.
  336.  */
  337. typedef long            LONG;
  338. /**
  339.  * var typedef UINT WPARAM
  340.  * brief A type definition for the first message paramter.
  341.  */
  342. #ifndef __VXSIM__
  343. typedef UINT            WPARAM;
  344. #else
  345. typedef unsigned int    WPARAM;
  346. #endif
  347. /**
  348.  * var typedef DWORD WPARAM
  349.  * brief A type definition for the second message paramter.
  350.  */
  351. #ifndef __VXSIM__
  352. typedef DWORD           LPARAM;
  353. #else
  354. typedef unsigned long   LPARAM;
  355. #endif
  356. /**
  357.  * def LOBYTE(w)
  358.  * brief Returns the low byte of the word a w.
  359.  *
  360.  * sa MAKEWORD
  361.  */
  362. #define LOBYTE(w)           ((BYTE)(w))
  363. /**
  364.  * def HIBYTE(w)
  365.  * brief Returns the high byte of the word a w.
  366.  *
  367.  * sa MAKEWORD
  368.  */
  369. #define HIBYTE(w)           ((BYTE)(((WORD)(w) >> 8) & 0xFF))
  370. /**
  371.  * def MAKEWORD(low, high)
  372.  * brief Makes a word from a low byte and a high byte.
  373.  */
  374. #define MAKEWORD(low, high) ((WORD)(((BYTE)(low)) | (((WORD)((BYTE)(high))) << 8)))
  375. /**
  376.  * def LOWORD(l)
  377.  * brief Returns the low word of the double word a l
  378.  *
  379.  * sa MAKELONG
  380.  */
  381. #define LOWORD(l)           ((WORD)(DWORD)(l))
  382. /**
  383.  * def HIWORD(l)
  384.  * brief Returns the high word of the double word a l
  385.  *
  386.  * sa MAKELONG
  387.  */
  388. #define HIWORD(l)           ((WORD)((((DWORD)(l)) >> 16) & 0xFFFF))
  389. /**
  390.  * def LOSWORD(l)
  391.  * brief Returns the low signed word of the double word a l
  392.  *
  393.  * sa MAKELONG
  394.  */
  395. #define LOSWORD(l)          ((SWORD)(DWORD)(l))
  396. /**
  397.  * def HISWORD(l)
  398.  * brief Returns the high signed word of the double word a l
  399.  *
  400.  * sa MAKELONG
  401.  */
  402. #define HISWORD(l)          ((SWORD)((((DWORD)(l)) >> 16) & 0xFFFF))
  403. /**
  404.  * def MAKELONG(low, high)
  405.  * brief Makes a double word from a low word and a high word.
  406.  */
  407. #define MAKELONG(low, high) ((DWORD)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
  408. /**
  409.  * def GetRValue(rgb)
  410.  * brief Gets the red component from a RGB triple value a rgb.
  411.  *
  412.  * You can make a RGB triple by using MakeRGB.
  413.  *
  414.  * sa MakeRGB
  415.  */
  416. #define GetRValue(rgb)      ((BYTE)(rgb))
  417. /**
  418.  * def GetGValue(rgb)
  419.  * brief Gets the green component from a RGB triple value a rgb.
  420.  *
  421.  * You can make a RGB triple by using MakeRGB.
  422.  *
  423.  * sa MakeRGB
  424.  */
  425. #define GetGValue(rgb)      ((BYTE)(((WORD)(rgb)) >> 8))
  426. /**
  427.  * def GetBValue(rgb)
  428.  * brief Gets the blue component from a RGB triple value a rgb.
  429.  *
  430.  * You can make a RGB triple by using MakeRGB.
  431.  *
  432.  * sa MakeRGB
  433.  */
  434. #define GetBValue(rgb)      ((BYTE)((rgb) >> 16))
  435. /**
  436.  * def MakeRGB(r, g, b)
  437.  * brief Makes a RGB triple value from red a r, green a g, and blue a b components.
  438.  *
  439.  * note The red, green, and blue components are all ranged from 0 to 255,
  440.  * and the returned value will be a double word.
  441.  *
  442.  * sa GetRValue, GetGValue, GetBValue
  443.  */
  444. #define MakeRGB(r, g, b)    (((DWORD)((BYTE)(r))) | ((DWORD)((BYTE)(g)) << 8) 
  445.                 | ((DWORD)((BYTE)(b)) << 16))
  446. /**
  447.  * A rectangle defined by coordinates of corners.
  448.  *
  449.  * note The lower-right corner does not belong to the rectangle,
  450.  * i.e. the bottom horizontal line and the right vertical line are excluded
  451.  * from the retangle.
  452.  *
  453.  * sa PRECT, GAL_Rect
  454.  */
  455. typedef struct _RECT
  456. {
  457.     /**
  458.      * the x coordinate of the upper-left corner of the rectangle.
  459.      */
  460.     int left;
  461.     /**
  462.      * the y coordinate of the upper-left corner of the rectangle.
  463.      */
  464.     int top;
  465.     /**
  466.      * the x coordinate of the lower-right corner of the rectangle.
  467.      */
  468.     int right;
  469.     /**
  470.      * the y coordinate of the lower-right corner of the rectangle.
  471.      */
  472.     int bottom;
  473. } RECT;
  474. /**
  475.  * var typedef RECT* PRECT
  476.  * brief Data type of the pointer to a RECT.
  477.  *
  478.  * sa RECT
  479.  */
  480. typedef RECT* PRECT;
  481. /**
  482.  * Point structure.
  483.  * sa PPOINT
  484.  */
  485. typedef struct _POINT
  486. {
  487.     /**
  488.      * the x coordinate of the point.
  489.      */
  490.     int x;
  491.     /**
  492.      * the y coordinate of the point.
  493.      */
  494.     int y;
  495. } POINT;
  496. /**
  497.  * var typedef POINT* PPOINT
  498.  * brief Data type of the pointer to a POINT.
  499.  *
  500.  * sa POINT
  501.  */
  502. typedef POINT* PPOINT;
  503. /**
  504.  * Size structure of a 2-dimension object.
  505.  * sa PSIZE
  506.  */
  507. typedef struct _SIZE
  508. {
  509.     /**
  510.      * the extent in x coordinate of a 2D object.
  511.      */
  512.     int cx;
  513.     /**
  514.      * the extent in y coordinate of a 2D object.
  515.      */
  516.     int cy;
  517. } SIZE;
  518. /**
  519.  * var typedef SIZE* PSIZE
  520.  * brief Data type of the pointer to a SIZE.
  521.  *
  522.  * sa SIZE
  523.  */
  524. typedef SIZE* PSIZE;
  525. /**
  526.  * RGB triple structure.
  527.  * sa PRGB, GAL_Color
  528.  */
  529. typedef struct _RGB
  530. {
  531.     /**
  532.      * the red component of a RGB triple.
  533.      */
  534.     BYTE r;
  535.     /**
  536.      * the green component of a RGB triple.
  537.      */
  538.     BYTE g;
  539.     /**
  540.      * the blue component of a RGB triple.
  541.      */
  542.     BYTE b;
  543.     /**
  544.      * Reserved for alignment, maybe used for the alpha component of a RGB triple. 
  545.      */
  546.     BYTE a;
  547. } RGB;
  548. typedef RGB* PRGB;
  549.     /** @} end of win32_types */
  550.     /**
  551.      * defgroup gdi_types Data types for GDI
  552.      * @{
  553.      */
  554. /**
  555.  * var typedef Sint8 gal_sint8
  556.  * brief Data type of 8-bit signed integer.
  557.  *
  558.  * sa Sint8
  559.  */
  560. typedef Sint8       gal_sint8;
  561. /**
  562.  * var typedef Uint8 gal_uint8
  563.  * brief Data type of 8-bit unsigned integer.
  564.  *
  565.  * sa Uint8
  566.  */
  567. typedef Uint8       gal_uint8;
  568. /**
  569.  * var typedef Sint16 gal_sint16
  570.  * brief Data type of 16-bit signed integer.
  571.  *
  572.  * sa Sint16
  573.  */
  574. typedef Sint16      gal_sint16;
  575. /**
  576.  * var typedef Uint16 gal_uint16
  577.  * brief Data type of 16-bit unsigned integer.
  578.  *
  579.  * sa Uint16
  580.  */
  581. typedef Uint16      gal_uint16;
  582. /**
  583.  * var typedef Sint32 gal_sint16
  584.  * brief Data type of 32-bit signed integer.
  585.  *
  586.  * sa Sint32
  587.  */
  588. typedef Sint32      gal_sint32;
  589. /**
  590.  * var typedef Uint32 gal_uint16
  591.  * brief Data type of 32-bit unsigned integer.
  592.  *
  593.  * sa Uint32
  594.  */
  595. typedef Uint32      gal_uint32;
  596. /**
  597.  * var typedef signed int gal_sint
  598.  * brief Data type of signed integer.
  599.  */
  600. typedef signed int      gal_sint;
  601. /**
  602.  * var typedef unsigned int gal_uint
  603.  * brief Data type of unsigned integer.
  604.  */
  605. typedef unsigned int    gal_uint;
  606. /**
  607.  * var typedef Uint32 gal_pixel 
  608.  * brief Data type of pixel value
  609.  */
  610. typedef Uint32          gal_pixel;
  611. /**
  612.  * var typedef Uint32 gal_attr
  613.  * brief Data type of attribute value
  614.  */
  615. typedef Uint32          gal_attr;
  616. /**
  617.  * var typedef long fixed.
  618.  * brief Data type of fixed point.
  619.  */
  620. typedef long fixed;
  621. /**
  622.  * RGBA quarter structure.
  623.  * sa RGB
  624.  */
  625. typedef struct GAL_Color
  626. {
  627.     /**
  628.      * the red component of a RGBA quarter.
  629.      */
  630.     gal_uint8 r;
  631.     /**
  632.      * the green component of a RGBA quarter.
  633.      */
  634.     gal_uint8 g;
  635.     /**
  636.      * the blue component of a RGBA quarter.
  637.      */
  638.     gal_uint8 b;
  639.     /**
  640.      * the alpha component of a RGBA quarter.
  641.      */
  642.     gal_uint8 a;
  643. } GAL_Color;
  644. /**
  645.  * Palette structure.
  646.  * sa GAL_Color
  647.  */
  648. typedef struct GAL_Palette
  649. {
  650.     /**
  651.      * the number of palette items.
  652.      */
  653.     int        ncolors;
  654.     /**
  655.      * the pointer to the array of palette items.
  656.      */
  657.     GAL_Color* colors;
  658. } GAL_Palette;
  659. /**
  660.  * A rectangle defined by upper-left coordinates and width/height.
  661.  * sa RECT 
  662.  */
  663. typedef struct GAL_Rect {
  664.     /**
  665.      * the coordinates of the upper-left corner of the rectangle.
  666.      */
  667.     Sint32      x, y;
  668.     /**
  669.      * the width and height of the rectangle.
  670.      */
  671.     Sint32      w, h;
  672. } GAL_Rect;
  673.     /** @} end of gdi_types */
  674.     /**
  675.      * defgroup key_defs Macros for key codes and shift status
  676.      * @{
  677.      */
  678. /**
  679.  * def MGUI_NR_KEYS
  680.  * brief Number of MiniGUI keys.
  681.  *
  682.  * The number of MiniGUI keys is defined to 255 by default. This means that
  683.  * MiniGUI can destinguish 255 different keys with each has an unique scan code.
  684.  * The scan codes below 129 are defined for PC keyboard by default. 
  685.  * If your system has a large amount of keys, you can define the scan code of keys 
  686.  * ranged from 1 to 255 in your IAL engine. And your application will receive
  687.  * a MSG_KEYDOWN and MSG_KEYUP messages when a key pressed and released, and the
  688.  * wParam of the messages will be defined to be equal to the scan code
  689.  * of the key.
  690.  *
  691.  * sa NR_KEYS, SCANCODE_USER
  692.  */
  693. #define MGUI_NR_KEYS                    255
  694. /**
  695.  * def NR_KEYS
  696.  * brief The number of keys defined by Linux operating system. 
  697.  *
  698.  * For a PC box, NR_KEYS is defined to 128 by default. You can define
  699.  * some input events from an input device other than keyboard, e.g. 
  700.  * your remote controller, as key events with different scan codes from 
  701.  * those of PC's. MiniGUI can support 255 keys, and the constant
  702.  * define by MGUI_NR_KEYS.
  703.  *
  704.  * sa MGUI_NR_KEYS
  705.  */
  706. #ifndef NR_KEYS
  707. #define NR_KEYS                         128
  708. #endif
  709. /**
  710.  * def SCANCODE_USER
  711.  * brief The first key scan code different from OS defined ones.
  712.  *
  713.  * You can define your special key scan codes like below
  714.  *
  715.  * code
  716.  * #define SCANCODE_PLAY    (SCANCODE_USER)
  717.  * #define SCANCODE_STOP    (SCANCODE_USER + 1)
  718.  * #define SCANCODE_PAUSE   (SCANCODE_USER + 2)
  719.  * endcode
  720.  *
  721.  * to distinguish the keys on your remote controller.
  722.  *
  723.  * sa MGUI_NR_KEYS, NR_KEYS
  724.  */
  725. #define SCANCODE_USER                   (NR_KEYS + 1)
  726. #define SCANCODE_ESCAPE                 1
  727. #define SCANCODE_1                      2
  728. #define SCANCODE_2                      3
  729. #define SCANCODE_3                      4
  730. #define SCANCODE_4                      5
  731. #define SCANCODE_5                      6
  732. #define SCANCODE_6                      7
  733. #define SCANCODE_7                      8
  734. #define SCANCODE_8                      9
  735. #define SCANCODE_9                      10
  736. #define SCANCODE_0                      11
  737. #define SCANCODE_MINUS                  12
  738. #define SCANCODE_EQUAL                  13
  739. #define SCANCODE_BACKSPACE              14
  740. #define SCANCODE_TAB                    15
  741. #define SCANCODE_Q                      16
  742. #define SCANCODE_W                      17
  743. #define SCANCODE_E                      18
  744. #define SCANCODE_R                      19
  745. #define SCANCODE_T                      20
  746. #define SCANCODE_Y                      21
  747. #define SCANCODE_U                      22
  748. #define SCANCODE_I                      23
  749. #define SCANCODE_O                      24
  750. #define SCANCODE_P                      25
  751. #define SCANCODE_BRACKET_LEFT           26
  752. #define SCANCODE_BRACKET_RIGHT          27
  753. #define SCANCODE_ENTER                  28
  754. #define SCANCODE_LEFTCONTROL            29
  755. #define SCANCODE_A                      30
  756. #define SCANCODE_S                      31
  757. #define SCANCODE_D                      32
  758. #define SCANCODE_F                      33
  759. #define SCANCODE_G                      34
  760. #define SCANCODE_H                      35
  761. #define SCANCODE_J                      36
  762. #define SCANCODE_K                      37
  763. #define SCANCODE_L                      38
  764. #define SCANCODE_SEMICOLON              39
  765. #define SCANCODE_APOSTROPHE             40
  766. #define SCANCODE_GRAVE                  41
  767. #define SCANCODE_LEFTSHIFT              42
  768. #define SCANCODE_BACKSLASH              43
  769. #define SCANCODE_Z                      44
  770. #define SCANCODE_X                      45
  771. #define SCANCODE_C                      46
  772. #define SCANCODE_V                      47
  773. #define SCANCODE_B                      48
  774. #define SCANCODE_N                      49
  775. #define SCANCODE_M                      50
  776. #define SCANCODE_COMMA                  51
  777. #define SCANCODE_PERIOD                 52
  778. #define SCANCODE_SLASH                  53
  779. #define SCANCODE_RIGHTSHIFT             54
  780. #define SCANCODE_KEYPADMULTIPLY         55
  781. #define SCANCODE_LEFTALT                56
  782. #define SCANCODE_SPACE                  57
  783. #define SCANCODE_CAPSLOCK               58
  784. #define SCANCODE_F1                     59
  785. #define SCANCODE_F2                     60
  786. #define SCANCODE_F3                     61
  787. #define SCANCODE_F4                     62
  788. #define SCANCODE_F5                     63
  789. #define SCANCODE_F6                     64
  790. #define SCANCODE_F7                     65
  791. #define SCANCODE_F8                     66
  792. #define SCANCODE_F9                     67
  793. #define SCANCODE_F10                    68
  794. #define SCANCODE_NUMLOCK                69
  795. #define SCANCODE_SCROLLLOCK             70
  796. #define SCANCODE_KEYPAD7                71
  797. #define SCANCODE_CURSORUPLEFT           71
  798. #define SCANCODE_KEYPAD8                72
  799. #define SCANCODE_CURSORUP               72
  800. #define SCANCODE_KEYPAD9                73
  801. #define SCANCODE_CURSORUPRIGHT          73
  802. #define SCANCODE_KEYPADMINUS            74
  803. #define SCANCODE_KEYPAD4                75
  804. #define SCANCODE_CURSORLEFT             75
  805. #define SCANCODE_KEYPAD5                76
  806. #define SCANCODE_KEYPAD6                77
  807. #define SCANCODE_CURSORRIGHT            77
  808. #define SCANCODE_KEYPADPLUS             78
  809. #define SCANCODE_KEYPAD1                79
  810. #define SCANCODE_CURSORDOWNLEFT         79
  811. #define SCANCODE_KEYPAD2                80
  812. #define SCANCODE_CURSORDOWN             80
  813. #define SCANCODE_KEYPAD3                81
  814. #define SCANCODE_CURSORDOWNRIGHT        81
  815. #define SCANCODE_KEYPAD0                82
  816. #define SCANCODE_KEYPADPERIOD           83
  817. #define SCANCODE_LESS                   86
  818. #define SCANCODE_F11                    87
  819. #define SCANCODE_F12                    88
  820. #define SCANCODE_KEYPADENTER            96
  821. #define SCANCODE_RIGHTCONTROL           97
  822. #define SCANCODE_CONTROL                97
  823. #define SCANCODE_KEYPADDIVIDE           98
  824. #define SCANCODE_PRINTSCREEN            99
  825. #define SCANCODE_RIGHTALT               100
  826. #define SCANCODE_BREAK                  101    /* Beware: is 119     */
  827. #define SCANCODE_BREAK_ALTERNATIVE      119    /* on some keyboards! */
  828. #define SCANCODE_HOME                   102
  829. #define SCANCODE_CURSORBLOCKUP          103    /* Cursor key block */
  830. #define SCANCODE_PAGEUP                 104
  831. #define SCANCODE_CURSORBLOCKLEFT        105    /* Cursor key block */
  832. #define SCANCODE_CURSORBLOCKRIGHT       106    /* Cursor key block */
  833. #define SCANCODE_END                    107
  834. #define SCANCODE_CURSORBLOCKDOWN        108    /* Cursor key block */
  835. #define SCANCODE_PAGEDOWN               109
  836. #define SCANCODE_INSERT                 110
  837. #define SCANCODE_REMOVE                 111
  838. #define SCANCODE_PAUSE                  119
  839. #define SCANCODE_POWER                  120
  840. #define SCANCODE_SLEEP                  121
  841. #define SCANCODE_WAKEUP                 122
  842. #define SCANCODE_LEFTWIN                125
  843. #define SCANCODE_RIGHTWIN               126
  844. #define SCANCODE_MENU                   127
  845. #define SCANCODE_LEFTBUTTON             0x1000
  846. #define SCANCODE_RIGHTBUTTON            0x2000
  847. #define SCANCODE_MIDDLBUTTON            0x4000
  848. /**
  849.  * def KS_CAPTURED 
  850.  * brief This status indicate that the mouse is captured by a window when 
  851.  * the mouse message posted.
  852.  *
  853.  * You can test the status by AND'ed with lParam of the message, like below:
  854.  *
  855.  * code
  856.  *      switch (message) {
  857.  *      case MSG_MOUSEMOVE:
  858.  *          if (lParam & KS_CAPTURED) {
  859.  *              // the mouse is captured by this window.
  860.  *              ...
  861.  *          }
  862.  *          break;
  863.  *      ...
  864.  * endcode
  865.  *
  866.  * sa mouse_msgs
  867.  */
  868. #define KS_CAPTURED                     0x00000400
  869. /**
  870.  * def KS_IMEPOST
  871.  * brief This status indicate that the key message is posted by the IME window.
  872.  *
  873.  * sa key_msgs
  874.  */
  875. #define KS_IMEPOST                      0x00000200
  876. /**
  877.  * def KS_CAPSLOCK
  878.  * brief This status indicate that the CapsLock key was locked when 
  879.  * the key or mouse message posted to the window.
  880.  *
  881.  * You can test the status by AND'ed with lParam of the message, like below
  882.  *
  883.  * code
  884.  *      switch (message) {
  885.  *      case MSG_KEYDOWN:
  886.  *          if (lParam & KS_CAPSLOCK) {
  887.  *              // the CapsLock key is locked.
  888.  *              ...
  889.  *          }
  890.  *          break;
  891.  *      ...
  892.  * endcode
  893.  *
  894.  * sa key_msgs
  895.  */
  896. #define KS_CAPSLOCK                     0x00000100
  897. /**
  898.  * def KS_NUMLOCK
  899.  * brief This status indicate that the NumLock key was locked when 
  900.  * the key or mouse message posted to the window.
  901.  *
  902.  * sa key_msgs
  903.  */
  904. #define KS_NUMLOCK                      0x00000080
  905. /**
  906.  * def KS_SCROLLLOCK
  907.  * brief This status indicate that the ScrollLock key was locked when
  908.  * the key or mouse message posted to the window.
  909.  *
  910.  * sa key_msgs
  911.  */
  912. #define KS_SCROLLLOCK                   0x00000040
  913. /**
  914.  * def KS_LEFTCTRL
  915.  * brief This status indicate that the left-Ctrl key was pressed when
  916.  * the key or mouse message posted to the window.
  917.  *
  918.  * sa key_msgs
  919.  */
  920. #define KS_LEFTCTRL                     0x00000020
  921. /**
  922.  * def KS_RIGHTCTRL
  923.  * brief This status indicate that the right-Ctrl key was pressed when
  924.  * the key or mouse message posted to the window.
  925.  *
  926.  * sa key_msgs
  927.  */
  928. #define KS_RIGHTCTRL                    0x00000010
  929. /**
  930.  * def KS_CTRL
  931.  * brief This status indicate that either the left-Ctrl key or the right-Ctrl key 
  932.  * was pressed when the key or mouse message posted to the window.
  933.  *
  934.  * sa key_msgs
  935.  */
  936. #define KS_CTRL                         0x00000030
  937. /**
  938.  * def KS_LEFTALT
  939.  * brief This status indicate that left-Alt key was pressed when
  940.  * the key  or mouse message posted to the window.
  941.  *
  942.  * sa key_msgs
  943.  */
  944. #define KS_LEFTALT                      0x00000008
  945. /**
  946.  * def KS_RIGHTALT
  947.  * brief This status indicate that right-Alt key was pressed when
  948.  * the key  or mouse message posted to the window.
  949.  *
  950.  * sa key_msgs
  951.  */
  952. #define KS_RIGHTALT                     0x00000004
  953. /**
  954.  * def KS_ALT
  955.  * brief This status indicate that either the left-Alt key or the right-Alt key 
  956.  * was pressed when the key or mouse message posted to the window.
  957.  *
  958.  * sa key_msgs
  959.  */
  960. #define KS_ALT                          0x0000000C
  961. /**
  962.  * def KS_LEFTSHIFT
  963.  * brief This status indicate that left-Shift key was pressed when
  964.  * the key  or mouse message posted to the window.
  965.  *
  966.  * sa key_msgs
  967.  */
  968. #define KS_LEFTSHIFT                    0x00000002
  969. /**
  970.  * def KS_RIGHTSHIFT
  971.  * brief This status indicate that right-Shift key was pressed when
  972.  * the key  or mouse message posted to the window.
  973.  *
  974.  * sa key_msgs
  975.  */
  976. #define KS_RIGHTSHIFT                   0x00000001
  977. /**
  978.  * def KS_SHIFT
  979.  * brief This status indicate that either the left-Shift key or the right-Shift key 
  980.  * was pressed when the key or mouse message posted to the window.
  981.  *
  982.  * sa key_msgs
  983.  */
  984. #define KS_SHIFT                        0x00000003
  985. /**
  986.  * def MASK_KS_SHIFTKEYS
  987.  * brief The mask of key status.
  988.  */
  989. #define MASK_KS_SHIFTKEYS               0x00000FFF
  990. /**
  991.  * def KS_LEFTBUTTON
  992.  * brief This status indicate that left button was pressed when 
  993.  * the key or mouse message posted to the window.
  994.  *
  995.  * sa key_msgs
  996.  */
  997. #define KS_LEFTBUTTON                   0x00001000
  998. /**
  999.  * def KS_RIGHTBUTTON
  1000.  * brief This status indicate that right button was pressed when 
  1001.  * the key or mouse message posted to the window.
  1002.  *
  1003.  * sa key_msgs
  1004.  */
  1005. #define KS_RIGHTBUTTON                  0x00002000
  1006. /**
  1007.  * def KS_MIDDLBUTTON
  1008.  * brief This status indicate that middle button was pressed when 
  1009.  * the key or mouse message posted to the window.
  1010.  *
  1011.  * sa key_msgs
  1012.  */
  1013. #define KS_MIDDLBUTTON                  0x00004000
  1014. /**
  1015.  * def MASK_KS_BUTTONS
  1016.  * brief The mask of mouse button status.
  1017.  */
  1018. #define MASK_KS_BUTTONS                 0x0000F000
  1019.     /** @} end of key_defs */
  1020.     /**
  1021.      * defgroup err_codes Error codes
  1022.      * @{
  1023.      */
  1024. #define ERR_OK                   0
  1025. #define ERR_INV_HWND            -1
  1026. #define ERR_QUEUE_FULL          -2
  1027. #define ERR_INVALID_HANDLE      -3
  1028. #define ERR_INVALID_HMENU       -4
  1029. #define ERR_INVALID_POS         -5
  1030. #define ERR_INVALID_ID          -6
  1031. #define ERR_RES_ALLOCATION      -7
  1032. #define ERR_CTRLCLASS_INVNAME   -8
  1033. #define ERR_CTRLCLASS_INVLEN    -9
  1034. #define ERR_CTRLCLASS_MEM       -10
  1035. #define ERR_CTRLCLASS_INUSE     -11
  1036. #define ERR_ALREADY_EXIST       -12
  1037. #define ERR_NO_MATCH            -13
  1038. #define ERR_BAD_OWNER           -14
  1039. #define ERR_IME_TOOMUCHIMEWND   -15
  1040. #define ERR_IME_NOSUCHIMEWND    -16
  1041. #define ERR_IME_NOIMEWND        -17
  1042. #define ERR_CONFIG_FILE         -18
  1043. #define ERR_FILE_IO             -19
  1044. #define ERR_GFX_ENGINE          -20
  1045. #define ERR_INPUT_ENGINE        -21
  1046. #define ERR_NO_ENGINE           -22
  1047.     /** @} end of err_codes */
  1048.     /**
  1049.      * defgroup misc_macros Miscellaneous macros
  1050.      * @{
  1051.      */
  1052. /**
  1053.  * def TABLESIZE(table)
  1054.  * brief A macro returns the number of elements in a a table.
  1055.  */
  1056. #define TABLESIZE(table)    (sizeof(table)/sizeof(table[0]))
  1057. /* MAX/MIN/ABS macors */
  1058. /**
  1059.  * def MAX(x, y)
  1060.  * brief A macro returns the maximum of a x and a y.
  1061.  */
  1062. #ifndef MAX
  1063. #define MAX(x, y)           ((x > y)?x:y)
  1064. #endif
  1065. /**
  1066.  * def MIN(x, y)
  1067.  * brief A macro returns the minimum of a x and a y.
  1068.  */
  1069. #ifndef MIN
  1070. #define MIN(x, y)           ((x < y)?x:y)
  1071. #endif
  1072. /**
  1073.  * def ABS(x)
  1074.  * brief A macro returns the absolute value of a x.
  1075.  */
  1076. #ifndef ABS
  1077. #define ABS(x)              (((x)<0) ? -(x) : (x))
  1078. #endif
  1079. #ifndef __NOLINUX__
  1080. /* Common used definitions */
  1081. #ifndef PATH_MAX
  1082. //    #include <dirent.h>
  1083. #endif
  1084. #ifndef PATH_MAX
  1085.     #define PATH_MAX    128
  1086. #endif
  1087. #ifndef NAME_MAX
  1088.     #define NAME_MAX    64
  1089. #endif
  1090. /**
  1091.  * def MAX_PATH
  1092.  * brief The possible maximal length of a path name.
  1093.  * note This definition is an alias of PATH_MAX
  1094.  */
  1095. #define MAX_PATH        PATH_MAX
  1096. /**
  1097.  * def MAX_NAME
  1098.  * brief The possible maximal length of a file name.
  1099.  * note This definition is an alias of NAME_MAX
  1100.  */
  1101. #define MAX_NAME        NAME_MAX
  1102. #else
  1103. #define MAX_PATH        256
  1104. #define MAX_NAME        64
  1105. #endif
  1106. /**
  1107.  * enum SBPolicyType
  1108.  * brief Scroll bar display policies in scrolled window
  1109.  */
  1110. typedef enum
  1111. {
  1112.   /**
  1113.    * the scroll bar is always visible
  1114.    */
  1115.   SB_POLICY_ALWAYS,
  1116.   /**
  1117.    * the scroll bar is shown or hided automatically
  1118.    */
  1119.   SB_POLICY_AUTOMATIC,
  1120.   /** the scroll bar is never visbile
  1121.    */
  1122.   SB_POLICY_NEVER
  1123. } SBPolicyType;
  1124.     /** @} end of misc_macros */
  1125.     /** @} end of macros_types */
  1126. #ifdef __cplusplus
  1127. extern "C" {
  1128. #endif
  1129. #ifdef __UCOSII__
  1130. /* use our own implementation of strdup */
  1131. #undef HAVE_STRDUP
  1132. #define strdup own_strdup
  1133. /* The entry of MiniGUI */
  1134. int minigui_entry (int argc, const char* argv[]);
  1135. int ucos2_posix_pthread_init (void);
  1136. int ucos2_malloc_init (void);
  1137. #endif
  1138. #ifndef HAVE_STRDUP
  1139. char *strdup(const char *s);
  1140. #endif
  1141. #ifndef HAVE_STRCASECMP
  1142. int strcasecmp(const char *s1, const char *s2);
  1143. #endif
  1144. #if 0
  1145. #include <sys/time.h>
  1146. struct timezone;
  1147. int gettimeofday(struct timeval *tv, struct timezone* tz);
  1148. #endif
  1149. #ifdef __cplusplus
  1150. };  /* end of extern "C" */
  1151. #endif
  1152. #ifdef _USE_OWN_MALLOC
  1153. #define USE_DL_PREFIX
  1154. #include "own_malloc.h"
  1155. /* wrappers for malloc functions */
  1156. #define calloc      dlcalloc
  1157. #define free        dlfree
  1158. #define malloc      dlmalloc
  1159. #define memalign    dlmemalign
  1160. #define realloc     dlrealloc
  1161. #define valloc      dlvalloc
  1162. #endif
  1163. /* Do not use the alloca of ARMCC */
  1164. #if defined(__CC_ARM)
  1165. #   undef HAVE_ALLOCA
  1166. #   undef HAVE_ALLOCA_H
  1167. #endif
  1168. #ifdef HAVE_ALLOCA_H
  1169. #   include <alloca.h>
  1170. #   define ALLOCATE_LOCAL(size)    alloca((int)(size))
  1171. #   define DEALLOCATE_LOCAL(ptr)   /* as nothing */
  1172. #else
  1173. #   define ALLOCATE_LOCAL(size)    malloc((int)(size))
  1174. #   define DEALLOCATE_LOCAL(ptr)   free(ptr)
  1175. #endif
  1176. #ifdef _USE_OWN_STDIO
  1177. #if defined (__UCOSII__) || defined (__VXWORKS__)
  1178. #   undef _PRINTF_FLOATING_POINT
  1179. #   undef _SCANF_FLOATING_POINT
  1180. #else
  1181. #   ifdef HAVE_MATH_H
  1182. #       define _PRINTF_FLOATING_POINT      1
  1183. #       define _SCANF_FLOATING_POINT       1
  1184. #   endif
  1185. #endif
  1186. #undef _I18N_MB_REQUIRED
  1187. #if defined(__VXWORKS__)
  1188.   #define _USE_OWN_SNPRINTF
  1189.   #define _USE_OWN_VSNPRINTF
  1190.   #define _USE_OWN_VFNPRINTF
  1191. #else
  1192.   #define _USE_OWN_PRINTF
  1193.   #define _USE_OWN_FPRINTF
  1194.   #define _USE_OWN_SPRINTF
  1195.   #define _USE_FNPRINTF
  1196.   #define _USE_OWN_SNPRINTF
  1197.   #define _USE_OWN_VPRINTF
  1198.   #define _USE_OWN_VFPRINTF
  1199.   #define _USE_OWN_VSPRINTF
  1200.   #define _USE_OWN_VFNPRINTF
  1201.   #define _USE_OWN_VSNPRINTF
  1202.   #define _USE_OWN_SCANF
  1203.   #define _USE_OWN_FSCANF
  1204.   #define _USE_OWN_SSCANF
  1205.   #define _USE_OWN_VSCANF
  1206.   #define _USE_OWN_VFSCANF
  1207.   #define _USE_OWN_VSSCANF
  1208. #endif
  1209. #include "own_stdio.h"
  1210. /* wrappers for stdio functions */
  1211. #ifdef _USE_OWN_PRINTF
  1212.   #define printf      own_printf
  1213. #endif
  1214. #ifdef _USE_OWN_FPRINTF
  1215.   #define fprintf     own_fprintf
  1216. #endif
  1217. #ifdef _USE_OWN_SPRINTF
  1218.   #define sprintf     own_sprintf
  1219. #endif
  1220. #ifdef _USE_FNPRINTF
  1221.   #define fnprintf    own_fnprintf
  1222. #endif
  1223. #ifdef _USE_OWN_SNPRINTF
  1224.   #define snprintf    own_snprintf
  1225. #endif
  1226. #ifdef _USE_OWN_VPRINTF
  1227.   #define vprintf     own_vprintf
  1228. #endif
  1229. #ifdef _USE_OWN_VFPRINTF
  1230.   #define vfprintf    own_vfprintf
  1231. #endif
  1232. #ifdef _USE_OWN_VSPRINTF
  1233.   #define vsprintf    own_vsprintf
  1234. #endif
  1235. #ifdef _USE_OWN_VFNPRINTF
  1236.   #define vfnprintf   own_vfnprintf
  1237. #endif
  1238. #ifdef _USE_OWN_VSNPRINTF
  1239.   #define vsnprintf   own_vsnprintf
  1240. #endif
  1241. #ifdef _USE_OWN_SCANF
  1242.   #define scanf       own_scanf
  1243. #endif
  1244. #ifdef _USE_OWN_FSCANF
  1245.   #define fscanf      own_fscanf
  1246. #endif
  1247. #ifdef _USE_OWN_SSCANF
  1248.   #define sscanf      own_sscanf
  1249. #endif
  1250. #ifdef _USE_OWN_VSCANF
  1251.   #define vscanf      own_vscanf
  1252. #endif
  1253. #ifdef _USE_OWN_VFSCANF
  1254.   #define vfscanf     own_vfscanf
  1255. #endif
  1256. #ifdef _USE_OWN_VSSCANF
  1257.   #define vsscanf     own_vsscanf
  1258. #endif
  1259. #endif /* _USE_OWN_STDIO */
  1260. #ifdef _DEBUG_MSG
  1261. #   define _MG_PRINTF(fmt...) fprintf (stderr, fmt)
  1262. #else
  1263. #   define _MG_PRINTF(fmt) 
  1264. #endif
  1265. #endif /* _MGUI_COMMON_H */