C FUNCTION TO CONVERT DATE STRING IN FORMAT '99-99-99' OR '99/99/99' C OR '99-MMM-99' TO JULIAN DATE FROM 12-31-1900 C ALGORITHM FROM BYTE, 192(1980). C C Submitted by: C C R. N. Stillwell C Institute for Lipid Research C Baylor College of Medicine C Houston, Texas 77030 C C (who would be glad to receive comments, suggestions, bug fixes, etc., but C who promises no support whatever). C C Literature reference: C C R. N. Stillwell. A low-overhead laboratory data management system C for the PDP11. Comput. Biomed. Res., 15, 29-38(1982). C C Acknowledgement: C C This software was developed under National Institutes of Health grants C GM-13901 and GM-26611. C C General permission is hereby granted to copy, modify, or distribute this C program, but not for profit. Copyright to this software is and shall C remain in the public domain. C FUNCTION JDATE(STRING,LEN2) BYTE STRING(LEN2) LOGICAL*1 EQUAL REAL MONTH,DAY,YEAR,JDATE REAL*4 MONAM(12) DATA MONAM /'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG', 1 'SEP','OCT','NOV','DEC'/ ISTR = 1 WHILE (STRING(ISTR).EQ.' ') ISTR = ISTR+1 MONTH = 0.0 WHILE (ISTR.LE.LEN2.AND.VERIFY(STRING(ISTR),'0123456789',1).EQ.0) MONTH = MONTH*10 + STRING(ISTR) - 48. ISTR = ISTR+1 FIN IF (VERIFY(STRING(ISTR),'/-',1).NE.0) REPORT-BAD-DATE ISTR = ISTR+1 DAY = 0.0 C FIRST CHECK FOR 99-MMM-99 FORMAT IMO = 1 WHILE (IMO.LE.12.AND..NOT.EQUAL(STRING(ISTR),MONAM(IMO),3)) IMO = IMO + 1 FIN WHEN (IMO.LE.12) DAY = MONTH MONTH = IMO ISTR = ISTR+3 FIN ELSE WHILE (ISTR.LE.LEN2.AND.VERIFY(STRING(ISTR),'0123456789',1).EQ.0) DAY = DAY*10 + STRING(ISTR) - 48. ISTR = ISTR+1 FIN FIN IF (VERIFY(STRING(ISTR),'/-',1).NE.0) REPORT-BAD-DATE ISTR = ISTR+1 YEAR = 0.0 WHILE (ISTR.LE.LEN2.AND.VERIFY(STRING(ISTR),'0123456789',1).EQ.0) YEAR = YEAR*10 + STRING(ISTR) - 48. ISTR = ISTR+1 FIN IF (YEAR.GT.1900.) YEAR = YEAR-1900. IF (MONTH.LE.0.OR.MONTH.GT.12) REPORT-BAD-DATE IF (DAY.LE.0.OR.DAY.GT.31) REPORT-BAD-DATE IF (YEAR.LE.0.OR.YEAR.GT.200) REPORT-BAD-DATE JDATE = AINT(30.57*MONTH) + AINT(365.25*YEAR-395.25) + DAY IF (MONTH.GE.3) IYEAR = YEAR WHEN (MOD(IYEAR,4).EQ.0) JDATE = JDATE-1 ELSE JDATE = JDATE-2 FIN RETURN TO REPORT-BAD-DATE D WRITE (5,9901) MONTH,DAY,YEAR D9901 FORMAT (' MONTH, DAY,YEAR:',3F12.1) JDATE = -1 RETURN FIN END