{ libhdate Copyright 2004-2005 Yaacov Zamir Copyright 2005 Ido Kanner This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. History: 11/10/2005 - Initial Translation of version 0.31.0 } {$MODE OBJFPC} unit hdate_obj; interface uses cTypes, hDate, SysUtils; type THdate = class private h : Phdate_struct; public constructor Create; virtual; destructor Destroy; override; //////////////////////////////////////// //////////////////////////////////////// (** @brief compute date structure from the Gregorian date @param d Day of month 1..31 @param m Month 1..12 , if m or d is 0 return current date. @param y Year in 4 digits e.g. 2001 *) procedure set_gdate (d, m, y : cInt); (** @brief compute date structure from the Hebrew date @param d Day of month 1..31 @param m Month 1..14 , if m or d is 0 return current date. @param y Year in 4 digits e.g. 5731 *) procedure set_hdate (d, m, y : cInt); (** @brief compute date structure from the Julian day @param jd the julian day number. *) procedure set_jd (jd : cInt); //////////////////////////////////////// //////////////////////////////////////// (** @brief get formated hebrew date. return the short ( e.g. "1 Tishrey" ) or long (e.g. "Tuesday 18 Tishrey 5763 Hol hamoed Sukot" ) formated date. @param diaspora if true give diaspora holydays. @param s short flag. @return a static string of foramted date *) function get_format_date (diaspora, s : cInt) : String; (** @brief get name of week day. @param s short flag true - returns a short string: sun, false returns: sunday. @return a static string of the day of the week *) function get_day_of_week_string (s : cInt) : String; (** @brief get name month. @param s short flag true - returns a short string: Mar, false returns: March. @return a static string of month name *) function get_month_string (s : cInt) : String; (** @brief get name hebrew month. @param s short flag true - returns a short string. @return a static string of hebrew month name *) function get_hebrew_month_string (s : cInt) : String; (** @brief get name hebrew holiday. @param s short flag true - returns a short string. @return a static string of hebrew holiday name *) function get_holyday_string (diaspora, s : cInt) : String; (** @brief get the hebrew holiday type. @return the holiday type (1- regular holyday, 2- three regels, 3- tzom, 0- no holiday) *) function get_holyday_type (diaspora : cInt) : cInt; (** @brief get name hebrew parasha. @param diaspora if true give diaspora parashot. @param s short flag true - returns a short string. @return a static string of hebrew parash name *) function get_parasha_string (diaspora, s : cInt) : String; (** @brief get name hebrew year. @return a static string of hebrew year *) function get_hebrew_year_string : String; (** @brief get name hebrew hebrew day of the month @return a static string of hebrew day of the month *) function get_hebrew_day_string : String; //////////////////////////////////////// //////////////////////////////////////// (** @brief get parash number @param diaspora if true give diaspora parashot. @return the hebrew parasha number *) function get_parasha (diaspora : cInt) : cInt; (** @brief get holiday number @param diaspora if true give diaspora holidays. @return the hebrew holiday number *) function get_holyday (diaspora : cInt) : cInt; (** @brief get Gregorian day of the month @return the Gregorian day of the month *) function get_gday : cInt; (** @brief get Gregorian month @return the Gregorian month *) function get_gmonth : cInt; (** @brief get Gregorian year @return the Gregorian year *) function get_gyear : cInt; (** @brief get Hebrew day of the month @return the Hebrew day of the month *) function get_hday : cInt; (** @brief get Hebrew month @return the Hebrew month *) function get_hmonth : cInt; (** @brief get Hebrew year @return the Hebrew year *) function get_hyear : cInt; (** @brief get the day of the week @return the day of the week *) function get_day_of_the_week : cInt; (** @brief get the size of the Hebrew year in days @return the size of the Hebrew year in days *) function get_size_of_year : cInt; (** @brief get the day of the week of hebrew new years @return the day of the week of hebrew new years *) function get_new_year_day_of_the_week : cInt; (** @brief get the Julian day number @return the Julian day number *) function get_julian : cInt; (** @brief get the number of days sice Tishrey I @return the the number of days sice Tishrey I *) function get_days : cInt; (** @brief get the number of weeks sice Tishrey I @return the the number of weeks sice Tishrey I *) function get_weeks : cInt; //////////////////////////////////////// //////////////////////////////////////// (** @brief sunrise time @param longitude longitude to use in calculations degrees, negative values are east @param latitude latitude to use in calculations degrees, negative values are south @param tz time zone @return sunrise in minutes after midnight (00:00) *) function get_sunrise (latitude, longitude : cDouble; tz : cInt) : cInt; (** @brief sunset time @param longitude longitude to use in calculations degrees, negative values are east @param latitude latitude to use in calculations degrees, negative values are south @param tz time zone @return sunset in minutes after midnight (00:00) *) function get_sunset (latitude, longitude : cDouble; tz : cInt) : cInt; end; implementation constructor THdate.Create; begin h := new_hdate; end; destructor THdate.Destroy; begin delete_hdate(h); inherited Destroy; end; procedure THdate.set_gdate (d, m, y : cInt); begin hdate_set_gdate (h, d, m, y); end; procedure THdate.set_hdate (d, m, y : cInt); begin hdate_set_hdate (h, d, m, y); end; procedure THdate.set_jd (jd : cInt); begin hdate_set_jd (h, jd); end; function THdate.get_format_date (diaspora, s : cInt) : String; begin Result := StrPas (hdate_get_format_date (h, diaspora, s)); end; function THdate.get_day_of_week_string (s : cInt) : String; begin Result := StrPas (hdate_get_day_string (h^.hd_dw, s)); end; function THdate.get_month_string (s : cInt) : String; begin Result := StrPas (hdate_get_month_string (h^.gd_mon, s)); end; function THdate.get_hebrew_month_string (s : cInt) : String; begin Result := StrPas (hdate_get_hebrew_month_string (h^.hd_mon, s)); end; function THdate.get_holyday_string (diaspora, s : cInt) : String; var holyday : cInt; begin holyday := hdate_get_holyday (h, diaspora); Result := StrPas (hdate_get_holyday_string (holyday, s)); end; function THdate.get_holyday_type (diaspora : cInt) : cInt; var holyday : cInt; begin holyday := hdate_get_holyday (h, diaspora); Result := hdate_get_holyday_type (holyday); end; function THdate.get_parasha_string (diaspora, s : cInt) : String; var parasha : cInt; begin parasha := hdate_get_parasha (h, diaspora); Result := StrPas (hdate_get_parasha_string (parasha, s)); end; function THdate.get_hebrew_year_string : String; begin Result := StrPas (hdate_get_int_string (h^.hd_year)); end; function THdate.get_hebrew_day_string : String; begin Result := StrPas (hdate_get_int_string (h^.hd_day)); end; function THdate.get_parasha (diaspora : cInt) : cInt; begin Result := hdate_get_parasha (h, diaspora); end; function THdate.get_holyday (diaspora : cInt) : cInt; begin Result := hdate_get_holyday (h, diaspora); end; function THdate.get_gday : cInt; begin Result := hdate_get_gday (h); end; function THdate.get_gmonth : cInt; begin Result := hdate_get_gmonth (h); end; function THdate.get_gyear : cInt; begin Result := hdate_get_gyear (h); end; function THdate.get_hday : cInt; begin Result := hdate_get_hday (h); end; function THdate.get_hmonth : cInt; begin Result := hdate_get_hmonth (h); end; function THdate.get_hyear : cInt; begin Result :=hdate_get_hyear (h); end; function THdate.get_day_of_the_week : cInt; begin Result := hdate_get_day_of_the_week (h); end; function THdate.get_size_of_year : cInt; begin Result := hdate_get_size_of_year (h); end; function THdate.get_new_year_day_of_the_week : cInt; begin Result := hdate_get_new_year_day_of_the_week (h); end; function THdate.get_julian : cInt; begin Result := hdate_get_julian (h); end; function THdate.get_days : cInt; begin Result := hdate_get_days (h); end; function THdate.get_weeks : cInt; begin Result := hdate_get_weeks (h); end; function THdate.get_sunrise (latitude, longitude : cDouble; tz : cInt) : cInt; var sunrise, sunset : cInt; begin hdate_get_utc_sun_time (h^.gd_day, h^.gd_mon, h^.gd_year, latitude, longitude, @sunrise, @sunset); Result := sunrise + tz * 60; end; function THdate.get_sunset (latitude, longitude : cDouble; tz : cInt) : cInt; var sunrise, sunset : cInt; begin hdate_get_utc_sun_time (h^.gd_day, h^.gd_mon, h^.gd_year, latitude, longitude, @sunrise, @sunset); Result := sunset + tz * 60; end; end.