/* Fri Jul 23 14:05:14 EDT 1999 */ ulong parsedatev(char **a) { char *p; Tm tm; memset(&tm, 0, sizeof tm); if((tm.mon=getmon(a[1])) == -1) goto Err; tm.mday = strtol(a[2], &p, 10); if(*p != '\0') goto Err; tm.hour = strtol(a[3], &p, 10); if(*p != ':') goto Err; tm.min = strtol(p+1, &p, 10); if(*p != ':') goto Err; tm.sec = strtol(p+1, &p, 10); if(*p != '\0') goto Err; if(strlen(a[4]) != 3) goto Err; strcpy(tm.zone, a[4]); if(strlen(a[5]) != 4) goto Err; tm.year = strtol(a[5], &p, 10); if(*p != '\0') goto Err; tm.year -= 1900; return tm2sec(&tm); Err: return time(0); }
static void value2time(CONFIG_RTC _PTR_ para, uint_32 value) { uint_32 sec, min, hour; uint_32 tmpdate; uint_32 date, mon, year; uint_32 day; int flag = -1; uint_32 i, count; sec = value%60; value = value/60; min = value%60; value = value/60; hour = value%24; value = value/24; tmpdate = value%365; year = value/365; value = tmpdate; for(i=0, count=0; i<=year; ){ if(((baseyear+i)%400 == 0) || (((baseyear+i)%4 == 0)&&((baseyear+i)%100 != 0))) count++; i++; } flag = (((baseyear+year)%400 == 0) || (((baseyear+year)%4 == 0)&&((baseyear+year)%100 != 0)))?1:0; if(value > count){ tmpdate = (value-count)%365; if(flag == 1) tmpdate += 1; }else if(value == count){ if(year > 0){ if(flag == 1) count -= 1; year = year -1; flag = (((baseyear+year)%400 == 0) || (((baseyear+year)%4 == 0)&&((baseyear+year)%100 != 0)))?1:0; if(flag == 1) tmpdate += 366; else tmpdate += 365; tmpdate = (tmpdate-count); if(flag == 1 && tmpdate > 366){ tmpdate -= 366; year += 1; flag = 0; }else if(flag != 1 && tmpdate > 365){ tmpdate -= 365; year += 1; flag = (((baseyear+year)%400 == 0) || (((baseyear+year)%4 == 0)&&((baseyear+year)%100 != 0)))?1:0; } }else{ if(flag == 1) tmpdate = 1; else tmpdate = 0; } }else{ if(year > 0){ if(flag == 1) count -= 1; year = year -1; flag = (((baseyear+year)%400 == 0) || (((baseyear+year)%4 == 0)&&((baseyear+year)%100 != 0)))?1:0; if(flag == 1) tmpdate += 366; else tmpdate += 365; tmpdate = (tmpdate-count); }else tmpdate = 0; } mon = getmon(tmpdate, flag, &date); para->DATE = basedate+mon*100+date; para->YEAR = baseyear+year; para->TIME = (hour*100+min)*100+sec; }