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