[Puck-Maus]

Das ultimative Stammtischterminberechnungsprogramm der MAUS Karlsruhe

Für alle, die schon immer wissen wollten, wann der ominöse erste zweite Mittwoch im Monat ist, an dem der Dimitri-Stammtisch stattfindet, hier der Quelltext in C:

/* TABSIZE 4
 * @(#)stammtisch.c
 *
 * 1996-10-17 von Rainer Seitel @ KA
 */


#include <stdio.h>
#include <time.h>


#define Stammtisch_der_MAUS_KA() \
    printf("Stammtisch der MAUS KA ist am %d-%02d-%02d.\n", Jahr, Monat, Tag)
#define FALSE 0
#define TRUE 1


/*
 * Berechnet den letzten Tag eines Monats.
 */

short letzter_Tag( short Jahr, short Monat )
{
	switch (Monat) {
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		return 31;
	case 4:
	case 6:
	case 9:
	case 11:
		return 30;
	case 2:
		return ((Jahr % 100) != 0 && (Jahr % 4) == 0 || (Jahr % 400) == 0) ? 29 : 28;
	}
}


/*
 * Testet ob ein Mittwoch vom 8. bis 14. Tag eines Monats vorliegt.
 */

short erster_zweiter_Mittwoch( short Jahr, short Monat, short Tag )
{
	if (Tag < 8 || Tag > 14)
		return FALSE;

	{
		struct tm ortszeit;
		time_t utc;
		int wochentag;

		ortszeit.tm_year = Jahr - 1900;
		ortszeit.tm_mon  = Monat - 1 ;
		ortszeit.tm_mday = Tag;
		ortszeit.tm_hour = ortszeit.tm_min = ortszeit.tm_sec = 0;
		utc = mktime(&ortszeit);
		return (localtime(&utc)->tm_wday == 3);
	}
}


int main()
{
	int Jahr, Monat, Tag;

	for (Jahr = 1991, Monat = 10; ; Jahr++, Monat = 1)
		for (; Monat <= 12; Monat++)
			for (Tag = 1; Tag <= letzter_Tag(Jahr, Monat); Tag++)
				if (erster_zweiter_Mittwoch(Jahr, Monat, Tag) == TRUE)
					Stammtisch_der_MAUS_KA();
}

Langfristig funktionierender Alias: http://rainer.seitel.home.pages.de/maus_ka_stammtischterminberechnungsprogramm.c.html

1997-08-29 Rainer Seitel