home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / strftime-3.0 / patch01 < prev    next >
Text File  |  1993-05-07  |  6KB  |  192 lines

  1. Newsgroups: comp.sources.unix
  2. From: arnold@skeeve.atl.ga.us (Arnold Robbins)
  3. Subject: v26i235: strftime-3.0 - still more strftime(3) and date(1), Patch01
  4. Sender: unix-sources-moderator@efficacy.home.vix.com
  5. Approved: vixie@efficacy.home.vix.com
  6.  
  7. Submitted-By: arnold@skeeve.atl.ga.us (Arnold Robbins)
  8. Posting-Number: Volume 26, Issue 235
  9. Archive-Name: strftime-3.0/patch01
  10.  
  11. This brings it up to 3.1. A bug fix plus a test routine.
  12.  
  13. Arnold
  14.  
  15. *** strftime.c.orig    Sun May  2 22:09:18 1993
  16. --- strftime.c    Fri May  7 08:47:49 1993
  17. ***************
  18. *** 27,32 ****
  19. --- 27,34 ----
  20.    *
  21.    * Fixes from ado@elsie.nci.nih.gov
  22.    * February 1991, May 1992
  23. +  * Fixes from Tor Lillqvist tor@tik.vtt.fi
  24. +  * May, 1993
  25.    */
  26.   
  27.   #ifndef GAWK
  28. ***************
  29. *** 511,517 ****
  30.       simple_wknum = weeknumber(timeptr, 1) + 1;
  31.   
  32.       /*
  33. !      * With thanks and tip of the hatlo to ado@elsie.nci.nih.gov
  34.        *
  35.        * What day of the week does January 1 fall on?
  36.        * We know that
  37. --- 513,519 ----
  38.       simple_wknum = weeknumber(timeptr, 1) + 1;
  39.   
  40.       /*
  41. !      * With thanks and tip of the hatlo to tml@tik.vtt.fi
  42.        *
  43.        * What day of the week does January 1 fall on?
  44.        * We know that
  45. ***************
  46. *** 518,529 ****
  47.        *    (timeptr->tm_yday - jan1.tm_yday) MOD 7 ==
  48.        *        (timeptr->tm_wday - jan1.tm_wday) MOD 7
  49.        * and that
  50. !      *     jan1.tm_yday == 1
  51.        * and that
  52.        *     timeptr->tm_wday MOD 7 == timeptr->tm_wday
  53.        * from which it follows that. . .
  54.         */
  55. !     jan1day = (timeptr->tm_yday - 1) % 7 - timeptr->tm_wday;
  56.       if (jan1day < 0)
  57.           jan1day += 7;
  58.   
  59. --- 520,531 ----
  60.        *    (timeptr->tm_yday - jan1.tm_yday) MOD 7 ==
  61.        *        (timeptr->tm_wday - jan1.tm_wday) MOD 7
  62.        * and that
  63. !      *     jan1.tm_yday == 0
  64.        * and that
  65.        *     timeptr->tm_wday MOD 7 == timeptr->tm_wday
  66.        * from which it follows that. . .
  67.         */
  68. !     jan1day = timeptr->tm_wday - (timeptr->tm_yday % 7);
  69.       if (jan1day < 0)
  70.           jan1day += 7;
  71.   
  72. ***************
  73. *** 589,591 ****
  74. --- 591,707 ----
  75.      Michal
  76.      ntomczak@vm.ucs.ualberta.ca
  77.   #endif
  78. + #ifdef    TEST_STRFTIME
  79. + /*
  80. +  * NAME:
  81. +  *    tst
  82. +  *
  83. +  * SYNOPSIS:
  84. +  *    tst
  85. +  *
  86. +  * DESCRIPTION:
  87. +  *    "tst" is a test driver for the function "strftime".
  88. +  *
  89. +  * OPTIONS:
  90. +  *    None.
  91. +  *
  92. +  * AUTHOR:
  93. +  *    Karl Vogel
  94. +  *    Control Data Systems, Inc.
  95. +  *    vogelke@c-17igp.wpafb.af.mil
  96. +  *
  97. +  * BUGS:
  98. +  *    None noticed yet.
  99. +  *
  100. +  * COMPILE:
  101. +  *    cc -o tst -DTEST_STRFTIME strftime.c
  102. +  */
  103. + /* ADR: I reformatted this to my liking, and deleted some unneeded code. */
  104. + #ifndef NULL
  105. + #include    <stdio.h>
  106. + #endif
  107. + #include    <sys/time.h>
  108. + #include    <string.h>
  109. + #define        MAXTIME        132
  110. + /*
  111. +  * Array of time formats.
  112. +  */
  113. + static char *array[] =
  114. + {
  115. +     "(%%A)      full weekday name, var length (Sunday..Saturday)  %A",
  116. +     "(%%B)       full month name, var length (January..December)  %B",
  117. +     "(%%C)                                               Century  %C",
  118. +     "(%%D)                                       date (%%m/%%d/%%y)  %D",
  119. +     "(%%E)                           Locale extensions (ignored)  %E",
  120. +     "(%%H)                          hour (24-hour clock, 00..23)  %H",
  121. +     "(%%I)                          hour (12-hour clock, 01..12)  %I",
  122. +     "(%%M)                                       minute (00..59)  %M",
  123. +     "(%%O)                           Locale extensions (ignored)  %O",
  124. +     "(%%R)                                 time, 24-hour (%%H:%%M)  %R",
  125. +     "(%%S)                                       second (00..61)  %S",
  126. +     "(%%T)                              time, 24-hour (%%H:%%M:%%S)  %T",
  127. +     "(%%U)    week of year, Sunday as first day of week (00..53)  %U",
  128. +     "(%%V)                    week of year according to ISO 8601  %V",
  129. +     "(%%W)    week of year, Monday as first day of week (00..53)  %W",
  130. +     "(%%X)     appropriate locale time representation (%H:%M:%S)  %X",
  131. +     "(%%Y)                           year with century (1970...)  %Y",
  132. +     "(%%Z) timezone (EDT), or blank if timezone not determinable  %Z",
  133. +     "(%%a)          locale's abbreviated weekday name (Sun..Sat)  %a",
  134. +     "(%%b)            locale's abbreviated month name (Jan..Dec)  %b",
  135. +     "(%%c)           full date (Sat Nov  4 12:02:33 1989)%n%t%t%t  %c",
  136. +     "(%%d)                             day of the month (01..31)  %d",
  137. +     "(%%e)               day of the month, blank-padded ( 1..31)  %e",
  138. +     "(%%h)                                should be same as (%%b)  %h",
  139. +     "(%%j)                            day of the year (001..366)  %j",
  140. +     "(%%k)               hour, 24-hour clock, blank pad ( 0..23)  %k",
  141. +     "(%%l)               hour, 12-hour clock, blank pad ( 0..12)  %l",
  142. +     "(%%m)                                        month (01..12)  %m",
  143. +     "(%%p)              locale's AM or PM based on 12-hour clock  %p",
  144. +     "(%%r)                   time, 12-hour (same as %%I:%%M:%%S %%p)  %r",
  145. +     "(%%u) ISO 8601: Weekday as decimal number [1 (Monday) - 7]   %u",
  146. +     "(%%v)                                VAX date (dd-bbb-YYYY)  %v",
  147. +     "(%%w)                       day of week (0..6, Sunday == 0)  %w",
  148. +     "(%%x)                appropriate locale date representation  %x",
  149. +     "(%%y)                      last two digits of year (00..99)  %y",
  150. +     (char *) NULL
  151. + };
  152. + /* Main routine. */
  153. + int
  154. + main(argc, argv)
  155. + int argc;
  156. + char **argv;
  157. + {
  158. +     long time();
  159. +     char *next;
  160. +     char string[MAXTIME];
  161. +     int k;
  162. +     int length;
  163. +     struct tm *tm;
  164. +     long clock;
  165. +     /* Call the function. */
  166. +     clock = time((long *) 0);
  167. +     tm = localtime(&clock);
  168. +     for (k = 0; next = array[k]; k++) {
  169. +         length = strftime(string, MAXTIME, next, tm);
  170. +         printf("%s\n", string);
  171. +     }
  172. +     exit(0);
  173. + }
  174. + #endif    /* TEST_STRFTIME */
  175.