SUBROUTINE CVTDAT(ADAT,IMO,IDA,IYR,MODE,ISW) C C C COMPONENT: CVTDAT 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 CVTDAT(ADAT,IMO,IDA,IYR,MODE,ISW) C C ADAT = ASCII REPRESENTATION OF THE DATE (DD-MMM-YY). C THE STRING MUST BE (WILL BE) TERMINATED BY AN C ASCII NULL CHARACTER. C C IMO,IDA,IYR C C = INTEGER REPRESENTATION OF THE DATE. C C MODE = INTEGER SPECIFYING THE CONVERSION MODE. C C 00 = 'ENCODE' (INTEGER TO ASCII) C 01 = 'DECODE' (ASCII TO INTEGER) C C ISW = VARIABLE TO RECEIVE THE INTEGER STATUS WORD. C C 00 = SUCCESS C -01 = SYNTAX ERROR C C C DESCRIPTION: C C "CVTDAT" CONVERTS AN ASCII REPRESENTATION OF THE SUPPLIED DATE C TO ITS INTEGER EQUIVALENTS, AND VICE-VERSA. THE STRING MUST BE (WILL C BE) TERMINATED BY AN ASCII NULL TERMINATOR. C C C PARAMETERS AND VARIABLES C PARAMETER EOS = 0 ! "END-OF-STRING" C BYTE ADAT(1) ! ASCII DATE INTEGER IMO,IDA,IYR ! INTEGER 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 ROUTE TO APPROPRIATE CONVERSION C ISW=0 IF(MODE.EQ.0) GO TO 10 IF(MODE.EQ.1) GO TO 20 GO TO 901 C C C CONVERT INTEGER IDAT TO ASCII ADAT C 10 IDAYS(2)=28 IF(MOD(MOD(IYR,100),4).EQ.0) IDAYS(2)=29 IF(IMO.LT.0.OR.IMO.GT.12) GO TO 900 IF(IDA.LT.0.OR.IDA.GT.IDAYS(IMO)) GO TO 900 C CALL ACNVT(IDA,ADAT(1),2,,'0') ADAT(3)='-' CALL CONCAT(ADAT(4),AMON(IMO)) ADAT(7)='-' CALL ACNVT(IYR,ADAT(8),2,,'0') ADAT(10)=EOS GO TO 9999 C C C CONVERT ASCII ADAT TO INTEGER IDAT C 20 IPNT=1 C IDA=ICNVT(ADAT(IPNT),NCHR) IPNT=IPNT+NCHR IF(ADAT(IPNT).NE.'-') GO TO 901 IPNT=IPNT+1 C DO 2010 IMO=1,12 CALL COMPAR(ADAT(IPNT),AMON(IMO),NCHR) IF(NCHR.EQ.4) GO TO 2020 2010 CONTINUE GO TO 901 2020 IPNT=IPNT+3 IF(ADAT(IPNT).NE.'-') GO TO 901 IPNT=IPNT+1 C IYR=ICNVT(ADAT(IPNT),NCHR) IPNT=IPNT+NCHR IF(ADAT(IPNT).NE.EOS) GO TO 901 C IDAYS(2)=28 IF(MOD(MOD(IYR,100),4).EQ.0) IDAYS(2)=29 IF(IDA.LE.0.OR.IDA.GT.IDAYS(IMO)) GO TO 901 GO TO 9999 C C C PROCESS ERRORS C 900 DO 9001 IPNT=1,9 ADAT(IPNT)=' ' 9001 CONTINUE ADAT(10)=EOS C 901 ISW=-1 C 9999 RETURN END