module Calendrical

Constants

VERSION

Public Class Methods

bahai_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_bahai_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 20);
    iy = NUM2INT(y);
    md = bahai_last_day_of_month(iy, im);
    return INT2NUM(md);
}
bahai_leap_year(p1) click to toggle source
static VALUE
calendrical_bahai_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = bahai_leap_year(iy);
    return INT2BOOL(l);
}
bahai_leap_year?(p1) click to toggle source
static VALUE
calendrical_bahai_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = bahai_leap_year(iy);
    return INT2BOOL(l);
}
bahai_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_bahai_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 20);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 19);
    iy = NUM2INT(y);
    a = bahai_to_rd(iy, im, imd);
    rd_to_bahai(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
bahai_vahid_to_year(p1, p2, p3) click to toggle source
static VALUE
calendrical_bahai_vahid_to_year(VALUE obj, VALUE k, VALUE v, VALUE y)
{
    int ik, iv, iy, iy2;

    ik = NUM2INT(k);
    iv = NUM2INT(v); CHECK_DOMAIN2(iv, 1, 19);
    iy = NUM2INT(y); CHECK_DOMAIN2(iy, 1, 19);
    iy2 = bahai_vahid_to_year(ik, iv, iy);
    return INT2NUM(iy2);
}
bahai_year_to_vahid(p1) click to toggle source
static VALUE
calendrical_bahai_year_to_vahid(VALUE obj, VALUE y)
{
    int iy, k, v, iy2;

    iy = NUM2INT(y);
    bahai_year_to_vahid(iy, &k, &v, &iy2);
    return rb_ary_new3(3, INT2NUM(k), INT2NUM(v), INT2NUM(iy2));
}
bengali_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_bengali_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = bengali_last_day_of_month(iy, im);
    return INT2NUM(md);
}
bengali_leap_year(p1) click to toggle source
static VALUE
calendrical_bengali_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = bengali_leap_year(iy);
    return INT2BOOL(l);
}
bengali_leap_year?(p1) click to toggle source
static VALUE
calendrical_bengali_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = bengali_leap_year(iy);
    return INT2BOOL(l);
}
bengali_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_bengali_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = bengali_to_rd(iy, im, imd);
    rd_to_bengali(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
coptic_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_coptic_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    iy = NUM2INT(y);
    md = coptic_last_day_of_month(iy, im);
    return INT2NUM(md);
}
coptic_leap_year(p1) click to toggle source
static VALUE
calendrical_coptic_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = coptic_leap_year(iy);
    return INT2BOOL(l);
}
coptic_leap_year?(p1) click to toggle source
static VALUE
calendrical_coptic_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = coptic_leap_year(iy);
    return INT2BOOL(l);
}
coptic_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_coptic_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
    iy = NUM2INT(y);
    a = coptic_to_rd(iy, im, imd);
    rd_to_coptic(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
easter(p1) click to toggle source
static VALUE
calendrical_easter(VALUE obj, VALUE y)
{
    int iy, a;

    iy = NUM2INT(y);
    a = easter(iy);
    return INT2NUM(a);
}
ethiopian_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_ethiopian_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    iy = NUM2INT(y);
    md = ethiopian_last_day_of_month(iy, im);
    return INT2NUM(md);
}
ethiopian_leap_year(p1) click to toggle source
static VALUE
calendrical_ethiopian_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = ethiopian_leap_year(iy);
    return INT2BOOL(l);
}
ethiopian_leap_year?(p1) click to toggle source
static VALUE
calendrical_ethiopian_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = ethiopian_leap_year(iy);
    return INT2BOOL(l);
}
ethiopian_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_ethiopian_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
    iy = NUM2INT(y);
    a = ethiopian_to_rd(iy, im, imd);
    rd_to_ethiopian(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
french_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_french_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    iy = NUM2INT(y);
    md = french_last_day_of_month(iy, im);
    return INT2NUM(md);
}
french_leap_year(p1) click to toggle source
static VALUE
calendrical_french_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = french_leap_year(iy);
    return INT2BOOL(l);
}
french_leap_year?(p1) click to toggle source
static VALUE
calendrical_french_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = french_leap_year(iy);
    return INT2BOOL(l);
}
french_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_french_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
    iy = NUM2INT(y);
    a = french_to_rd(iy, im, imd);
    rd_to_french(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
gregorian_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_gregorian_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = gregorian_last_day_of_month(iy, im);
    return INT2NUM(md);
}
gregorian_leap_year(p1) click to toggle source
static VALUE
calendrical_gregorian_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = gregorian_leap_year(iy);
    return INT2BOOL(l);
}
gregorian_leap_year?(p1) click to toggle source
static VALUE
calendrical_gregorian_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = gregorian_leap_year(iy);
    return INT2BOOL(l);
}
gregorian_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_gregorian_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = gregorian_to_rd(iy, im, imd);
    rd_to_gregorian(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
hebrew_calendar_elapsed_days(p1) click to toggle source
static VALUE
calendrical_hebrew_calendar_elapsed_days(VALUE obj, VALUE y)
{
    int iy, d;

    iy = NUM2INT(y);
    d = hebrew_calendar_elapsed_days(iy);
    return INT2NUM(d);
}
hebrew_days_in_year(p1) click to toggle source
static VALUE
calendrical_hebrew_days_in_year(VALUE obj, VALUE y)
{
    int iy, d;

    iy = NUM2INT(y);
    d = hebrew_days_in_year(iy);
    return INT2NUM(d);
}
hebrew_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_hebrew_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    iy = NUM2INT(y);
    md = hebrew_last_day_of_month(iy, im);
    return INT2NUM(md);
}
hebrew_last_month_of_year(p1) click to toggle source
static VALUE
calendrical_hebrew_last_month_of_year(VALUE obj, VALUE y)
{
    int iy, m;

    iy = NUM2INT(y);
    m = hebrew_last_month_of_year(iy);
    return INT2NUM(m);
}
hebrew_leap_year(p1) click to toggle source
static VALUE
calendrical_hebrew_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = hebrew_leap_year(iy);
    return INT2BOOL(l);
}
hebrew_leap_year?(p1) click to toggle source
static VALUE
calendrical_hebrew_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = hebrew_leap_year(iy);
    return INT2BOOL(l);
}
hebrew_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_hebrew_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
    iy = NUM2INT(y);
    a = hebrew_to_rd(iy, im, imd);
    rd_to_hebrew(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
indian_national_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_indian_national_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = indian_national_last_day_of_month(iy, im);
    return INT2NUM(md);
}
indian_national_leap_year(p1) click to toggle source
static VALUE
calendrical_indian_national_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = indian_national_leap_year(iy);
    return INT2BOOL(l);
}
indian_national_leap_year?(p1) click to toggle source
static VALUE
calendrical_indian_national_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = indian_national_leap_year(iy);
    return INT2BOOL(l);
}
indian_national_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_indian_national_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = indian_national_to_rd(iy, im, imd);
    rd_to_indian_national(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
islamic_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_islamic_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = islamic_last_day_of_month(iy, im);
    return INT2NUM(md);
}
islamic_leap_year(p1) click to toggle source
static VALUE
calendrical_islamic_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = islamic_leap_year(iy);
    return INT2BOOL(l);
}
islamic_leap_year?(p1) click to toggle source
static VALUE
calendrical_islamic_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = islamic_leap_year(iy);
    return INT2BOOL(l);
}
islamic_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_islamic_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
    iy = NUM2INT(y);
    a = islamic_to_rd(iy, im, imd);
    rd_to_islamic(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
iso_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_iso_to_rd(VALUE obj, VALUE y, VALUE w, VALUE wd)
{
    int iy, iw, iwd, a, iy2, iw2, iwd2;

    iw = NUM2INT(w); CHECK_DOMAIN2(iw, 1, 53);
    iwd = NUM2INT(wd); CHECK_DOMAIN2(iwd, 1, 7);
    iy = NUM2INT(y);
    a = iso_to_rd(iy, iw, iwd);
    rd_to_iso(a, &iy2, &iw2, &iwd2);
    if (iw != iw2 || iwd != iwd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
jalali_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_jalali_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = jalali_last_day_of_month(iy, im);
    return INT2NUM(md);
}
jalali_leap_year(p1) click to toggle source
static VALUE
calendrical_jalali_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = jalali_leap_year(iy);
    return INT2BOOL(l);
}
jalali_leap_year?(p1) click to toggle source
static VALUE
calendrical_jalali_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = jalali_leap_year(iy);
    return INT2BOOL(l);
}
jalali_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_jalali_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = jalali_to_rd(iy, im, imd);
    rd_to_jalali(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
jd_to_mjd(p1) click to toggle source
static VALUE
calendrical_jd_to_mjd(VALUE obj, VALUE j)
{
    int ij, m;

    ij = NUM2INT(j);
    m = jd_to_mjd(ij);
    return INT2NUM(m);
}
jd_to_rd(p1) click to toggle source
static VALUE
calendrical_jd_to_rd(VALUE obj, VALUE j)
{
    int ij, a;

    ij = NUM2INT(j);
    a = jd_to_rd(ij);
    return INT2NUM(a);
}
julian_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_julian_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = julian_last_day_of_month(iy, im);
    return INT2NUM(md);
}
julian_leap_year(p1) click to toggle source
static VALUE
calendrical_julian_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = julian_leap_year(iy);
    return INT2BOOL(l);
}
julian_leap_year?(p1) click to toggle source
static VALUE
calendrical_julian_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = julian_leap_year(iy);
    return INT2BOOL(l);
}
julian_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_julian_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = julian_to_rd(iy, im, imd);
    rd_to_julian(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
kday_on_or_before(p1, p2) click to toggle source
static VALUE
calendrical_kday_on_or_before(VALUE obj, VALUE a, VALUE k)
{
    int ia, ik, b;

    ia = NUM2INT(a);
    ik = NUM2INT(k); CHECK_DOMAIN2(ik, 0, 6);
    b = kday_on_or_before(ia, NUM2INT(k));
    return INT2NUM(b);
}
kyureki_to_rd(p1, p2, p3, p4) click to toggle source
static VALUE
calendrical_kyureki_to_rd(VALUE obj, VALUE y, VALUE m, VALUE l, VALUE md)
{
    int j, a;
    QDATE q, q2;

    q.j = 0;
    q.y = NUM2INT(y);
    q.yd = 0;
    q.m = NUM2INT(m); CHECK_DOMAIN2(q.m, 1, 12);
    q.md = NUM2INT(md); CHECK_DOMAIN2(q.md, 1, 30);
    q.wd = 0;
    q.leap = BOOL2INT(l);
    j = rqref(&q);
    if (j == 0)
        rb_raise(rb_eArgError, "invalid date");
    a = jd_to_rd(j);
    qref(j, &q2);
    if (q.y != q2.y || q.m != q2.m || q.md != q2.md || q.leap != q2.leap)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
ld_to_rd(p1) click to toggle source
static VALUE
calendrical_ld_to_rd(VALUE obj, VALUE l)
{
    int il, a;

    il = NUM2INT(l);
    a = ld_to_rd(il);
    return INT2NUM(a);
}
long_heshvan(p1) click to toggle source
static VALUE
calendrical_long_heshvan(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = long_heshvan(iy);
    return INT2BOOL(l);
}
long_heshvan?(p1) click to toggle source
static VALUE
calendrical_long_heshvan(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = long_heshvan(iy);
    return INT2BOOL(l);
}
lunar_longitude(p1) click to toggle source
static VALUE
calendrical_lunar_longitude(VALUE obj, VALUE d)
{
    double l;

    l = lunar_longitude(getfloat(d));
    return rb_float_new(l);
}
lunar_phase(p1) click to toggle source
static VALUE
calendrical_lunar_phase(VALUE obj, VALUE d)
{
    double p;

    p = lunar_phase(getfloat(d));
    return rb_float_new(p);
}
mayan_haab_difference(p1, p2, p3, p4) click to toggle source
static VALUE
calendrical_mayan_haab_difference
(VALUE obj, VALUE m1, VALUE md1, VALUE m2, VALUE md2)
{
    int imd1, im1, imd2, im2, d;

    im1 = NUM2INT(m1); CHECK_DOMAIN2(im1, 1, 19);
    imd1 = NUM2INT(md1); CHECK_DOMAIN2(imd1, 0, (im1 == 19) ? 4 : 19);
    im2 = NUM2INT(m2); CHECK_DOMAIN2(im2, 1, 19);
    imd2 = NUM2INT(md2); CHECK_DOMAIN2(imd2, 0, (im2 == 19) ? 4 : 19);
    d = mayan_haab_difference(im1, imd1, im2, imd2);
    return INT2NUM(d);
}
mayan_haab_on_or_before(p1, p2, p3) click to toggle source
static VALUE
calendrical_mayan_haab_on_or_before(VALUE obj, VALUE m, VALUE md, VALUE a)
{
    int imd, im, ia, d;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 19);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 0, (im == 19) ? 4 : 19);
    ia = NUM2INT(a);
    d = mayan_haab_on_or_before(im, imd, ia);
    return INT2NUM(d);
}
mayan_haab_tzolkin_on_or_before(p1, p2, p3, p4, p5) click to toggle source
static VALUE
calendrical_mayan_haab_tzolkin_on_or_before
(VALUE obj, VALUE m, VALUE md, VALUE na, VALUE nu, VALUE a)
{
    int imd, im, inu, ina, ia, d;

    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 0, 19);
    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 19);
    inu = NUM2INT(nu); CHECK_DOMAIN2(inu, 1, 13);
    ina = NUM2INT(na); CHECK_DOMAIN2(ina, 1, 20);
    ia = NUM2INT(a);
    d = mayan_haab_tzolkin_on_or_before(im, imd, ina, inu, ia);
    return INT2NUM(d);
}
mayan_long_count_to_rd(p1, p2, p3, p4, p5) click to toggle source
static VALUE
calendrical_mayan_long_count_to_rd
(VALUE obj, VALUE bt, VALUE kt, VALUE t, VALUE u, VALUE k)
{
    int ibt, ikt, it, iu, ik, a, ibt2, ikt2, it2, iu2, ik2;

    ibt = NUM2INT(bt);
    ikt = NUM2INT(kt); CHECK_DOMAIN2(ikt, 0, 19);
    it = NUM2INT(t); CHECK_DOMAIN2(it, 0, 19);
    iu = NUM2INT(u); CHECK_DOMAIN2(iu, 0, 17);
    ik = NUM2INT(k); CHECK_DOMAIN2(ik, 0, 19);
    a = mayan_long_count_to_rd(ibt, ikt, it, iu, ik);
    rd_to_mayan_long_count(a, &ibt2, &ikt2, &it2, &iu2, &ik2);
    if (ibt != ibt2 || ikt != ikt2 || it != it2 || iu != iu2 || ik != ik2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
mayan_tzolkin_difference(p1, p2, p3, p4) click to toggle source
static VALUE
calendrical_mayan_tzolkin_difference
(VALUE obj, VALUE na1, VALUE nu1, VALUE na2, VALUE nu2)
{
    int inu1, ina1, inu2, ina2, d;

    inu1 = NUM2INT(nu1); CHECK_DOMAIN2(inu1, 1, 13);
    ina1 = NUM2INT(na1); CHECK_DOMAIN2(ina1, 1, 20);
    inu2 = NUM2INT(nu2); CHECK_DOMAIN2(inu2, 1, 13);
    ina2 = NUM2INT(na2); CHECK_DOMAIN2(ina2, 1, 20);
    d = mayan_tzolkin_difference(ina1, inu1, ina2, inu2);
    return INT2NUM(d);
}
mayan_tzolkin_on_or_before(p1, p2, p3) click to toggle source
static VALUE
calendrical_mayan_tzolkin_on_or_before(VALUE obj, VALUE na, VALUE nu, VALUE a)
{
    int inu, ina, ia, d;

    inu = NUM2INT(nu); CHECK_DOMAIN2(inu, 1, 13);
    ina = NUM2INT(na); CHECK_DOMAIN2(ina, 1, 20);
    ia = NUM2INT(a);
    d = mayan_tzolkin_on_or_before(ina, inu, ia);
    return INT2NUM(d);
}
mjd_to_jd(p1) click to toggle source
static VALUE
calendrical_mjd_to_jd(VALUE obj, VALUE m)
{
    int im, j;

    im = NUM2INT(m);
    j = mjd_to_jd(im);
    return INT2NUM(j);

}
mjd_to_rd(p1) click to toggle source
static VALUE
calendrical_mjd_to_rd(VALUE obj, VALUE m)
{
    int im, a;

    im = NUM2INT(m);
    a = mjd_to_rd(im);
    return INT2NUM(a);
}
nanakshahi_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_nanakshahi_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = nanakshahi_last_day_of_month(iy, im);
    return INT2NUM(md);
}
nanakshahi_leap_year(p1) click to toggle source
static VALUE
calendrical_nanakshahi_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = nanakshahi_leap_year(iy);
    return INT2BOOL(l);
}
nanakshahi_leap_year?(p1) click to toggle source
static VALUE
calendrical_nanakshahi_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = nanakshahi_leap_year(iy);
    return INT2BOOL(l);
}
nanakshahi_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_nanakshahi_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = nanakshahi_to_rd(iy, im, imd);
    rd_to_nanakshahi(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
new_moon(p1) click to toggle source
static VALUE
calendrical_new_moon(VALUE obj, VALUE d)
{
    double n;

    n = new_moon(getfloat(d));
    return rb_float_new(n);
}
nicaean_rule_easter(p1) click to toggle source
static VALUE
calendrical_nicaean_rule_easter(VALUE obj, VALUE y)
{
    int iy, a;

    iy = NUM2INT(y);
    a = nicaean_rule_easter(iy);
    return INT2NUM(a);
}
nth_kday(p1, p2, p3, p4) click to toggle source
static VALUE
calendrical_nth_kday(VALUE obj, VALUE y, VALUE m, VALUE n, VALUE k)
{
    int iy, im, in, ik, b;

    in = NUM2INT(n);
    if (in < -5 || in == 0 || in > 5)
        rb_raise(rb_eArgError, "out of range");
    ik = NUM2INT(k); CHECK_DOMAIN2(ik, 0, 6);
    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    b = nth_kday(iy, im, in, ik);
    return INT2NUM(b);
}
old_hindu_lunar_precedes(p1, p2, p3, p4, p5, p6, p7, p8) click to toggle source
static VALUE
calendrical_old_hindu_lunar_precedes
(VALUE obj,
 VALUE y1, VALUE m1, VALUE l1, VALUE md1,
 VALUE y2, VALUE m2, VALUE l2, VALUE md2)
{
    int iy1, im1, il1, imd1, iy2, im2, il2, imd2, d;

    im1 = NUM2INT(m1); CHECK_DOMAIN2(im1, 1, 12);
    il1 = BOOL2INT(l1);
    imd1 = NUM2INT(md1); CHECK_DOMAIN2(imd1, 1, 30);
    iy1 = NUM2INT(y1);
    im2 = NUM2INT(m2); CHECK_DOMAIN2(im2, 1, 12);
    il2 = BOOL2INT(l2);
    imd2 = NUM2INT(md2); CHECK_DOMAIN2(imd2, 1, 30);
    iy2 = NUM2INT(y2);
    d = old_hindu_lunar_precedes(iy1, im1, il1, imd1, iy2, im2, il2, imd2);
    return INT2BOOL(d);
}
old_hindu_lunar_to_rd(p1, p2, p3, p4) click to toggle source
static VALUE
calendrical_old_hindu_lunar_to_rd
(VALUE obj, VALUE y, VALUE m, VALUE l, VALUE md)
{
    int iy, im, il, imd, a, iy2, im2, il2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    il = BOOL2INT(l);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
    iy = NUM2INT(y);
    a = old_hindu_lunar_to_rd(iy, im, il, imd);
    rd_to_old_hindu_lunar(a, &iy2, &im2, &il2, &imd2);
    if (im != im2 || il != il2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
old_hindu_solar_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_old_hindu_solar_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = old_hindu_solar_to_rd(iy, im, imd);
    rd_to_old_hindu_solar(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
ordinal_to_rd(p1, p2) click to toggle source
static VALUE
calendrical_ordinal_to_rd(VALUE obj, VALUE y, VALUE yd)
{
    int iy, iyd, a, iy2, iyd2;

    iyd = NUM2INT(yd); CHECK_DOMAIN2(iyd, 1, 366);
    iy = NUM2INT(y);
    a = ordinal_to_rd(iy, iyd);
    rd_to_ordinal(a, &iy2, &iyd2);
    if (iyd != iyd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
rd_to_bahai(p1) click to toggle source
static VALUE
calendrical_rd_to_bahai(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_bahai(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_bengali(p1) click to toggle source
static VALUE
calendrical_rd_to_bengali(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_bengali(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_coptic(p1) click to toggle source
static VALUE
calendrical_rd_to_coptic(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_coptic(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_day_of_week(p1) click to toggle source
static VALUE
calendrical_rd_to_day_of_week(VALUE obj, VALUE a)
{
    int ia, w;

    ia = NUM2INT(a);
    w = rd_to_day_of_week(ia);
    return INT2NUM(w);
}
rd_to_ethiopian(p1) click to toggle source
static VALUE
calendrical_rd_to_ethiopian(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_ethiopian(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_french(p1) click to toggle source
static VALUE
calendrical_rd_to_french(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_french(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_gregorian(p1) click to toggle source
static VALUE
calendrical_rd_to_gregorian(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_gregorian(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_hebrew(p1) click to toggle source
static VALUE
calendrical_rd_to_hebrew(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_hebrew(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_indian_national(p1) click to toggle source
static VALUE
calendrical_rd_to_indian_national(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_indian_national(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_islamic(p1) click to toggle source
static VALUE
calendrical_rd_to_islamic(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_islamic(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_iso(p1) click to toggle source
static VALUE
calendrical_rd_to_iso(VALUE obj, VALUE a)
{
    int ia, y, w, wd;

    ia = NUM2INT(a);
    rd_to_iso(ia, &y, &w, &wd);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(w), INT2NUM(wd));
}
rd_to_jalali(p1) click to toggle source
static VALUE
calendrical_rd_to_jalali(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_jalali(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_jd(p1) click to toggle source
static VALUE
calendrical_rd_to_jd(VALUE obj, VALUE a)
{
    int ia, j;

    ia = NUM2INT(a);
    j = rd_to_jd(ia);
    return INT2NUM(j);
}
rd_to_julian(p1) click to toggle source
static VALUE
calendrical_rd_to_julian(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_julian(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_kyureki(p1) click to toggle source
static VALUE
calendrical_rd_to_kyureki(VALUE obj, VALUE a)
{
    int ia, j;
    QDATE q;

    ia = NUM2INT(a); CHECK_DOMAIN2(ia, 162193, 767009);
    j = rd_to_jd(ia);
    qref(j, &q);
    if (q.j == 0)
        rb_raise(rb_eArgError, "invalid date");
    return rb_ary_new3
        (4, INT2NUM(q.y), INT2NUM(q.m), INT2BOOL(q.leap), INT2NUM(q.md));
}
rd_to_kyureki_day_of_week(p1) click to toggle source
static VALUE
calendrical_rd_to_kyureki_day_of_week(VALUE obj, VALUE a)
{
    int ia, j;
    QDATE q;

    ia = NUM2INT(a);
    j = rd_to_jd(ia);
    qref(j, &q);
    if (q.j == 0)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(q.wd);
}
rd_to_ld(p1) click to toggle source
static VALUE
calendrical_rd_to_ld(VALUE obj, VALUE a)
{
    int ia, l;

    ia = NUM2INT(a);
    l = rd_to_ld(ia);
    return INT2NUM(l);
}
rd_to_mayan_haab(p1) click to toggle source
static VALUE
calendrical_rd_to_mayan_haab(VALUE obj, VALUE a)
{
    int ia, md, m;

    ia = NUM2INT(a);
    rd_to_mayan_haab(ia, &m, &md);
    return rb_ary_new3(2, INT2NUM(m), INT2NUM(md));
}
rd_to_mayan_long_count(p1) click to toggle source
static VALUE
calendrical_rd_to_mayan_long_count(VALUE obj, VALUE a)
{
    int ia, bt, kt, t, u, k;

    ia = NUM2INT(a);
    rd_to_mayan_long_count(ia, &bt, &kt, &t, &u, &k);
    return rb_ary_new3
        (5, INT2NUM(bt), INT2NUM(kt), INT2NUM(t), INT2NUM(u), INT2NUM(k));
}
rd_to_mayan_tzolkin(p1) click to toggle source
static VALUE
calendrical_rd_to_mayan_tzolkin(VALUE obj, VALUE a)
{
    int ia, nu, na;

    ia = NUM2INT(a);
    rd_to_mayan_tzolkin(ia, &na, &nu);
    return rb_ary_new3(2, INT2NUM(na), INT2NUM(nu));
}
rd_to_mjd(p1) click to toggle source
static VALUE
calendrical_rd_to_mjd(VALUE obj, VALUE a)
{
    int ia, m;

    ia = NUM2INT(a);
    m = rd_to_mjd(ia);
    return INT2NUM(m);
}
rd_to_nanakshahi(p1) click to toggle source
static VALUE
calendrical_rd_to_nanakshahi(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_nanakshahi(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_old_hindu_lunar(p1) click to toggle source
static VALUE
calendrical_rd_to_old_hindu_lunar(VALUE obj, VALUE a)
{
    int ia, y, m, l, md;

    ia = NUM2INT(a);
    rd_to_old_hindu_lunar(ia, &y, &m, &l, &md);
    return rb_ary_new3(4, INT2NUM(y), INT2NUM(m), INT2BOOL(l), INT2NUM(md));
}
rd_to_old_hindu_solar(p1) click to toggle source
static VALUE
calendrical_rd_to_old_hindu_solar(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_old_hindu_solar(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_ordinal(p1) click to toggle source
static VALUE
calendrical_rd_to_ordinal(VALUE obj, VALUE a)
{
    int ia, y, yd;

    ia = NUM2INT(a);
    rd_to_ordinal(ia, &y, &yd);
    return rb_ary_new3(2, INT2NUM(y), INT2NUM(yd));
}
rd_to_week_date(p1) click to toggle source
static VALUE
calendrical_rd_to_iso(VALUE obj, VALUE a)
{
    int ia, y, w, wd;

    ia = NUM2INT(a);
    rd_to_iso(ia, &y, &w, &wd);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(w), INT2NUM(wd));
}
rd_to_world(p1) click to toggle source
static VALUE
calendrical_rd_to_world(VALUE obj, VALUE a)
{
    int ia, y, m, md;

    ia = NUM2INT(a);
    rd_to_world(ia, &y, &m, &md);
    return rb_ary_new3(3, INT2NUM(y), INT2NUM(m), INT2NUM(md));
}
rd_to_world_day_of_week(p1) click to toggle source
static VALUE
calendrical_rd_to_world_day_of_week(VALUE obj, VALUE a)
{
    int ia, w;

    ia = NUM2INT(a);
    w = rd_to_world_day_of_week(ia);
    return INT2NUM(w);
}
short_kislev(p1) click to toggle source
static VALUE
calendrical_short_kislev(VALUE obj, VALUE y)
{
    int iy, s;

    iy = NUM2INT(y);
    s = short_kislev(iy);
    return INT2BOOL(s);
}
short_kislev?(p1) click to toggle source
static VALUE
calendrical_short_kislev(VALUE obj, VALUE y)
{
    int iy, s;

    iy = NUM2INT(y);
    s = short_kislev(iy);
    return INT2BOOL(s);
}
solar_longitude(p1) click to toggle source
static VALUE
calendrical_solar_longitude(VALUE obj, VALUE d)
{
    double l;

    l = solar_longitude(getfloat(d));
    return rb_float_new(l);
}
week_date_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_iso_to_rd(VALUE obj, VALUE y, VALUE w, VALUE wd)
{
    int iy, iw, iwd, a, iy2, iw2, iwd2;

    iw = NUM2INT(w); CHECK_DOMAIN2(iw, 1, 53);
    iwd = NUM2INT(wd); CHECK_DOMAIN2(iwd, 1, 7);
    iy = NUM2INT(y);
    a = iso_to_rd(iy, iw, iwd);
    rd_to_iso(a, &iy2, &iw2, &iwd2);
    if (iw != iw2 || iwd != iwd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
world_last_day_of_month(p1, p2) click to toggle source
static VALUE
calendrical_world_last_day_of_month(VALUE obj, VALUE y, VALUE m)
{
    int iy, im, md;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    iy = NUM2INT(y);
    md = world_last_day_of_month(iy, im);
    return INT2NUM(md);
}
world_leap_year(p1) click to toggle source
static VALUE
calendrical_world_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = world_leap_year(iy);
    return INT2BOOL(l);
}
world_leap_year?(p1) click to toggle source
static VALUE
calendrical_world_leap_year(VALUE obj, VALUE y)
{
    int iy, l;

    iy = NUM2INT(y);
    l = world_leap_year(iy);
    return INT2BOOL(l);
}
world_to_rd(p1, p2, p3) click to toggle source
static VALUE
calendrical_world_to_rd(VALUE obj, VALUE y, VALUE m, VALUE md)
{
    int iy, im, imd, a, iy2, im2, imd2;

    im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
    imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
    iy = NUM2INT(y);
    a = world_to_rd(iy, im, imd);
    rd_to_world(a, &iy2, &im2, &imd2);
    if (im != im2 || imd != imd2 || iy != iy2)
        rb_raise(rb_eArgError, "invalid date");
    return INT2NUM(a);
}
zodiac(p1) click to toggle source
static VALUE
calendrical_zodiac(VALUE obj, VALUE d)
{
    double l;

    l = zodiac(getfloat(d));
    return rb_float_new(l);
}