- int w,d;
- char *p, *q, *r;
-
- p = s;
- q = s + maxs - 1;
- while ((*f != '\0'))
- {
- if (*f++ == '%')
- {
- r = buf;
- switch (*f++)
- {
- case '%' :
- r = "%";
- break;
-
- case 'a' :
- r = aday[t->tm_wday];
- break;
-
- case 'A' :
- r = day[t->tm_wday];
- break;
-
- case 'b' :
- r = amonth[t->tm_mon];
- break;
-
- case 'B' :
- r = month[t->tm_mon];
- break;
-
- case 'c' :
- strfmt(r, "%0 %0 %2 %2:%2:%2 %4",
- aday[t->tm_wday], amonth[t->tm_mon],
- t->tm_mday,t->tm_hour, t->tm_min,
- t->tm_sec, t->tm_year+1900);
- break;
-
- case 'd' :
- strfmt(r,"%2",t->tm_mday);
- break;
-
- case 'H' :
- strfmt(r,"%2",t->tm_hour);
- break;
-
- case 'I' :
- strfmt(r,"%2",(t->tm_hour%12)?t->tm_hour%12:12);
- break;
-
- case 'j' :
- strfmt(r,"%3",t->tm_yday+1);
- break;
-
- case 'm' :
- strfmt(r,"%2",t->tm_mon+1);
- break;
-
- case 'M' :
- strfmt(r,"%2",t->tm_min);
- break;
-
- case 'p' :
- r = (t->tm_hour>11)?"PM":"AM";
- break;
-
- case 'S' :
- strfmt(r,"%2",t->tm_sec);
- break;
-
- case 'U' :
- w = t->tm_yday/7;
- if (t->tm_yday%7 > t->tm_wday)
- w++;
- strfmt(r, "%2", w);
- break;
-
- case 'W' :
- w = t->tm_yday/7;
- if (t->tm_yday%7 > (t->tm_wday+6)%7)
- w++;
- strfmt(r, "%2", w);
- break;
-
- case 'V':
-
- /* ISO 8601 Week Of Year:
- If the week (Monday - Sunday) containing January 1 has four or more
- days in the new year, then it is week 1; otherwise it is week 53 of
- the previous year and the next week is week one. */
-
- w = (t->tm_yday + 7 - (t->tm_wday ? t->tm_wday - 1 : 6)) / 7;
- d = (t->tm_yday + 7 - (t->tm_wday ? t->tm_wday - 1 : 6)) % 7;
-
- if (d >= 4) { w++; } else if (w == 0) { w = 53; }
- strfmt(r, "%2", w);
- break;
-
- case 'w' :
- strfmt(r,"%1",t->tm_wday);
- break;
-
- case 'x' :
- strfmt(r, "%3s %3s %2 %4", aday[t->tm_wday],
- amonth[t->tm_mon], t->tm_mday, t->tm_year+1900);
- break;
-
- case 'X' :
- strfmt(r, "%2:%2:%2", t->tm_hour,
- t->tm_min, t->tm_sec);
- break;
-
- case 'y' :
- strfmt(r,"%2",t->tm_year%100);
- break;
-
- case 'Y' :
- strfmt(r,"%4",t->tm_year+1900);
- break;
-
- case 'Z' :
- r = (t->tm_isdst && tzname_[1][0]) ?
- tzname_[1] : tzname_[0];
- break;
-
- default:
- buf[0] = '%'; /* reconstruct the format */
- buf[1] = f[-1];
- buf[2] = '\0';
- if (buf[1] == 0)
- f--; /* back up if at end of string */
- }
- while (*r)
- {
- if (p == q)
- {
- *q = '\0';
- return 0;
- }
- *p++ = *r++;
- }
+ int w, d;
+ char *p, *q, *r;
+
+ p = s;
+ q = s + maxs - 1;
+ while ((*f != '\0')) {
+ if (*f++ == '%') {
+ r = buf;
+ switch (*f++) {
+ case '%':
+ r = "%";
+ break;
+
+ case 'a':
+ r = aday[t->tm_wday];
+ break;
+
+ case 'A':
+ r = day[t->tm_wday];
+ break;
+
+ case 'b':
+ r = amonth[t->tm_mon];
+ break;
+
+ case 'B':
+ r = month[t->tm_mon];
+ break;
+
+ case 'c':
+ strfmt(r, "%0 %0 %2 %2:%2:%2 %4",
+ aday[t->tm_wday], amonth[t->tm_mon],
+ t->tm_mday, t->tm_hour, t->tm_min,
+ t->tm_sec, t->tm_year + 1900);
+ break;
+
+ case 'd':
+ strfmt(r, "%2", t->tm_mday);
+ break;
+
+ case 'H':
+ strfmt(r, "%2", t->tm_hour);
+ break;
+
+ case 'I':
+ strfmt(r, "%2", (t->tm_hour % 12) ? t->tm_hour % 12 : 12);
+ break;
+
+ case 'j':
+ strfmt(r, "%3", t->tm_yday + 1);
+ break;
+
+ case 'm':
+ strfmt(r, "%2", t->tm_mon + 1);
+ break;
+
+ case 'M':
+ strfmt(r, "%2", t->tm_min);
+ break;
+
+ case 'p':
+ r = (t->tm_hour > 11) ? "PM" : "AM";
+ break;
+
+ case 'S':
+ strfmt(r, "%2", t->tm_sec);
+ break;
+
+ case 'U':
+ w = t->tm_yday / 7;
+ if (t->tm_yday % 7 > t->tm_wday)
+ w++;
+ strfmt(r, "%2", w);
+ break;
+
+ case 'W':
+ w = t->tm_yday / 7;
+ if (t->tm_yday % 7 > (t->tm_wday + 6) % 7)
+ w++;
+ strfmt(r, "%2", w);
+ break;
+
+ case 'V':
+
+ /* ISO 8601 Week Of Year:
+ If the week (Monday - Sunday) containing January 1 has four or more
+ days in the new year, then it is week 1; otherwise it is week 53 of
+ the previous year and the next week is week one. */
+
+ w = (t->tm_yday + 7 - (t->tm_wday ? t->tm_wday - 1 : 6)) / 7;
+ d = (t->tm_yday + 7 - (t->tm_wday ? t->tm_wday - 1 : 6)) % 7;
+
+ if (d >= 4) {
+ w++;
+ } else if (w == 0) {
+ w = 53;
+ }
+ strfmt(r, "%2", w);
+ break;
+
+ case 'w':
+ strfmt(r, "%1", t->tm_wday);
+ break;
+
+ case 'x':
+ strfmt(r, "%3s %3s %2 %4", aday[t->tm_wday],
+ amonth[t->tm_mon], t->tm_mday, t->tm_year + 1900);
+ break;
+
+ case 'X':
+ strfmt(r, "%2:%2:%2", t->tm_hour, t->tm_min, t->tm_sec);
+ break;
+
+ case 'y':
+ strfmt(r, "%2", t->tm_year % 100);
+ break;
+
+ case 'Y':
+ strfmt(r, "%4", t->tm_year + 1900);
+ break;
+
+ case 'Z':
+ r = (t->tm_isdst && tzname_[1][0]) ? tzname_[1] : tzname_[0];
+ break;
+
+ default:
+ buf[0] = '%'; /* reconstruct the format */
+ buf[1] = f[-1];
+ buf[2] = '\0';
+ if (buf[1] == 0)
+ f--; /* back up if at end of string */
+ }
+ while (*r) {
+ if (p == q) {
+ *q = '\0';
+ return 0;
+ }
+ *p++ = *r++;