C FUNCTION WHICH EVALUATES AN OPERAND AND RETURNS THE VALUE. C THE OPERAND IS (1) A NUMERIC CONSTANT OR (2) THE NAME OF C A VARIABLE WHOSE VALUE CAN BE DECODED TO A NUMERIC OR C (3) THE NAME OF A VARIABLE WHOSE VALUE IS THE NAME OF C ANOTHER VARIABLE ... WHOSE VALUE CAN BE DECODED. C (THIS ALLOWS THE USE OF PRE-DEFINED "VARIABLES" LIKE C "yes" AND "FALSE". 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 C FUNCTION EVATOM(LATOM,ATBUF,EVALER) REAL EVATOM INTEGER LBUF,LATOM BYTE ATBUF(LATOM) LOGICAL*1 EVALER REAL*8 VARNAM BYTE VARBUF(40) EQUIVALENCE (VARNAM,VARBUF) BYTE VARVAL(40) DATA MAXVAR/40/ INTEGER VARLEN INTEGER GETVAR EVALER = .FALSE. EVATOM = 0.0 C COPY THE ARGUMENT INTO VARBUF VARNAM = ' ' DO (I=1,LATOM) VARBUF(I) = ATBUF(I) LBUF = LATOM REPEAT UNTIL (VARLEN.LT.0) VARLEN = GETVAR(VARNAM,VARVAL,MAXVAR) IF (VARLEN.GE.0) VARNAM = ' ' DO (I=1,VARLEN) VARBUF(I) = VARVAL(I) LBUF = VARLEN FIN FIN C C CHOP TRAILING BLANKS AND TRY TO DECODE THE RESULT C WHILE (LBUF.GT.0.AND.VARBUF(LBUF).EQ.' ') LBUF=LBUF-1 C C COMPLETELY BLANK FIELD RETURNS 0.0 C WHEN (LBUF.EQ.0) TEMP = 0.0 ELSE DECODE (LBUF,1,VARBUF,ERR=9) TEMP 1 FORMAT (F40.0) D WRITE (5,9903) TEMP D9903 FORMAT (' SUCCESSFUL DECODE: ',1PG15.6) EVATOM = TEMP !SUCCESSFUL DECODE RETURN IF (.FALSE.) 9 EVALER = .TRUE. !CONVERSION ERROR D WRITE (5,9905) LBUF,(VARBUF(I),I-1,LBUF) D9905 FORMAT (' LBUF =',I6, 'VARBUF=',(1X,40A1)) RETURN FIN END