void datetime(char *buffer, time_s time){ int days = day(time); int years = year(days); int leap = isLeapYear(years); int dayofyear = dayOfyear(days,years); int months = month(dayofyear,leap); int dayofmonth = dayOfmonth(dayofyear,months,leap); int dayofweek = dayOfweek(2000+years,months,dayofmonth); time_s dayseconds = time%86400; *buffer = daysoftheweek[dayofweek][0]; buffer++; *buffer = daysoftheweek[dayofweek][1]; buffer++; *buffer = daysoftheweek[dayofweek][2]; buffer++; *buffer = ' '; buffer++; *buffer = '2'; buffer++; *buffer = '0'; buffer++; *buffer = tostring[years][0]; buffer++; *buffer = tostring[years][1]; buffer++; *buffer = '/'; buffer++; *buffer = tostring[months][0]; buffer++; *buffer = tostring[months][1]; buffer++; *buffer = '/'; buffer++; *buffer = tostring[dayofmonth][0]; buffer++; *buffer = tostring[dayofmonth][1]; buffer++; *buffer = ' '; buffer++; int hours = dayseconds/3600; *buffer = tostring[hours][0]; buffer++; *buffer = tostring[hours][1]; buffer++; *buffer = ':'; buffer++; int minutes = (dayseconds%3600)/60; *buffer = tostring[minutes][0]; buffer++; *buffer = tostring[minutes][1]; buffer++; *buffer = ':'; buffer++; int secs = dayseconds%60; *buffer = tostring[secs][0]; buffer++; *buffer = tostring[secs][1]; buffer++; *buffer ='\0'; }
BOOL EditClockDate( uint16_t yx, uClock * pClock ) { CHAR sbuffer[20]; struct tm t_tm; uint16_t year; uint8_t month; uint8_t day_m; uint8_t option = 1u; uint16_t gray = Configure.DisplayGray; BOOL graychanged = FALSE; _localtime_r( pClock, &t_tm ); year = t_tm.tm_year + 1900; month = t_tm.tm_mon + 1; day_m = t_tm.tm_mday; for(;;) { sprintf( sbuffer, "%04u-%02u-%02u", year, month, day_m ); Lputs( yx, sbuffer ); switch( option ) { case 1: LcmMask( yx , 4 ); break; // year case 2: LcmMask( yx+5, 2 ); break; // month case 3: LcmMask( yx+8, 2 ); break; // day_m default: break; } switch( getKey() ) { case K_INC: switch( option ) { case 1: if ( ++year > 2099u ) { year = 2000u; } break; case 2: if ( ++month > 12u ) { month = 1u; } break; case 3: if ( ++day_m > dayOfmonth( year, month )) { day_m = 1u; } break; default: break; } break; case K_DEC: switch( option ) { case 1: if ( --year < 2000u ) { year = 2099u; } break; case 2: if ( --month < 1u ) { month = 12u; } break; case 3: if ( --day_m < 1u ) { day_m = dayOfmonth( year, month ); } break; default: break; } break; case K_RIGHT: if ( ++option > 3u ) { option = 1u; } break; case K_LEFT: if ( --option < 1u ) { option = 3u; } break; case K_OK: t_tm.tm_year = year - 1900; t_tm.tm_mon = month - 1; t_tm.tm_mday = day_m; * pClock = mktime( &t_tm ); return TRUE; case K_ESC: return FALSE; case K_OK_RIGHT: if ( gray < ( 2000u - 50u )) { gray += 100u; } graychanged = true; break; case K_OK_LEFT: if ( gray > ( 200 + 20u )) { gray -= 20u; } graychanged = true; break; default: break; } if( graychanged == true ) { DisplaySetGrayVolt( gray * 0.01f ); Configure.DisplayGray = gray; ConfigureSave(); graychanged = FALSE; } } }