XttTCurve::XttTCurve( void *parent_ctx, const char *name, pwr_tAttrRef *xn_arefv, int xn_color_theme, int *sts) : xnav(parent_ctx), gcd(0), curve(0), rows(0), vsize(0), timerid(0), close_cb(0), help_cb(0), get_select_cb(0), first_scan(1), time_low_old(0), time_high_old(0), color_theme(xn_color_theme) { pwr_tTime from, to; memset( &tc, 0, sizeof(tc)); if ( xn_arefv == 0 || xn_arefv[0].Objid.vid == 0) { aref_cnt = 0; gcd = new GeCurveData( curve_eDataType_DsTrend); *sts = 1; return; } // Count number of curves for ( aref_cnt = 0; xn_arefv[aref_cnt].Objid.vid != 0; aref_cnt++) ; if ( aref_cnt > XTT_TCURVE_MAX) aref_cnt = XTT_TCURVE_MAX; memcpy( arefv, xn_arefv, aref_cnt * sizeof(arefv[0])); time_Period( time_ePeriod_OneMinute, &from, &to, 0, 0); if ( aref_cnt == 1) { get_data( sts, from, to); if ( EVEN(*sts)) return; } else { get_multidata( sts, from, to); if ( EVEN(*sts)) return; } cdh_StrncpyCutOff( title, name, sizeof(title), 1); }
void time_PreviousPeriod( time_ePeriod period, pwr_tTime *prev_from, pwr_tTime *prev_to, pwr_tTime *from, pwr_tTime *to) { switch ( period) { case time_ePeriod_OneSecond: case time_ePeriod_LastSecond: *to = *from = *prev_from; from->tv_sec -= 1; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = 1; } break; case time_ePeriod_10Seconds: case time_ePeriod_Last10Seconds: *to = *from = *prev_from; from->tv_sec -= 10; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = 10; } break; case time_ePeriod_OneMinute: case time_ePeriod_LastMinute: *to = *from = *prev_from; from->tv_sec -= 60; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = 60; } break; case time_ePeriod_10Minutes: case time_ePeriod_Last10Minutes: *to = *from = *prev_from; from->tv_sec -= 600; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = 600; } break; case time_ePeriod_OneHour: case time_ePeriod_LastHour: *to = *from = *prev_from; from->tv_sec -= 3600; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = 3660; } break; case time_ePeriod_OneDay: case time_ePeriod_Today: case time_ePeriod_Yesterday: *to = *from = *prev_from; from->tv_sec -= ONEDAY; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = ONEDAY; } break; case time_ePeriod_OneWeek: case time_ePeriod_ThisWeek: case time_ePeriod_LastWeek: *to = *from = *prev_from; from->tv_sec -= ONEDAY * 7; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = ONEDAY * 7; } break; case time_ePeriod_OneMonth: case time_ePeriod_ThisMonth: case time_ePeriod_LastMonth: time_PeriodMonth( prev_from, from, to, 1); from->tv_sec += prev_from->tv_sec - to->tv_sec; from->tv_nsec = prev_from->tv_nsec; *to = *prev_from; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = ONEDAY * 30; } break; case time_ePeriod_OneYear: case time_ePeriod_ThisYear: time_PeriodYear( prev_from, from, to, 1); from->tv_sec += prev_from->tv_sec - to->tv_sec; from->tv_nsec = prev_from->tv_nsec; *to = *prev_from; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = ONEDAY * 365; } break; case time_ePeriod_AllTime: time_Period( period, from, to, 0, 1); break; case time_ePeriod_UserDefined: // Same lenth of intervall as before *to = *from = *prev_from; from->tv_sec -= prev_to->tv_sec - prev_from->tv_sec; if ( from->tv_sec < 0) { from->tv_sec = 0; to->tv_sec = prev_to->tv_sec - prev_from->tv_sec; } break; default: ; } }
void time_NextPeriod( time_ePeriod period, pwr_tTime *prev_from, pwr_tTime *prev_to, pwr_tTime *from, pwr_tTime *to) { int sts; pwr_tTime current; sts = time_GetTime( ¤t); switch ( period) { case time_ePeriod_OneSecond: case time_ePeriod_LastSecond: *to = *from = *prev_to; to->tv_sec += 1; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 1; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_10Seconds: case time_ePeriod_Last10Seconds: *to = *from = *prev_to; to->tv_sec += 10; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 10; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_OneMinute: case time_ePeriod_LastMinute: *to = *from = *prev_to; to->tv_sec += 60; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 60; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_10Minutes: case time_ePeriod_Last10Minutes: *to = *from = *prev_to; to->tv_sec += 600; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 600; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_OneHour: case time_ePeriod_LastHour: *to = *from = *prev_to; to->tv_sec += 3600; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 3600; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_OneDay: case time_ePeriod_Today: case time_ePeriod_Yesterday: *to = *from = *prev_to; to->tv_sec += ONEDAY; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - ONEDAY; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_OneWeek: case time_ePeriod_ThisWeek: case time_ePeriod_LastWeek: *to = *from = *prev_to; to->tv_sec += 7 * ONEDAY; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 7 * ONEDAY; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_OneMonth: case time_ePeriod_ThisMonth: case time_ePeriod_LastMonth: time_PeriodMonth( prev_to, from, to, 0); to->tv_sec += prev_to->tv_sec - from->tv_sec; *from = *prev_to; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 30 * ONEDAY; from->tv_nsec = current.tv_nsec; } break; case time_ePeriod_OneYear: case time_ePeriod_ThisYear: time_PeriodYear( prev_to, from, to, 0); to->tv_sec += prev_to->tv_sec - from->tv_sec; *from = *prev_to; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - 365 * ONEDAY; from->tv_nsec = current.tv_nsec; } break; break; case time_ePeriod_AllTime: time_Period( period, from, to, 0, 1); break; case time_ePeriod_UserDefined: // Same lenth of intervall as before *to = *from = *prev_to; to->tv_sec += prev_to->tv_sec - prev_from->tv_sec; if ( time_Acomp( ¤t, to) != 1) { *to = current; from->tv_sec = current.tv_sec - (prev_to->tv_sec - prev_from->tv_sec); from->tv_nsec = current.tv_nsec; } break; default: ; } }
void time_Period( time_ePeriod period, pwr_tTime *from, pwr_tTime *to, pwr_tTime *center, int daybreak) { int sts; pwr_tTime current; switch ( period) { case time_ePeriod_OneSecond: if ( !center) { time_Period( time_ePeriod_LastSecond, from, to, center, daybreak); return; } time_PeriodSec( from, to, center, 1); break; case time_ePeriod_10Seconds: if ( !center) { time_Period( time_ePeriod_10Seconds, from, to, center, daybreak); return; } time_PeriodSec( from, to, center, 10); break; case time_ePeriod_OneMinute: if ( !center) { time_Period( time_ePeriod_LastMinute, from, to, center, daybreak); return; } time_PeriodSec( from, to, center, 60); break; case time_ePeriod_10Minutes: if ( !center) { time_Period( time_ePeriod_Last10Minutes, from, to, center, daybreak); return; } time_PeriodSec( from, to, center, 600); break; case time_ePeriod_OneHour: if ( !center) { time_Period( time_ePeriod_LastHour, from, to, center, daybreak); return; } time_PeriodSec( from, to, center, 3600); break; case time_ePeriod_OneDay: if ( !center) { time_Period( time_ePeriod_LastHour, from, to, center, daybreak); return; } time_PeriodSec( from, to, center, ONEDAY); break; case time_ePeriod_OneWeek: if ( !center) { time_Period( time_ePeriod_LastWeek, from, to, center, daybreak); return; } time_PeriodSec( from, to, center, 7 * ONEDAY); break; case time_ePeriod_OneMonth: if ( !center) { time_Period( time_ePeriod_LastMonth, from, to, center, daybreak); return; } time_PeriodMonth( center, from, to, 0); int middle = from->tv_sec + (to->tv_sec - from->tv_sec) / 2; int half = middle - from->tv_sec; if ( center->tv_sec >= middle - ONEDAY/2 && center->tv_sec <= middle + ONEDAY/2) return; if ( center->tv_sec < middle) { // Take period from previous month time_PeriodMonth( center, from, to, 1); middle = from->tv_sec + (to->tv_sec - from->tv_sec) / 2; half = middle - from->tv_sec; } to->tv_sec = center->tv_sec + half; from->tv_sec = center->tv_sec - half; sts = time_GetTime( ¤t); if ( time_Acomp( to, ¤t) == 1) { from->tv_sec = current.tv_sec - (to->tv_sec - from->tv_sec); from->tv_nsec = current.tv_sec; *to = current; } break; case time_ePeriod_LastSecond: sts = time_GetTime( to); from->tv_sec = to->tv_sec - 1; from->tv_nsec = to->tv_nsec; break; case time_ePeriod_Last10Seconds: sts = time_GetTime( to); from->tv_sec = to->tv_sec - 10; from->tv_nsec = to->tv_nsec; break; case time_ePeriod_LastMinute: sts = time_GetTime( to); from->tv_sec = to->tv_sec - 60; from->tv_nsec = to->tv_nsec; break; case time_ePeriod_Last10Minutes: sts = time_GetTime( to); from->tv_sec = to->tv_sec - 600; from->tv_nsec = to->tv_nsec; break; case time_ePeriod_LastHour: sts = time_GetTime( to); from->tv_sec = to->tv_sec - 3600; from->tv_nsec = to->tv_nsec; break; case time_ePeriod_Today: sts = time_GetTime( from); *to = *from; time_PreviousDayBreak( from, from); if ( daybreak) { to->tv_sec += ONEDAY; time_PreviousDayBreak( to, to); } break; case time_ePeriod_Yesterday: sts = time_GetTime( to); time_PreviousDayBreak( to, to); from->tv_sec = to->tv_sec - ONEDAY; from->tv_nsec = 0; break; case time_ePeriod_ThisWeek: sts = time_GetTime( ¤t); sts = time_PeriodPreviousWeek( ¤t, 0, from); *to = current; if ( daybreak) { to->tv_sec += ONEDAY; time_PreviousDayBreak( to, to); } break; case time_ePeriod_LastWeek: sts = time_GetTime( ¤t); sts = time_PeriodPreviousWeek( ¤t, from, to); break; case time_ePeriod_ThisMonth: sts = time_GetTime( ¤t); sts = time_PeriodMonth( ¤t, 0, from, 1); *to = current; if ( daybreak) { to->tv_sec += ONEDAY; time_PreviousDayBreak( to, to); } break; case time_ePeriod_LastMonth: sts = time_GetTime( ¤t); sts = time_PeriodMonth( ¤t, from, to, 1); break; case time_ePeriod_OneYear: case time_ePeriod_ThisYear: sts = time_GetTime( ¤t); sts = time_PeriodYear( ¤t, 0, from, 1); *to = current; if ( daybreak) { to->tv_sec += ONEDAY; time_PreviousDayBreak( to, to); } break; default: { // time_ePeriod_All: struct tm *tm; sts = time_GetTime( to); if ( daybreak) { to->tv_sec += ONEDAY; time_PreviousDayBreak( to, to); } time_t sec = to->tv_sec; tm = localtime(&sec); tm->tm_sec = 0; tm->tm_min = 0; tm->tm_hour = 0; tm->tm_mday = 1; tm->tm_mon = 0; tm->tm_year = 70; from->tv_sec = mktime(tm); from->tv_nsec = 0; break; } } }