1 | #include "slalib.h"
|
---|
2 | #include "slamac.h"
|
---|
3 | void slaFlotin ( char *string, int *nstrt, float *reslt, int *jflag )
|
---|
4 | /*
|
---|
5 | ** - - - - - - - - - -
|
---|
6 | ** s l a F l o t i n
|
---|
7 | ** - - - - - - - - - -
|
---|
8 | **
|
---|
9 | ** Convert free-format input into single precision floating point.
|
---|
10 | **
|
---|
11 | ** Given:
|
---|
12 | ** *string char string containing field to be decoded
|
---|
13 | ** *nstrt int where to start decode (1st = 1)
|
---|
14 | **
|
---|
15 | ** Returned:
|
---|
16 | ** *nstrt int advanced to next field
|
---|
17 | ** *reslt float result
|
---|
18 | ** *jflag int -1 = -OK, 0 = +OK, 1 = null field, 2 = error
|
---|
19 | **
|
---|
20 | ** Called: slaDfltin
|
---|
21 | **
|
---|
22 | ** Notes:
|
---|
23 | **
|
---|
24 | ** 1 A tab character is interpreted as a space, and lower
|
---|
25 | ** case d,e are interpreted as upper case.
|
---|
26 | **
|
---|
27 | ** 2 The basic format is #^.^@#^ where # means + or -,
|
---|
28 | ** ^ means a decimal subfield and @ means d or e.
|
---|
29 | **
|
---|
30 | ** 3 Spaces:
|
---|
31 | ** Leading spaces are ignored.
|
---|
32 | ** Embedded spaces are allowed only after # and d or e,
|
---|
33 | ** and after . where the first ^ is absent.
|
---|
34 | ** Trailing spaces are ignored; the first signifies
|
---|
35 | ** end of decoding and subsequent ones are skipped.
|
---|
36 | **
|
---|
37 | ** 4 Field separators:
|
---|
38 | ** Any character other than +,-,0-9,.,d,e or space may be
|
---|
39 | ** used to end a field. Comma is recognized by slaFlotin
|
---|
40 | ** as a special case; it is skipped, leaving the
|
---|
41 | ** pointer on the next character. See 12, below.
|
---|
42 | **
|
---|
43 | ** 5 Both signs are optional. The default is +.
|
---|
44 | **
|
---|
45 | ** 6 The mantissa defaults to 1.
|
---|
46 | **
|
---|
47 | ** 7 The exponent defaults to e0.
|
---|
48 | **
|
---|
49 | ** 8 The decimal subfields may be of any length.
|
---|
50 | **
|
---|
51 | ** 9 The decimal point is optional for whole numbers.
|
---|
52 | **
|
---|
53 | ** 10 A null field is one that does not begin with
|
---|
54 | ** +,-,0-9,.,d or e, or consists entirely of spaces.
|
---|
55 | ** If the field is null, jflag is set to 1 and reslt
|
---|
56 | ** is left untouched.
|
---|
57 | **
|
---|
58 | ** 11 nstrt = 1 for the first character in the string.
|
---|
59 | **
|
---|
60 | ** 12 On return from slaFlotin, nstrt is set ready for the next
|
---|
61 | ** decode - following trailing blanks and (if used) the
|
---|
62 | ** comma separator. If a separator other than comma is
|
---|
63 | ** being used, nstrt must be incremented before the next
|
---|
64 | ** call to slaFlotin.
|
---|
65 | **
|
---|
66 | ** 13 Errors (jflag=2) occur when:
|
---|
67 | ** a) A +, -, d or e is left unsatisfied.
|
---|
68 | ** b) The decimal point is present without at least
|
---|
69 | ** one decimal subfield.
|
---|
70 | ** c) An exponent more than 100 has been presented.
|
---|
71 | **
|
---|
72 | ** 14 When an error has been detected, nstrt is left
|
---|
73 | ** pointing to the character following the last
|
---|
74 | ** one used before the error came to light. This
|
---|
75 | ** may be after the point at which a more sophisticated
|
---|
76 | ** program could have detected the error. For example,
|
---|
77 | ** slaFlotin does not detect that '1e999' is unacceptable
|
---|
78 | ** until the whole field has been read.
|
---|
79 | **
|
---|
80 | ** 15 Certain highly unlikely combinations of mantissa &
|
---|
81 | ** exponent can cause arithmetic faults during the
|
---|
82 | ** decode, in some cases despite the fact that they
|
---|
83 | ** together could be construed as a valid number.
|
---|
84 | **
|
---|
85 | ** 16 Decoding is left to right, one pass.
|
---|
86 | **
|
---|
87 | ** 17 End of field may occur in either of two ways:
|
---|
88 | ** a) As dictated by the string length.
|
---|
89 | ** b) Detected during the decode.
|
---|
90 | ** (b overrides a.)
|
---|
91 | **
|
---|
92 | ** 18 See also slaDfltin and slaIntin.
|
---|
93 | **
|
---|
94 | ** Last revision: 23 November 1995
|
---|
95 | **
|
---|
96 | ** Copyright P.T.Wallace. All rights reserved.
|
---|
97 | */
|
---|
98 | {
|
---|
99 | double dreslt;
|
---|
100 |
|
---|
101 | /* Call the double precision version */
|
---|
102 | slaDfltin ( string, nstrt, &dreslt, jflag );
|
---|
103 | if ( *jflag <= 0 ) *reslt = (float) dreslt;
|
---|
104 | }
|
---|