SUBROUTINE HAPO(HDAT,IMO,IDA,IYR,MODE,ISW) C C C COMPONENT: HAPO C C DATE: 29-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 HAPO(HDAT,IMO,IDA,IYR,MODE,ISW) C C HDAT = HAPO 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 HAPO) C 01 = 'DECODE' (HAPO 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 "HAPO" CONVERTS GREGORIAN DATES TO A SINGLE INTEGER AND VICE-VERSA. C HAPO CONVERSIONS MAY BE USED TO REDUCE MASS STORAGE REQUIREMENTS, AND C SIMPLIFY THE COMPUTATION OF LAPSED TIME BETWEEN ANY TWO CALENDAR DATES. C THIS IS DONE BY STARTING WITH A BASE DATE AS DAY 1, AND SEQUENTIALLY C NUMBERING THE DAYS THAT FOLLOW, ALLOWING A VERY SIMPLE SUBTRACTION OF C THE TWO DATES INVOLVED. THE BASE DATE FOR HAPO IS SEPTEMBER 26, 1944 C WHICH MARKS THE STARTUP OF HANFORD'S FIRST ATOMIC REACTOR. C C C PARAMETERS AND VARIABLES C INTEGER HDAT ! HAPO DATE INTEGER IMO,IDA,IYR ! GREGORIAN DATE INTEGER MODE ! CONVERSION MODE INTEGER ISW ! INTEGER STATUS WORD 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 HAPO HDAT C 10 CALL JULIAN(JDAT,IMO,IDA,IYR,0,ISW) IF(ISW.LT.0) GO TO 900 NYR=MOD(IYR,100)-44 HDAT=365.25*NYR+JDAT-268 IF(MOD(IYR,4).EQ.0) HDAT=HDAT-1 IF(HDAT.LE.0) GO TO 900 GO TO 9999 C C C CONVERT HAPO HDAT TO GREGORIAN IDAT C 20 IF(HDAT.LE.0.OR.HDAT.GT.20185) GO TO 900 NYR=(HDAT+268)/365.25 JDAT=HDAT-365.25*NYR+268 IYR=NYR+44 CALL JULIAN(JDAT+1,IMO,IDA,IYR,1,ISW) IF(ISW.EQ.0) GO TO 9999 C C C PROCESS ERRORS C 900 ISW=-1 C 9999 RETURN END