-
- if (d->cal == CAL_GREGORIAN) {
- d->sdn1 = GregorianToSdn(d->year, d->month, d->day);
- if (d->type == DATE_BOUNDED) {
- d->sdn2 = GregorianToSdn(end_date.year, end_date.month, end_date.day);
- d->sdn2 -= 1;
- }
- }
- else if (d->cal == CAL_JULIAN) {
- d->sdn1 = JulianToSdn(d->year, d->month, d->day);
- if (d->type == DATE_BOUNDED) {
- d->sdn2 = JulianToSdn(end_date.year, end_date.month, end_date.day);
- d->sdn2 -= 1;
- }
- }
- else if (d->cal == CAL_HEBREW) {
- d->sdn1 = JewishToSdn(d->year, d->month, d->day);
- if (d->type == DATE_BOUNDED) {
- d->sdn2 = JewishToSdn(end_date.year, end_date.month, end_date.day);
- d->sdn2 -= 1;
- }
- }
- else if (d->cal == CAL_FRENCH_REV) {
- d->sdn1 = FrenchToSdn(d->year, d->month, d->day);
- if (d->type == DATE_BOUNDED) {
- d->sdn2 = FrenchToSdn(end_date.year, end_date.month, end_date.day);
- d->sdn2 -= 1;
- }
+
+ to_sdn = cal_func[d->cal];
+ d->sdn1 = (*to_sdn)(d->year, d->month, d->day);
+ if (d->type == DATE_BOUNDED) {
+ d->sdn2 = (*to_sdn)(end_date.year, end_date.month, end_date.day);
+ d->sdn2 -= 1;