-
- //printf("LT = %d\n", computerLocalTime);
- // Okay, in principle, this trick allows to calculate the
- // difference between GMT and localtime, in seconds.
- // printf("Gmt = %d, SLT = %d, (difference = %d)\n", currGMT, systemLocalTime, (currGMT - systemLocalTime));
- // printf("Gmt = %d, ALT = %d, (difference = %d)\n", currGMT, aircraftLocalTime, (currGMT - aircraftLocalTime));
- // exit(1);
-
-#if 0
- // Okay, we now have six possible scenarios
- switch (offsetType)
- {
- case SG_TIME_SYS_OFFSET:
- warp = timeOffset;
- break;
- case SG_TIME_GMT_OFFSET:
- warp = timeOffset - (currGMT - systemLocalTime);
- break;
- case SG_TIME_LAT_OFFSET:
- // warp = timeOffset - (currGMT - systemLocalTime +
- // (currGMT - aircraftLocalTime));
- warp = timeOffset - (aircraftLocalTime - systemLocalTime);
- break;
- case SG_TIME_SYS_ABSOLUTE:
- warp = timeOffset - cur_time;
- //printf("warp = %d\n", warp);
- break;
- case SG_TIME_GMT_ABSOLUTE:
- warp = timeOffset - currGMT;
- break;
- case SG_TIME_LAT_ABSOLUTE:
- warp = timeOffset - (aircraftLocalTime - systemLocalTime) -
- cur_time;
- break;
- default:
- printf("Unsupported type\n");
- exit(1);
- }
-
- warp_delta = 0;
- // pause = current_options.get_pause();
-#endif
-
-}
-
-
-// given a date in months, mn, days, dy, years, yr, return the
-// modified Julian date (number of days elapsed since 1900 jan 0.5),
-// mjd. Adapted from Xephem.
-
-void SGTime::cal_mjd (int mn, double dy, int yr)
-{
- //static double last_mjd, last_dy;
- //double mjd;
- //static int last_mn, last_yr;
- int b, d, m, y;
- long c;
-
- if (mn == last_mn && yr == last_yr && dy == last_dy) {
- mjd = last_mjd;
- }
-
- m = mn;
- y = (yr < 0) ? yr + 1 : yr;
- if (mn < 3) {
- m += 12;
- y -= 1;
- }
-
- if (yr < 1582 || (yr == 1582 && (mn < 10 || (mn == 10 && dy < 15)))) {
- b = 0;
- } else {
- int a;
- a = y/100;
- b = 2 - a + a/4;
- }
-
- if (y < 0) {
- c = (long)((365.25*y) - 0.75) - 694025L;
- } else {
- c = (long)(365.25*y) - 694025L;
- }
-
- d = (int)(30.6001*(m+1));
-
- mjd = b + c + d + dy - 0.5;
-
- last_mn = mn;
- last_dy = dy;
- last_yr = yr;
- last_mjd = mjd;
-}
-
-
-// given an mjd, calculate greenwich mean sidereal time, gst
-void SGTime::utc_gst ()
-{
- double day = floor(mjd-0.5)+0.5;
- double hr = (mjd-day)*24.0;
- double T, x;
-
- T = ((int)(mjd - 0.5) + 0.5 - J2000)/36525.0;
- x = 24110.54841 + (8640184.812866 + (0.093104 - 6.2e-6 * T) * T) * T;
- x /= 3600.0;
- gst = (1.0/SIDRATE)*hr + x;
-
- FG_LOG( FG_EVENT, FG_INFO, " gst => " << gst );