/*****************************************************************************
         AUTHOR: Speedy Mercer 
        WEBSITE: http://www.herohog.com
         E-MAIL: code AT herohog.com
          LEGAL: This program is provided for FREE.
                 There is NO warranty either written or implied.
*****************************************************************************/
/* 
   Convert a Standard Julian Date to a Progress Date Value.
   
   Usage Syntax:
      DEF VAR vJulian AS INTEGER INIT 2453084 NO-UNDO.
      DEF VAR vDate   AS DATE NO-UNDO.
      
      RUN FromJulianDate.p (INPUT vJulian, OUTPUT vDate).
      
      DISP vDate.
*/

DEF INPUT  PARAM vJulian AS INTEGER NO-UNDO.
DEF OUTPUT PARAM vDate   AS DATE    NO-UNDO.

DEF VAR vYear    AS INTEGER NO-UNDO.
DEF VAR vCentury AS INTEGER NO-UNDO.
DEF VAR vDecade  AS INTEGER NO-UNDO.
DEF VAR vMonth   AS INTEGER NO-UNDO.
DEF VAR vDay     AS INTEGER NO-UNDO.

ASSIGN 
   vJulian = vJulian - 1721119
   vYear   = TRUNCATE(DECIMAL((4 * vJulian - 1) / 146097), 0)
   vJulian = TRUNCATE(DECIMAL(4 * vJulian - 1 - 146097 * vYear), 0)
   vDay    = TRUNCATE(DECIMAL(vJulian / 4), 0)
   vJulian = TRUNCATE(DECIMAL((4 * vDay + 3) / 1461), 0)
   vDay    = TRUNCATE(DECIMAL(4 * vDay + 3 - 1461 * vJulian), 0)
   vDay    = TRUNCATE(DECIMAL((vDay + 4) / 4), 0)
   vMonth  = TRUNCATE(DECIMAL((5 * vDay - 3) / 153), 0)
   vDay    = TRUNCATE(DECIMAL(5 * vDay - 3 - 153 * vMonth), 0)
   vDay    = TRUNCATE(DECIMAL((vDay + 5) / 5), 0)
   vYear   = TRUNCATE(DECIMAL(100 * vYear + vJulian), 0).

IF vMonth < 10 
THEN vMonth = vMonth + 3.
ELSE ASSIGN
   vMonth = vMonth - 9
   vYear = vYear + 1.

vDate = DATE(STRING(vMonth) + "/" + STRING(vDay) + "/" + STRING(vYear)).
