154359Sroberto/*
254359Sroberto * ymd2yd - compute the date in the year from y/m/d
354359Sroberto */
454359Sroberto
554359Sroberto#include "ntp_fp.h"
654359Sroberto#include "ntp_unixtime.h"
754359Sroberto#include "ntp_stdlib.h"
854359Sroberto
954359Sroberto/*
1054359Sroberto * Tables to compute the day of year from yyyymmdd timecode.
1154359Sroberto * Viva la leap.
1254359Sroberto */
1354359Srobertostatic int day1tab[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
1454359Srobertostatic int day2tab[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
1554359Sroberto
1654359Srobertoint
1754359Srobertoymd2yd(
1854359Sroberto	int y,
1954359Sroberto	int m,
2054359Sroberto	int d
2154359Sroberto	)
2254359Sroberto{
2354359Sroberto	int i, *t;
2454359Sroberto
2554359Sroberto	if (m < 1 || m > 12 || d < 1)
2654359Sroberto		return (-1);
2754359Sroberto
2854359Sroberto	if (((y%4 == 0) && (y%100 != 0)) || (y%400 == 0))
2954359Sroberto		t = day2tab;	/* leap year */
3054359Sroberto	else
3154359Sroberto		t = day1tab;	/* not a leap year */
3254359Sroberto	if (d > t[m - 1])
3354359Sroberto		return (-1);
3454359Sroberto	for (i = 0; i < m - 1; i++)
3554359Sroberto		d += t[i];
3654359Sroberto	return d;
3754359Sroberto}
38