/***************************************************** ** ** TextHelper --- writeTextAnalysis ** ******************************************************/ int TextHelper::writeTextAnalysis( const int &mode, const int varga, const int dasa ) { int ret = 0; switch ( mode ) { case TEXT_MODE_BASE: writeBaseData(); break; case TEXT_MODE_WESTERN_PLANETS: ret = writeWesternPlanetReport(); break; case TEXT_MODE_VEDIC_PLANETS: ret = writeVedicPlanetReport(); break; case TEXT_MODE_NAKSHATRA: { NakshatraExpert( horoscope ).write( writer, chartprops, show_header ); } break; case TEXT_MODE_ASHTAKAVARGA: { VargaHoroscope chart( horoscope, varga ); AshtakavargaExpert aexpert( &chart ); aexpert.update(); aexpert.write( writer, show_header ); } break; case TEXT_MODE_KP: ret = writeKp( dasa ); break; case TEXT_MODE_BHAVA: writeBhavas(); break; case TEXT_MODE_ARABICPARTS: { ArabicPartsExpert( horoscope ).write( writer, chartprops->isVedic(), show_header ); } break; case TEXT_MODE_VEDIC_ASPECTARIUM: { AspectExpert aspexpert( horoscope ); aspexpert.writeVedicAspectarium( horoscope, writer, chartprops, show_header ); } break; case TEXT_MODE_WESTERN_ASPECTARIUM: { AspectExpert aspexpert( horoscope ); aspexpert.update( horoscope, chartprops ); if ( show_header ) writer->writeHeader1( _( "Aspectarium" )); aspexpert.writeWesternAspectarium( writer, chartprops ); aspexpert.writeWesternAspectList( writer, chartprops ); } break; case TEXT_MODE_WESTERN_ASPECTARIUM_PLAIN: { AspectExpert aspexpert( horoscope ); aspexpert.update( horoscope, chartprops ); aspexpert.writeWesternAspectarium( writer, chartprops ); } break; case TEXT_MODE_ASTRONOMICAL: ret = writeAstronomicalData(); break; case TEXT_MODE_VARGA: { VargaExpert vexpert( horoscope ); vexpert.write( writer, chartprops->getVedicObjectStyle(), show_header ); } break; case TEXT_MODE_DASA: assert( dasa >= 0 && dasa < (int)DasaExpertFactory::MAX_DASAEXPERTS ); DasaExpertFactory::get()->getDasaExpert( dasa )->write( writer, horoscope, varga, show_header ); break; case TEXT_MODE_DASACOMPACT: assert( dasa >= 0 && dasa < (int)DasaExpertFactory::MAX_DASAEXPERTS ); DasaExpertFactory::get()->getDasaExpert( dasa )->writeCompact( writer, horoscope, varga, show_header ); break; case TEXT_MODE_DASALONG: assert( dasa >= 0 && dasa < (int)DasaExpertFactory::MAX_DASAEXPERTS ); DasaExpertFactory::get()->getDasaExpert( dasa )->writeMore( writer, horoscope, varga, show_header ); break; case TEXT_MODE_JAIMINI: { VargaHoroscope chart( horoscope, varga ); JaiminiExpert jexpert( &chart ); jexpert.update(); jexpert.write( writer, show_header ); } break; case TEXT_MODE_MAIN_VIEW: ret = writePlanets(); break; default: assert( false ); break; } if ( ret ) printf( "Warn: %d objects couldn't be calculated\n", ret ); return ret; }
int main(int argc, char **argv) { int i; char errmsg[128]; // time stuff double simJD; // Julian day, simulated struct ln_date date; // date structure struct ln_zonedate zdate; // date structure, includes gmtoff (seconds east of UTC) int year,month,day; double hour; // location stuff struct ln_lnlat_posn observer; int got_meridian = 0; double s_meridian = 0.0; // astronomy stuff float sunPos[3]; int tsolar; int isSun = FALSE; int isSky = FALSE; int isMoon = FALSE; int isStars = FALSE; // atmosphere stuff float turbidity = 2.45; // gensky default, also near europe average double gprefl = 0.2; // deciduous forest // set defaults --------------------------------------- // set to my house in Newton Center observer.lat = 42.36; observer.lng = -71.06; // note: east longitude (use west for cli) // set the julian date to right now simJD = ln_get_julian_from_sys(); //(void) ln_get_local_date (simJD, &date); //fprintf(stdout,"# %4d-%02d-%02d %2d:%02d:%02d\n", // date.years,date.months,date.days, // date.hours,date.minutes,(int)date.seconds); // create the time string for the current date (void) ln_get_date (simJD, &date); //fprintf(stdout,"# UTC now: %4d-%02d-%02d %2d:%02d:%02d\n", // date.years,date.months,date.days, // date.hours,date.minutes,(int)date.seconds); // 14400 for 4 hours behind UTC //(void) ln_date_to_zonedate (&date, &zdate, -14400); //fprintf(stdout,"# Local time now: %4d-%02d-%02d %2d:%02d:%02d\n", // zdate.years,zdate.months,zdate.days, // zdate.hours,zdate.minutes,(int)zdate.seconds); // and use those as defaults (really only to set the year) year = date.years; month = date.months; day = date.days; hour = date.hours + date.minutes/60. + date.seconds/3600.; // parse command-line arguments ----------------------- // 1st arg is month number // 2nd arg is day // 3rd arg is 24-hour decimal hours (can add "EST" or other time zone to string!) // -a latitude (North assumed) // -o longitude (West assumed) // use code from gensky.c progname = argv[0]; if (argc < 4) userror("arg count"); month = atoi(argv[1]); if (month < 1 || month > 12) userror("bad month"); day = atoi(argv[2]); if (day < 1 || day > 31) userror("bad day"); got_meridian = cvthour(argv[3], &hour, &tsolar, &s_meridian); for (i = 4; i < argc; i++) if (argv[i][0] == '-' || argv[i][0] == '+') switch (argv[i][1]) { case 'y': year = atoi(argv[++i]); break; case 't': turbidity = atof(argv[++i]); break; case 'g': gprefl = atof(argv[++i]); break; case 'a': // keep in degrees! //observer.lat = atof(argv[++i]) * (PI/180); observer.lat = atof(argv[++i]); break; case 'o': // note negative to match gensky behavior! //observer.lng = -atof(argv[++i]) * (PI/180); observer.lng = -atof(argv[++i]); break; case 'm': if (got_meridian) { ++i; break; /* time overrides */ } // keep in degrees //s_meridian = atof(argv[++i]) * (PI/180); s_meridian = atof(argv[++i]); break; default: sprintf(errmsg, "unknown option: %s", argv[i]); userror(errmsg); } else userror("bad option"); // if no meridian, assume local time? if (!got_meridian) s_meridian = -observer.lng; // check for meridian far away from observer location if (fabs(s_meridian+observer.lng) > 45.) fprintf(stderr, "%s: warning: %.1f hours btwn. standard meridian and longitude\n", progname, (-observer.lng-s_meridian)/15.); printhead(argc, argv); //fprintf(stdout,"tsolar %d\n",tsolar); //fprintf(stdout,"got_meridian %d\n",got_meridian); //fprintf(stdout,"s_meridian %g\n",s_meridian); //fprintf(stdout,"observer.lng %g\n",observer.lng); // convert the time ----------------------------------- // change date to match input //date.years = year; //date.months = month; //date.days = day; //date.hours = floor(hour); //simJD = ln_get_julian_day(&date); //fprintf(stdout,"# jd %15.10e\n",simJD); zdate.years = year; zdate.months = month; zdate.days = day; zdate.hours = floor(hour); zdate.minutes = floor(60.*(hour-(double)(zdate.hours))); zdate.seconds = 3600.*(hour-(double)(zdate.hours)-(double)(zdate.minutes)/60.); zdate.gmtoff = 86400 - (long)(240.*s_meridian); fprintf(stdout,"# Using time: %4d-%02d-%02d %2d:%02d:%02d\n", zdate.years,zdate.months,zdate.days, zdate.hours,zdate.minutes,(int)zdate.seconds); simJD = ln_get_julian_local_date(&zdate); fprintf(stdout,"# Julian day: %15.10e\n",simJD); // write output --------------------------------------- // compute and write the sun "light" and "source" descriptions isSun = writeSun (simJD, observer, turbidity, sunPos); // always write the sky dome isSky = writeSky (turbidity, sunPos); // place the moon if it is above the horizon isMoon = writeMoon (simJD, observer); // place the three brightest planets if they are above the horizon writePlanets (simJD, observer); // if the sky is dim enough, place stars isStars = writeStars (simJD, sunPos[2], observer); (void) writeSkyStarMix (sunPos[2]); // if there is cloud geometry available, place it //writeClouds (); // create a material for the ground haze writeHaze (isSun,isSky,isMoon,isStars); // ANSI C requires main to return int return 0; }