__mg_time -> mg_os_time; __mg_mktime -> __mg_os_mktime; __mg_localtime -> __mg_os_localtime; use clock_gettime for tick count instead of gettimeofday

This commit is contained in:
Vincent Wei
2019-07-14 14:21:40 +08:00
parent 7e1e59a40b
commit 8040f7abd5
16 changed files with 360 additions and 281 deletions

View File

@@ -4984,11 +4984,11 @@ provide the function whether the file exist or not.(xwyan)
* src/server/request.c
10/24. MODIFICATION: Use 1980/01/01 00:00:00 to return the default local time
for __mg_localtime.
for __mg_os_localtime.
* src/misc/nposix.c
10/24. MODIFICATION: Use HAVE_TIME, HAVE_MKTIME, and HAVE_LOCALTIME to define
__mg_time, __mg_mktime, and __mg_localtime functions.
__mg_os_time, __mg_os_mktime, and __mg_os_localtime functions.
* configure.in
* src/misc/nposix.c

View File

@@ -76,7 +76,7 @@ AC_FUNC_ALLOCA
AC_FUNC_MEMCMP
AC_FUNC_MMAP
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(time mktime localtime strdup strcasecmp strncasecmp strerror setlocale)
AC_CHECK_FUNCS(time mktime localtime clock_gettime strdup strcasecmp strncasecmp strerror setlocale)
AC_CHECK_FUNCS(posix_memalign memalign valloc)
dnl ========================================================================

View File

@@ -1991,7 +1991,7 @@ extern "C" {
#endif
#ifndef HAVE_TIME
typedef unsigned int time_t;
typedef unsigned long time_t;
struct tm {
int tm_sec; /* seconds [0,61] */

View File

@@ -2041,7 +2041,7 @@ extern DWORD __mg_interval_time;
* should be erase. The rectangle is in client coordinates system.
* If it is NULL, the whole client area should be erased.
*/
#define MSG_ERASEBKGND 0x00B0 /* this is an async message */
#define MSG_ERASEBKGND 0x00B0 /* this is an async message */
/**
* \def MSG_PAINT
@@ -2087,7 +2087,7 @@ extern DWORD __mg_interval_time;
*/
#define MSG_SYNCPAINT 0x00B4
#define MSG_LASTPAINTMSG 0x00CF
#define MSG_LASTPAINTMSG 0x00BF
/** @} end of paint_msgs */
@@ -2096,18 +2096,18 @@ extern DWORD __mg_interval_time;
* @{
*/
/* Group 6 from 0x00D0 to 0x00EF, the internal desktop messages. */
#define MSG_FIRSTSESSIONMSG 0x00D0
/* Group 6 from 0x00C0 to 0x00EF, the internal desktop messages. */
#define MSG_FIRSTSESSIONMSG 0x00C0
#define MSG_STARTSESSION 0x00D0
#define MSG_QUERYENDSESSION 0x00D1
#define MSG_ENDSESSION 0x00D2
#define MSG_REINITSESSION 0x00D3
#define MSG_STARTSESSION 0x00C0
#define MSG_QUERYENDSESSION 0x00C1
#define MSG_ENDSESSION 0x00C2
#define MSG_REINITSESSION 0x00C3
#define MSG_ERASEDESKTOP 0x00DE
#define MSG_PAINTDESKTOP 0x00DF
#define MSG_ERASEDESKTOP 0x00CE
#define MSG_PAINTDESKTOP 0x00CF
#define MSG_DT_MOUSEOFF 0x00E0
#define MSG_DT_MOUSEOFF 0x00D0
/**
* \def MSG_DT_LBUTTONDOWN
@@ -2126,7 +2126,7 @@ extern DWORD __mg_interval_time;
*
* \sa MSG_DT_LBUTTONUP, MSG_LBUTTONDOWN
*/
#define MSG_DT_LBUTTONDOWN 0x00E1
#define MSG_DT_LBUTTONDOWN 0x00D1
/**
* \def MSG_DT_LBUTTONUP
@@ -2145,7 +2145,7 @@ extern DWORD __mg_interval_time;
*
* \sa MSG_DT_LBUTTONDOWN, MSG_LBUTTONUP
*/
#define MSG_DT_LBUTTONUP 0x00E2
#define MSG_DT_LBUTTONUP 0x00D2
/**
* \def MSG_DT_LBUTTONDBLCLK
@@ -2164,7 +2164,7 @@ extern DWORD __mg_interval_time;
*
* \sa MSG_RBUTTONDBLCLK
*/
#define MSG_DT_LBUTTONDBLCLK 0x00E3
#define MSG_DT_LBUTTONDBLCLK 0x00D3
/**
* \def MSG_DT_MOUSEMOVE
@@ -2183,7 +2183,7 @@ extern DWORD __mg_interval_time;
*
* \sa MSG_MOUSEMOVE
*/
#define MSG_DT_MOUSEMOVE 0x00E4
#define MSG_DT_MOUSEMOVE 0x00D4
/**
* \def MSG_DT_RBUTTONDOWN
@@ -2203,7 +2203,7 @@ extern DWORD __mg_interval_time;
* \sa MSG_DT_RBUTTONUP, MSG_RBUTTONDOWN
*
*/
#define MSG_DT_RBUTTONDOWN 0x00E5
#define MSG_DT_RBUTTONDOWN 0x00D5
/**
* \def MSG_DT_RBUTTONUP
@@ -2222,7 +2222,7 @@ extern DWORD __mg_interval_time;
*
* \sa MSG_DT_RBUTTONDOWN, MSG_RBUTTONUP
*/
#define MSG_DT_RBUTTONUP 0x00E6
#define MSG_DT_RBUTTONUP 0x00D6
/**
* \def MSG_DT_RBUTTONDBLCLK
@@ -2241,9 +2241,67 @@ extern DWORD __mg_interval_time;
*
* \sa MSG_LBUTTONDBLCLK
*/
#define MSG_DT_RBUTTONDBLCLK 0x00E7
#define MSG_DT_RBUTTONDBLCLK 0x00D7
#define MSG_DT_KEYOFF 0x00D8
/**
* \def MSG_DT_MBUTTONDOWN
* \brief Right mouse button down message on the desktop.
*
* This message is posted to the desktop window when the user presses down
* the right button of the mouse in the area of the desktop window.
*
* \code
* MSG_DT_MBUTTONDOWN
* int x_pos = LOSWORD (lParam);
* int y_pos = HISWORD (lParam);
* \endcode
*
* \param x_pos,y_pos The position of the mouse in desktop coordinates.
*
* \sa MSG_DT_MBUTTONUP, MSG_RBUTTONDOWN
*
*/
#define MSG_DT_MBUTTONDOWN 0x00D8
/**
* \def MSG_DT_MBUTTONUP
* \brief Right mouse button up message on the desktop.
*
* This message is posted to the desktop window when the user releases up
* the right button of the mouse in the area of the desktop window.
*
* \code
* MSG_DT_MBUTTONUP
* int x_pos = LOSWORD (lParam);
* int y_pos = HISWORD (lParam);
* \endcode
*
* \param x_pos,y_pos The position of the mouse in desktop coordinates.
*
* \sa MSG_DT_MBUTTONDOWN, MSG_RBUTTONUP
*/
#define MSG_DT_MBUTTONUP 0x00D9
/**
* \def MSG_DT_MBUTTONDBLCLK
* \brief Right mouse button double clicked message on the desktop.
*
* This message is posted to the desktop window when the user double clicks
* the right button of the mouse in the area of the desktop window.
*
* \code
* MSG_DT_MBUTTONDBLCLK
* int x_pos = LOSWORD (lParam);
* int y_pos = HISWORD (lParam);
* \endcode
*
* \param x_pos,y_pos The position of the mouse in desktop coordinates.
*
* \sa MSG_LBUTTONDBLCLK
*/
#define MSG_DT_MBUTTONDBLCLK 0x00DA
#define MSG_DT_KEYOFF 0x00CB
/**
* \def MSG_DT_KEYDOWN
@@ -2262,7 +2320,9 @@ extern DWORD __mg_interval_time;
* \sa MSG_DT_KEYUP
*
*/
#define MSG_DT_KEYDOWN 0x00E8
#define MSG_DT_KEYDOWN 0x00E0
#define MSG_DT_CHAR 0x00E1
/**
* \def MSG_DT_KEYUP
@@ -2280,18 +2340,16 @@ extern DWORD __mg_interval_time;
*
* \sa MSG_DT_KEYDOWN
*/
#define MSG_DT_KEYUP 0x00EA
#define MSG_DT_KEYUP 0x00E2
#define MSG_DT_SYSKEYDOWN 0x00EB
#define MSG_DT_SYSKEYUP 0x00ED
#define MSG_DT_SYSKEYDOWN 0x00E3
#define MSG_DT_SYSCHAR 0x00E4
#define MSG_DT_SYSKEYUP 0x00E5
#define MSG_DT_SYSCHAR 0x00EC
#define MSG_DT_CHAR 0x00E9
#define MSG_DT_KEYLONGPRESS 0x00E6
#define MSG_DT_KEYALWAYSPRESS 0x00E7
#define MSG_DT_KEYLONGPRESS 0x00EE
#define MSG_DT_KEYALWAYSPRESS 0x00EF
#define MSG_LASTSESSIONMSG 0x00EF
#define MSG_LASTSESSIONMSG 0x00EF
/** @} end of desktop_msgs */

View File

@@ -234,7 +234,7 @@ static int GetWeekDay (int year, int month, int day)
nowday.tm_mon = month-1;
nowday.tm_year = year-1900;
if (__mg_mktime(&nowday) == -1) {
if (__mg_os_mktime(&nowday) == -1) {
return -1;
}
else
@@ -746,8 +746,8 @@ static BOOL mcInitMonthCalendarData (HWND hWnd, MONCALDDATA* mc_data)
RECT rcClient, rcMDay;
PMCCOLORINFO pmcci;
__mg_time(&nowtime);
pnt = (struct tm *)__mg_localtime(&nowtime);
__mg_os_time(&nowtime);
pnt = (struct tm *)__mg_os_localtime(&nowtime);
mc_data->sys_year = mc_data->cur_year = pnt->tm_year + 1900;
mc_data->sys_month = mc_data->cur_month = pnt->tm_mon + 1;
mc_data->sys_day = mc_data->cur_day = pnt->tm_mday;

View File

@@ -102,9 +102,9 @@ typedef MONCALDDATA* PMONCALDDATA;
BOOL RegisterMonthCalendarControl (void);
time_t __mg_time (time_t * timer);
time_t __mg_mktime (struct tm * timeptr);
struct tm *__mg_localtime (const time_t * timer);
time_t __mg_os_time (time_t * timer);
time_t __mg_os_mktime (struct tm * timeptr);
struct tm *__mg_os_localtime (const time_t * timer);
#ifdef __cplusplus
}

View File

@@ -1059,7 +1059,7 @@ static BOOL init_or_term_specifical_fonts (char* etc_section, BOOL is_unload)
* first to load from sytem res path, else load it directly(relative or absolute path).*/
if ((add_dev_font (font_name, font_file, TRUE)) == TRUE)
added_num++;
else if ((0 == mg_path_joint(font_path, MAX_PATH + 1,
else if ((0 == __mg_path_joint(font_path, MAX_PATH + 1,
sysres_get_system_res_path(), font_file))
&& ((add_dev_font (font_name, font_path, TRUE)) == TRUE))
added_num++;

View File

@@ -617,8 +617,7 @@ SetDesktopTimerFlag (void)
static inline void
AlertDesktopTimerEvent (void)
{
if(__mg_dsk_msg_queue)
{
if (__mg_dsk_msg_queue) {
__mg_dsk_msg_queue->TimerMask = 1;
POST_MSGQ(__mg_dsk_msg_queue);
}

View File

@@ -1,33 +1,33 @@
/*
* This file is part of MiniGUI, a mature cross-platform windowing
* This file is part of MiniGUI, a mature cross-platform windowing
* and Graphics User Interface (GUI) support system for embedded systems
* and smart IoT devices.
*
*
* Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
* Copyright (C) 1998~2002, WEI Yongming
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
* Or,
*
*
* As this program is a library, any link to this program must follow
* GNU General Public License version 3 (GPLv3). If you cannot accept
* GPLv3, you need to be licensed from FMSoft.
*
*
* If you have got a commercial license of this program, please use it
* under the terms and conditions of the commercial license.
*
*
* For more information about the commercial license, please refer to
* <http://www.minigui.com/en/about/licensing-policy/>.
*/
@@ -65,6 +65,11 @@ struct timezone {
unsigned int __mg_os_get_random_seed (void);
void __mg_os_time_delay (int ms);
void __mg_os_start_time_ms(void);
DWORD __mg_os_get_time_ms(void);
time_t __mg_os_time (time_t* timep);
time_t __mg_os_mktime (struct tm *tmp);
struct tm *__mg_os_localtime (const time_t * timep);
#define NR_KEYS_INIT_ALLOC 8
#define NR_KEYS_INC_ALLOC 4
@@ -90,8 +95,10 @@ int __mg_lookfor_unused_slot (unsigned char* bitmap, int len_bmp, int set);
void __mg_slot_set_use (unsigned char* bitmap, int index);
int __mg_slot_clear_use (unsigned char* bitmap, int index);
BOOL mg_is_abs_path(const char* path);
int mg_path_joint(char* dst, int dst_size, const char* abs_path, const char* sub_path);
BOOL __mg_is_abs_path(const char* path);
int __mg_path_joint(char* dst, int dst_size, const char* abs_path,
const char* sub_path);
#if defined (__VXWORKS__) || defined(WIN32) || defined (__NUCLEUS_MNT__) || defined (_EM86_IAL) || defined (_EM85_IAL)
double cbrt(double x);
#endif

View File

@@ -234,7 +234,7 @@ char * __mg_msgstr2 [] =
"", // 0x00AE
"", // 0x00AF
"MSG_ERASEBKGND", // 0x00B0 // this is an async message.
"MSG_ERASEBKGND", // 0x00B0
"MSG_PAINT", // 0x00B1
"MSG_NCPAINT", // 0x00B2
"MSG_NCACTIVATE", // 0x00B3
@@ -250,10 +250,11 @@ char * __mg_msgstr2 [] =
"", // 0x00BD
"", // 0x00BE
"", // 0x00BF
"", // 0x00C0
"", // 0x00C1
"", // 0x00C2
"", // 0x00C3
"MSG_STARTSESSION", // 0x00C0
"MSG_QUERYENDSESSION", // 0x00C1
"MSG_ENDSESSION", // 0x00C2
"MSG_REINITSESSION", // 0x00C3
"", // 0x00C4
"", // 0x00C5
"", // 0x00C6
@@ -264,42 +265,42 @@ char * __mg_msgstr2 [] =
"", // 0x00CB
"", // 0x00CC
"", // 0x00CD
"", // 0x00CE
"", // 0x00CF
"MSG_ERASEDESKTOP", // 0x00CE
"MSG_PAINTDESKTOP", // 0x00CF
"MSG_STARTSESSION", // 0x00D0
"MSG_QUERYENDSESSION", // 0x00D1
"MSG_ENDSESSION", // 0x00D2
"MSG_REINITSESSION", // 0x00D3
"", // 0x00D4
"", // 0x00D5
"", // 0x00D6
"", // 0x00D7
"", // 0x00D8
"", // 0x00D9
"", // 0x00DA
"", // 0x00D0
"MSG_DT_LBUTTONDOWN", // 0x00D1
"MSG_DT_LBUTTONUP", // 0x00D2
"MSG_DT_LBUTTONDBLCLK", // 0x00D3
"MSG_DT_MOUSEMOVE", // 0x00D4
"MSG_DT_RBUTTONDOWN", // 0x00D5
"MSG_DT_RBUTTONUP", // 0x00D6
"MSG_DT_RBUTTONDBLCLK", // 0x00D7
"MSG_DT_MBUTTONDOWN", // 0x00D8
"MSG_DT_MBUTTONUP", // 0x00D9
"MSG_DT_MBUTTONDBLCLK", // 0x00DA
"", // 0x00DB
"", // 0x00DC
"", // 0x00DD
"MSG_ERASEDESKTOP", // 0x00DE
"MSG_PAINTDESKTOP", // 0x00DF
"", // 0x00DE
"", // 0x00DF
"MSG_DT_LBUTTONDOWN", // 0x00E0
"MSG_DT_LBUTTONUP", // 0x00E1
"MSG_DT_LBUTTONDBLCLK", // 0x00E2
"MSG_DT_MOUSEMOVE", // 0x00E3
"MSG_DT_RBUTTONDOWN", // 0x00E4
"MSG_DT_RBUTTONUP", // 0x00E5
"MSG_DT_RBUTTONDBLCLK", // 0x00E6
"", // 0x00E7
"MSG_DT_KEYDOWN", // 0x00E8
"MSG_DT_CHAR", // 0x00E9
"MSG_DT_KEYUP", // 0x00EA
"MSG_DT_SYSKEYDOWN", // 0x00EB
"MSG_DT_SYSCHAR", // 0x00EC
"MSG_DT_SYSKEYUP", // 0x00ED
"MSG_DT_KEYLONGPRESS", // 0x00EE
"MSG_DT_KEYALWAYSPRESS", // 0x00EF
"MSG_DT_KEYDOWN", // 0x00E0
"MSG_DT_CHAR", // 0x00E1
"MSG_DT_KEYUP", // 0x00E2
"MSG_DT_SYSKEYDOWN", // 0x00E3
"MSG_DT_SYSCHAR", // 0x00E4
"MSG_DT_SYSKEYUP", // 0x00E5
"MSG_DT_KEYLONGPRESS", // 0x00E6
"MSG_DT_KEYALWAYSPRESS", // 0x00E7
"", // 0x00E8
"", // 0x00E9
"", // 0x00EA
"", // 0x00EB
"", // 0x00EC
"", // 0x00ED
"", // 0x00EE
"", // 0x00EF
"MSG_ADDNEWMAINWIN", // 0x00F0
"MSG_REMOVEMAINWIN", // 0x00F1

View File

@@ -104,8 +104,8 @@ void mg_TerminateDesktop (void)
DestroyFreeClipRectList (&sg_FreeInvRectList);
mg_TerminateSystemRes ();
//dongjunjie avoid double free
__mg_dsk_win = 0;
//dongjunjie avoid double free
__mg_dsk_win = 0;
}
static PMAINWIN dskGetActiveWindow (void)
@@ -532,7 +532,7 @@ static int dskScrollMainWindow (PMAINWIN pWin, PSCROLLWINDOWINFO pswi)
if (pWin->dwExStyle & WS_EX_TRANSPARENT) {
/* set invalidate rect. */
InvalidateRect ((HWND)pWin, &rcMove, TRUE);
InvalidateRect ((HWND)pWin, &rcMove, TRUE);
inved = TRUE;
}
else {
@@ -619,7 +619,7 @@ static int dskScrollMainWindow (PMAINWIN pWin, PSCROLLWINDOWINFO pswi)
*/
if(bNeedInvalidate)
{
InvalidateRect ((HWND)pWin, &rcInvalid, TRUE);
InvalidateRect ((HWND)pWin, &rcInvalid, TRUE);
rcInvalid = rcMove; //restore the invalidate area
bNeedInvalidate = FALSE; //resotre the inved value
inved = TRUE;
@@ -636,7 +636,7 @@ static int dskScrollMainWindow (PMAINWIN pWin, PSCROLLWINDOWINFO pswi)
if (bNeedInvalidate)
{
InvalidateRect ((HWND)pWin, &rcInvalid, TRUE);
InvalidateRect ((HWND)pWin, &rcInvalid, TRUE);
inved = TRUE;
}
@@ -1696,7 +1696,7 @@ static int dskDesktopCommand (HMENU hDesktopMenu, int id)
&& (pWin->pHosting == NULL)
#endif
)
PostMessage ((HWND)pWin, MSG_CLOSE, 0, 0);
PostMessage ((HWND)pWin, MSG_CLOSE, 0, 0);
}
slot = __mg_zorder_info->first_normal;
@@ -1978,7 +1978,7 @@ static int dskGetIMEStatus (int iIMEStatusCode)
void GUIAPI DesktopUpdateAllWindow(void)
{
SendMessage(HWND_DESKTOP, MSG_PAINT, 0, 0);
SendMessage(HWND_DESKTOP, MSG_PAINT, 0, 0);
}
#ifndef _MG_ENABLE_SCREENSAVER
@@ -2087,7 +2087,7 @@ LRESULT DesktopWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
if(dsk_ops->init)
dt_context = dsk_ops->init();
#ifdef _MGHAVE_MENU
sg_DesktopMenu = dskCreateDesktopMenu ();
sg_DesktopMenu = dskCreateDesktopMenu ();
#endif
break;
@@ -2097,12 +2097,12 @@ LRESULT DesktopWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
__mg_init_local_sys_text ();
#ifdef _MGHAVE_MENU
if (sg_DesktopMenu) {
DestroyMenu (sg_DesktopMenu);
sg_DesktopMenu = 0;
}
if (sg_DesktopMenu) {
DestroyMenu (sg_DesktopMenu);
sg_DesktopMenu = 0;
}
sg_DesktopMenu = dskCreateDesktopMenu ();
sg_DesktopMenu = dskCreateDesktopMenu ();
#endif
SendMessage (HWND_DESKTOP, MSG_ERASEDESKTOP, 0, 0);
@@ -2242,6 +2242,9 @@ LRESULT DesktopWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case MSG_DT_MOUSEMOVE:
case MSG_DT_RBUTTONDOWN:
case MSG_DT_RBUTTONDBLCLK:
case MSG_DT_MBUTTONDOWN:
case MSG_DT_MBUTTONDBLCLK:
case MSG_DT_MBUTTONUP:
if(dsk_ops->mouse_handler)
dsk_ops->mouse_handler(dt_context, message, wParam, lParam);
break;
@@ -2264,8 +2267,10 @@ LRESULT DesktopWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
uCounter += (__mg_timer_counter - blink_counter) * 10;
blink_counter = __mg_timer_counter;
#else
static DWORD blink_counter = 0;
static DWORD sg_old_counter = 0;
if (__mg_quiting_stage < 0) {
int slot;
PMSGQUEUE pMsgQueue;
@@ -2307,12 +2312,16 @@ LRESULT DesktopWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
}
mg_dispatch_timer_message (1);
if (MG_UNLIKELY(sg_old_counter == 0))
sg_old_counter = __mg_timer_counter;
mg_dispatch_timer_message (__mg_timer_counter - sg_old_counter);
sg_old_counter = __mg_timer_counter;
if (__mg_timer_counter % 10 != 0)
if (__mg_timer_counter < (blink_counter + 10))
break;
uCounter += 100;
uCounter += (__mg_timer_counter - blink_counter) * 10;
blink_counter = __mg_timer_counter;
#endif
if (sg_hCaretWnd != 0
&& gui_GetMainWindowPtrOfControl (sg_hCaretWnd) == dskGetActiveWindow()

View File

@@ -1,33 +1,33 @@
/*
* This file is part of MiniGUI, a mature cross-platform windowing
* This file is part of MiniGUI, a mature cross-platform windowing
* and Graphics User Interface (GUI) support system for embedded systems
* and smart IoT devices.
*
*
* Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
* Copyright (C) 1998~2002, WEI Yongming
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
* Or,
*
*
* As this program is a library, any link to this program must follow
* GNU General Public License version 3 (GPLv3). If you cannot accept
* GPLv3, you need to be licensed from FMSoft.
*
*
* If you have got a commercial license of this program, please use it
* under the terms and conditions of the commercial license.
*
*
* For more information about the commercial license, please refer to
* <http://www.minigui.com/en/about/licensing-policy/>.
*/
@@ -37,7 +37,7 @@
** Current maintainer: Wei Yongming.
**
** Create date: 1999/04/21
*/
*/
#include <stdio.h>
#include <stdlib.h>
@@ -78,40 +78,17 @@ static pthread_mutex_t timerLock;
#define TIMER_UNLOCK()
#endif
#if defined(__LINUX__) && defined(_MGRM_THREADS)
# define _MG_USE_BETTER_TIMER
#endif /* __LINUX__ */
#ifdef _MG_USE_BETTER_TIMER
#ifdef _MGRM_THREADS
#include <sys/times.h>
static clock_t g_timer_started;
#endif
static clock_t g_last_tick;
#endif
/* timer action for minigui timers */
static void __mg_timer_action (void *data)
{
#ifdef _MGRM_PROCESSES
SHAREDRES_TIMER_COUNTER += 1;
#else
#if defined(_MGRM_STANDALONE)
__mg_timer_counter += 10;
#else
# ifdef _MG_USE_BETTER_TIMER
__mg_timer_counter = times(NULL) - g_timer_started;
# else /* _MG_USE_BETTER_TIMER */
__mg_timer_counter ++;
# endif /* _MG_USE_BETTER_TIMER */
#endif
#endif
#ifdef _MGRM_THREADS
#if defined(_MGRM_PROCESSES)
SHAREDRES_TIMER_COUNTER = __mg_os_get_time_ms()/10;
#elif defined(_MGRM_THREADS)
__mg_timer_counter = __mg_os_get_time_ms()/10;
/* alert desktop */
AlertDesktopTimerEvent ();
#else /* _MGRM_STANDALONE */
// do nothing
#endif
}
@@ -129,11 +106,6 @@ static void* TimerEntry (void* data)
{
sem_post ((sem_t*)data);
#ifdef _MG_USE_BETTER_TIMER
g_timer_started = times(NULL);
g_last_tick = 0;
#endif /* _MG_USE_BETTER_TIMER */
while (__mg_quiting_stage > _MG_QUITING_STAGE_TIMER) {
__mg_os_time_delay (10);
__mg_timer_action (NULL);
@@ -152,8 +124,8 @@ int __mg_timer_init (void)
}
#ifdef __AOS__
__mg_os_timer = tp_os_timer_create ("mgtimer", __mg_timer_action,
NULL, AOS_TIMER_TICKT,
__mg_os_timer = tp_os_timer_create ("mgtimer", __mg_timer_action,
NULL, AOS_TIMER_TICKT,
OS_AUTO_ACTIVATE | OS_AUTO_LOAD);
#else /* NOT __AOS__ */
{
@@ -195,7 +167,7 @@ BOOL mg_InstallIntervalTimer (void)
{
struct itimerval timerv;
struct sigaction siga;
sigaction (SIGALRM, NULL, &old_alarm_handler);
siga = old_alarm_handler;
@@ -243,6 +215,8 @@ BOOL mg_UninstallIntervalTimer (void)
BOOL mg_InitTimer (void)
{
__mg_os_start_time_ms();
#ifdef _MGRM_THREADS
pthread_mutex_init (&timerLock, NULL);
__mg_timer_counter = 0;
@@ -287,12 +261,8 @@ void mg_dispatch_timer_message (DWORD inter)
{
int i;
#ifdef _MG_USE_BETTER_TIMER
clock_t now = __mg_timer_counter;
inter = now - g_last_tick;
g_last_tick = now;
#endif /* _MG_USE_BETTER_TIMER */
if (inter == 0)
return;
TIMER_LOCK ();
@@ -306,7 +276,7 @@ void mg_dispatch_timer_message (DWORD inter)
timerstr[i]->tick_count = __mg_timer_counter;
#endif
/* setting timer flag is simple, we do not need to lock msgq,
or else we may encounter dead lock here */
or else we may encounter dead lock here */
SetMsgQueueTimerFlag (timerstr[i]->msg_queue, i);
timerstr[i]->count -= timerstr[i]->speed;
}
@@ -377,7 +347,7 @@ void __mg_move_timer_last (TIMER* timer, int slot)
}
#endif
BOOL GUIAPI SetTimerEx (HWND hWnd, LINT id, DWORD speed,
BOOL GUIAPI SetTimerEx (HWND hWnd, LINT id, DWORD speed,
TIMERPROC timer_proc)
{
int i;
@@ -438,7 +408,7 @@ BOOL GUIAPI SetTimerEx (HWND hWnd, LINT id, DWORD speed,
TIMER_UNLOCK ();
return TRUE;
badret:
TIMER_UNLOCK ();
return FALSE;
@@ -519,7 +489,7 @@ int GUIAPI KillTimer (HWND hWnd, LINT id)
TIMER_LOCK ();
for (i = 0; i < DEF_NR_TIMERS; i++) {
if ((timerstr [i] && timerstr [i]->hWnd == hWnd) &&
if ((timerstr [i] && timerstr [i]->hWnd == hWnd) &&
(id == 0 || timerstr [i]->id == id)) {
RemoveMsgQueueTimerFlag (pMsgQueue, i);
free (timerstr[i]);
@@ -539,7 +509,7 @@ int GUIAPI KillTimer (HWND hWnd, LINT id)
return killed;
}
BOOL GUIAPI ResetTimerEx (HWND hWnd, LINT id, DWORD speed,
BOOL GUIAPI ResetTimerEx (HWND hWnd, LINT id, DWORD speed,
TIMERPROC timer_proc)
{
int i;
@@ -616,8 +586,7 @@ DWORD GUIAPI GetTickCount (void)
#ifdef _MGRM_PROCESSES
return SHAREDRES_TIMER_COUNTER;
#elif defined(_MGRM_STANDALONE)
extern DWORD __mg_os_get_time(void);
__mg_timer_counter = __mg_os_get_time() / 10;
__mg_timer_counter = __mg_os_get_time_ms()/10;
return __mg_timer_counter;
#else
return __mg_timer_counter;

View File

@@ -1,33 +1,33 @@
/*
* This file is part of MiniGUI, a mature cross-platform windowing
* This file is part of MiniGUI, a mature cross-platform windowing
* and Graphics User Interface (GUI) support system for embedded systems
* and smart IoT devices.
*
*
* Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
* Copyright (C) 1998~2002, WEI Yongming
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
* Or,
*
*
* As this program is a library, any link to this program must follow
* GNU General Public License version 3 (GPLv3). If you cannot accept
* GPLv3, you need to be licensed from FMSoft.
*
*
* If you have got a commercial license of this program, please use it
* under the terms and conditions of the commercial license.
*
*
* For more information about the commercial license, please refer to
* <http://www.minigui.com/en/about/licensing-policy/>.
*/
@@ -36,7 +36,7 @@
static timer_t mytimer;
static struct sigaction old_alarm_handler;
void timer_handler (int sig, siginfo_t *extra, void *cruft)
static void timer_handler (int sig, siginfo_t *extra, void *cruft)
{
int sem_value;
int noverflow;
@@ -82,24 +82,24 @@ BOOL mg_InitTimer (void)
/* create a timer based upon the CLOCK_REALTIME clock */
it.it_interval.tv_sec=0;
it.it_interval.tv_sec=0;
/* set resolution to one-tenth of the maximum allowed */
it.it_interval.tv_nsec=resolution.tv_nsec;
//it.it_interval.tv_nsec=10000000;
it.it_value=it.it_interval;
it.it_interval.tv_nsec=resolution.tv_nsec;
//it.it_interval.tv_nsec=10000000;
it.it_value=it.it_interval;
timer_event.sigev_notify=SIGEV_SIGNAL;
timer_event.sigev_signo= SIGRTMIN;
timer_event.sigev_value.sival_ptr = (void *)&mytimer;
timer_event.sigev_notify=SIGEV_SIGNAL;
timer_event.sigev_signo= SIGRTMIN;
timer_event.sigev_value.sival_ptr = (void *)&mytimer;
if (timer_create(CLOCK_REALTIME, &timer_event, &mytimer) < 0){
if (timer_create(CLOCK_REALTIME, &timer_event, &mytimer) < 0){
perror("timer create error");
return FALSE;
}
/* relative timer, go off at the end of the interval*/
}
/* relative timer, go off at the end of the interval*/
if (timer_settime(mytimer, 0 , &it, NULL) < 0){
perror("settimer");
return FALSE;
@@ -119,7 +119,7 @@ void mg_TerminateTimer (void)
if (sigaction (SIGRTMIN, &old_alarm_handler, NULL) == -1) {
fprintf (stderr, "KERNEL>Timer: sigaction call failed!\n");
perror ("sigaction");
return;
return;
}
for (i=0; i<MAX_TIMERS; i++) {

View File

@@ -1432,7 +1432,7 @@ char * strtrimall( char *src)
return src;
}
BOOL mg_is_abs_path(const char* path)
BOOL __mg_is_abs_path(const char* path)
{
if (NULL != path) {
#ifdef WIN32
@@ -1448,10 +1448,10 @@ BOOL mg_is_abs_path(const char* path)
return FALSE;
}
int mg_path_joint(char* dst, int dst_size, const char* abs_path, const char* sub_path)
int __mg_path_joint(char* dst, int dst_size, const char* abs_path, const char* sub_path)
{
if (NULL != dst && NULL != abs_path && NULL != sub_path) {
if (mg_is_abs_path(abs_path) && (!mg_is_abs_path(sub_path))) {
if (__mg_is_abs_path(abs_path) && (!__mg_is_abs_path(sub_path))) {
if (dst_size >= strlen(abs_path) + strlen(sub_path)
+ 2/* size of split '/' and terminator '\0' */) {
sprintf(dst, "%s/%s", abs_path, sub_path);

View File

@@ -1,39 +1,39 @@
/*
* This file is part of MiniGUI, a mature cross-platform windowing
* This file is part of MiniGUI, a mature cross-platform windowing
* and Graphics User Interface (GUI) support system for embedded systems
* and smart IoT devices.
*
*
* Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
* Copyright (C) 1998~2002, WEI Yongming
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
* Or,
*
*
* As this program is a library, any link to this program must follow
* GNU General Public License version 3 (GPLv3). If you cannot accept
* GPLv3, you need to be licensed from FMSoft.
*
*
* If you have got a commercial license of this program, please use it
* under the terms and conditions of the commercial license.
*
*
* For more information about the commercial license, please refer to
* <http://www.minigui.com/en/about/licensing-policy/>.
*/
/*
** nposix.c: This file include some miscelleous functions not
** provided by POSIX.
** nposix.c: This file includes some miscelleous functions should be
** implemented for different operating systems.
**
** Create date: 2003/11/22
**
@@ -104,7 +104,7 @@ int strncasecmp (const char *s1, const char *s2, unsigned int n)
#ifdef WIN32
int fread_long_win32(char* buff, size_t size, int count, FILE* fp)
{
char *tmp;
char *tmp;
size_t ret, rest = size * count;
int len;
@@ -116,7 +116,7 @@ int fread_long_win32(char* buff, size_t size, int count, FILE* fp)
tmp = buff;
ret = 0;
while(rest > 0)
{
{
if((len = fread(tmp, 1, 1024, fp)) != 1024)
{
ret += len;
@@ -140,7 +140,7 @@ double hypot(double x, double y)
#if defined (__VXWORKS__) ||defined(WIN32) || defined (__NUCLEUS_MNT__) || defined (_EM86_IAL) || defined (_EM85_IAL)
/*
/*
* Implementation of cbrt(x) for Win32 platform.
* cbrt(x): Return cube root of x
*/
@@ -218,7 +218,7 @@ do { \
} while (0)
static const Uint32
static const Uint32
B1 = 715094163, /* B1 = (682-0.03306235651)*2**20 */
B2 = 696219795; /* B2 = (664-0.03306235651)*2**20 */
@@ -229,7 +229,7 @@ E = 1.41428571428571436819e+00, /* 99/70 = 0x3FF6A0EA, 0x0EA0EA0F */
F = 1.60714285714285720630e+00, /* 45/28 = 0x3FF9B6DB, 0x6DB6DB6E */
G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */
double cbrt (double x)
double cbrt (double x)
{
Sint32 hx;
double r,s,t=0.0,w;
@@ -241,7 +241,7 @@ double cbrt (double x)
hx ^=sign;
if(hx>=0x7ff00000) return(x+x); /* cbrt(NaN,INF) is itself */
GET_LOW_WORD(low,x);
if((hx|low)==0)
if((hx|low)==0)
return(x); /* cbrt(0) is itself */
SET_HIGH_WORD(x,hx); /* x <- |x| */
@@ -257,9 +257,9 @@ double cbrt (double x)
/* new cbrt to 23 bits, may be implemented in single precision */
r=t*t/x;
s=C+r*t;
t*=G+F/(s+E+D/s);
t*=G+F/(s+E+D/s);
/* chopped to 20 bits and make it larger than cbrt(x) */
/* chopped to 20 bits and make it larger than cbrt(x) */
GET_HIGH_WORD(high,t);
INSERT_WORDS(t,high+0x00000001,0);
@@ -284,7 +284,7 @@ double cbrt (double x)
double x1, x2;
double x3;
if (x <= 1E-6)
if (x <= 1E-6)
return 0.0;
x2 = x;
@@ -292,7 +292,7 @@ double cbrt (double x)
x1 = x2;
x2 = (2.0 * x1 + x / (x1 *x1)) /3.0;
x3 = (x2 - x1) / x1;
if (x3 < 0.0)
if (x3 < 0.0)
x3 = -x3;
if (x3 < 1E-6) break;
}
@@ -354,9 +354,9 @@ int shmdt(const void *shmaddr)
}
*/
#endif
#endif /* __CYGWIN__ */
/* ------------------------------ time delay -------------------------------- */
/* ------------------------------ time and delay-------------------------------- */
#ifndef __NOUNIX__
#include <unistd.h>
@@ -411,7 +411,7 @@ void __mg_os_time_delay (int ms)
while (select (0, NULL, NULL, NULL, &timeout) < 0);
#elif defined (__UCOSII__)
OSTimeDly (OS_TICKS_PER_SEC * ms / 1000);
#elif defined (__VXWORKS__)
#elif defined (__VXWORKS__)
taskDelay (sysClkRateGet() * ms / 1000);
#elif defined (__PSOS__) || defined (__ECOS__)
struct timespec ts;
@@ -430,19 +430,65 @@ void __mg_os_time_delay (int ms)
#endif
}
#ifndef __NOUNIX__
#if defined (WIN32)
#include <windows.h>
#pragma comment(lib, "winmm.lib")
void __mg_os_start_time_ms(void)
{
// do nothing
}
DWORD __mg_os_get_time_ms(void) {
return timeGetTime();
}
#elif defined (HAVE_CLOCK_GETTIME)
static struct timespec timeval_startup;
void __mg_os_start_time_ms(void)
{
clock_gettime(CLOCK_MONOTONIC, &timeval_startup);
}
DWORD __mg_os_get_time_ms(void)
{
DWORD ds, dms;
struct timespec current;
clock_gettime(CLOCK_MONOTONIC, &current);
ds = (current.tv_sec - timeval_startup.tv_sec);
if (current.tv_sec == timeval_startup.tv_sec) {
dms = (current.tv_nsec - timeval_startup.tv_nsec) / 1000000L;
}
else if (current.tv_nsec >= timeval_startup.tv_nsec) {
dms = (current.tv_nsec - timeval_startup.tv_nsec) / 1000000L;
}
else {
assert(ds > 0);
ds--;
dms = 1000L - (timeval_startup.tv_nsec - current.tv_nsec) / 1000000L;
}
return ds * 1000 + dms;
}
#if 0
#include <unistd.h>
#include <poll.h>
#include <sys/time.h>
static struct timeval timeval_startup;
void __mg_os_start_time(void)
void __mg_os_start_time_ms(void)
{
gettimeofday(&timeval_startup, NULL);
}
DWORD __mg_os_get_time(void)
DWORD __mg_os_get_time_ms(void)
{
DWORD ds, dms;
struct timeval current;
@@ -465,28 +511,56 @@ DWORD __mg_os_get_time(void)
return ds * 1000 + dms;
}
#elif defined(WIN32)
#include <windows.h>
#pragma comment(lib, "winmm.lib")
void __mg_os_start_time(void)
{
// do nothing
}
DWORD __mg_os_get_time(void) {
return timeGetTime();
}
#endif
#else
#error "Please implement __mg_os_start_time and __mg_os_get_time for your OS"
#error "Please implement __mg_os_start_time_ms and __mg_os_get_time_ms for your OS"
#endif
time_t __mg_os_time (time_t * timer)
{
#if defined (HAVE_TIME)
return time (timer);
#else
#warn "Please implement __mg_os_time for your OS"
return 0;
#endif
}
time_t __mg_os_mktime (struct tm * timeptr)
{
#if defined (HAVE_MKTIME)
return mktime (timeptr);
#else
#warn "Please implement __mg_os_mktime for your OS"
return 0;
#endif
}
struct tm *__mg_os_localtime (const time_t * timer)
{
#if defined (HAVE_LOCALTIME)
return localtime (timer);
#else
#warn "Please implement __mg_os_localtime for your OS"
static struct tm _19800101_tm = {
0, /* tm_sec: seconds */
0, /* tm_min: minutes */
0, /* tm_hour: hours */
1, /* tm_mday: day of the month (1st) */
0, /* tm_mon: month (Jan) */
80, /* tm_year: year (1980) */
2, /* tm_wday: day of the week (1980/01/01 is Tuesday) */
0, /* tm_yday: day in the year */
0, /* tm_isdst daylight saving time */
};
return &_19800101_tm;
#endif
}
/* ------------------------------ I/O -------------------------------- */
void __mg_rewind (FILE *fp)
{
@@ -515,6 +589,7 @@ int __mg_close_tmpfile (FILE *tmp_fp)
return fclose (tmp_fp);
}
/* ------------------------------ Misc -------------------------------- */
#ifdef __TARGET_C33L05__
#undef HAVE_TIME
@@ -538,48 +613,9 @@ int snprintf( char *s, size_t size, const char *format, ... )
int __modsi3 (int numer, int denom)
{
int quot = numer / denom;
return numer - (quot * denom);
int quot = numer / denom;
return numer - (quot * denom);
}
#endif
time_t __mg_time (time_t * timer)
{
#if defined (HAVE_TIME)
return time (timer);
#else
return 0;
#endif
}
time_t __mg_mktime (struct tm * timeptr)
{
#if defined (HAVE_MKTIME)
return mktime (timeptr);
#else
return 0;
#endif
}
struct tm *__mg_localtime (const time_t * timer)
{
#if defined (HAVE_LOCALTIME)
return localtime (timer);
#else
static struct tm _19800101_tm = {
0, /* tm_sec: seconds */
0, /* tm_min: minutes */
0, /* tm_hour: hours */
1, /* tm_mday: day of the month (1st) */
0, /* tm_mon: month (Jan) */
80, /* tm_year: year (1980) */
2, /* tm_wday: day of the week (1980/01/01 is Tuesday) */
0, /* tm_yday: day in the year */
0, /* tm_isdst daylight saving time */
};
return &_19800101_tm;
#endif
}
#endif /* __TARGET_C33L05__ */

View File

@@ -159,8 +159,8 @@ static void ParseEvent (PMSGQUEUE msg_que, int event)
}
}
extern void __mg_os_start_time(void);
extern DWORD __mg_os_get_time(void);
extern void __mg_os_start_time_ms(void);
extern DWORD __mg_os_get_time_ms(void);
BOOL GUIAPI salone_StandAloneStartup (void)
{
@@ -171,7 +171,7 @@ BOOL GUIAPI salone_StandAloneStartup (void)
mg_InstallIntervalTimer ();
#endif
__mg_os_start_time();
__mg_os_start_time_ms();
return TRUE;
}
@@ -244,7 +244,7 @@ BOOL salone_IdleHandler4StandAlone (PMSGQUEUE msg_queue)
n = IAL_WaitEvent (mg_maxfd, &rset, wsetptr, esetptr,
msg_queue?&sel_timeout:&sel_timeout_nd, &extra);
/* update __mg_timer_counter */
__mg_timer_counter = __mg_os_get_time()/10;
__mg_timer_counter = __mg_os_get_time_ms()/10;
#endif
if (msg_queue == NULL)