/*
**
** Copyright © 1997-2000 Dipl.-Inform. Kai Hofmann. All rights reserved.
** Registered Amiga shared library!
**
** $VER: date_protos.h 33.320 (02.01.00)
*/

 #ifndef CLIB_DATE_PROTOS_H
  #define CLIB_DATE_PROTOS_H

  #ifndef EXEC_TYPES_H
   #include <exec/types.h>
  #endif
  #ifndef LIBRARIES_DATE_H
   #include <libraries/date.h>
  #endif

  bool date_JulianLeapYear(const long year);
  bool date_GregorianLeapYear(const long year);
  bool date_HeisLeapYear(const long year);
  unsigned short date_JulianMonthDays(const unsigned short month, const long year);
  unsigned short date_GregorianMonthDays(const unsigned short month, const long year);
  unsigned short date_HeisMonthDays(const unsigned short month, const long year);
  unsigned short date_JulianYearDays(const long year);
  unsigned short date_GregorianYearDays(const long year);
  unsigned short date_HeisYearDays(const long year);
  short date_Compare2Dates(const unsigned short day1, const unsigned short month1, const long year1, const unsigned short day2, const unsigned short month2, const long year2);
  long date_JulianDayDiff(const unsigned short day1, unsigned short month1, long year1, const unsigned short day2, unsigned short month2, long year2);
  long date_GregorianDayDiff(const unsigned short day1, unsigned short month1, long year1, const unsigned short day2, unsigned short month2, long year2);
  long date_HeisDayDiff(const unsigned short day1, unsigned short month1, long year1, const unsigned short day2, unsigned short month2, long year2);
  date_Weekdays date_JulianWeekday(const unsigned short day, unsigned short month, long year);
  date_Weekdays date_GregorianWeekday(const unsigned short day, unsigned short month, long year);
  date_Weekdays date_HeisWeekday(const unsigned short day, unsigned short month, long year);
  unsigned short date_JulianDaysBeforeWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday);
  unsigned short date_GregorianDaysBeforeWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday);
  unsigned short date_HeisDaysBeforeWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday);
  unsigned short date_JulianDaysAfterWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday);
  unsigned short date_GregorianDaysAfterWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday);
  unsigned short date_HeisDaysAfterWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday);
  unsigned long date_JYearToScaliger(const long year);
  unsigned long date_GYearToScaliger(const long year);
  unsigned long date_HYearToScaliger(const long year);
  long date_ScaligerYearToJ(const unsigned long syear);
  long date_ScaligerYearToG(const unsigned long syear);
  long date_ScaligerYearToH(const unsigned long syear);
  unsigned long date_JSYearToJD(const unsigned long syear);
  unsigned long date_GSYearToJD(const unsigned long syear);
  unsigned long date_HSYearToJD(const unsigned long syear);
  unsigned long date_JDtoMJD(const unsigned long jd);
  unsigned long date_MJDtoJD(const unsigned long mjd);
  unsigned long date_JulianToJD(const unsigned short day, const unsigned short month, const long year);
  unsigned long date_GregorianToJD(const unsigned short day, const unsigned short month, const long year);
  unsigned long date_HeisToJD(const unsigned short day, const unsigned short month, const long year);
  unsigned short date_GregorianMoonAge(const unsigned short day, const unsigned short month, const long year);
  void date_JulianEaster(const long year, unsigned short *const dday, unsigned short *const dmonth);
  void date_GregorianEaster(const long year, unsigned short *const dday, unsigned short *const dmonth);
  void date_HeisEaster(const long year, unsigned short *const dday, unsigned short *const dmonth);
  unsigned short date_JulianWeek(const unsigned short day, const unsigned short month, const long year);
  unsigned short date_GregorianWeek(const unsigned short day, const unsigned short month, const long year);
  unsigned short date_HeisWeek(const unsigned short day, const unsigned short month, const long year);
  unsigned short date_WeekdayText(const date_Weekdays wday, char *const wtext, const date_Languages lang);
  unsigned short date_MonthText(const unsigned short month, char *const mtext, const date_Languages lang);
  unsigned short date_WeekdayShortText(const date_Weekdays wday, char *const wtext, const date_Languages lang);
  unsigned short date_MonthShortText(const unsigned short month, char *const mtext, const date_Languages lang);
  void date_DateText(const date_DateTexts text, char *const mtext, const date_Languages lang, const date_WordClass wc);
  void date_JDToJulian(const unsigned long jd, unsigned short *const day, unsigned short *const month, long *const year);
  void date_JDToGregorian(const unsigned long jd, unsigned short *const day, unsigned short *const month, long *const year);
  void date_JDToHeis(const unsigned long jd, unsigned short *const day, unsigned short *const month, long *const year);
  unsigned long date_GregorianMoonPhase(const unsigned short day, const unsigned short month, const long year, const date_MoonPhases phase);
  bool date_ValidJulianDate(const unsigned short day, const unsigned short month, const long year);
  bool date_ValidGregorianDate(const unsigned short day, const unsigned short month, const long year);
  bool date_ValidHeisDate(const unsigned short day, const unsigned short month, const long year);
  void date_SetCountry(const date_Countries country);
  void date_SetFirstWeekday(const date_Weekdays weekday);
  long date_SupplementCentury(const unsigned short year, const long actualyear);
  unsigned short date_JulianLastMonthDay(const unsigned short month, const long year);
  unsigned short date_GregorianLastMonthDay(const unsigned short month, const long year);
  unsigned short date_HeisLastMonthDay(const unsigned short month, const long year);
  void date_NextValidJulianDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_NextValidGregorianDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_NextValidHeisDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_PreviousValidJulianDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_PreviousValidGregorianDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_PreviousValidHeisDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_FormatDate(const char *const fmt, const unsigned short day, const unsigned short month, const long year, const date_Languages lang, char *const tstr, date_Calendars calendar);
  short date_ParseDate(const char *const fmt, const char *const dstr, const date_Languages lang, const date_Calendars calendar, const unsigned long actualjd, unsigned short *const day, unsigned short *const month, long *const year, char *const pfmt, date_Languages *const plang);
  void date_JulianWWtoDM(const date_Weekdays weekday, const unsigned short week, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_GregorianWWtoDM(const date_Weekdays weekday, const unsigned short week, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_HeisWWtoDM(const date_Weekdays weekday, const unsigned short week, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  long date_DateToNum(const unsigned short day, const unsigned short month, const long year);
  void date_NumToDate(long num, unsigned short *const day, unsigned short *const month, long *const year);
  void date_JulianDiffDateRange(const unsigned short day, const unsigned short month, const long year, long days, long months, long years, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_GregorianDiffDateRange(const unsigned short day, const unsigned short month, const long year, long days, long months, long years, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_HeisDiffDateRange(const unsigned short day, const unsigned short month, const long year, long days, long months, long years, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_JulianRangeDiff(unsigned short day1, unsigned short month1, long year1, unsigned short day2, unsigned short month2, long year2, short *const days, short *const months, long *const years);
  void date_GregorianRangeDiff(unsigned short day1, unsigned short month1, long year1, unsigned short day2, unsigned short month2, long year2, short *const days, short *const months, long *const years);
  void date_HeisRangeDiff(unsigned short day1, unsigned short month1, long year1, unsigned short day2, unsigned short month2, long year2, short *const days, short *const months, long *const years);

  bool date_LeapYear(const long year, const date_Calendars calendar);
  unsigned short date_MonthDays(const unsigned short month, const long year, const date_Calendars calendar);
  unsigned short date_LastMonthDay(const unsigned short month, const long year, const date_Calendars calendar);
  unsigned short date_YearDays(const long year, const date_Calendars calendar);
  long date_DayDiff(const unsigned short day1, unsigned short month1, long year1, const unsigned short day2, unsigned short month2, long year2, const date_Calendars calendar);
  date_Weekdays date_Weekday(const unsigned short day, unsigned short month, long year, const date_Calendars calendar);
  unsigned short date_DaysBeforeWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday, const date_Calendars calendar);
  unsigned short date_DaysAfterWeekday(const unsigned short day, const unsigned short month, const long year, const date_Weekdays weekday, const date_Calendars calendar);
  unsigned long date_YearToScaliger(const long year, const date_Calendars calendar);
  long date_ScaligerYearToYear(const unsigned long syear, const date_Calendars calendar);
  unsigned long date_SYearToJD(const unsigned long syear, const date_Calendars calendar);
  unsigned long date_DateToJD(const unsigned short day, const unsigned short month, const long year, const date_Calendars calendar);
  void date_Easter(const long year, unsigned short *const dday, unsigned short *const dmonth, const date_Calendars calendar);
  unsigned short date_Week(const unsigned short day, const unsigned short month, const long year, const date_Calendars calendar);
  void date_JDToDate(const unsigned long jd, unsigned short *const day, unsigned short *const month, long *const year, const date_Calendars calendar);
  bool date_ValidDate(const unsigned short day, const unsigned short month, const long year, const date_Calendars calendar);
  void date_NextValidDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear, const date_Calendars calendar);
  void date_PreviousValidDate(const unsigned short day, const unsigned short month, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear, const date_Calendars calendar);
  void date_WWtoDM(const date_Weekdays weekday, const unsigned short week, const long year, unsigned short *const dday, unsigned short *const dmonth, long *const dyear, const date_Calendars calendar);
  void date_DiffDateRange(const unsigned short day, const unsigned short month, const long year, long days, long months, long years, unsigned short *const dday, unsigned short *const dmonth, long *const dyear, const date_Calendars calendar);
  void date_RangeDiff(unsigned short day1, unsigned short month1, long year1, unsigned short day2, unsigned short month2, long year2, short *const days, short *const months, long *const years, const date_Calendars calendar);

  float time_TimeToJD(const unsigned short hour, const unsigned short min, const unsigned short sec);
  void time_JDToTime(float jd, unsigned short *const rhour, unsigned short *const rmin, unsigned short *const rsec);
  short time_TimeZoneFactor(const short degree);
  long time_LMT(const unsigned long secs, const float meridiandegree, const float posdegree);
  unsigned long time_TimeToSec(const unsigned short hour, const unsigned short min, const unsigned short sec);
  void time_SecToTime(unsigned long secs, unsigned short *const hour, unsigned short *const min, unsigned short *const sec);
  short time_Compare2Times(const unsigned short hour1, const unsigned short min1, const unsigned short sec1, const unsigned short hour2, const unsigned short min2, const unsigned short sec2);
  bool time_ValidTime(const unsigned short hour, const unsigned short min, const unsigned short sec);
  long time_TimeDiff(const unsigned short hour1, const unsigned short min1, const unsigned short sec1, const unsigned short hour2, const unsigned short min2, const unsigned short sec2);
  void time_DiffTime(const unsigned short hour, const unsigned short min, const unsigned short sec, long diffsecs, unsigned short *const rhour, unsigned short *const rmin, unsigned short *const rsec);
  void time_FormatTime(const char *const fmt, const time_ChangeDay ChangeDay, const unsigned short ChangeHour, const bool DST, const unsigned short hour, const unsigned short min, const unsigned short sec, const short zonemin, char *const tstr);
  short time_ParseTime(const char *const fmt, const char *const tstr, time_ChangeDay ChangeDay, unsigned short ChangeHour, bool *const DST, unsigned short *const hour, unsigned short *const min, unsigned short *const sec, short *const zonemin, char *const pfmt);
  unsigned long time_TimeToNum(const unsigned short hour, const unsigned short min, const unsigned short sec);
  void time_NumToTime(unsigned long num, unsigned short *const rhour, unsigned short *const rmin, unsigned short *const rsec);

  void datetime_LocalToGMT(const unsigned long ljd, const unsigned long lsecs, const bool DST, const short zonemin, unsigned long *const gjd, unsigned long *const gsecs);
  void datetime_GMTToLocal(const unsigned long gjd, const unsigned long gsecs, const short zonemin, const time_ChangeDay ChangePrevDay, const time_ChangeDay ChangeDay, const time_ChangeDay ChangeNextDay, const unsigned short ChangeHour, unsigned long *const ljd, unsigned long *const lsecs, bool *const DST);

  /* This are old routines that should not longer be used! They appear here only for compatibility to old releases! */
  bool date_JulianDaySmaller(const unsigned short day1, const unsigned short month1, const long year1, const unsigned short day2, const unsigned short month2, const long year2);
  bool date_GregorianDaySmaller(const unsigned short day1, const unsigned short month1, const long year1, const unsigned short day2, const unsigned short month2, const long year2);
  bool date_HeisDaySmaller(const unsigned short day1, const unsigned short month1, const long year1, const unsigned short day2, const unsigned short month2, const long year2);
  bool date_JulianDayGreater(const unsigned short day1, const unsigned short month1, const long year1, const unsigned short day2, const unsigned short month2, const long year2);
  bool date_GregorianDayGreater(const unsigned short day1, const unsigned short month1, const long year1, const unsigned short day2, const unsigned short month2, const long year2);
  bool date_HeisDayGreater(const unsigned short day1, const unsigned short month1, const long year1, const unsigned short day2, const unsigned short month2, const long year2);
  void date_JulianDiffDate(const unsigned short day, const unsigned short month, const long year, long days, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_GregorianDiffDate(const unsigned short day, const unsigned short month, const long year, long days, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);
  void date_HeisDiffDate(const unsigned short day, const unsigned short month, const long year, long days, unsigned short *const dday, unsigned short *const dmonth, long *const dyear);

 #endif	 /* CLIB_DATE_PROTOS_H */
