From 2fbff87cb466eba826f59f2017bf241952d309da Mon Sep 17 00:00:00 2001 From: VincentWei Date: Tue, 16 Jan 2018 19:07:41 +0800 Subject: [PATCH] tune for 64 bits --- include/common.h | 204 ++++++++++++++++++++++++++++++---------- include/gdi.h | 6 +- include/win32_pthread.h | 4 +- include/window.h | 12 +-- src/font/devfont.c | 2 +- src/font/logfont.c | 4 +- src/include/ctrlclass.h | 2 +- src/misc/endianrw.c | 22 +++-- src/misc/misc.c | 119 +++++++++++------------ src/misc/rwops.c | 8 +- 10 files changed, 247 insertions(+), 136 deletions(-) diff --git a/include/common.h b/include/common.h index 4c0ec176..6e24d9bd 100644 --- a/include/common.h +++ b/include/common.h @@ -256,6 +256,20 @@ MGUI_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); * @{ */ + +#if defined(_WIN64) +# define SIZEOF_PTR 8 +#elif defined(__LP64__) +# define SIZEOF_PTR 8 +#else +# define SIZEOF_PTR 4 +#endif +/** + * \var PVOID + * \brief A type definition for a pointer to any type. + */ +typedef void *PVOID; + /** * \var typedef int BOOL * \brief A type definition for boolean value. @@ -265,6 +279,7 @@ MGUI_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); typedef int BOOL; #endif #endif + /** * \def FALSE * \brief FALSE value, defined as 0 by MiniGUI. @@ -318,55 +333,55 @@ typedef int BOOL; */ /** - * \var typedef unsigned int GHANDLE + * \var GHANDLE * \brief General handle. */ -typedef unsigned int GHANDLE; +typedef PVOID GHANDLE; /** - * \var typedef unsigned int HWND + * \var HWND * \brief Handle to main window or control. */ -typedef unsigned int HWND; +typedef GHANDLE HWND; /** - * \var typedef unsigned int HDC + * \var HDC * \brief Handle to device context. */ -typedef unsigned int HDC; +typedef GHANDLE HDC; /** - * \var typedef unsigned int HPALETTE + * \var HPALETTE * \brief Handle to a logical palette. */ -typedef unsigned int HPALETTE; +typedef GHANDLE HPALETTE; /** - * \var typedef unsigned int HCURSOR + * \var HCURSOR * \brief Handle to cursor. */ -typedef unsigned int HCURSOR; +typedef GHANDLE HCURSOR; /** - * \var typedef unsigned int HICON + * \var HICON * \brief Handle to icon. */ -typedef unsigned int HICON; +typedef GHANDLE HICON; /** - * \var typedef unsigned int HMENU + * \var HMENU * \brief Handle to menu. */ -typedef unsigned int HMENU; +typedef GHANDLE HMENU; /** - * \var typedef unsigned int HACCEL + * \var HACCEL * \brief Handle to accelarator. */ -typedef unsigned int HACCEL; +typedef GHANDLE HACCEL; /** - * \var typedef unsigned int HDLG + * \var HDLG * \brief Handle to dialog box, same as HWND. */ -typedef unsigned int HDLG; +typedef GHANDLE HDLG; /** - * \var typedef unsigned int HHOOK + * \var HHOOK * \brief Handle to keyboard or mouse event hook. */ -typedef unsigned int HHOOK; +typedef GHANDLE HHOOK; /** @} end of handles */ @@ -376,73 +391,158 @@ typedef unsigned int HHOOK; */ /** - * \var typedef unsigned char BYTE - * \brief A type definition for unsigned character (byte). + * \var BYTE + * \brief A type definition for an 8-bit unsigned character (byte). */ -#ifndef _HAVE_TYPE_BYTE typedef unsigned char BYTE; -#endif + /** - * \var typedef signed char SBYTE - * \brief A type definition for signed character. + * \var SBYTE + * \brief A type definition for an 8-bit signed character. */ typedef signed char SBYTE; /** - * \var typedef unsigned short WORD - * \brief A type definition for unsigned short integer (word). + * \var WORD_HPTR + * \brief An unsigned int (word) type in half pointer precision. */ -#ifndef _HAVE_TYPE_WORD -typedef unsigned short WORD; +#if defined(_WIN64) +typedef unsigned int WORD_HPTR; +#elif defined(__LP64__) +typedef unsigned int WORD_HPTR; +#else +typedef unsigned short WORD_HPTR; #endif /** - * \var typedef signed short SWORD - * \brief A type definition for signed short integer. + * \var SWORD_HPTR + * \brief An signed int type in half pointer precision. */ -typedef signed short SWORD; - -/** - * \var typedef unsigned long DWORD - * \brief A type definition for unsigned long integer (double word). - */ -#ifndef _HAVE_TYPE_DWORD -typedef unsigned long DWORD; +#if defined(_WIN64) +typedef signed int SWORD_HPTR; +#elif defined(__LP64__) +typedef signed int SWORD_HPTR; +#else +typedef signed short SWORD_HPTR; #endif /** - * \var typedef signed long SDWORD - * \brief A type definition for signed long integer. + * \var WORD + * \brief A type definition for an unsigned integer (word). */ -typedef signed long SDWORD; +typedef WORD_HPTR WORD; /** - * \var typedef unsigned int UINT + * \var SWORD + * \brief A type definition for a signed integer. + */ +typedef SWORD_HPTR SWORD; + +/** + * \var WORD16 + * \brief A type definition for a 16-bit unsigned integer (word). + */ +typedef unsigned short WORD16; + +/** + * \var SWORD16 + * \brief A type definition for a 16-bit signed integer. + */ +typedef signed short SWORD16; + +/** + * \var DWORD_PTR + * \brief An unsigned long type for pointer precision. + * + * Commonly used for general 32-bit parameters that have been extended + * to 64 bits in 64-bit platform. + */ +#if defined(_WIN64) +typedef unsigned __int64 DWORD_PTR; +#elif defined(__LP64__) +typedef unsigned long DWORD_PTR; +#else +typedef unsigned int DWORD_PTR; +#endif + +/** + * \var DWORD + * \brief A unsigned long type definition for pointer precision. + */ +typedef DWORD_PTR DWORD; + +/** + * \var DWORD32 + * \brief A type definition for a 32-bit unsigned integer. + */ +typedef unsigned short DWORD32; + +/** + * \var SDWORD32 + * \brief A type definition for a 32-bit signed integer. + */ +typedef signed short SDWORD32; + +/** + * \var UINT * \brief A type definition for unsigned integer. */ -#ifndef _HAVE_TYPE_UINT -typedef unsigned int UINT; +typedef unsigned int UINT; + +/** + * \var INT_PTR + * \brief A signed integer type for pointer precision. + */ +#if defined(_WIN64) +typedef __int64 INT_PTR; +#elif defined(__LP64__) +typedef long INT_PTR; +#else +typedef int INT_PTR; #endif /** - * \var typedef long LONG + * \var UINT_PTR + * \brief A unsigned integer type for pointer precision. + */ +#if defined(_WIN64) +typedef unsigned __int64 UINT_PTR; +#elif defined(__LP64__) +typedef unsigned long UINT_PTR; +#else +typedef unsigned int UINT_PTR; +#endif + +#if SIZEOF_PTR == 8 +# define INT_PTR_MIN (-9223372036854775807L-1) +# define INT_PTR_MAX (9223372036854775807L) +# define UINT_PTR_MAX (18446744073709551615UL) +#else +# error 64bit arrives 32bit. +# define INT_PTR_MIN (-2147483647-1) +# define INT_PTR_MAX (2147483647) +# define UINT_PTR_MAX (4294967295U) +#endif + +/** + * \var typedef LONG * \brief A type definition for long integer. */ #ifndef _HAVE_TYPE_LONG -typedef long LONG; +typedef long LONG; #endif /** - * \var typedef unsigned int WPARAM + * \var WPARAM * \brief A type definition for the first message paramter. */ -typedef unsigned int WPARAM; +typedef UINT_PTR WPARAM; /** - * \var typedef unsigned long LPARAM + * \var LPARAM * \brief A type definition for the second message paramter. */ -typedef unsigned long LPARAM; +typedef UINT_PTR LPARAM; /** * \def LOBYTE(w) diff --git a/include/gdi.h b/include/gdi.h index d640fe23..a6a4cbf5 100644 --- a/include/gdi.h +++ b/include/gdi.h @@ -1090,19 +1090,19 @@ MG_EXPORT BOOL GUIAPI InitPolygonRegion (PCLIPRGN dst, * \note MiniGUI does not do any clipping operation for this DC, * so use this DC may make a mess of other windows. */ -#define HDC_SCREEN 0 +#define HDC_SCREEN (HDC)0 /* * This is a system screen DC create for MiniGUI internal usage, for example, * menu and z-order operations */ -#define HDC_SCREEN_SYS 1 +#define HDC_SCREEN_SYS (HDC)1 /** * \def HDC_INVALID * \brief Indicates an invalid handle to device context. */ -#define HDC_INVALID 0xFFFFFFFF +#define HDC_INVALID (HDC)UINT_PTR_MAX #define GDCAP_COLORNUM 0 #define GDCAP_HPIXEL 1 diff --git a/include/win32_pthread.h b/include/win32_pthread.h index 663ebc6f..c3de978c 100644 --- a/include/win32_pthread.h +++ b/include/win32_pthread.h @@ -209,9 +209,9 @@ #if defined(_MSC_VER) && _MSC_VER < 1300 || defined(__DMC__) /* - * VC++6.0 or early compiler's header has no DWORD_PTR type. + * VC++6.0 or early compiler's header has no DWORD type. */ -typedef unsigned long DWORD_PTR; +typedef unsigned long DWORD; #endif /* * ----------------- diff --git a/include/window.h b/include/window.h index bc831a5c..98a8b4aa 100644 --- a/include/window.h +++ b/include/window.h @@ -4893,15 +4893,15 @@ extern MG_EXPORT HWND __mg_hwnd_desktop; * \def HWND_NULL * \brief Null window handle. */ -#define HWND_NULL 0 +#define HWND_NULL (HWND)0 /** * \def HWND_INVALID * \brief Invalid window handle. */ -#define HWND_INVALID 0xFFFFFFFF +#define HWND_INVALID (HWND)UINT_PTR_MAX -#define HWND_OTHERPROC 0xFFFFFFFE +#define HWND_OTHERPROC (HWND)UINT_PTR_MAX /** * Structure defines a main window. @@ -8426,10 +8426,10 @@ typedef struct _MENUITEMINFO { PBITMAP checkedbmp; /** The private data attached to the menu item */ - DWORD itemdata; + DWORD itemdata; /** The data of this menu item, used to pass the string or the pointer to the BITMAP object of the menu item */ - DWORD typedata; + DWORD typedata; /** * Used by \a GetMenuItemInfo function to indicate the maximal length @@ -9056,7 +9056,7 @@ typedef struct _CTRLDATA /** Control caption */ const char* caption; /** Additional data */ - DWORD dwAddData; + DWORD dwAddData; /** Control extended style */ DWORD dwExStyle; diff --git a/src/font/devfont.c b/src/font/devfont.c index 8d570919..150c31a0 100644 --- a/src/font/devfont.c +++ b/src/font/devfont.c @@ -271,7 +271,7 @@ unsigned short font_GetBestScaleFactor (int height, int expect) { \ devfont = head; \ while (devfont) { \ - fprintf (stderr, " %d: %s, charsetname: %s, style: %#lx\n", \ + fprintf (stderr, " %d: %s, charsetname: %s, style: %#x\n", \ count, \ devfont->name, devfont->charset_ops->name, devfont->style); \ devfont = devfont->next; \ diff --git a/src/font/logfont.c b/src/font/logfont.c index 60364bb7..e9f0a27a 100644 --- a/src/font/logfont.c +++ b/src/font/logfont.c @@ -102,7 +102,7 @@ static PLOGFONT gdiCreateLogFont (const char* type, const char* family, log_font->sbc_scale = 1; log_font->mbc_scale = 1; - _MG_PRINTF ("FONT>LogFont: requested info: type: %s, family: %s, style: %lx, charset: %s, size: %d.\n", + _MG_PRINTF ("FONT>LogFont: requested info: type: %s, family: %s, style: %x, charset: %s, size: %d.\n", log_font->type, log_font->family, log_font->style, log_font->charset, log_font->size); @@ -223,7 +223,7 @@ static PLOGFONT gdiCreateLogFont (const char* type, const char* family, log_font->style &= ~FS_FLIP_HORZVERT; } - _MG_PRINTF ("FONT>LogFont: created info: type: %s, family: %s, style: %lx, charset: %s, size: %d.\n", + _MG_PRINTF ("FONT>LogFont: created info: type: %s, family: %s, style: %x, charset: %s, size: %d.\n", log_font->type, log_font->family, log_font->style, log_font->charset, log_font->size); diff --git a/src/include/ctrlclass.h b/src/include/ctrlclass.h index a343ec49..d666a1a1 100644 --- a/src/include/ctrlclass.h +++ b/src/include/ctrlclass.h @@ -29,7 +29,7 @@ typedef struct _CTRLCLASSINFO int (*ControlProc)(HWND, int, WPARAM, LPARAM); // control procedure. - DWORD dwAddData; // the additional data. + DWORD dwAddData; // the additional data. int nUseCount; // use count. struct _CTRLCLASSINFO* next; diff --git a/src/misc/endianrw.c b/src/misc/endianrw.c index e72e4694..54092028 100644 --- a/src/misc/endianrw.c +++ b/src/misc/endianrw.c @@ -102,34 +102,42 @@ int MGUI_WriteLE64 (MG_RWops *dst, Uint64 value) int MGUI_WriteBE64 (MG_RWops *dst, Uint64 value) { value = ArchSwapBE64(value); - return(MGUI_RWwrite(dst, &value, (sizeof value), 1)); + return (MGUI_RWwrite(dst, &value, (sizeof value), 1)); } Uint16 MGUI_ReadLE16FP (FILE *src) { Uint16 value; + size_t size; - fread (&value, (sizeof value), 1, src); - return(ArchSwapLE16(value)); + size = fread (&value, (sizeof value), 1, src); + if (size < sizeof (value)) + return -1; + + return (ArchSwapLE16(value)); } Uint32 MGUI_ReadLE32FP (FILE *src) { Uint32 value; + size_t size; - fread(&value, (sizeof value), 1, src); - return(ArchSwapLE32(value)); + size = fread(&value, (sizeof value), 1, src); + if (size < sizeof (value)) + return -1; + + return (ArchSwapLE32(value)); } int MGUI_WriteLE16FP (FILE *dst, Uint16 value) { value = ArchSwapLE16(value); - return(fwrite (&value, (sizeof value), 1, dst)); + return (fwrite (&value, (sizeof value), 1, dst)); } int MGUI_WriteLE32FP (FILE *dst, Uint32 value) { value = ArchSwapLE32(value); - return(fwrite (&value, (sizeof value), 1, dst)); + return (fwrite (&value, (sizeof value), 1, dst)); } diff --git a/src/misc/misc.c b/src/misc/misc.c index 82f3a02f..a619a23b 100644 --- a/src/misc/misc.c +++ b/src/misc/misc.c @@ -54,46 +54,46 @@ void __mg_rewind (FILE *fp); int my_fputs (const char *s, FILE *stream) { - int len = strlen (s); - int ret = 0; - - ret = fwrite (s, 1, len, stream); - if (ret != len) - return EOF; - else - return ret; + int len = strlen (s); + int ret = 0; + + ret = fwrite (s, 1, len, stream); + if (ret != len) + return EOF; + else + return ret; } char * my_fgets (char *s, int size, FILE *stream) { - int c; - int count = 0; + int c; + int count = 0; - while (!feof (stream)) { - if (fread (&c, 1, 1, stream) != 1) { - if (count == 0) - return NULL; - else { - s[count] = '\0'; - return s; - } - } - - if (c == EOF || (char)c == '\r' ||(char)c == '\n') { - s [count++] = (char)c; - s [count++] = '\0'; - return s; - } - else - s[count++] = (char)c; - } - if (!count) - return NULL; - else - { - s[count] = '\0'; - return s; - } + while (!feof (stream)) { + if (fread (&c, 1, 1, stream) != 1) { + if (count == 0) + return NULL; + else { + s[count] = '\0'; + return s; + } + } + + if (c == EOF || (char)c == '\r' ||(char)c == '\n') { + s [count++] = (char)c; + s [count++] = '\0'; + return s; + } + else + s[count++] = (char)c; + } + if (!count) + return NULL; + else + { + s[count] = '\0'; + return s; + } } #endif /////////////////////////////// @@ -127,7 +127,10 @@ static BOOL LookForEtcFile (void) } - getcwd (etcfile, MAX_PATH); + if (getcwd (etcfile, MAX_PATH) == NULL) { + return FALSE; + } + strcat (etcfile, "/"); strcat (etcfile, ETCFILENAME); if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) @@ -151,41 +154,41 @@ static BOOL LookForEtcFile (void) } } - strcpy (etcfile, "/usr/local/etc/" ETCFILENAME); - if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) - == ETC_OK) { - strcpy (ETCFILEPATH, etcfile); - return TRUE; - } + strcpy (etcfile, "/usr/local/etc/" ETCFILENAME); + if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) + == ETC_OK) { + strcpy (ETCFILEPATH, etcfile); + return TRUE; + } - strcpy (etcfile, "/etc/" ETCFILENAME); - if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) - == ETC_OK) { - strcpy (ETCFILEPATH, etcfile); - return TRUE; - } + strcpy (etcfile, "/etc/" ETCFILENAME); + if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) + == ETC_OK) { + strcpy (ETCFILEPATH, etcfile); + return TRUE; + } - return FALSE; + return FALSE; #elif defined(WIN32) - sprintf(etcfile, "c:\\windows\\%s", ETCFILENAME); + sprintf(etcfile, "c:\\windows\\%s", ETCFILENAME); if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) == ETC_OK) { strcpy (ETCFILEPATH, etcfile); return TRUE; } - sprintf(etcfile, "c:\\%s", ETCFILENAME); + sprintf(etcfile, "c:\\%s", ETCFILENAME); if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) == ETC_OK) { strcpy (ETCFILEPATH, etcfile); return TRUE; } - return FALSE; + return FALSE; #elif defined(__THREADX__) - char etcpath[MAX_PATH]= "/flash/fhas2-cfg/"; - strcpy (etcfile, etcpath); - strcat (etcfile, ETCFILENAME); + char etcpath[MAX_PATH]= "/flash/fhas2-cfg/"; + strcpy (etcfile, etcpath); + strcat (etcfile, ETCFILENAME); #endif if (GetValueFromEtcFile (etcfile, "system", "gal_engine", buff, 8) @@ -207,7 +210,7 @@ BOOL mg_InitMgEtc (void) return FALSE; } - if (hMgEtc) + if (hMgEtc) return TRUE; if ( !(hMgEtc = LoadEtcFile (ETCFILEPATH)) ) @@ -1070,7 +1073,7 @@ GHANDLE GUIAPI FindSectionInEtc (GHANDLE hEtc, /* not found */ if (bCreateNew) { if (petc->sect_nr_alloc <= 0) - return ETC_READONLYOBJ; + return (GHANDLE) ETC_READONLYOBJ; if (empty_section >= 0) { psect = petc->sections + empty_section; @@ -1314,7 +1317,7 @@ void mswin_ping(void); void GUIAPI Ping(void) { #ifdef WIN32 - mswin_ping(); + mswin_ping(); #else putchar ('\a'); fflush (stdout); diff --git a/src/misc/rwops.c b/src/misc/rwops.c index ef19c3c2..e0976fda 100644 --- a/src/misc/rwops.c +++ b/src/misc/rwops.c @@ -277,8 +277,8 @@ MG_RWops *MGUI_RWFromMem(void *mem, int size) rwops->eof = mem_eof; rwops->hidden.mem.base = (Uint8 *)mem; rwops->hidden.mem.here = rwops->hidden.mem.base; - if ((0xFFFFFFFF - (Uint32)mem) < size) - rwops->hidden.mem.stop = (void*)0xFFFFFFFF; + if ((UINT_PTR_MAX - (UINT_PTR)mem) < size) + rwops->hidden.mem.stop = (void*)UINT_PTR_MAX; else rwops->hidden.mem.stop = rwops->hidden.mem.base+size; @@ -299,8 +299,8 @@ void MGUI_InitMemRW (MG_RWops* area, void *mem, int size) area->eof = mem_eof; area->hidden.mem.base = (Uint8 *)mem; area->hidden.mem.here = area->hidden.mem.base; - if ((0xFFFFFFFF - (Uint32)mem) < size) - area->hidden.mem.stop = (void*)0xFFFFFFFF; + if ((UINT_PTR_MAX - (UINT_PTR)mem) < size) + area->hidden.mem.stop = (void*)UINT_PTR_MAX; else area->hidden.mem.stop = area->hidden.mem.base+size;