home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / datetime / c_dates2 / separate / fulldte.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-01-01  |  2.1 KB  |  72 lines

  1. /************************************************************************/
  2. /*                *** fulldte.c ***            */
  3. /*                                    */
  4. /* This function converts a julian day number ( 1 = 1st day AD ),    */
  5. /* into an equivalent gregorian date descriptive phraze of the form:    */
  6. /*                                    */
  7. /*    "Wednesday September 16, 1987"        ( example )        */
  8. /*                                    */
  9. /* The input values, in their proper order, are:            */
  10. /*                                    */
  11. /*  1.  the julian date to be converted              ( unsigned long )    */
  12. /*                                    */
  13. /*  2.  a pointer to the output character string.     ( char * )    */
  14. /*                                    */
  15. /* The length, in ASCII characters, of the output string is returned    */
  16. /* by the function upon completion, expressed as an unsigned integer.    */
  17. /*                                    */
  18. /* WARNING - the character string pointed to must be dimensioned to    */
  19. /*         at least 29 characters, or a memory overwrite may occur.    */
  20. /*                                    */
  21. /************************************************************************/
  22.  
  23. extern int   dow( unsigned long );
  24. extern char *jtog( unsigned long, char *, unsigned int );
  25.  
  26. int fulldte( julian, dtestr )
  27.  
  28. long julian;
  29. char *dtestr;
  30.  
  31. {
  32.     static char *daynme[7]  =  {  "Sunday",    "Monday",   "Tuesday",
  33.                       "Wednesday", "Thursday", "Friday",
  34.                       "Saturday"              };
  35.     static char *mosnme[12] =  {  "January", "February", "March",
  36.                       "April",   "May",      "June",
  37.                       "July",    "August",   "September",
  38.                       "October", "November", "December"   };
  39.  
  40.     static char **text[2] = { daynme, mosnme };
  41.  
  42.     int i, j, k, strt, dtearr[4];
  43.  
  44.     dtearr[0] = dow( julian );
  45.     jtog( julian, (char *)&dtearr[1], 0 );
  46.     --dtearr[1];
  47.  
  48.     for ( i = j = k = 0; i < 2; k = 0, ++i )
  49.     {
  50.           while ( text[i][dtearr[i]][k] )
  51.               dtestr[j++] = text[i][dtearr[i]][k++];
  52.           dtestr[j++] = ' ';
  53.     }
  54.  
  55.     for ( strt = 0, i = 2; i < 4; ++i )
  56.     {
  57.           for ( k = 1000; k; dtearr[i] %= k, k /= 10 )
  58.           {
  59.             if ( strt = strt || dtearr[i] / k )
  60.              dtestr[j++] = (char)( dtearr[i] / k + 48 );
  61.           }
  62.  
  63.           if ( i == 2 ) dtestr[j++] = ',';
  64.  
  65.           dtestr[j++] = ' ';
  66.     }
  67.  
  68.     dtestr[--j] = '\0';
  69.  
  70.     return( j );
  71. }
  72.