C $Id: dates.f 3304 2011-01-17 15:25:59Z brideout $ C SUBROUTINE DATES(DAY,MONTH,YEAR,IOPT,IER,DATE) C C Returns DATE String in various formats given DAY, MONTH, YEAR C and IOPT (which specifies the desired format). C C The following variables appear in the calling sequence C C Input: C DAY - DAY OF THE MONTH (1) C MONTH - MONTH NUMBER (3) C YEAR - YEAR (1977) C IOPT - FORMAT INDICATOR WHEN DATE IS AN OUTPUT VARIABLE C 1 - 01/01/97 C 2 - 01,JAN,1997 C 3 - 1 JANUARY, 1997 C 4 - JANUARY 1 1997 C 5 - 01JAN97 C C Output: C IER - ERROR INDICATOR. IER IS RETURNED BY ALL ROUTINES IN C THE PACKAGE. IER=0 IF NO ERRORS ARE DETECTED. IER=1 C IF AN ERROR IS DETECTED. C DATE - DATE AS A STRING OF ALPHANUMERIC CHARACTERS, 3 C CHARACTERS/WORD. WHEN AN INPUT VARIABLE, DATE MAY BE C IN ANY REASONABLE FORMAT, E.G. MARCH 1 1977, 3/1/77, C ETC. IF EXPRESSED AS THREE NUMERIC FIELDS, ORDER IS C PRESUMED TO BE MONTH, DAY, YEAR. WHEN AN OUTPUT C VARIABLE, THE FORMAT IS DETERMINED BY IOPT, AND SIX C WORDS SHOULD BE RESERVED IN THE CALLING PROGRAM. C C .. Scalar Arguments .. INTEGER DAY,IER,IOPT,MONTH,YEAR CHARACTER*(*) DATE C .. C .. Local Scalars .. INTEGER IC CHARACTER*2 CDAY,CMONTH CHARACTER*4 CYEAR CHARACTER*9 MSTR C .. C .. Local Arrays .. INTEGER MOCHAR(12) C .. C .. External Subroutines .. EXTERNAL MONAME C .. C .. Intrinsic Functions .. INTRINSIC CHAR C .. C .. Data statements .. DATA MOCHAR/7,8,5,5,3,4,4,6,9,7,8,8/ C .. C IER = 0 IC = 0 WRITE (UNIT=CDAY,FMT='(I2)') DAY WRITE (UNIT=CMONTH,FMT='(I2)') MONTH WRITE (UNIT=CYEAR,FMT='(I4)') YEAR GO TO (10,20,30,40,50) IOPT C C ..01/01/97 10 DATE(1:2) = CMONTH IF (MONTH.LT.10) DATE(1:1) = '0' DATE(3:3) = '/' DATE(4:5) = CDAY IF (DAY.LT.10) DATE(4:4) = '0' DATE(6:6) = '/' DATE(7:8) = CYEAR(3:4) DATE(8:8) = CHAR(0) GO TO 80 C C ..01,JAN,1997 20 DATE(1:2) = CDAY(1:2) IF (DAY.LT.10) DATE(1:1) = '0' CALL MONAME(MONTH,MSTR,IER) DATE(3:3) = ',' DATE(4:6) = MSTR(1:3) DATE(7:7) = ',' DATE(8:11) = CYEAR DATE(12:12) = CHAR(0) GO TO 80 C C ..1 JANUARY, 1997 30 IF (DAY.LT.10) DATE(1:1) = CDAY(2:2) IF (DAY.GE.10) DATE(1:2) = CDAY(1:2) IF (DAY.LT.10) IC = 2 IF (DAY.GE.10) IC = 3 DATE(IC:IC) = ' ' IC = IC + 1 CALL MONAME(MONTH,MSTR,IER) DATE(IC:IC+MOCHAR(MONTH)-1) = MSTR IC = IC + MOCHAR(MONTH) DATE(IC:IC) = ',' IC = IC + 1 DATE(IC:IC) = ' ' IC = IC + 1 DATE(IC:IC+3) = CYEAR IC = IC + 4 DATE(IC:IC) = CHAR(0) GO TO 80 C C ..JANUARY 1 1997 40 IC = 1 CALL MONAME(MONTH,MSTR,IER) DATE(1:MOCHAR(MONTH)) = MSTR IC = IC + MOCHAR(MONTH) DATE(IC:IC) = ' ' IC = IC + 1 IF (DAY.GE.10) GO TO 60 DATE(IC:IC) = CDAY(2:2) IC = IC + 1 GO TO 70 C C ..01JAN97 50 DATE(1:2) = CDAY(1:2) IF (DAY.LT.10) DATE(1:1) = '0' CALL MONAME(MONTH,MSTR,IER) DATE(3:5) = MSTR(1:3) DATE(6:7) = CYEAR(3:4) DATE(8:8) = CHAR(0) GO TO 80 C 60 DATE(IC:IC+1) = CDAY IC = IC + 2 DATE(IC:IC) = ',' IC = IC + 1 70 DATE(IC:IC) = ' ' IC = IC + 1 DATE(IC:IC+3) = CYEAR IC = IC + 4 DATE(IC:IC) = CHAR(0) C 80 RETURN C END