SUBROUTINE JULIAN(JDAT,IMO,IDA,IYR,MODE,ISW) C C C COMPONENT: JULIAN C C DATE: 28-AUG-79 C C AUTHOR: GR JOHNSON C BATTELLE NORTHWEST C P O BOX 999 C RICHLAND WA 99352 C C SOURCE: FORTRAN IV-PLUS C C CALLER: FORTRAN IV-PLUS C C CALLING SEQUENCE: C C CALL JULIAN(JDAT,IMO,IDA,IYR,MODE,ISW) C C JDAT = JULIAN REPRESENTATION OF THE DATE. C C IMO,IDA,IYR C C = GREGORIAN REPRESENTATION OF THE DATE. C C MODE = INTEGER SPECIFYING THE CONVERSION MODE. C C 00 = 'ENCODE' (GREGORIAN TO JULIAN) C 01 = 'DECODE' (JULIAN TO GREGORIAN) C C ISW = VARIABLE TO RECEIVE THE INTEGER STATUS WORD. C C 00 = SUCCESS C -01 = SYNTAX ERROR C C C DESCRIPTION: C C "JULIAN" CONVERTS GREGORIAN DATES TO JULIAN AND VICE-VERSA. C THE VALUE STORED IN "IYR" IS USED TO DETERMINE LEAP YEARS. C C C PARAMETERS AND VARIABLES C INTEGER JDAT ! JULIAN DATE INTEGER IMO,IDA,IYR ! GREGORIAN DATE INTEGER MODE ! CONVERSION MODE INTEGER ISW ! INTEGER STATUS WORD C INTEGER IDAYS(12) DATA IDAYS/31,28,31,30,31,30,31,31,30,31,30,31/ C C C ADJUST FOR LEAP YEARS C IDAYS(2)=28 IF(MOD(MOD(IYR,100),4).EQ.0) IDAYS(2)=29 C C C ROUTE TO APPROPRIATE CONVERSION C ISW=0 IF(MODE.EQ.0) GO TO 10 IF(MODE.EQ.1) GO TO 20 GO TO 900 C C C CONVERT GREGORIAN IDAT TO JULIAN JDAT C 10 IF(IMO.LT.0.OR.IMO.GT.12) GO TO 900 IF(IDA.LT.0.OR.IDA.GT.IDAYS(IMO)) GO TO 900 JDAT=IDA IF(IMO.EQ.1) GO TO 9999 DO 1010 I=1,IMO-1 JDAT=JDAT+IDAYS(I) 1010 CONTINUE GO TO 9999 C C C CONVERT JULIAN JDAT TO GREGORIAN IDAT C 20 IF(JDAT.LE.0) GO TO 900 IDA=JDAT DO 2010 IMO=1,12 IF(IDA.LE.IDAYS(IMO)) GO TO 9999 IDA=IDA-IDAYS(IMO) 2010 CONTINUE C C C PROCESS ERRORS C 900 ISW=-1 C 9999 RETURN END