[BACK]Return to day.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / calendar

Diff for /src/usr.bin/calendar/day.c between version 1.4 and 1.5

version 1.4, 1998/03/30 06:59:26 version 1.5, 1998/11/04 11:32:02
Line 183 
Line 183 
         return((time_t)-1);          return((time_t)-1);
     tm.tm_sec = 0;      tm.tm_sec = 0;
     tm.tm_min = 0;      tm.tm_min = 0;
     tm.tm_hour = 0;      /* Avoid getting caught by a timezone shift; set time to noon */
       tm.tm_isdst = 0;
       tm.tm_hour = 12;
     tm.tm_wday = 0;      tm.tm_wday = 0;
     tm.tm_mday = tp->tm_mday;      tm.tm_mday = tp->tm_mday;
     tm.tm_mon = tp->tm_mon;      tm.tm_mon = tp->tm_mon;
Line 199 
Line 201 
     }      }
   
     /* Year */      /* Year */
     if (len >= 7) {      if (len >= 6) {
         *(date + len - 4) = '\0';          *(date + len - 4) = '\0';
         tm.tm_year = atoi(date);          tm.tm_year = atoi(date);
   
         /* tm_year up TM_YEAR_BASE ... */          /* tm_year up TM_YEAR_BASE ... */
         if (tm.tm_year < 70)          if (tm.tm_year < 69)            /* Y2K */
                 tm.tm_year += 2000 - TM_YEAR_BASE;                  tm.tm_year += 2000 - TM_YEAR_BASE;
         else if (tm.tm_year < 100)          else if (tm.tm_year < 100)
                 tm.tm_year += 1900 - TM_YEAR_BASE;                  tm.tm_year += 1900 - TM_YEAR_BASE;
Line 310 
Line 312 
   
         /* convert Weekday into *next*  Day,          /* convert Weekday into *next*  Day,
          * e.g.: 'Sunday' -> 22           * e.g.: 'Sunday' -> 22
          *       'SunayLast' -> ??           *       'SundayLast' -> ??
          */           */
         if (flags & F_ISDAY) {          if (flags & F_ISDAY) {
 #if DEBUG  #if DEBUG
Line 324 
Line 326 
                 /* negative offset; last, -4 .. -1 */                  /* negative offset; last, -4 .. -1 */
                 if (day < 0) {                  if (day < 0) {
                     v1 = day/10 - 1;          /* offset -4 ... -1 */                      v1 = day/10 - 1;          /* offset -4 ... -1 */
                     day = 10 + (day % 10);    /* day 1 ... 7 */                      day = 10 + (day % 10);    /* day 1 ... 7 */
   
                     /* day, eg '22th' */                      /* which weekday the end of the month is (1-7) */
                     v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);                      v2 = (cumdays[month + 1] - tp->tm_yday +
                           tp->tm_wday + 371) % 7 + 1;
   
                     /* (month length - day) / 7 + 1 */                      /* and subtract enough days */
                     if (((int)((cumdays[month+1] -                      day = cumdays[month + 1] - cumdays[month] +
                                cumdays[month] - v2) / 7) + 1) == -v1)                          (v1 + 1) * 7 - (v2 - day + 7) % 7;
                         /* bingo ! */  #if DEBUG
                         day = v2;                      fprintf(stderr, "\nMonth %d ends on weekday %d\n", month, v2);
   #endif
                     /* set to yesterday */  
                     else  
                         day = tp->tm_mday - 1;  
                 }                  }
   
                 /* first, second ... +1 ... +5 */                  /* first, second ... +1 ... +5 */
                 else {                  else {
                     v1 = day/10;        /* offset: +1 (first Sunday) ... */                      v1 = day/10;        /* offset */
                     day = day % 10;                      day = day % 10;
   
                     /* day, eg '22th' */                      /* which weekday the first of the month is */
                     v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);                      v2 = (cumdays[month] - tp->tm_yday +
                           tp->tm_wday + 372) % 7 + 1;
                     /* Hurrah! matched */  
                     if ( ((v2 - 1 + 7) / 7) == v1 )                      /* and add enough days */
                         day = v2;                      day = 1 + (v1 - 1) * 7 + (day - v2 + 7) % 7;
   #if DEBUG
                     /* set to yesterday */                      fprintf(stderr, "\nMonth %d starts on weekday %d\n", month, v2);
                     else  #endif
                         day = tp->tm_mday - 1;  
                 }  
             }              }
   
             /* wired */  
             else {  
                 day = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);  
                 *varp = 1;  
             }              }
         }          }
   

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5