with: Erik Oosterwal
Custom Search
|
C ******************************************************************
C * SUBROUTINE TO CONVERT ALPHA TO REAL *
C * *
C * ARRY - THE STRING ARRAY WHICH CONTAINS THE ALPHA VALUE *
C * OF THE NUMBER IN LOCATIONS ARRY(5) - ARRY(9) *
C * L - THE LENGTH OF THE STRING ARRAY (THIS VALUE MUST BE *
C * PASSED ALONG TO DIMENSION THE ARRAY) *
C * RNUM - THE VARIABLE THAT WILL CONTAIN THE NUMERIC VALUE OF *
C * THE STRING. THIS VARIABLE MUST BE DEFINED AS "REAL" *
C * BECAUSE IT CAN CONTAIN FRACTIONS *
C * EXP - COUNTS NUMBER OF DECIMAL POSITIONS *
C * INC - SIGNIFIES WHEN TO START COUNTING FRACTIONAL DIGITS *
C * INUM - INTEGER NUMBER THAT WHEN DIVIDED BY EXP IS EQUAL *
C * TO RNUM *
C * **** RNUM ALSO SIGNIFIES IF THE RETURNED VALUE IS POSITIVE *
C * OR NEGATIVE *
C * *
C * WRITTEN BY: ERIK P. OOSTERWAL *
C * STARTED ON: NOV. 17, 1987 *
C * FINISHED : NOV. 19, 1987 *
C ******************************************************************
SUBROUTINE ATON(ARRY,L,RNUM)
C
REAL RNUM
INTEGER*2 L,INC,EXP,INUM
CHARACTER*1 ARRY(L)
C
C * GET RID OF EXTRA CHARACTERS AT THE BEGINNING OF THE LINE *
C * DOES THE SAME AS 'CALL ALIGN' *
5 IF(ARRY(1).NE.'"')THEN
DO 10, I = 1,(L-1)
10 ARRY(I)=ARRY(I+1)
GOTO 5
ENDIF
C
C * FIND THE NUMERIC VALUE OF THE STRING *
INC = 0
EXP = 0
INUM = 0
RNUM = 1
DO 20, I = 5,9
C * IF THERE IS A '-', THEN THE NUMBER IS NEGATIVE *
IF(ARRY(I) .EQ. '-') THEN
RNUM = -1
GOTO 20
ENDIF
C * IF THERE IS A '.', KEEP TRACK OF THE NUMBER OF DECIMALS *
IF(ARRY(I) .EQ. '.') THEN
INC = 1
GOTO 20
ENDIF
INUM = INUM*10+(ICHAR(ARRY(I))-48)
EXP = EXP+INC
20 CONTINUE
RNUM = RNUM*(FLOAT(INUM)/10**EXP)
RETURN
END