home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 328_02 / wvaldate.c < prev    next >
C/C++ Source or Header  |  1991-03-17  |  953b  |  40 lines

  1. /* wvaldate.c
  2.  *    validate a date string in form of mm/dd/yy or mm/dd/yyyy
  3.  *
  4.  *    RETURNS: 0 if date is valid. nonzero otherwise.
  5.  *            alters the date string by removing extra digits, sapces, etc...
  6.  *            (never makes string longer than that provided)
  7.  *
  8.  *
  9.  */
  10. #include "wsys.h"
  11.  
  12. static int max_day[] = {0,31,29,31,30,31,30,31, 31,30,31,30,31};
  13. #define NOT_LEAPYEAR(yy)  ( ((yy)&3) || ( ((yy)/100)*100 ==(yy) ) )
  14.  
  15.  
  16. int wval_date ( char *date )
  17.     {
  18.     int retcode =1;
  19.     unsigned int m=0,d=0,y=0;
  20.     char *ptr = date;
  21.         
  22.     wdtparse ( &m, &ptr, '/' );
  23.     wdtparse ( &d, &ptr, '/' );
  24.     wdtparse ( &y, &ptr, '/' );
  25.     
  26.     if     (   ( (m>0) && (m<13) )  
  27.         &&  ( (d>0) && (d<=max_day[m])  ) 
  28.         &&  ( (y>0) && (y<9999) )
  29.         &&  (! ( (d==29) && (m==2) && NOT_LEAPYEAR(y) ) )
  30.         )
  31.         {
  32.         retcode = 0;
  33.         sprintf ( date, "%u/%u/%u", m,d,y);
  34.         }
  35.     
  36.  
  37.     return (retcode);        /* wvdate ()*/
  38.     }
  39.     
  40. /*--------------- end of WVALDATE.C --------------------*/