C ===================================================================== C pgm: SHIEOM .. Increment the end-of-month by given number of months C C use: CALL SHIEOM(JYR,JMO,JDA,INC,ISTAT) C C i/o: JYR ...... year number (1753-2199) - INT C i/o: JMO ...... month number (01-12) - INT C i/o: JDA ...... day number (01-31) - INT C in: INC ...... number of months (pos or neg) for increment - INT C out: ISTAT .... if 0 then no error, if 1 then not end-of-month, - INT C out: if 2 then bad year number resulted C ===================================================================== SUBROUTINE SHIEOM(JYR,JMO,JDA,INC,ISTAT) INTEGER JYR,JMO,JDA,INC,ISTAT,JYRT,JMOT,JDAT,MXD(12),MDAY C C ================================= RCS keyword statements ========== CHARACTER*68 RCSKW1,RCSKW2 DATA RCSKW1,RCSKW2 / ' .$Source: /fs/hseb/ob5/rfc/ofs/src/shefpars_driv/RCS/shieom.f,v $ . $', ' .$Id: shieom.f,v 1.3 1998/04/07 19:13:19 page Exp $ . $' / C =================================================================== C DATA MXD / 31,29,31,30,31,30,31,31,30,31,30,31 / JYRT = JYR JMOT = JMO JDAT = JDA MDAY = MXD(JMOT) IF (JMOT .EQ. 2) THEN MDAY = MDAY-(JYRT+3)/4+JYRT/4 IF (JYRT .EQ. 1900) MDAY = 28 IF (JYRT .EQ. 1800) MDAY = 28 IF (JYRT .EQ. 2100) MDAY = 28 ENDIF IF (MDAY .NE. JDA) THEN ISTAT = 1 ELSE ISTAT = 0 JMOT = JMOT+INC 100 IF (JMOT.GE.1 .AND. JMOT.LE.12) GOTO 110 IF (JMOT .GT. 12) THEN JMOT = JMOT-12 JYRT = JYRT+1 IF (JYRT .EQ. 100) JYRT = 0 ELSE JMOT = JMOT+12 JYRT = JYRT-1 IF (JYRT .EQ. -1) JYRT = 99 ENDIF GOTO 100 110 CONTINUE JDAT = MXD(JMOT) IF (JMOT .EQ. 2) THEN JDAT = JDAT-(JYRT+3)/4+JYRT/4 IF (JYRT .EQ. 1900) MDAY = 28 IF (JYRT .EQ. 1800) MDAY = 28 IF (JYRT .EQ. 2100) MDAY = 28 ENDIF IF (JYRT .GE. 100) THEN IF (JYRT.LT.1753 .OR. JYRT.GT.2199) ISTAT = 2 ENDIF ENDIF JYR = JYRT JMO = JMOT JDA = JDAT RETURN END