SUBROUTINE NUMBER( STRING, NCHRS, NAT, NTYPE, VALUE ) C C This subroutine decodes a character string into a numeric C value. Decoding starts at the first occurance of one of C the following characters: '+-.0123456789'. Where, C C STRING Character string C NCHRS Length of character string C NAT INPUT: Starting point C OUTPUT: Follows last character in decoded substring. C NTYPE Type of number desired: 1 - Octal; 2 - Integer; 3 - Floating C VALUE Value of substring; on error, VALUE = 0 C LOGICAL*1 STRING(1) DIMENSION IV(2) EQUIVALENCE ( IV, IVALUE, CONVRT ) C C - SKIP OVER EXCESS AT BEGINING. CONVRT = VALUE DO 1000 N=NAT,NCHRS CALL ITWAS( STRING(N), '+-.0123456789', 13, ITIS ) IF( ITIS .LE. 13 ) GO TO 1100 1000 CONTINUE N = N+1 VALUE = 0. RETURN C C - GO TO PROPER SECTION 1100 NAT = N GO TO ( 1200, 2200, 3200 ), NTYPE VALUE = 0. NAT = NCHRS+1 RETURN C C - CONVERT AS AN OCTAL QUANTITY. 1200 IVALUE = 0 ISIGN = 1 DO 2000 N=NAT,NCHRS CALL ITWAS( STRING(N), '01234567+-', 10, ITIS ) IF( ITIS .EQ. 11 ) GO TO 2100 IF( ITIS .GE. 9 ) ISIGN = 1 - 2*( ITIS-9 ) IF( ITIS .LE. 8 ) IVALUE = ITIS-1 + 8*IVALUE 2000 CONTINUE N = N+1 2100 NAT = N IVALUE = ISIGN*IVALUE VALUE = CONVRT RETURN C C - CONVERT AS AN INTEGER QUANTITY. 2200 IVALUE = 0 ISIGN = 1 DO 3000 N=NAT,NCHRS CALL ITWAS( STRING(N), '0123456789+-', 12, ITIS ) IF( ITIS .EQ. 13 ) GO TO 3100 IF( ITIS .GE. 11 ) ISIGN = 1 - 2*( ITIS-11 ) IF( ITIS .LE. 10 ) IVALUE = ITIS-1 + 10*IVALUE 3000 CONTINUE 3100 NAT = N IVALUE = ISIGN*IVALUE VALUE = CONVRT RETURN C C - CONVERT AS A FLOATING POINT QUANTITY. 3200 DO 4000 N=NAT,NCHRS CALL ITWAS( STRING(N), '0123456789+-.E', 14, ITIS ) IF( ITIS .EQ. 15 ) GO TO 4100 4000 CONTINUE 4100 LNGTH = N-NAT DECODE( LNGTH, 4110, STRING(NAT), ERR=4200 ) VALUE 4110 FORMAT(F20.0) NAT = N RETURN 4200 VALUE = 0. NAT = N RETURN END