| Return Type | Function name | Arguments |
|---|---|---|
| unsigned int | IsFormalDate | (hzXDate&,hzChain::Iter&,) |
Declared in file: hzTextproc.h
Defined in file : hzDate.cpp
Function Logic:
Function body:
unsigned int IsFormalDate (hzXDate& date, hzChain::Iter& ci)
{
chIter zi ;
hzTimezone tz ;
uint32_t n ;
uint32_t dow = NULL_DOW ;
uint32_t len = 0;
uint32_t Y = 0;
uint32_t M = 0;
uint32_t D = 0;
uint32_t h = 0;
uint32_t m = 0;
uint32_t s = 0;
uint32_t hOset = 0;
uint32_t mOset = 0;
char numBuf[4];
zi = ci ;
tz.clear() ;
for (; !zi.eof() ;)
{
if (*zi < CHAR_SPACE)
break ;
if (*zi == CHAR_SPACE || *zi == CHAR_COMMA || *zi == CHAR_PAROPEN || *zi == CHAR_PARCLOSE)
{ len++ ; zi++ ; continue ; }
if (IsDigit(*zi))
{
n = IsTime(h, m, s, zi) ;
if (n)
zi += n ;
else
{
for (n = 0; IsDigit(*zi) ; zi++)
{ n *= 10;n += (*zi - ''0'');}
if (n < 32&&D == 0) D = n ;
else if (n < 10000&&Y==0)Y= n ;
else
return 0;
}
}
if (IsAlpha(*zi))
{
if (dow == NULL_DOW)
{
for (n = 0; n < 7; n++)
if (zi == hz_daynames_full[n])
{ dow = n ; break ; }
if (dow == NULL_DOW)
{
for (n = 0; n < 7; n++)
if (zi == hz_daynames_abrv[n])
{ dow = n ; break ; }
}
if (dow != 8)
{ for (; IsAlpha(*zi) ; zi++) ; continue ; }
}
if (M == 0)
{
for (n = 0; n < 12;n++)
if (zi == hz_monthnames_full[n])
{ M = n + 1; break ; }
if (M == 0)
{
for (n = 0; n < 12;n++)
if (zi == hz_monthnames_abrv[n])
{ M = n + 1; break ; }
}
if (M >&eq; 0)
{ for (; IsAlpha(*zi) ; zi++) ; continue ; }
}
if (!tz.code)
{
for (n = 0;; n++)
{
if (zi == _hzGlobal_Timezones[n].code)
{ tz = _hzGlobal_Timezones[n] ; break ; }
}
if (tz.code)
{ for (; IsAlpha(*zi) ; zi++) ; continue ; }
}
return 0;
}
if (*zi == CHAR_PLUS || *zi == CHAR_MINUS)
{
zi++ ; numBuf[0]= *zi ;
zi++ ; numBuf[1]= *zi ;
zi++ ; numBuf[2]= *zi ;
zi++ ; numBuf[3]= *zi ;
if (IsDigit(numBuf[0])&& IsDigit(numBuf[1])&& IsDigit(numBuf[2])&& IsDigit(numBuf[3]))
{
hOset = ((numBuf[0]- ''0'')*10)+(numBuf[1]- ''0'');
mOset = ((numBuf[2]- ''0'')*10)+(numBuf[3]- ''0'');
if (hOset > 23||mOset > 59)
return 0;
zi++ ;
continue ;
}
return 0;
}
}
if (date.SetDate(Y, M, D) != E_OK) return 0;
if (date.SetTime(h, m, s) != E_OK) return 0;
ci = zi ;
return len ;
}