timemng.c
来自「好记星的控件,包括button,list,对文件操作」· C语言 代码 · 共 757 行 · 第 1/2 页
C
757 行
NU_Request_Driver(pDtTmDriver, &ndrTemp);
if(ndrTemp.nu_status != NU_SUCCESS)
{
bRet = FALSE;
}
}
return bRet;
}
/****************************************************************************/
/* FUNCTION: TimGetAlarmTime */
/* DESCRIPTION:获取Alarm时间 */
/* INPUTS: */
/* OUTPUTS: pTime - 时间 */
/* pDate - 日期 */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 张发顺 2002-09-26 创建 */
/****************************************************************************/
VOID TimGetAlarmTime(TimeType *pTime)
{
pTime->byHour = g_byAlarmHour;
pTime->byMinute = g_byAlarmMinute;
pTime->bySecond = 0;
}
/****************************************************************************/
/* FUNCTION: TimGetAlarmDate */
/* DESCRIPTION:获取Alarm日期 */
/* INPUTS: */
/* OUTPUTS: pTime - 时间 */
/* pDate - 日期 */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 张发顺 2002-09-26 创建 */
/****************************************************************************/
VOID TimGetAlarmDate(DateType *pDate)
{
pDate->wYear = g_wAlarmYear;
pDate->byMonth = g_byAlarmMonth;
pDate->byDay = g_byAlarmDay;
}
/****************************************************************************/
/* FUNCTION: TimDisableAlarm */
/* DESCRIPTION:设置Alarm无效 */
/* INPUTS: */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* GAOLINHUI 2006-5-22 */
/****************************************************************************/
VOID TimDisableAlarm(VOID)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_ALARM)) != NULL)
{
ndrTemp.nu_function = NU_STATUS;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_supplemental = ALARM_IOCTL_DISABLE;
NU_Request_Driver(pDtTmDriver, &ndrTemp);
}
return;
}
/****************************************************************************/
/* FUNCTION: TimEnableAlarm */
/* DESCRIPTION:设置Alarm无效 */
/* INPUTS: */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* GAOLINHUI 2006-5-22 */
/****************************************************************************/
VOID TimEnableAlarm(VOID)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_ALARM)) != NULL)
{
ndrTemp.nu_function = NU_STATUS;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_supplemental = ALARM_IOCTL_ENABLE;
NU_Request_Driver(pDtTmDriver, &ndrTemp);
}
return;
}
/****************************************************************************/
/* FUNCTION: TimSearchAlarm */
/* DESCRIPTION:搜索最接近当前时间的闹铃 */
/* INPUTS: */
/* OUTPUTS: pTime - 时间 */
/* pDate - 日期 */
/* pMsgBuf- 闹铃提示信息返回地址 */
/* RETURN: 相同时间闹铃的个数,如返回0,表示没有合适的闹铃或者文件错误 */
/* Note: 搜索闹钟文件AlarmSys.ini */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* gaolinhui 2006-02-6 创建 */
/****************************************************************************/
UINT TimSearchAlarm(DateType* pDate,TimeType* pTime, UINT8* pMsgBuf)
{
INT fp;
UINT uAlarms = 0;
AlarmItem mItem;
TimeType tmptime;
DateType tmpdate;
UINT8 attrTemp;
BOOL bFlag = FALSE;
// 检查文件属性,设置正常属性
if(FileGetAttributes(&attrTemp, ALARM_SYS_FILE) == NU_SUCCESS)
{
if(!(attrTemp&ADIRENT))
bFlag = TRUE;
}
if(!bFlag)
{
return uAlarms;
}
FileSetAttributes(ALARM_SYS_FILE, ANORMAL);
fp = FileOpen(ALARM_SYS_FILE,FILEMODE_READONLY);
if(fp < 0 )
{ //打开闹铃文件失败,返回
FileSetAttributes(ALARM_SYS_FILE, attrTemp);
return uAlarms;
}
else
{
//验证文件的合法性
FileRead(fp,(CHAR*)&mItem,11);
if( memcmp(&mItem,(const void*)ALARM_FILE_TAG,11) != 0 )
{
FileClose(fp);
FileSetAttributes(ALARM_SYS_FILE, attrTemp);
return uAlarms;
}
else
{
INT i,total;
INT8 byRet;
TimeType systime,almtime;
DateType sysdate,almdate;
//首先将tmpdate赋值为最大时间日期
tmpdate.wYear = TIM_YEARMAX;
tmpdate.byMonth = 12;
tmpdate.byDay = 31;
tmptime.byHour = 23;
tmptime.byMinute = 59;
tmptime.bySecond = 0;
//取得系统日期时间信息
TimGetTime(&systime);
TimGetDate(&sysdate);
//闹铃文件中总的闹铃信息单元个数
total = (FileLength(fp) - 11)/sizeof(AlarmItem);
if(total>0)
{
FileSeek(fp,11,FILESEEK_BEGIN);
//遍历文件,找到最接近当前系统时间的闹铃
for(i = 0; (i<total)&&(uAlarms<ALARM_SAMENUMBER); i++)
{
FileRead(fp,(CHAR*)&mItem,sizeof(AlarmItem));
if(!mItem.bActiveFlag) //跳过未激活的闹铃
{
continue;
}
almdate.wYear = mItem.wYear;
almdate.byMonth = mItem.byMonth;
almdate.byDay = mItem.byDay;
almtime.byHour = mItem.byHour;
almtime.byMinute = mItem.byMinute;
almtime.bySecond = 0;
if(mItem.byAlarmType == ALARM_TYPE_ONCE) //如果是单次闹钟
{
//如果该闹铃日期已过期则继续搜索下一个
if(TimDateTimeCompare(&almdate,&almtime,&sysdate,&systime) <= 0 )
{
continue;
}
byRet = TimDateTimeCompare(&almdate,&almtime,&tmpdate,&tmptime);
if(byRet > 0)
{
continue;
}
else
{
if(byRet < 0 )
{
//如果是有更接近的闹铃,清除闹铃消息buffer
if(pMsgBuf)
{
*pMsgBuf = 0;
}
uAlarms = 0;
}
//加上闹铃提示信息
if(pMsgBuf)
{
strncat(pMsgBuf,mItem.aMsg,ALARM_MSGLEN);
}
tmpdate = almdate;
tmptime = almtime;
uAlarms++;
}
}
else if(mItem.byAlarmType == ALARM_TYPE_DAY) //如果是每日闹钟
{
//将系统日期给闹铃日期
almdate = sysdate;
if(TimTimeCompare(&almtime,&systime) <= 0)
{
//如果闹铃时间小于当前系统时间,将闹铃时间改为后一天
TimDateAdjust(&almdate,1);
}
byRet = TimDateTimeCompare(&almdate,&almtime,&tmpdate,&tmptime);
if(byRet > 0)
{
continue;
}
else
{
if(byRet < 0 )
{
//如果是有更接近的闹铃,清除闹铃消息buffer
if(pMsgBuf)
{
*pMsgBuf = 0;
}
uAlarms = 0;
}
//加上闹铃提示信息
if(pMsgBuf)
{
strncat(pMsgBuf,mItem.aMsg,ALARM_MSGLEN);
}
tmpdate = almdate;
tmptime = almtime;
uAlarms++;
}
}
}
}
}
}
//关闭文件
FileClose(fp);
FileSetAttributes(ALARM_SYS_FILE, attrTemp);
//返回信息
if(pDate)
{
*pDate = tmpdate;
}
if(pTime)
{
*pTime = tmptime;
}
return uAlarms;
}
/****************************************************************************/
/* FUNCTION: TimUpdateAlarm */
/* DESCRIPTION:更新设置系统闹铃 */
/* INPUTS: */
/* OUTPUTS: 无 */
/* RETURN: 无 */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* gaolinhui 2006-02-7 创建 */
/****************************************************************************/
VOID TimUpdateAlarm(VOID)
{
UINT8* pBuf;
UINT uAlarmNum;
BOOL bSuccess = FALSE;
DateType date;
TimeType time;
pBuf = MemAlloc(ALARM_SAMENUMBER*ALARM_MSGLEN);
if(pBuf)
{
//搜索新闹铃
uAlarmNum = TimSearchAlarm(&date,&time,pBuf);
//如果有找到合适的闹铃,设置新闹铃
if( uAlarmNum>0 )
{
//打开闹铃
TimEnableAlarm();
//设置闹铃
if(TimSetAlarm(&date,&time))
{
g_wAlarmYear = date.wYear;
g_byAlarmMonth = date.byMonth;
g_byAlarmDay = date.byDay;
g_byAlarmHour = time.byHour;
g_byAlarmMinute = time.byMinute;
g_byAlarmNumber = uAlarmNum;
strcpy(g_aAlarmBuffer,pBuf);
bSuccess = TRUE;
}
}
//没有闹铃或者设置闹铃不成功,禁止闹铃
if(!bSuccess)
{
TimDisableAlarm();
}
//释放内存
MemFree(pBuf);
pBuf = NULL;
}
}
/****************************************************************************/
/* FUNCTION: TimResetAlarmNumber */
/* DESCRIPTION:将闹钟数量清 0 */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* */
/****************************************************************************/
VOID TimResetAlarmNumber(void)
{
g_byAlarmNumber = 0;
memset(g_aAlarmBuffer, 0, sizeof(g_aAlarmBuffer));
}
/****************************************************************************/
/* FUNCTION: TimGetAlarmNumber */
/* DESCRIPTION:返回当前相同时间响闹的闹铃数 */
/* INPUTS: */
/* OUTPUTS: 无 */
/* RETURN: 无 */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* gaolinhui 2006-02-7 创建 */
/****************************************************************************/
UINT8 TimGetAlarmNumber(void)
{
return g_byAlarmNumber;
}
/****************************************************************************/
/* FUNCTION: GetAlarmMsgBuffer */
/* DESCRIPTION:返回闹铃的提示信息buffer */
/* INPUTS: */
/* OUTPUTS: 闹铃的提示信息buffer */
/* RETURN: 无 */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* gaolinhui 2006-02-7 创建 */
/****************************************************************************/
UINT8* GetAlarmMsgBuffer(VOID)
{
return (UINT8*)g_aAlarmBuffer;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?