C subroutine to put a real number in a character string C Sven Ivansson 1991 SUBROUTINE PUTREAL (X,ND,IPOS,TEXT) REAL X ! input: the real number INTEGER ND ! input: number of decimal figures (if needed) INTEGER IPOS ! input: the first position C ! output: the next position CHARACTER*(*) TEXT ! input/output: the character string IF (ND.LT.-1) STOP 1573 ILAST = LEN(TEXT) IF (IPOS.GT.ILAST) STOP 15151 XX = X IF (XX.EQ.0.0) THEN TEXT(IPOS:IPOS) = '0' IPOS = IPOS + 1 RETURN ELSE IF (XX.LT.0.0) THEN TEXT(IPOS:IPOS) = '-' IPOS = IPOS + 1 XX = -XX END IF IF (ND.GT.0) THEN NEXP = 0 DO WHILE (XX.GE.10.0) XX = XX / 10 NEXP = NEXP + 1 END DO DO WHILE (XX.LT.1.0) XX = 10 * XX NEXP = NEXP - 1 END DO ISLASK = XX IF (ISLASK.LT.1) ISLASK = 1 IF (ISLASK.GT.9) ISLASK = 9 XX = XX - ISLASK IF (XX.LT.0.0) XX = 0.0 IF (XX.GT.1.0) XX = 1.0 DO I = 1, ND XX = 10 * XX END DO JSLASK = JNINT(XX) IF (JSLASK.LT.0) JSLASK = 0 N = 1 DO I = 1, ND N = 10 * N END DO IF (JSLASK.GE.N) THEN JSLASK = 0 ISLASK = ISLASK + 1 IF (ISLASK.GE.10) THEN ISLASK = 1 NEXP = NEXP + 1 END IF END IF ELSE ISLASK = JNINT(XX) END IF CALL PUTINTP (ISLASK,IPOS,TEXT) ! the figure before the decimal point IF (ND.LT.0) RETURN IF (IPOS.GT.ILAST) STOP 15151 TEXT(IPOS:IPOS) = '.' ! the decimal point IPOS = IPOS + 1 IF (ND.EQ.0) RETURN IPOSOLD = IPOS CALL PUTINTP (JSLASK,IPOS,TEXT) ! the decimals IF ( IPOS .NE. IPOSOLD+ND ) THEN N0 = (IPOSOLD+ND) - IPOS IPOS = IPOSOLD IF ( IPOS+N0 .GT. ILAST ) STOP 15152 DO I = 1, N0 TEXT(IPOS:IPOS) = '0' IPOS = IPOS + 1 END DO CALL PUTINTP (JSLASK,IPOS,TEXT) ! the decimals END IF IF (NEXP.EQ.0) RETURN IF (IPOS.GT.ILAST) STOP 15151 TEXT(IPOS:IPOS) = 'E' ! the exponent sign IPOS = IPOS + 1 IF (NEXP.LT.0) THEN IF (IPOS.GT.ILAST) STOP 15151 TEXT(IPOS:IPOS) = '-' IPOS = IPOS + 1 NEXP = -NEXP END IF CALL PUTINTP (NEXP,IPOS,TEXT) ! the exponent figures RETURN END