 #include <stdio.h>
 #include "Date.h"


 int readintyear(void)

 {int year=0;

  printf("(integer)year: ");
  scanf("%d",&year);
  return(year);
 }


 unsigned short readshortcardmonth(void)

 {unsigned int month=0;

  printf("(shortcard)month: ");
  scanf("%u",&month);
  return((unsigned short)month);
 }


 unsigned short readshortcardday(void)

 {unsigned int day=0;

  printf("(shortcard)day: ");
  scanf("%u",&day);
  return((unsigned short)day);
 }


 Weekdays readweekday(void)

 {unsigned int wday=0;

  do
   {printf("weekday: 1=Monday; ...7=Sunday: ");
    scanf("%u",&wday);
   }
  while (wday > 7);
  return((Weekdays)wday);
 }


 Weekdays readintdays(void)

 {int days=0;

  printf("(integer)days: ");
  scanf("%d",&days);
  return(days);
 }


 unsigned int readcardyear(void)

 {unsigned int year=0;

  printf("(cardinal)year: ");
  scanf("%u",&year);
  return(year);
 }


 unsigned long readlongcarddays(void)

 {unsigned long day=0;

  printf("(longcard)days: ");
  scanf("%u",&day);
  return(day);
 }


 unsigned short readshortcardhour(void)

 {unsigned int hour=0;

  printf("(shortcard)hour: ");
  scanf("%u",&hour);
  return((unsigned short)hour);
 }


 unsigned short readshortcardmin(void)

 {unsigned int min=0;

  printf("(shortcard)min: ");
  scanf("%u",&min);
  return((unsigned short)min);
 }


 unsigned short readshortcardsec(void)

 {unsigned int sec=0;

  printf("(shortcard)sec: ");
  scanf("%u",&sec);
  return((unsigned short)sec);
 }


 float readrealtime(void)

 {float jd=0.0;

  printf("(real)time: ");
  scanf("%f",&jd);
  return(jd);
 }


 short readshortintdegree(void)

 {int degree=0;

  printf("(shortint)degree: ");
  scanf("%d",&degree);
  return((short)degree);
 }


 unsigned long readlongcardsecs(void)

 {unsigned long secs=0;

  printf("(longcard)secs: ");
  scanf("%u",&secs);
  return(secs);
 }


 float readrealmeridian(void)

 {float jd=0.0;

  printf("(real)meridian: ");
  scanf("%f",&jd);
  return(jd);
 }


 float readrealpos(void)

 {float jd=0.0;

  printf("(real)ps: ");
  scanf("%f",&jd);
  return(jd);
 }


 void main(void)

 {unsigned int		input=0,repeat=0;
  Weekdays		wd;
  unsigned short	d=0,m=0,h=0,s=0;
  int			y=0;

  #ifndef __SASC_650
    _DateInit();
  #endif
  do
   {printf("----------------------------------------------------------------\n");
    printf("01 : JulianLeapYear            | 02 : GregorianLeapYear\n");
    printf("03 : HeisLeapYear              | 04 : JulianMonthDays\n");
    printf("05 : GregorianMonthDays        | 06 : HeisMonthDays\n");
    printf("07 : JulianYearDays            | 08 : GregorianYearDays\n");
    printf("09 : HeisYearDays              | 10 : JulianDayDiff\n");
    printf("11 : GregorianDayDiff          | 12 : HeisDayDiff\n");
    printf("13 : JulianDaySmaller          | 14 : GregorianDaySmaller\n");
    printf("15 : HeisDaySmaller            | 16 : JulianWeekday\n");
    printf("17 : GregorianWeekday          | 18 : HeisWeekday\n");
    printf("19 : JulianDaysBeforeWeekday   | 20 : GregorianDaysBeforeWeekday\n");
    printf("21 : HeisDaysBeforeWeekday     | 22 : JulianDaysAfterWeekday\n");
    printf("23 : GregorianDaysAfterWeekday | 24 : HeisDaysAfterWeekday\n");
    printf("25 : JulianDiffDate            | 26 : GregorianDiffDate\n");
    printf("27 : HeisDiffDate              | 28 : JYearToScaliger\n");
    printf("29 : GYearToScaliger           | 30 : HYearToScaliger\n");
    printf("31 : ScaligerYearToJ           | 32 : ScaligerYearToG\n");
    printf("33 : ScaligerYearToH           | 34 : JSYearToJD\n");
    printf("35 : GSYearToJD                | 36 : HSYearToJD\n");
    printf("37 : JDtoMJD                   | 38 : MJDtoJD\n");
    printf("39 : JulianToJD                | 40 : GregorianToJD\n");
    printf("41 : HeisToJD                  | 42 : TimeToJD\n");
    printf("43 : JDToTime                  | 44 : GregorianMoonAge\n");
    printf("45 : GregorianEaster           | 46 : TimeZoneFactor\n");
    printf("47 : LMT                       | 48 : TimeToSec\n");
    printf("49 : SecToTime                 | 50 : JulianWeek\n");
    printf("51 : GregorianWeek             | 52 : HeisWeek\n");
    printf("00 : Quit\n");
    printf("It's your turn: ");
    scanf("%u",&input);
    printf("----------------------------------------------------------------\n");
    do
     {switch (input)
        {
         case  0 : break;
         case  1 : if (JulianLeapYear(readintyear()))
                     printf("TRUE\n");
 	           else
 	             printf("FALSE\n");
	           break;
         case  2 : if (GregorianLeapYear(readintyear()))
	             printf("TRUE\n");
 	           else
 	             printf("FALSE\n");
                   break;
         case  3 : if (HeisLeapYear(readintyear()))
 	             printf("TRUE\n");
 	           else
 	             printf("FALSE\n");
	           break;
         case  4 : printf("%u\n",JulianMonthDays(readshortcardmonth(),readintyear()));
                   break;
         case  5 : printf("%u\n",GregorianMonthDays(readshortcardmonth(),readintyear()));
                   break;
         case  6 : printf("%u\n",HeisMonthDays(readshortcardmonth(),readintyear()));
                   break;
         case  7 : printf("%u\n",JulianYearDays(readintyear()));
                   break;
         case  8 : printf("%u\n",GregorianYearDays(readintyear()));
	           break;
         case  9 : printf("%u\n",HeisYearDays(readintyear()));
	           break;
         case 10 : printf("%d\n",JulianDayDiff(readshortcardday(),readshortcardmonth(),readintyear(),readshortcardday(),readshortcardmonth(),readintyear()));
	           break;
         case 11 : printf("%d\n",GregorianDayDiff(readshortcardday(),readshortcardmonth(),readintyear(),readshortcardday(),readshortcardmonth(),readintyear()));
	           break;
         case 12 : printf("%d\n",HeisDayDiff(readshortcardday(),readshortcardmonth(),readintyear(),readshortcardday(),readshortcardmonth(),readintyear()));
	           break;
         case 13 : if (JulianDaySmaller(readshortcardday(),readshortcardmonth(),readintyear(),readshortcardday(),readshortcardmonth(),readintyear()))
 	             printf("TRUE\n");
 	           else
 	             printf("FALSE\n");
	           break;
         case 14 : if (GregorianDaySmaller(readshortcardday(),readshortcardmonth(),readintyear(),readshortcardday(),readshortcardmonth(),readintyear()))
 	             printf("TRUE\n");
 	           else
 	             printf("FALSE\n");
	           break;
         case 15 : if (HeisDaySmaller(readshortcardday(),readshortcardmonth(),readintyear(),readshortcardday(),readshortcardmonth(),readintyear()))
 	             printf("TRUE\n");
 	           else
 	             printf("FALSE\n");
	           break;
         case 16 : wd = JulianWeekday(readshortcardday(),readshortcardmonth(),readintyear());
      	           switch (wd)
      	             {case dayerr    : printf("dayerr!\n");
	                               break;
                      case Monday    : printf("Monday\n");
	                               break;
                      case Tuesday   : printf("Tuesday\n");
	                               break;
                      case Wednesday : printf("Wednesday\n");
	                               break;
                      case Thursday  : printf("Thursday\n");
	                               break;
                      case Friday    : printf("Friday\n");
	                               break;
                      case Saturday  : printf("Saturday\n");
	                               break;
                      case Sunday    : printf("Sunday\n");
                                       break;
                      default        : printf("Illegal Code!\n");
                     }
	           break;
         case 17 : wd = GregorianWeekday(readshortcardday(),readshortcardmonth(),readintyear());
      	           switch (wd)
      	             {case dayerr    : printf("dayerr!\n");
	                               break;
                      case Monday    : printf("Monday\n");
	                               break;
                      case Tuesday   : printf("Tuesday\n");
	                               break;
                      case Wednesday : printf("Wednesday\n");
	                               break;
                      case Thursday  : printf("Thursday\n");
	                               break;
                      case Friday    : printf("Friday\n");
	                               break;
                      case Saturday  : printf("Saturday\n");
	                               break;
                      case Sunday    : printf("Sunday\n");
                                       break;
                      default        : printf("Illegal Code!\n");
                     }
	           break;
         case 18 : wd = HeisWeekday(readshortcardday(),readshortcardmonth(),readintyear());
      	           switch (wd)
      	             {case dayerr    : printf("dayerr!\n");
	                               break;
                      case Monday    : printf("Monday\n");
	                               break;
                      case Tuesday   : printf("Tuesday\n");
	                               break;
                      case Wednesday : printf("Wednesday\n");
	                               break;
                      case Thursday  : printf("Thursday\n");
	                               break;
                      case Friday    : printf("Friday\n");
	                               break;
                      case Saturday  : printf("Saturday\n");
	                               break;
                      case Sunday    : printf("Sunday\n");
                                       break;
                      default        : printf("Illegal Code!\n");
                     }
	           break;
         case 19 : printf("%u\n",JulianDaysBeforeWeekday(readshortcardday(),readshortcardmonth(),readintyear(),readweekday()));
	           break;
         case 20 : printf("%u\n",GregorianDaysBeforeWeekday(readshortcardday(),readshortcardmonth(),readintyear(),readweekday()));
	           break;
         case 21 : printf("%u\n",HeisDaysBeforeWeekday(readshortcardday(),readshortcardmonth(),readintyear(),readweekday()));
	           break;
         case 22 : printf("%u\n",JulianDaysAfterWeekday(readshortcardday(),readshortcardmonth(),readintyear(),readweekday()));
	           break;
         case 23 : printf("%u\n",GregorianDaysAfterWeekday(readshortcardday(),readshortcardmonth(),readintyear(),readweekday()));
	           break;
         case 24 : printf("%u\n",HeisDaysAfterWeekday(readshortcardday(),readshortcardmonth(),readintyear(),readweekday()));
	           break;
         case 25 : JulianDiffDate(readshortcardday(),readshortcardmonth(),readintyear(),readintdays(),&d,&m,&y);
                   printf("%u.%u.%d\n",d,m,y);
	           break;
         case 26 : GregorianDiffDate(readshortcardday(),readshortcardmonth(),readintyear(),readintdays(),&d,&m,&y);
                   printf("%u.%u.%d\n",d,m,y);
	           break;
         case 27 : HeisDiffDate(readshortcardday(),readshortcardmonth(),readintyear(),readintdays(),&d,&m,&y);
                   printf("%u.%u.%d\n",d,m,y);
	           break;
         case 28 : printf("%u\n",JYearToScaliger(readintyear()));
	           break;
         case 29 : printf("%u\n",GYearToScaliger(readintyear()));
	           break;
         case 30 : printf("%u\n",HYearToScaliger(readintyear()));
	           break;
         case 31 : printf("%d\n",ScaligerYearToJ(readcardyear()));
	           break;
         case 32 : printf("%d\n",ScaligerYearToG(readcardyear()));
	           break;
         case 33 : printf("%d\n",ScaligerYearToH(readcardyear()));
	           break;
         case 34 : printf("%u\n",JSYearToJD(readcardyear()));
	           break;
         case 35 : printf("%u\n",GSYearToJD(readcardyear()));
	           break;
         case 36 : printf("%u\n",HSYearToJD(readcardyear()));
	           break;
         case 37 : printf("%u\n",JDtoMJD(readlongcarddays()));
	           break;
         case 38 : printf("%u\n",MJDtoJD(readlongcarddays()));
	           break;
         case 39 : printf("%u\n",JulianToJD(readshortcardday(),readshortcardmonth(),readintyear()));
	           break;
         case 40 : printf("%u\n",GregorianToJD(readshortcardday(),readshortcardmonth(),readintyear()));
	           break;
         case 41 : printf("%u\n",HeisToJD(readshortcardday(),readshortcardmonth(),readintyear()));
	           break;
         case 42 : printf("%f\n",TimeToJD(readshortcardhour(),readshortcardmin(),readshortcardsec()));
                   break;
         case 43 : JDToTime(readrealtime(),&h,&m,&s);
                   printf("%u:%u:%u\n",h,m,s);
	           break;
         case 44 : printf("%u\n",GregorianMoonAge(readshortcardday(),readshortcardmonth(),readintyear()));
	           break;
         case 45 : GregorianEaster(readintyear(),&d,&m);
                   printf("%u.%u.\n",d,m);
	           break;
         case 46 : printf("%d\n",TimeZoneFactor(readshortintdegree()));
	           break;
         case 47 : printf("%d\n",LMT(readlongcardsecs(),readrealmeridian(),readrealpos()));
	           break;
         case 48 : printf("%u\n",TimeToSec(readshortcardhour(),readshortcardmin(),readshortcardsec()));
	           break;
         case 49 : SecToTime(readlongcardsecs(),&h,&m,&s);
                   printf("%u:%u:%u\n",h,m,s);
	           break;
	 case 50 : printf("%u\n",JulianWeek(readshortcardday(),readshortcardmonth(),readintyear()));
		   break;
	 case 51 : printf("%u\n",GregorianWeek(readshortcardday(),readshortcardmonth(),readintyear()));
		   break;
	 case 52 : printf("%u\n",HeisWeek(readshortcardday(),readshortcardmonth(),readintyear()));
		   break;
         default : printf("Wong number! Try again!\n");
        }
      if (input > 0)
        {printf("0 : Menue; >0 : test again - ");
         scanf("%u",&repeat);
        }
      else
        repeat = 0;
     }
    while (repeat != 0);
   }
  while (input != 0);
 }
