mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
ported ext/calendar
This commit is contained in:
parent
29dc15b0bb
commit
fd279836cf
@ -178,8 +178,8 @@ enum cal_name_type_t {
|
||||
CAL_NUM_CALS
|
||||
};
|
||||
|
||||
typedef long int (*cal_to_jd_func_t) (int month, int day, int year);
|
||||
typedef void (*cal_from_jd_func_t) (long int jd, int *year, int *month, int *day);
|
||||
typedef php_int_t (*cal_to_jd_func_t) (int month, int day, int year);
|
||||
typedef void (*cal_from_jd_func_t) (php_int_t jd, int *year, int *month, int *day);
|
||||
typedef char *(*cal_as_string_func_t) (int year, int month, int day);
|
||||
|
||||
struct cal_entry_t {
|
||||
@ -289,10 +289,10 @@ static void _php_cal_info(int cal, zval *ret)
|
||||
Returns information about a particular calendar */
|
||||
PHP_FUNCTION(cal_info)
|
||||
{
|
||||
long cal = -1;
|
||||
php_int_t cal = -1;
|
||||
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &cal) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|i", &cal) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -324,16 +324,16 @@ PHP_FUNCTION(cal_info)
|
||||
Returns the number of days in a month for a given year and calendar */
|
||||
PHP_FUNCTION(cal_days_in_month)
|
||||
{
|
||||
long cal, month, year;
|
||||
php_int_t cal, month, year;
|
||||
struct cal_entry_t *calendar;
|
||||
long sdn_start, sdn_next;
|
||||
php_int_t sdn_start, sdn_next;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &cal, &month, &year) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iii", &cal, &month, &year) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (cal < 0 || cal >= CAL_NUM_CALS) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld.", cal);
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %pd.", cal);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -368,14 +368,14 @@ PHP_FUNCTION(cal_days_in_month)
|
||||
Converts from a supported calendar to Julian Day Count */
|
||||
PHP_FUNCTION(cal_to_jd)
|
||||
{
|
||||
long cal, month, day, year;
|
||||
php_int_t cal, month, day, year;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &cal, &month, &day, &year) != SUCCESS) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iiii", &cal, &month, &day, &year) != SUCCESS) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (cal < 0 || cal >= CAL_NUM_CALS) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld.", cal);
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %pd.", cal);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -387,17 +387,17 @@ PHP_FUNCTION(cal_to_jd)
|
||||
Converts from Julian Day Count to a supported calendar and return extended information */
|
||||
PHP_FUNCTION(cal_from_jd)
|
||||
{
|
||||
long jd, cal;
|
||||
php_int_t jd, cal;
|
||||
int month, day, year, dow;
|
||||
char date[16];
|
||||
struct cal_entry_t *calendar;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "ll", &jd, &cal) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "ii", &jd, &cal) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (cal < 0 || cal >= CAL_NUM_CALS) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld", cal);
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %pd", cal);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
calendar = &cal_conversion_table[cal];
|
||||
@ -434,11 +434,11 @@ PHP_FUNCTION(cal_from_jd)
|
||||
Converts a julian day count to a gregorian calendar date */
|
||||
PHP_FUNCTION(jdtogregorian)
|
||||
{
|
||||
long julday;
|
||||
php_int_t julday;
|
||||
int year, month, day;
|
||||
char date[16];
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i", &julday) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -453,9 +453,9 @@ PHP_FUNCTION(jdtogregorian)
|
||||
Converts a gregorian calendar date to julian day count */
|
||||
PHP_FUNCTION(gregoriantojd)
|
||||
{
|
||||
long year, month, day;
|
||||
php_int_t year, month, day;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iii", &month, &day, &year) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -467,11 +467,11 @@ PHP_FUNCTION(gregoriantojd)
|
||||
Convert a julian day count to a julian calendar date */
|
||||
PHP_FUNCTION(jdtojulian)
|
||||
{
|
||||
long julday;
|
||||
php_int_t julday;
|
||||
int year, month, day;
|
||||
char date[16];
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i", &julday) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -486,9 +486,9 @@ PHP_FUNCTION(jdtojulian)
|
||||
Converts a julian calendar date to julian day count */
|
||||
PHP_FUNCTION(juliantojd)
|
||||
{
|
||||
long year, month, day;
|
||||
php_int_t year, month, day;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iii", &month, &day, &year) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -595,13 +595,13 @@ static char *heb_number_to_chars(int n, int fl, char **ret)
|
||||
Converts a julian day count to a jewish calendar date */
|
||||
PHP_FUNCTION(jdtojewish)
|
||||
{
|
||||
long julday, fl = 0;
|
||||
php_int_t julday, fl = 0;
|
||||
zend_bool heb = 0;
|
||||
int year, month, day;
|
||||
char date[16], hebdate[32];
|
||||
char *dayp, *yearp;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|bl", &julday, &heb, &fl) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i|bi", &julday, &heb, &fl) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -634,9 +634,9 @@ PHP_FUNCTION(jdtojewish)
|
||||
Converts a jewish calendar date to a julian day count */
|
||||
PHP_FUNCTION(jewishtojd)
|
||||
{
|
||||
long year, month, day;
|
||||
php_int_t year, month, day;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iii", &month, &day, &year) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -648,11 +648,11 @@ PHP_FUNCTION(jewishtojd)
|
||||
Converts a julian day count to a french republic calendar date */
|
||||
PHP_FUNCTION(jdtofrench)
|
||||
{
|
||||
long julday;
|
||||
php_int_t julday;
|
||||
int year, month, day;
|
||||
char date[16];
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i", &julday) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -667,9 +667,9 @@ PHP_FUNCTION(jdtofrench)
|
||||
Converts a french republic calendar date to julian day count */
|
||||
PHP_FUNCTION(frenchtojd)
|
||||
{
|
||||
long year, month, day;
|
||||
php_int_t year, month, day;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iii", &month, &day, &year) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -681,11 +681,11 @@ PHP_FUNCTION(frenchtojd)
|
||||
Returns name or number of day of week from julian day count */
|
||||
PHP_FUNCTION(jddayofweek)
|
||||
{
|
||||
long julday, mode = CAL_DOW_DAYNO;
|
||||
php_int_t julday, mode = CAL_DOW_DAYNO;
|
||||
int day;
|
||||
char *daynamel, *daynames;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &julday, &mode) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i|i", &julday, &mode) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -712,11 +712,11 @@ PHP_FUNCTION(jddayofweek)
|
||||
Returns name of month for julian day count */
|
||||
PHP_FUNCTION(jdmonthname)
|
||||
{
|
||||
long julday, mode;
|
||||
php_int_t julday, mode;
|
||||
char *monthname = NULL;
|
||||
int month, day, year;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &julday, &mode) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ii", &julday, &mode) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include "sdncal.h"
|
||||
|
||||
int DayOfWeek(
|
||||
long int sdn)
|
||||
php_int_t sdn)
|
||||
{
|
||||
int dow;
|
||||
|
||||
|
@ -24,14 +24,14 @@
|
||||
#include "sdncal.h"
|
||||
#include <time.h>
|
||||
|
||||
static void _cal_easter(INTERNAL_FUNCTION_PARAMETERS, int gm)
|
||||
static void _cal_easter(INTERNAL_FUNCTION_PARAMETERS, php_int_t gm)
|
||||
{
|
||||
|
||||
/* based on code by Simon Kershaw, <webmaster@ely.anglican.org> */
|
||||
|
||||
struct tm te;
|
||||
long year, golden, solar, lunar, pfm, dom, tmp, easter, result;
|
||||
long method = CAL_EASTER_DEFAULT;
|
||||
php_int_t year, golden, solar, lunar, pfm, dom, tmp, easter, result;
|
||||
php_int_t method = CAL_EASTER_DEFAULT;
|
||||
|
||||
/* Default to the current year if year parameter is not given */
|
||||
{
|
||||
@ -47,7 +47,7 @@ static void _cal_easter(INTERNAL_FUNCTION_PARAMETERS, int gm)
|
||||
}
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
||||
"|ll", &year, &method) == FAILURE) {
|
||||
"|ii", &year, &method) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -93,12 +93,12 @@
|
||||
#define LAST_VALID 2380952
|
||||
|
||||
void SdnToFrench(
|
||||
long int sdn,
|
||||
php_int_t sdn,
|
||||
int *pYear,
|
||||
int *pMonth,
|
||||
int *pDay)
|
||||
{
|
||||
long int temp;
|
||||
php_int_t temp;
|
||||
int dayOfYear;
|
||||
|
||||
if (sdn < FIRST_VALID || sdn > LAST_VALID) {
|
||||
@ -114,7 +114,7 @@ void SdnToFrench(
|
||||
*pDay = dayOfYear % DAYS_PER_MONTH + 1;
|
||||
}
|
||||
|
||||
long int FrenchToSdn(
|
||||
php_int_t FrenchToSdn(
|
||||
int year,
|
||||
int month,
|
||||
int day)
|
||||
|
@ -135,7 +135,7 @@
|
||||
#define DAYS_PER_400_YEARS 146097
|
||||
|
||||
void SdnToGregorian(
|
||||
long int sdn,
|
||||
php_int_t sdn,
|
||||
int *pYear,
|
||||
int *pMonth,
|
||||
int *pDay)
|
||||
@ -144,7 +144,7 @@ void SdnToGregorian(
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
long int temp;
|
||||
php_int_t temp;
|
||||
int dayOfYear;
|
||||
|
||||
if (sdn <= 0 ||
|
||||
@ -190,7 +190,7 @@ fail:
|
||||
*pDay = 0;
|
||||
}
|
||||
|
||||
long int GregorianToSdn(
|
||||
php_int_t GregorianToSdn(
|
||||
int inputYear,
|
||||
int inputMonth,
|
||||
int inputDay)
|
||||
|
@ -382,12 +382,12 @@ char *JewishMonthHebName[14] =
|
||||
* (called dehiyyot) delays it. These 4 rules can delay the start of the
|
||||
* year by as much as 2 days.
|
||||
*/
|
||||
static long int Tishri1(
|
||||
static php_int_t Tishri1(
|
||||
int metonicYear,
|
||||
long int moladDay,
|
||||
long int moladHalakim)
|
||||
php_int_t moladDay,
|
||||
php_int_t moladHalakim)
|
||||
{
|
||||
long int tishri1;
|
||||
php_int_t tishri1;
|
||||
int dow;
|
||||
int leapYear;
|
||||
int lastWasLeapYear;
|
||||
@ -429,10 +429,10 @@ static long int Tishri1(
|
||||
*/
|
||||
static void MoladOfMetonicCycle(
|
||||
int metonicCycle,
|
||||
long int *pMoladDay,
|
||||
long int *pMoladHalakim)
|
||||
php_int_t *pMoladDay,
|
||||
php_int_t *pMoladHalakim)
|
||||
{
|
||||
register unsigned long int r1, r2, d1, d2;
|
||||
register php_uint_t r1, r2, d1, d2;
|
||||
|
||||
/* Start with the time of the first molad after creation. */
|
||||
r1 = NEW_MOON_OF_CREATION;
|
||||
@ -468,14 +468,14 @@ static void MoladOfMetonicCycle(
|
||||
* us to avoid calculating the length of the year in most cases.
|
||||
*/
|
||||
static void FindTishriMolad(
|
||||
long int inputDay,
|
||||
php_int_t inputDay,
|
||||
int *pMetonicCycle,
|
||||
int *pMetonicYear,
|
||||
long int *pMoladDay,
|
||||
long int *pMoladHalakim)
|
||||
php_int_t *pMoladDay,
|
||||
php_int_t *pMoladHalakim)
|
||||
{
|
||||
long int moladDay;
|
||||
long int moladHalakim;
|
||||
php_int_t moladDay;
|
||||
php_int_t moladHalakim;
|
||||
int metonicCycle;
|
||||
int metonicYear;
|
||||
|
||||
@ -523,8 +523,8 @@ static void FindStartOfYear(
|
||||
int year,
|
||||
int *pMetonicCycle,
|
||||
int *pMetonicYear,
|
||||
long int *pMoladDay,
|
||||
long int *pMoladHalakim,
|
||||
php_int_t *pMoladDay,
|
||||
php_int_t *pMoladHalakim,
|
||||
int *pTishri1)
|
||||
{
|
||||
*pMetonicCycle = (year - 1) / 19;
|
||||
@ -546,14 +546,14 @@ static void FindStartOfYear(
|
||||
* range 1 to 13 inclusive; *pDay will be in the range 1 to 30 inclusive.
|
||||
*/
|
||||
void SdnToJewish(
|
||||
long int sdn,
|
||||
php_int_t sdn,
|
||||
int *pYear,
|
||||
int *pMonth,
|
||||
int *pDay)
|
||||
{
|
||||
long int inputDay;
|
||||
long int day;
|
||||
long int halakim;
|
||||
php_int_t inputDay;
|
||||
php_int_t day;
|
||||
php_int_t halakim;
|
||||
int metonicCycle;
|
||||
int metonicYear;
|
||||
int tishri1;
|
||||
@ -684,18 +684,18 @@ void SdnToJewish(
|
||||
* value. To verify that a date is valid, convert it to SDN and then back
|
||||
* and compare with the original.
|
||||
*/
|
||||
long int JewishToSdn(
|
||||
php_int_t JewishToSdn(
|
||||
int year,
|
||||
int month,
|
||||
int day)
|
||||
{
|
||||
long int sdn;
|
||||
php_int_t sdn;
|
||||
int metonicCycle;
|
||||
int metonicYear;
|
||||
int tishri1;
|
||||
int tishri1After;
|
||||
long int moladDay;
|
||||
long int moladHalakim;
|
||||
php_int_t moladDay;
|
||||
php_int_t moladHalakim;
|
||||
int yearLength;
|
||||
int lengthOfAdarIAndII;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
*
|
||||
* void
|
||||
* SdnToJulian(
|
||||
* long int sdn,
|
||||
* php_int_t sdn,
|
||||
* int *pYear,
|
||||
* int *pMonth,
|
||||
* int *pDay);
|
||||
@ -21,7 +21,7 @@
|
||||
* will be >= -4713 and != 0; *pMonth will be in the range 1 to 12
|
||||
* inclusive; *pDay will be in the range 1 to 31 inclusive.
|
||||
*
|
||||
* long int
|
||||
* php_int_t
|
||||
* JulianToSdn(
|
||||
* int inputYear,
|
||||
* int inputMonth,
|
||||
@ -153,7 +153,7 @@
|
||||
#define DAYS_PER_4_YEARS 1461
|
||||
|
||||
void SdnToJulian(
|
||||
long int sdn,
|
||||
php_int_t sdn,
|
||||
int *pYear,
|
||||
int *pMonth,
|
||||
int *pDay)
|
||||
@ -161,7 +161,7 @@ void SdnToJulian(
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
long int temp;
|
||||
php_int_t temp;
|
||||
int dayOfYear;
|
||||
|
||||
if (sdn <= 0) {
|
||||
@ -212,7 +212,7 @@ fail:
|
||||
*pDay = 0;
|
||||
}
|
||||
|
||||
long int JulianToSdn(
|
||||
php_int_t JulianToSdn(
|
||||
int inputYear,
|
||||
int inputMonth,
|
||||
int inputDay)
|
||||
|
@ -53,7 +53,7 @@
|
||||
*
|
||||
* int y1, m1, d1;
|
||||
* int y2, m2, d2;
|
||||
* long int sdn;
|
||||
* php_int_t sdn;
|
||||
* ...
|
||||
* sdn = GregorianToSdn(y1, m1, d1);
|
||||
* if (sdn > 0) {
|
||||
@ -65,19 +65,21 @@
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#include "php.h"
|
||||
|
||||
/* Gregorian calendar conversions. */
|
||||
void SdnToGregorian(long int sdn, int *pYear, int *pMonth, int *pDay);
|
||||
long int GregorianToSdn(int year, int month, int day);
|
||||
void SdnToGregorian(php_int_t sdn, int *pYear, int *pMonth, int *pDay);
|
||||
php_int_t GregorianToSdn(int year, int month, int day);
|
||||
extern char *MonthNameShort[13];
|
||||
extern char *MonthNameLong[13];
|
||||
|
||||
/* Julian calendar conversions. */
|
||||
void SdnToJulian(long int sdn, int *pYear, int *pMonth, int *pDay);
|
||||
long int JulianToSdn(int year, int month, int day);
|
||||
void SdnToJulian(php_int_t sdn, int *pYear, int *pMonth, int *pDay);
|
||||
php_int_t JulianToSdn(int year, int month, int day);
|
||||
|
||||
/* Jewish calendar conversions. */
|
||||
void SdnToJewish(long int sdn, int *pYear, int *pMonth, int *pDay);
|
||||
long int JewishToSdn(int year, int month, int day);
|
||||
void SdnToJewish(php_int_t sdn, int *pYear, int *pMonth, int *pDay);
|
||||
php_int_t JewishToSdn(int year, int month, int day);
|
||||
extern char *JewishMonthName[14];
|
||||
extern char *JewishMonthNameLeap[14];
|
||||
extern char *JewishMonthHebName[14];
|
||||
@ -85,15 +87,15 @@ extern char *JewishMonthHebNameLeap[14];
|
||||
extern int monthsPerYear[19];
|
||||
|
||||
/* French republic calendar conversions. */
|
||||
void SdnToFrench(long int sdn, int *pYear, int *pMonth, int *pDay);
|
||||
long int FrenchToSdn(int inputYear, int inputMonth, int inputDay);
|
||||
void SdnToFrench(php_int_t sdn, int *pYear, int *pMonth, int *pDay);
|
||||
php_int_t FrenchToSdn(int inputYear, int inputMonth, int inputDay);
|
||||
extern char *FrenchMonthName[14];
|
||||
|
||||
/* Islamic calendar conversions. */
|
||||
/* Not implemented yet. */
|
||||
|
||||
/* Day of week conversion. 0=Sunday, 6=Saturday */
|
||||
int DayOfWeek(long int sdn);
|
||||
int DayOfWeek(php_int_t sdn);
|
||||
extern char *DayNameShort[7];
|
||||
extern char *DayNameLong[7];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user