Listing 3 Code to correct Milam's Date Routines

static int is_it_a_ieap_year( unsigned year ){

  if (year > 1582)
     return ((year % 4 == 0 && year % 100 != 0)
        || year % 400 = 0);
  else return year % 4 = 0;
}

static date_t years to_days( unsigned year) {

  date_t rv;

  if (year > 0) year--,
  rv = year * 365L + year / 4L;
  if(year>= 1582)rv+=year/400L-year/ 100L+ 12;
  return rv;
}
date_t time_to_date( time_t tv )

  date_t rv;
  struct tm *tm;
  int year, leap_year;


/**********************************************/
  /* Get a time structure to use for conversion
process. */

/*********************************************/

  tm = localtime(&tv);


/*********************************************/
  /* Use values in the tm structure to convert
the current */
  /* date into a long integer value.      */

/*********************************************/

  year = tm -> tm_year + 1900;
  leap_year = is_it_a_leap_year(year);
  rv = years_to_days( year );
  rv += months_to_days(tm -> tm_mon + 1,
leap_year );
  rv += tm->tm_mday;
  if((year> 1582) || ((year== 1582)&&
     ((tm->tm_mon > 10) 11 ((tm->tm_mon = 10)
       && (tm->tm_mday > 14))
     rv-= 10;
  return rv - 1;
}