FTN4 LOGICAL FUNCTION RNUM(IBUF,NCAR,NBCAR .,RESUT),. 92080-1X049 REV.2026 800515 C C SOURCE 92080-18049 C C C C ************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * C * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * C * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C ************************************************************** C C C********************************************************************* C* * C* RNUM IS A LOGICAL FUNCTION USED TO CONVERT AN ASCII * C* BUFFER INTO A REAL NUMBER. CHECKS ARE PERFORMED AND FUNCTION * C* SUCCEEDS IF THE INPUT BUFFER IS NOT CORRECT . * C* * C* IF(RNUM(IBUF,NCAR,NBCAR,RESUT)) GO TO ERROR * C* * C* WHERE : * C* IBUF : INPUT BUFFER * C* NCAR : NUMBER OF THE FIRST CHARACTER TO USE IN * C* THE INPUT BUFFER (FIRST IS 1) * C* NBCAR : NUMBER OF CHARACTERS TO BE USED * C* RESUT : REAL VARIABLE WHERE REAL VALUE IS * C* RETURNED * C* * C********************************************************************* C C LOGICAL FLAGF,FLAGE,ISSPA,ISBTW,INUM DOUBLE PRECISION RESU C C FLAGF TO INDIC IF FIRST PART OF NUMBER ANALYZED C FLAGE " " IF SIGN ANALYZED C RNUM=.FALSE. RESU=0. IBL=0 IBL1=0 C C BLANKS ONLY ? C IF(ISSPA(IBUF,NCAR,NBCAR)) GOTO 2 RETURN C C ANALYSE BUFFER C 2 CONTINUE FLAGF=.FALSE. FLAGE=.FALSE. NB2=NBCAR+NCAR-1 ISIGN=1 K=1 DO 1 I=NCAR,NB2 JNUM=-1 ICOM=IGET1(IBUF,I) IF(ICOM.NE.1H ) GO TO 6 IF(FLAGF) GO TO 35 IF(IBL.EQ.1) IBL1=1 GO TO 1 35 IBL=1 GO TO 1 6 IF(FLAGE) GOTO 7 FLAGE=.TRUE. IF(ICOM.EQ.1H+) GOTO 1 IF(ICOM.NE.1H-) GOTO 7 ISIGN=-1 GOTO 1 7 CONTINUE IF(.NOT.ISBTW(ICOM,1H0,1H9))JNUM=ICOM/256-60B IF(FLAGF) GOTO 10 IF(ICOM.EQ.1H.) GOTO 4 IF(ICOM.EQ.1HE) GOTO 30 IF(JNUM.EQ.-1) GO TO 50 IBL=1 RESU=RESU*10+JNUM GOTO 1 4 CONTINUE FLAGF=.TRUE. IF(IBL1.EQ.1) GO TO 50 IBL=0 GOTO 1 10 CONTINUE IF((JNUM.EQ.-1).AND.(ICOM.NE.1HE)) GO TO 50 IF(ICOM.EQ.1HE) GOTO 30 IF(IBL.EQ.1) GO TO 50 RESU=RESU+DBLE(FLOAT(JNUM))/(10.**K) K=K+1 GOTO 1 30 CONTINUE J=I+1 IJ=NB2-I IF(IJ.LE.0) GO TO 50 IF(INUM(IBUF,J,IJ,IRESU)) GO TO 50 C-----NORMALIZE BEFORE CHECKING EXPONENT. 40 IF(RESU.EQ.0) GO TO 49 IF(RESU.EQ.1.) GO TO 46 IF(RESU.GT.1.) GO TO 44 C-----MOVE DECIMAL PT TO RIGHT 42 IF(RESU.GE.1) GO TO 46 RESU=RESU*10. IRESU=IRESU-1 GO TO 42 C-----MOVE DECIMAL PT TO LEFT 44 IF((RESU.GE.1.).AND.(RESU.LT.10.)) GO TO 46 RESU=RESU/10. IRESU=IRESU+1 GO TO 44 C-----MANITSSA NORMALIZED TO DECIMAL FRACTION BETWEEN 1 & 10 46 IF(IRESU.NE.38) GO TO 48 IF(RESU.GT.1.) GO TO 50 GO TO 49 48 IF(IRESU.NE.-38) GO TO 49 IF(RESU.LT.1.) GO TO 50 49 IF((IRESU.LT.-38).OR.(IRESU.GT.38)) GO TO 50 IF(RESU.EQ.0) RESU=1 IF(IRESU.LT.0) GOTO 20 RESU=ISIGN*RESU*10.**IRESU GOTO 21 20 CONTINUE RESU=ISIGN*RESU/10.**(-IRESU) GOTO 21 1 CONTINUE 21 RESU=RESU*ISIGN RESUT=RESU RETURN C C ERROR RETURN C 50 RNUM=.TRUE. RETURN END END$