Return TypeFunction nameArguments
unsigned intIsFormalDate(hzXDate&,hzChain::Iter&,)

Declared in file: hzTextproc.h
Defined in file : hzDate.cpp

Function Logic:

0:START 1:zi hzTimezone::clear 2:!zi.eof(); 3:*zi<(char)32 4:*zi==(char)32||*zi==(char)44||*zi==(char)40||*zi==(char)41 5:items items 6:IsDigit(*zi) 7:IsTime n 8:n 9:zi 10:IsDigit(*zi); 11:n n 12:n<32&&D==0 13:D 14:n<10000&&Y==0 15:Y 16:Return 0 17:IsAlpha(*zi) 18:dow==NULL_DOW 19:n<7; 20:zi==hz_daynames_full[n] 21:dow 22:dow==NULL_DOW 23:n<7; 24:zi==hz_daynames_abrv[n] 25:dow 26:dow!=8 27:IsAlpha(*zi); 28:M==0 29:n<12; 30:zi==hz_monthnames_full[n] 31:M 32:M==0 33:n<12; 34:zi==hz_monthnames_abrv[n] 35:M 36:M>=0 37:IsAlpha(*zi); 38:!tz.code 39:; 40:zi==_hzGlobal_Timezones[n].code 41:tz 42:tz.code 43:IsAlpha(*zi); 44:Return 0 45:*zi==(char)43||*zi==(char)45 46:items numBuf items numBuf items numBuf items numBuf 47:IsDigit(numBuf[0])&&IsDigit(numBuf[1])&&IsDigit(numBuf[2])&&IsDigit(numBuf[3]) 48:hOset mOset 49:hOset>23||mOset>59 50:Return 0 51:items 52:Return 0 53:date.SetDate(Y,M,D)!=E_OK 54:Return 0 55:date.SetTime(h,m,s)!=E_OK 56:Return 0 57:ci 58:Return len

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 ;
}