void main_calendar( long todayAbs, long endAbs) /* the range of the desired printout */ { date_t todayGreg, todayHeb; holstorep_t holi_start,holip; /* a list of holidays for today */ year_t theYear; char *omerStr ; int omer, day_of_week, first_weekday, returnedMask; int omer_today, sedra_today, candle_today, holidays_today, molad_today; molad_t moladNext; int monthNext; int today_zemanim, i_zman; int num_zmanim = sizeof (zemanim) / sizeof (struct _zman); char buffer[80]; /* Used to decide whether a particular type of daily info should be included in the abbreviated view. In abbreviated mode things like sunrise, daf, omer are printed once a week. */ #define INCLUDE_TODAY(_sw) \ ( (_sw) && ((!abbrev_sw) || (first_weekday == day_of_week))) todayHeb = abs2hebrew (todayAbs); todayGreg = abs2greg (todayAbs); theYear = yearData (todayHeb.yy); /* plug in light_offset before starting the loop */ for (i_zman = 0; i_zman < num_zmanim; i_zman ++) if (zemanim[i_zman].flags == ZMAN_CANDLES_BEFORE) zemanim[i_zman].min_offset = light_offset; else if (zemanim[i_zman].flags == ZMAN_CANDLES_AFTER || zemanim[i_zman].flags == ZMAN_HAVDALAH ) zemanim[i_zman].min_offset = havdalah_minutes; /*============== Main Year Loop ==============*/ reset_Omer (todayHeb.yy); if (sedraAllWeek_sw || sedrot_sw) reset_sedra (todayHeb.yy); first_weekday = day_of_week = (int) (todayAbs % 7L); while (todayAbs <= endAbs) { /* get the holidays for today */ returnedMask = getHebHolidays (todayHeb, &holip); sedra_today = sedraAllWeek_sw || (sedrot_sw && (day_of_week == SAT)); omer_today = printOmer_sw && (todayAbs >= beginOmer) && (todayAbs <= endOmer); holidays_today = holip && (!noHolidays_sw || (returnedMask & USER_EVENT)); molad_today = printMolad_sw && (day_of_week == SAT) && (todayHeb.dd >= 23 && todayHeb.dd <= 29) && (todayHeb.mm != ELUL); /* no birkat hachodesh before rosh hashana */ today_zemanim = 0; if (INCLUDE_TODAY(default_zemanim)) today_zemanim |= default_zemanim; if (candleLighting_sw) { if (day_of_week == FRI) today_zemanim |= ZMAN_CANDLES_BEFORE; else { if (returnedMask & LIGHT_CANDLES) today_zemanim |= (day_of_week == SAT) ? ZMAN_CANDLES_AFTER : ZMAN_CANDLES_BEFORE; else if ((returnedMask & LIGHT_CANDLES_TZEIS) && ! (returnedMask & YOM_TOV_ENDS)) today_zemanim |= ZMAN_CANDLES_AFTER; } if (!(today_zemanim & (ZMAN_CANDLES_BEFORE | ZMAN_CANDLES_AFTER)) && (day_of_week == SAT || returnedMask & YOM_TOV_ENDS)) today_zemanim |= ZMAN_HAVDALAH; if (!(today_zemanim & (ZMAN_CANDLES_BEFORE)) && (returnedMask & CHANUKAH_CANDLES)) today_zemanim |= ZMAN_CANDLES_AFTER; /* even if havdalah */ } if (INCLUDE_TODAY(printHebDates_sw) || ((printSomeHebDates_sw || printHebDates_sw) && (holidays_today || sedra_today || omer_today || (today_zemanim & (ZMAN_CANDLES_BEFORE|ZMAN_CANDLES_AFTER|ZMAN_HAVDALAH))))) { PrintGregDate (todayGreg); printf ("%d%s of %s, %d\n", todayHeb.dd, /* print the hebrew date */ numSuffix( todayHeb.dd ), _(hMonths[LEAP_YR_HEB( todayHeb.yy )][todayHeb.mm].name), todayHeb.yy); } if (printSunriseSunset_sw) { print_sunrise_sunset(todayGreg); } /* print the sedra, if desired */ if (sedra_today) { char sedraStr[40]; int foundSedra = sedra( todayAbs, sedraStr, 40 ); if (foundSedra) { PrintGregDate( todayGreg ); printf( "%s %s\n", _("Parashat"), sedraStr ); } } /* print today's holidays */ holi_start=holip; /* store the head of the list for freeing */ for (; holip; holip = holip->next) { if (!noHolidays_sw || (holip->typeMask & USER_EVENT)) { PrintGregDate( todayGreg ); puts( holip->name ); } } /* Print the Omer */ if (INCLUDE_TODAY(omer_today)) { initStr (&omerStr, NM_LEN); omer = (int) (todayAbs - beginOmer + 1L); if (!tabs_sw) { strncat (omerStr, hc_itoa (omer), NM_LEN); strncat (omerStr, numSuffix (omer), NM_LEN); strncat (omerStr, " day of the Omer", NM_LEN); } else { strncat (omerStr, "Omer: ", NM_LEN); strncat (omerStr, hc_itoa (omer), NM_LEN); } PrintGregDate (todayGreg); printf ("%s\n", omerStr); free( omerStr ); } if (INCLUDE_TODAY(dafYomi_sw)) hebcal_dafyomi(&todayGreg); /* Print CandleLighting times */ if (today_zemanim) { print_candlelighting_times (today_zemanim, day_of_week, todayGreg); } /* Print Molad */ if (molad_today) { PrintGregDate (todayGreg); monthNext = (todayHeb.mm == MONTHS_IN_HEB(todayHeb.yy) ? 1 : todayHeb.mm + 1); moladNext = get_molad(todayHeb.yy, monthNext); printf ("Molad %s: %s, %d minutes and %d chalakim after %d %s\n", hMonths[LEAP_YR_HEB(todayHeb.yy)][monthNext].name, ShortDayNames[dayOfWeek(abs2greg(moladNext.day))], (int) moladNext.chalakim / 18, moladNext.chalakim % 18, (moladNext.hour > 12 ? moladNext.hour - 12 : moladNext.hour), (moladNext.hour > 12 ? "PM" : "AM") ); } incHebGregDate (&todayHeb, &todayGreg, &todayAbs, &day_of_week, &theYear); # ifdef PLUG_LEAKS free_holidays(*holip); # endif } #undef INCLUDE_TODAY }
/* * Clean all memory on exit to help find leaks * Yeah I know, one big ugly function -Druid * Added to AFKMud by Samson on 5-8-03. */ void cleanup_memory( void ) { int hash; #ifdef IMC fprintf( stdout, "%s", "IMC2 Data.\n" ); free_imcdata( true ); imc_delete_info( ); #endif fprintf( stdout, "%s", "Quote List.\n" ); free_quotes( ); fprintf( stdout, "%s", "Random Environment Data.\n" ); free_envs( ); fprintf( stdout, "%s", "Auction Sale Data.\n" ); free_sales( ); fprintf( stdout, "%s", "Project Data.\n" ); free_projects( ); fprintf( stdout, "%s", "Ban Data.\n" ); free_bans( ); fprintf( stdout, "%s", "Auth List.\n" ); free_all_auths( ); fprintf( stdout, "%s", "Morph Data.\n" ); free_morphs( ); fprintf( stdout, "%s", "Rune Data.\n" ); free_runedata( ); fprintf( stdout, "%s", "Connection History Data.\n" ); free_connhistory( 0 ); fprintf( stdout, "%s", "Slay Table.\n" ); free_slays( ); fprintf( stdout, "%s", "Holidays.\n" ); free_holidays( ); fprintf( stdout, "%s", "Specfun List.\n" ); free_specfuns( ); fprintf( stdout, "%s", "Wizinfo Data.\n" ); clear_wizinfo( ); fprintf( stdout, "%s", "Skyship landings.\n" ); free_landings( ); fprintf( stdout, "%s", "Ships.\n" ); free_ships( ); fprintf( stdout, "%s", "Overland Landmarks.\n" ); free_landmarks( ); fprintf( stdout, "%s", "Overland Exits.\n" ); free_mapexits( ); fprintf( stdout, "%s", "Mixtures and Liquids.\n" ); free_liquiddata( ); fprintf( stdout, "%s", "DNS Cache data.\n" ); free_dns_list( ); fprintf( stdout, "%s", "Local Channels.\n" ); free_mudchannels( ); // Helps fprintf( stdout, "%s", "Helps.\n" ); free_helps( ); // Commands fprintf( stdout, "%s", "Commands.\n" ); free_commands( ); #ifdef MULTIPORT // Shell Commands fprintf( stdout, "%s", "Shell Commands.\n" ); free_shellcommands( ); #endif // Socials fprintf( stdout, "%s", "Socials.\n" ); free_socials( ); // Languages fprintf( stdout, "%s", "Languages.\n" ); free_tongues( ); // Boards fprintf( stdout, "%s", "Boards.\n" ); free_boards( ); // Events fprintf( stdout, "%s", "Events.\n" ); free_all_events( ); // Find and eliminate all running chess games fprintf( stdout, "%s", "Ending chess games.\n" ); free_all_chess_games( ); // Whack supermob fprintf( stdout, "%s", "Whacking supermob.\n" ); if( supermob ) { supermob->from_room( ); charlist.remove( supermob ); deleteptr( supermob ); } // Free Characters fprintf( stdout, "%s", "Characters.\n" ); extract_all_chars( ); // Free Objects fprintf( stdout, "%s", "Objects.\n" ); extract_all_objs( ); // Descriptors fprintf( stdout, "%s", "Descriptors.\n" ); free_all_descs( ); // Deities fprintf( stdout, "%s", "Deities.\n" ); free_deities( ); // Clans fprintf( stdout, "%s", "Clans.\n" ); free_clans( ); // Races fprintf( stdout, "%s", "Races.\n" ); free_all_races( ); // Classes fprintf( stdout, "%s", "Classes.\n" ); free_all_classes( ); // Teleport lists fprintf( stdout, "%s", "Teleport Data.\n" ); free_teleports( ); // Areas - this includes killing off the hash tables and such fprintf( stdout, "%s", "Area Data Tables.\n" ); close_all_areas( ); // Get rid of auction pointer MUST BE AFTER OBJECTS DESTROYED fprintf( stdout, "%s", "Auction.\n" ); deleteptr( auction ); // Title table fprintf( stdout, "%s", "Title table.\n" ); free_all_titles( ); // Skills fprintf( stdout, "%s", "Skills and Herbs.\n" ); free_skills( ); // Prog Act lists fprintf( stdout, "%s", "Mudprog act lists.\n" ); free_prog_actlists( ); // Questbit data fprintf( stdout, "%s", "Abit/Qbit Data.\n" ); free_questbits( ); free_mssp_info(); fprintf( stdout, "%s", "Checking string hash for leftovers.\n" ); { for( hash = 0; hash < 1024; ++hash ) hash_dump( hash ); } #if !defined(__CYGWIN__) && defined(SQL) fprintf( stdout, "%s", "Closing database connection.\n" ); close_db( ); #endif // Last but not least, close the libdl and dispose of sysdata - Samson fprintf( stdout, "%s", "System data.\n" ); dlclose( sysdata->dlHandle ); deleteptr( sysdata ); fprintf( stdout, "%s", "Memory cleanup complete, exiting.\n" ); }