BEEP();
}
/**
*.Name timer
*.Title Ðàáîòà ñ ÷àñàìè ðåàëüíîãî âðåìåíè
*
*.Descr Ýòà ôóíêöèÿ ïðåäíàçíà÷åíà äëÿ îáñëóæèâàíèÿ
* ñèñòåìíûõ ÷àñîâ ðåàëüíîãî âðåìåíè ÷åðåç
* ïðåðûâàíèå INT 1Ah
*
*.Proto int timer(char fn, SYSTIMER *tm)
*
*.Params char fn - âûïîëíÿåìàÿ ôóíêöèÿ:
*
* RTC_GET_TIME - ïðî÷èòàòü ïîêàçàíèÿ ÷àñîâ;
* RTC_SET_TIME - óñòàíîâèòü ÷àñû;
* RTC_GET_DATE - ïðî÷èòàòü äàòó;
* RTC_SET_DATE - óñòàíîâèòü äàòó;
* RTC_SET_ALARM - óñòàíîâèòü áóäèëüíèê;
* RTC_CLEAR_ALARM - ñáðîñèòü áóäèëüíèê.
*
* SYSTIMER tm - ñòðóêòóðà, ñîäåðæàùàÿ äàííûå
* äëÿ óñòàíîâêè ÷àñîâ èëè
* ïîêàçàíèÿ ÷àñîâ:
*
*.Return 0 - óñïåøíîå âûïîëíåíèå ôóíêöèè;
* -1 - ÷àñû ðåàëüíîãî âðåìåíè îòñóòñòâóþò
* â êîìïüþòåðå;
**/
int timer(char fn, SYSTIMER *tm)
{
reg.h.ah = fn;
switch (fn)
{
case RTC_SET_TIME:
{
reg.h.ch = tm->hour;
reg.h.cl = tm->min;
reg.h.dh = tm->sec;
reg.h.dl = tm->daylight_savings;
break;
}
case RTC_SET_DATE:
{
reg.x.cx = tm->year;
reg.h.dh = tm->month;
reg.h.dl = tm->day;
break;
}
case RTC_SET_ALARM:
{
reg.h.ch = tm->hour;
reg.h.cl = tm->min;
reg.h.dh = tm->sec;
break;
}
}
int86(0x1a,®,®);
if(reg.x.cflag == 1)
return(-1);
switch (fn)
{
case RTC_GET_TIME:
{
tm->hour = reg.h.ch;
tm->min = reg.h.cl;
tm->sec = reg.h.dh;
break;
}
case RTC_GET_DATE:
{
tm->year = reg.x.cx;
tm->month = reg.h.dh;
tm->day = reg.h.dl;
break;
}
}
return 0;
}