/*
	$VER kalender 1.0 (08.07.96)

	Kalender Utilities, c source

	(C) 1996 Christian T. Steigies
*/

#include <stdio.h>

/* #define schalt_jahr(j) ((j%4==0 && j%100!=0) || j%400==0) */
/* char day[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; */

/*+ "int  schalt_jahr(int j)" */
int  schalt_jahr(int j)
{
    return ((j%4==0 && j%100!=0) || j%400==0);
}
/*- */
/*+ "int  day_of_the_year(int tag, int monat, int jahr)" */
int  day_of_the_year(int tag, int monat, int jahr)
{
    int tage          =  0;
    int monats_tage[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

/*+ "teste Jahr" */
    if ( jahr < 0 )
    {
	return -1;
    }
    if ( jahr > 3000 )
    {
	return -1;
    } /* illegales Jahr, hmm Formel gültig ab ??? bis ??? */
/*- */
/*+ "teste Monat" */
    if ( ( monat > 12)
	|| (monat < 1)
	)
    {
	return -2;
    } /* illegaler Monat ! */
/*- */
/*+ "teste Tag" */
    if ( schalt_jahr(jahr) )
    {
	if ( monat ==2 ) /* Schaltjahr und Februar => 29 Tage */
	{
	   if ( ( tag > 29 )
	       || tag < 1
	       )
	   {
		return -3;
	   } /* illegaler Tag  */
	}
	else /* nicht Februar, Tabelle ok */
	{
	    if ( ( tag > monats_tage[monat] )
		|| ( tag < 1 )
		)
	    {
		return -3;
	    } /* illegaler Tag ! */
	}
    } /* if ( schalt_jahr(jahr) ) */
    else /* kein Schaltjahr */
    {
       if ( ( tag > monats_tage[monat] )
	   || ( tag < 1 )
	   )
       {
	    return -3;
       } /* illegaler Tag ! */
    } /* else kein Schaltjahr */
/*- */

    if ( schalt_jahr(jahr)
	&& ( monat > 2 )
	)
    {
	tage++;
    } /* if ( schalt_jahr(jahr)  && ( monat > 2 ) ) */
    while (--monat)
    {
	tage+=monats_tage[monat];
    }
    tage+=tag;
    return tage;
}
/*- */
/*+ "void day_error(int errno)" */
void day_error(int errno)
{
#ifdef german
	    if ( errno == -1 )
	    {
		puts("ungültiges Jahr?!?");
	    }
	    if ( errno == -2 )
	    {
		puts("ungültiger Monat !");
	    }
	    if ( errno == -3 )
	    {
		puts("ungültiger Tag !");
	    }
	    if ( errno < -3 )
	    {
		puts("unbekannter Fehler !!!");
	    }
#else
	    if ( errno == -1 )
	    {
		puts("illegal year ! How come?");
	    }
	    if ( errno == -2 )
	    {
		puts("illegal month !");
	    }
	    if ( errno == -3 )
	    {
		puts("illegal day !");
	    }
	    if ( errno < -3 )
	    {
		puts("illegal error !!!");
	    }
#endif
}
/*- */


