time ReadEventA(void) { time ti; ti.bSecond = FromBCD( PopChar() ); ti.bMinute = FromBCD( PopChar() ); ti.bHour = FromBCD( PopChar() ); PopChar(); ti.bDay = FromBCD( PopChar() ); ti.bMonth = FromBCD( PopChar() ); ti.bYear = FromBCD( PopChar() ); return ti; }
time ReadTimeS(void) { InitPop(9); time ti; ti.bSecond = FromBCD(PopChar()); ti.bMinute = FromBCD(PopChar()); ti.bHour = FromBCD(PopChar()); PopChar(); ti.bDay = FromBCD(PopChar()); ti.bMonth = FromBCD(PopChar()); ti.bYear = FromBCD(PopChar()); return ti; }
bool ReadHeaderBNew(uchar ibBlock, bool fDelay) { HideCurrTime(1); InitPop((uint)(1+(16-ibBlock)*15)); PopChar(); tiDig.bHour = FromBCD(PopChar()); // врем¤/дата часового блока tiDig.bMinute = FromBCD(PopChar()); tiDig.bDay = FromBCD(PopChar()); tiDig.bMonth = FromBCD(PopChar()); tiDig.bYear = FromBCD(PopChar()); if ((tiDig.bHour == 0) && // обрабатываем пустой блок (tiDig.bMinute == 0) && (tiDig.bDay == 0) && (tiDig.bMonth == 0) && (tiDig.bYear == 0)) { if (++iwMajor > GetMaxShutdown()) return(0); sprintf(szLo," выключено: %-4u ",iwMajor); if (fDelay == 1) DelayOff(); if (iwDigHou != 0) { iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; ShowProgressDigHou(); return(MakeStopHou(0)); } else return(1); } if ((tiDig.bDay == tiSummer.bDay) && (tiDig.bMonth == tiSummer.bMonth)) { if ((tiDig.bHour == 3) && (tiDig.bMinute == 0)) { tiDig.bHour = 2; tiDig.bMinute = 0; } } sprintf(szLo," %02u %02u.%02u.%02u", tiDig.bHour, tiDig.bDay,tiDig.bMonth,tiDig.bYear); if ((tiDig.bMinute % 30) != 0) // обрабатываем неполный получасовой блок { tiDig.bMinute = (tiDig.bMinute / 30)*30; if (SearchDefHouIndex(tiDig) == 0) { szLo[4] = '?'; if (fDelay == 1) DelayOff(); return(1); } iwDigHou = (wHOURS+iwDigHou+1)%wHOURS; } else if (SearchDefHouIndex(tiDig) == 0) { szLo[4] = '?'; if (fDelay == 1) DelayOff(); return(1); } iwMajor = 0; // обнул¤ем счЄтчик после получени¤ правильных данных iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; // врем¤ записи должно соответсвовать началу получасового блока ulong dw = DateToHouIndex(tiCurr); dw -= (wHOURS + iwHardHou - iwDigHou) % wHOURS; time ti = HouIndexToDate(dw); ShowProgressDigHou(); if (fDelay == 1) DelayOff(); PopChar(); uchar i; for (i=0; i<4; i++) { uint w = PopChar(); w += PopChar()*0x100; if (w == 0xFFFF) w = 0; mpwChannels[i] = w; } MakeSpecial(ti); return(MakeStopHou(0)); }