mirror of
https://github.com/eddyem/BTA_lib.git
synced 2025-12-06 02:35:20 +03:00
146 lines
5.2 KiB
Fortran
146 lines
5.2 KiB
Fortran
SUBROUTINE sla_FLOTIN (STRING, NSTRT, RESLT, JFLAG)
|
|
*+
|
|
* - - - - - - -
|
|
* F L O T I N
|
|
* - - - - - - -
|
|
*
|
|
* Convert free-format input into single precision floating point
|
|
*
|
|
* Given:
|
|
* STRING c string containing number to be decoded
|
|
* NSTRT i pointer to where decoding is to start
|
|
* RESLT r current value of result
|
|
*
|
|
* Returned:
|
|
* NSTRT i advanced to next number
|
|
* RESLT r result
|
|
* JFLAG i status: -1 = -OK, 0 = +OK, 1 = null, 2 = error
|
|
*
|
|
* Called: sla_DFLTIN
|
|
*
|
|
* Notes:
|
|
*
|
|
* 1 The reason FLOTIN has separate OK status values for +
|
|
* and - is to enable minus zero to be detected. This is
|
|
* of crucial importance when decoding mixed-radix numbers.
|
|
* For example, an angle expressed as deg, arcmin, arcsec
|
|
* may have a leading minus sign but a zero degrees field.
|
|
*
|
|
* 2 A TAB is interpreted as a space, and lowercase characters
|
|
* are interpreted as uppercase.
|
|
*
|
|
* 3 The basic format is the sequence of fields #^.^@#^, where
|
|
* # is a sign character + or -, ^ means a string of decimal
|
|
* digits, and @, which indicates an exponent, means D or E.
|
|
* Various combinations of these fields can be omitted, and
|
|
* embedded blanks are permissible in certain places.
|
|
*
|
|
* 4 Spaces:
|
|
*
|
|
* . Leading spaces are ignored.
|
|
*
|
|
* . Embedded spaces are allowed only after +, -, D or E,
|
|
* and after the decomal point if the first sequence of
|
|
* digits is absent.
|
|
*
|
|
* . Trailing spaces are ignored; the first signifies
|
|
* end of decoding and subsequent ones are skipped.
|
|
*
|
|
* 5 Delimiters:
|
|
*
|
|
* . Any character other than +,-,0-9,.,D,E or space may be
|
|
* used to signal the end of the number and terminate
|
|
* decoding.
|
|
*
|
|
* . Comma is recognized by FLOTIN as a special case; it
|
|
* is skipped, leaving the pointer on the next character.
|
|
* See 13, below.
|
|
*
|
|
* 6 Both signs are optional. The default is +.
|
|
*
|
|
* 7 The mantissa ^.^ defaults to 1.
|
|
*
|
|
* 8 The exponent @#^ defaults to E0.
|
|
*
|
|
* 9 The strings of decimal digits may be of any length.
|
|
*
|
|
* 10 The decimal point is optional for whole numbers.
|
|
*
|
|
* 11 A "null result" occurs when the string of characters being
|
|
* decoded does not begin with +,-,0-9,.,D or E, or consists
|
|
* entirely of spaces. When this condition is detected, JFLAG
|
|
* is set to 1 and RESLT is left untouched.
|
|
*
|
|
* 12 NSTRT = 1 for the first character in the string.
|
|
*
|
|
* 13 On return from FLOTIN, NSTRT is set ready for the next
|
|
* decode - following trailing blanks and any comma. If a
|
|
* delimiter other than comma is being used, NSTRT must be
|
|
* incremented before the next call to FLOTIN, otherwise
|
|
* all subsequent calls will return a null result.
|
|
*
|
|
* 14 Errors (JFLAG=2) occur when:
|
|
*
|
|
* . a +, -, D or E is left unsatisfied; or
|
|
*
|
|
* . the decimal point is present without at least
|
|
* one decimal digit before or after it; or
|
|
*
|
|
* . an exponent more than 100 has been presented.
|
|
*
|
|
* 15 When an error has been detected, NSTRT is left
|
|
* pointing to the character following the last
|
|
* one used before the error came to light. This
|
|
* may be after the point at which a more sophisticated
|
|
* program could have detected the error. For example,
|
|
* FLOTIN does not detect that '1E999' is unacceptable
|
|
* (on a computer where this is so) until the entire number
|
|
* has been decoded.
|
|
*
|
|
* 16 Certain highly unlikely combinations of mantissa &
|
|
* exponent can cause arithmetic faults during the
|
|
* decode, in some cases despite the fact that they
|
|
* together could be construed as a valid number.
|
|
*
|
|
* 17 Decoding is left to right, one pass.
|
|
*
|
|
* 18 See also DFLTIN and INTIN
|
|
*
|
|
* P.T.Wallace Starlink 23 November 1995
|
|
*
|
|
* Copyright (C) 1995 Rutherford Appleton Laboratory
|
|
*
|
|
* License:
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program (see SLA_CONDITIONS); if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA
|
|
*
|
|
*-
|
|
|
|
IMPLICIT NONE
|
|
|
|
CHARACTER*(*) STRING
|
|
INTEGER NSTRT
|
|
REAL RESLT
|
|
INTEGER JFLAG
|
|
|
|
DOUBLE PRECISION DRESLT
|
|
|
|
|
|
* Call the double precision version
|
|
CALL sla_DFLTIN(STRING,NSTRT,DRESLT,JFLAG)
|
|
IF (JFLAG.LE.0) RESLT=REAL(DRESLT)
|
|
|
|
END
|