Figure 2: Routines to convert MMDDYYYY to/from (PDDDDD)h

////////////////////////////////////////////////////////////////
//  Function:   MMDDYYToDDDDDh
//    Description:     Date converter.
//    Returns:  char * -- DDDDD.
////////////////////////////////////////////////////////////////
char *
MMDDYYToDDDDDh(int CCDigits, char *MMDDCCYYStartDate,
    char *MMDDYYDate, char *DDDDD) 
{
    char MMDDCCYYStartBuffer[9], MMDDCCYYBuffer[9],
         MMDDYYBuffer[7];
    static char DDDDDBuffer[6];
    unsigned long DayCount;
    strcpy(MMDDCCYYStartBuffer, MMDDCCYYStartDate);
    strcpy(MMDDYYBuffer, MMDDYYDate); 
    MMDDYYToMMDDCCYY(CCDigits, MMDDYYBuffer, MMDDCCYYBuffer);
    DayCount = FindJulianDay(MMDDCCYYBuffer) - 
        FindJulianDay(MMDDCCYYStartBuffer); 
    (void)printf("DayCount=%lu;\n", DayCount);   
    ltoa(DayCount, DDDDDBuffer, 16); // convert to hex
    strcpy(DDDDD, DDDDDBuffer);
    return DDDDDBuffer;
} 

////////////////////////////////////////////////////////////////
//  Function:  FindJulianDay
//
//  Description: Calculates JD for Gregorian calendar. 
//  Count starts from January 1st, 4713 BC. Days count from a
//  median Greenwich noon following a median Greenwich midnight
//  defining the beginning of the considered date.
//
//  Returns:  long -- JD value.
////////////////////////////////////////////////////////////////
long FindJulianDay(char *MMDDCCYYDate)
{
    unsigned long Year, CCDigits, YYDigits;  
    char MMDDCCYYBuffer[9];
    unsigned long JD;
    static float JulianDay;
    float YearConst;
    strcpy (MMDDCCYYBuffer, MMDDCCYYDate);  
    CCDigits=Get(MMDDCCYYBuffer, (int)CC);
    YYDigits=Get(MMDDCCYYBuffer, (int)YY);
    Year=CCDigits*100+YYDigits;
    JD=(4712+Year)*365+1178+Year/4+
        Year/400-CCDigits; // 1178=4712/4
    switch (Year % 4) {
        case 0:
            YearConst = 1.0F;
            break;
        case 1:
            YearConst = 1.75F;
            break;
        case 2:
            YearConst = 1.50F;
            break;
        case 3:
            YearConst = 1.25F;
            break;
    }
    JulianDay=(float)JD+YearConst;
    JulianDay+=(float)FindDateOrderedNumber(MMDDCCYYBuffer); 
    JD=(long)JulianDay;
    return (JD);    
} 

/* End of File */