public static int CalcEndDate(GPLocationProvider m_earth, GPGregorianTime vcStart, GPVedicTime vaStart, out GPGregorianTime vcEnd, out GPVedicTime vaEnd, int nType, int nCount) { vcEnd = new GPGregorianTime(vcStart); vaEnd = new GPVedicTime(vaStart); switch (nType) { case 1: //vcEnd = vcStart; if (nCount > 30240) { nCount = 30240; } vcEnd.AddDays(nCount); VCTIMEtoVATIME(vcEnd, out vaEnd, m_earth); break; case 2: //vcEnd = vcStart; if (nCount > 4320) { nCount = 4320; } vcEnd.AddDays(nCount * 7); VCTIMEtoVATIME(vcEnd, out vaEnd, m_earth); break; case 3: //vcEnd = vcStart; if (nCount > 1080) { nCount = 1080; } vcEnd.AddMonths(nCount); VCTIMEtoVATIME(vcEnd, out vaEnd, m_earth); break; case 4: //vcEnd = vcStart; if (nCount > 90) { nCount = 90; } vcEnd.AddYears(nCount); VCTIMEtoVATIME(vcEnd, out vaEnd, m_earth); break; case 5: //vaEnd = vaStart; if (nCount > 30240) { nCount = 30240; } vaEnd.tithi += nCount; while (vaEnd.tithi >= 30) { vaEnd.tithi -= 30; vaEnd.masa++; } while (vaEnd.masa >= 12) { vaEnd.masa -= 12; vaEnd.gyear++; } VATIMEtoVCTIME(vaEnd, out vcEnd, m_earth); break; case 6: //vaEnd = vaStart; if (nCount > 1080) { nCount = 1080; } vaEnd.masa = GPAppHelper.MasaToComboMasa(vaEnd.masa); if (vaEnd.masa == GPMasa.ADHIKA_MASA) { vcEnd = new GPGregorianTime(vcStart); vcEnd.AddMonths(nCount); VCTIMEtoVATIME(vcEnd, out vaEnd, m_earth); vaEnd.tithi = vaStart.tithi; VATIMEtoVCTIME(vaEnd, out vcEnd, m_earth); } else { vaEnd.masa += nCount; while (vaEnd.masa >= 12) { vaEnd.masa -= 12; vaEnd.gyear++; } vaEnd.masa = GPAppHelper.ComboMasaToMasa(vaEnd.masa); VATIMEtoVCTIME(vaEnd, out vcEnd, m_earth); } break; case 7: //vaEnd = vaStart; if (nCount > 90) { nCount = 90; } vaEnd.gyear += nCount; VATIMEtoVCTIME(vaEnd, out vcEnd, m_earth); break; } return(1); }
public static GPGregorianTime CalcTithiEndEx(GPGregorianTime vcStart, int GYear, int nMasa, int nPaksa, int nTithi, GPLocationProvider earth, out GPGregorianTime endTithi) { int i, gy, nType; GPGregorianTime d = new GPGregorianTime(earth); GPGregorianTime dtemp = new GPGregorianTime(earth); GPAstroData day = new GPAstroData(); int tithi; int counter; GPGregorianTime start = new GPGregorianTime(earth), end = new GPGregorianTime(earth); // SUNDATA sun; // MOONDATA moon; double sunrise; start.setDayHours(-1.0); end.setDayHours(-1.0); start.Clear(); end.Clear(); /* d = GetFirstDayOfYear(earth, nGYear + 1486); * d.shour = 0.5; * d.TimeZone = earth.tzone; */ d.Copy(vcStart); i = 0; do { d.AddDays(13); day.calculateDayData(d, earth); day.nMasa = day.determineMasa(d, out gy); day.nGaurabdaYear = gy; i++; }while (((day.nPaksa != nPaksa) || (day.nMasa != nMasa)) && (i <= 30)); if (i >= 30) { d.Clear(); endTithi = d; return(d); } // we found masa and paksa // now we have to find tithi tithi = nTithi + nPaksa * 15; if (day.nTithi == tithi) { // loc1 // find tithi juncts in this day and according to that times, // look in previous or next day for end and start of this tithi nType = 1; } else { if (day.nTithi < tithi) { // do increment of date until nTithi == tithi // but if nTithi > tithi // then do decrement of date counter = 0; while (counter < 30) { d.NextDay(); day.calculateDayData(d, earth); if (day.nTithi == tithi) { goto cont_2; } if ((day.nTithi < tithi) && (day.nPaksa != nPaksa)) { d.PreviousDay(); goto cont_2; } if (day.nTithi > tithi) { d.PreviousDay(); goto cont_2; } counter++; } // somewhere is error d.Clear(); nType = 0; } else { // do decrement of date until nTithi <= tithi counter = 0; while (counter < 30) { d.PreviousDay(); day.calculateDayData(d, earth); if (day.nTithi == tithi) { goto cont_2; } if ((day.nTithi > tithi) && (day.nPaksa != nPaksa)) { goto cont_2; } if (day.nTithi < tithi) { goto cont_2; } counter++; } // somewhere is error d.Clear(); nType = 0; } cont_2: if (day.nTithi == tithi) { // do the same as in loc1 nType = 1; } else { // nTithi != tithi and nTithi < tithi // but on next day is nTithi > tithi // that means we will find start and the end of tithi // in this very day or on next day before sunrise nType = 2; } } // now we know the type of day-accurancy // nType = 0 means, that we dont found a day // nType = 1 means, we find day, when tithi was present at sunrise // nType = 2 means, we found day, when tithi started after sunrise // but ended before next sunrise // sunrise = day.sun.getSunriseDayHours() / 360 + day.sun.rise.getLocation().getTimeZoneOffsetHours() / 24; if (nType == 1) { GPGregorianTime d1, d2; d.setDayHours(sunrise); GetPrevTithiStart(d, out d1); //d = d1; //d.shour += 0.02; GetNextTithiStart(d, out d2); endTithi = d2; return(d1); } else if (nType == 2) { GPGregorianTime d1, d2; d.setDayHours(sunrise); GetNextTithiStart(d, out d1); d.Copy(d1); d.addDayHours(0.1); GetNextTithiStart(d, out d2); endTithi = d2; return(d1); } // if nType == 0, then this algoritmus has some failure if (nType == 0) { d.Clear(); d.setDayHours(0.0); endTithi = d; } else { d.Copy(start); endTithi = end; } return(d); }
/// <summary> /// Main function of this class /// </summary> /// <param name="args"></param> /// <returns></returns> public bool ParseCommandArguments(string[] args) { GPLocationProvider loc = new GPLocationProvider(); GPLocation loc1 = new GPLocation(); GPGregorianTime vcStart = new GPGregorianTime(loc), vcEnd = new GPGregorianTime(loc); GPVedicTime vaStart = new GPVedicTime(), vaEnd = new GPVedicTime(); int nCount; int nReq = 0; string strFileOut = ""; try { loc1.setLatitudeNorthPositive(0.0); loc1.setLongitudeEastPositive(0.0); loc1.setTimeZoneName(""); loc.setDefaultLocation(loc1); vcStart.Clear(); vcEnd = vcStart; vaStart.tithi = vaStart.masa = vaStart.gyear = 0; vaEnd = vaStart; nCount = -1; int argc = args.Length; for (int i = 0; i < argc; i++) { //TRACE2("arg %d = %s\n", i, args[i]); if (args[i] == "-L") { if (argc >= i + 2) { loc1.setLongitudeString(args[i + 1]); double lat = 0.0; double longi = 0.0; GetArg_EarthPos(args[i + 1], ref lat, ref longi); loc1.setLongitudeEastPositive(longi); loc1.setLatitudeNorthPositive(lat); //TRACE2("-L latitude=%f longitude=%f\n", loc.m_fLatitude, loc.m_fLongitude); } i++; } else if (args[i] == "-N") { if (argc >= i + 2) { loc1.setCity(args[i + 1]); //TRACE1("-N name=%s\n", loc.m_strName); } i++; } else if (args[i] == "-SV") { if (argc >= i + 2) { GetArg_VaisnDate(args[i + 1], out vaStart); } i++; } else if (args[i] == "-SG") { if (argc >= i + 2) { GetArg_Date(args[i + 1], out vcStart); } i++; } else if (args[i] == "-ST") { if (argc >= i + 2) { GetArg_Time(args[i + 1], out vcStart); } i++; } else if (args[i] == "-EG") { if (argc >= i + 2) { GetArg_Date(args[i + 1], out vcEnd); //AfxTrace("-EG day=%d month=%d year=%d\n", vcEnd.day, vcEnd.month, vcEnd.year); } i++; } else if (args[i] == "-EV") { if (argc >= i + 2) { GetArg_VaisnDate(args[i + 1], out vaEnd); //AfxTrace("-EV tithi=%d masa=%d gyear=%d\n", vaEnd.tithi, vaEnd.masa, vaEnd.gyear); } i++; } else if (args[i] == "-EC") { if (argc >= i + 2) { int.TryParse(args[i + 1], out nCount); } i++; } else if (args[i] == "-TZ") { if (argc >= i + 2) { loc1.setTimeZoneName(args[i + 1]); } i++; } else if (args[i] == "-O") { if (argc >= i + 2) { strFileOut = args[i + 1]; } i++; } else if (args[i] == "-R") { if (argc >= i + 2) { if (args[i + 1] == "calendar") { nReq = 10; } else if (args[i + 1] == "appday") { nReq = 11; } else if (args[i + 1] == "tithi") { nReq = 12; } else if (args[i + 1] == "sankranti") { nReq = 13; } else if (args[i + 1] == "naksatra") { nReq = 14; } else if (args[i + 1] == "firstday") { nReq = 15; } else if (args[i + 1] == "gcalendar") { nReq = 16; } else if (args[i + 1] == "gtithi") { nReq = 17; } else if (args[i + 1] == "next") { nReq = 18; } else if (args[i + 1] == "help") { nReq = 60; } /*else if (args[i+1] == "") * { * } else if (args[i+1] == "") * { * } else if (args[i+1] == "") * { * } else if (args[i+1] == "") * { * }*/ } i++; } } vcStart.setLocationProvider(loc); vcEnd.setLocationProvider(loc); switch (nReq) { case 10: case 13: case 14: if (vcStart.getYear() == 0 && vaStart.gyear != 0) { GPEngine.VATIMEtoVCTIME(vaStart, out vcStart, loc); } if (vcEnd.getYear() == 0 && vaEnd.gyear != 0) { GPEngine.VATIMEtoVCTIME(vaEnd, out vcEnd, loc); } break; default: break; } if (vcStart.getYear() != 0 && vcEnd.getYear() != 0 && nCount < 0) { nCount = Convert.ToInt32(vcEnd.getJulianLocalNoon() - vcStart.getJulianLocalNoon()); } if (nCount < 0) { nCount = 30; } GPAppDayResults appday = new GPAppDayResults(); GPCalendarResults calendar = new GPCalendarResults(); //AfxTrace("Count === %d\n", nCount); StringBuilder fout = new StringBuilder(); switch (nReq) { case 10: // -R -O -LAT -LON -SG -C [-DST -NAME] vcStart.NextDay(); vcStart.PreviousDay(); calendar.CalculateCalendar(vcStart, nCount); FormaterXml.WriteXml(FormaterXml.GetCalendarXmlDocument(calendar), fout); break; case 11: // -R -O -LAT -LON -SG -ST [-NAME] appday.calculateAppearanceDayData(loc, vcStart); FormaterXml.FormatAppDayXML(appday, fout); break; case 12: FormaterXml.WriteXML_Tithi(fout, loc, vcStart); break; case 13: if (vcEnd.getYear() == 0) { vcEnd = vcStart; vcEnd.AddDays(nCount); } FormaterXml.WriteXml(FormaterXml.GetSankrantiXml(loc, vcStart, vcEnd), fout); break; case 14: FormaterXml.WriteXML_Naksatra(fout, loc, vcStart, nCount); break; case 15: FormaterXml.WriteXML_FirstDay_Year(fout, vcStart); break; case 16: vcStart = GPGaurabdaYear.getFirstDayOfYear(loc, vcStart.getYear()); vcEnd = GPGaurabdaYear.getFirstDayOfYear(loc, vcStart.getYear() + 1); nCount = Convert.ToInt32(vcEnd.getJulianLocalNoon() - vcStart.getJulianLocalNoon()); calendar.CalculateCalendar(vcStart, nCount); FormaterXml.WriteXml(FormaterXml.GetCalendarXmlDocument(calendar), fout); break; case 17: FormaterXml.WriteXML_GaurabdaTithi(fout, loc, vaStart, vaEnd); break; case 18: FormaterXml.WriteXML_GaurabdaNextTithi(fout, loc, vcStart, vaStart); break; } // application should be windowless // since some parameters are present File.WriteAllText(strFileOut, fout.ToString()); } catch (Exception ex) { Console.WriteLine("Exception during execution: " + ex.Message); } return(true); }
/*********************************************************************/ /* Calculates Date of given Tithi */ /*********************************************************************/ public static GPGregorianTime CalcTithiDate(int nGYear, int nMasa, int nPaksa, int nTithi, GPLocationProvider earth) { int i = 0, gy = 0; GPGregorianTime d = new GPGregorianTime(earth); GPAstroData day = new GPAstroData(); int tithi = 0; int counter = 0; uint tmp = 0; if (nGYear >= 464 && nGYear < 572) { tmp = GPGaurabdaYear.gGaurBeg[(nGYear - 464) * 26 + nMasa * 2 + nPaksa]; d.setDate(Convert.ToInt32(tmp & 0xfffc00) >> 10, Convert.ToInt32(tmp & 0x3e0) >> 5, Convert.ToInt32(tmp & 0x1f)); d.NextDay(); day.calculateDayData(d, earth); day.nMasa = day.determineMasa(d, out gy); day.nGaurabdaYear = gy; } else { //d = GetFirstDayOfYear(earth, nGYear + 1486); d.setDate(nGYear + 1486, 2 + nMasa, 15); if (d.getMonth() > 12) { d.setDate(d.getYear() + 1, d.getMonth() - 12, 0); } d.setDayHours(0.5); i = 0; do { d.AddDays(13); day.calculateDayData(d, earth); day.nMasa = day.determineMasa(d, out gy); day.nGaurabdaYear = gy; i++; }while (((day.nPaksa != nPaksa) || (day.nMasa != nMasa)) && (i <= 30)); } if (i >= 30) { d.Clear(); return(d); } // we found masa and paksa // now we have to find tithi tithi = nTithi + nPaksa * 15; if (day.nTithi == tithi) { // loc1 // find tithi juncts in this day and according to that times, // look in previous or next day for end and start of this tithi d.PreviousDay(); day.calculateDayData(d, earth); if ((day.nTithi > tithi) && (day.nPaksa != nPaksa)) { d.NextDay(); } return(d); } if (day.nTithi < tithi) { // do increment of date until nTithi == tithi // but if nTithi > tithi // then do decrement of date counter = 0; while (counter < 16) { d.NextDay(); day.calculateDayData(d, earth); if (day.nTithi == tithi) { return(d); } if ((day.nTithi < tithi) && (day.nPaksa != nPaksa)) { return(d); } if (day.nTithi > tithi) { return(d); } counter++; } // somewhere is error d.Clear(); return(d); } else { // do decrement of date until nTithi <= tithi counter = 0; while (counter < 16) { d.PreviousDay(); day.calculateDayData(d, earth); if (day.nTithi == tithi) { return(d); } if ((day.nTithi > tithi) && (day.nPaksa != nPaksa)) { d.NextDay(); return(d); } if (day.nTithi < tithi) { d.NextDay(); return(d); } counter++; } // somewhere is error d.Clear(); return(d); } // now we know the type of day-accurancy // nType = 0 means, that we dont found a day // nType = 1 means, we find day, when tithi was present at sunrise // nType = 2 means, we found day, when tithi started after sunrise // but ended before next sunrise // }
public static void AvcGetTodayInfo(GPGregorianTime vc, GPLocationProvider loc, StringBuilder str) { string str2; GPCalendarResults db = new GPCalendarResults(); GPGregorianTime vc2 = new GPGregorianTime(vc); vc2.AddDays(-4); db.CalculateCalendar(vc2, 9); int i = db.FindDate(vc); GPCalendarDay p = db.get(i); if (p == null) { return; } str.AppendFormat("{0}, {1} {2}", loc.getFullName(), loc.getLocation(0).getLatitudeString(), loc.getLocation(0).getLongitudeString()); str.AppendLine(); str.AppendFormat("{0}: {1}", getSharedStringPlain(12), loc.getLocation(0).getTimeZoneString()); str.AppendLine(); str.AppendLine(); str.AppendFormat("[{0} - {1}]", vc, getSharedStringPlain(vc.getDayOfWeek())); str.AppendLine(); str.AppendFormat(" {0}, {1} {2}", GPTithi.getName(p.astrodata.nTithi), GPPaksa.getName(p.astrodata.nPaksa), getSharedStringPlain(20)); str.AppendLine(); str.Append(" "); str.AppendFormat("{0}, {1}", p.getMasaLongName(), p.getGaurabdaYearLongString()); str.AppendLine(); str.AppendLine(); if (p.hasEkadasiParana()) { str.AppendLine(p.getEkadasiParanaString()); } // adding mahadvadasi // adding spec festivals foreach (GPCalendarDay.Festival fest in p.CompleteFestivalList(db.get(i - 1), db.get(i + 1))) { if (GPUserDefaults.BoolForKey(fest.ShowSettingItem, true)) { if (fest.ShowSettingItem == GPDisplays.Keys.CalendarSankranti) { str.AppendLine(GPAppHelper.CenterString(fest.Text, 80, '-')); } else { str.AppendFormat(" {0}", fest.Text); str.AppendLine(); } } } str.AppendLine(); if (GPDisplays.Today.BrahmaMuhurtaVisible()) { str.AppendLine(); str.AppendFormat("{0} {1}", getSharedStringPlain(988), p.astrodata.sun.arunodaya.getShortMuhurtaRange(0)); } if (GPDisplays.Today.SunriseVisible()) { str.AppendLine(); str2 = string.Format("{0} {1} ", getSharedStringPlain(51), p.astrodata.sun.rise.getShortTimeString()); str.Append(str2); if (GPDisplays.Today.SandhyaTimesVisible()) { str.AppendFormat(" {0} {1}", getSharedStringPlain(989), p.astrodata.sun.rise.getShortSandhyaRange()); } str.AppendFormat(" ({0})", GPAppHelper.GetDSTSignature(p.isDaylightInEffect())); str.AppendLine(); } if (GPDisplays.Today.NoonVisible()) { str2 = string.Format("{0} {1} ", getSharedStringPlain(857), p.astrodata.sun.noon.getShortTimeString()); str.Append(str2); if (GPDisplays.Today.SandhyaTimesVisible()) { str.AppendFormat(" {0} {1} ", getSharedStringPlain(989), p.astrodata.sun.noon.getShortSandhyaRange()); } str2 = string.Format(" ({0})", GPAppHelper.GetDSTSignature(p.isDaylightInEffect())); str.Append(str2); str.AppendLine(); } if (GPDisplays.Today.SunsetVisible()) { str2 = string.Format("{0} {1} ", getSharedStringPlain(52), p.astrodata.sun.set.getShortTimeString()); str.Append(str2); if (GPDisplays.Today.SandhyaTimesVisible()) { str.AppendFormat(" {0} {1} ", getSharedStringPlain(989), p.astrodata.sun.set.getShortSandhyaRange()); } str.AppendFormat(" ({0})", GPAppHelper.GetDSTSignature(p.isDaylightInEffect())); str.AppendLine(); } if (GPDisplays.Today.SunriseInfo()) { str.AppendLine(); str.AppendLine(getSharedStringPlain(990)); str.AppendLine(); str.AppendFormat(" {0} {1}", GPNaksatra.getName(p.astrodata.nNaksatra), getSharedStringPlain(15)); if (GPDisplays.Today.NaksatraPadaVisible()) { str.AppendFormat(", {0} {1} ({2})", p.getNaksatraElapsedString(), getSharedStringPlain(993), getSharedStringPlain(811 + p.getNaksatraPada())); } if (GPDisplays.Today.RasiOfMoonVisible()) { str.AppendFormat(", {0}: {1}", getSharedStringPlain(991), GPSankranti.getName(p.astrodata.nMoonRasi), getSharedStringPlain(105)); } str.AppendFormat(", {0} {1}", GPYoga.getName(p.astrodata.nYoga), getSharedStringPlain(104)); str.AppendLine(); str.AppendFormat(" {0}: {1}.", getSharedStringPlain(992), GPSankranti.getName(p.astrodata.nSunRasi)); str.AppendLine(); } AddNoteText(str); }