blob: a83d13849ad65ec70e0921cf9725e52aa9f30a31 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <ctype.h>
# CTOL -- Simple character to long integer (decimal radix).
int procedure ctol (str, ip, lval)
char str[ARB] # decimal encoded numeric string
int ip # starting index in string (input/output)
long lval # decoded integer value (output)
bool neg
long sum
int ip_start
int strncmp()
begin
while (IS_WHITE (str[ip]))
ip = ip + 1
ip_start = ip
# Check for "INDEF".
if (str[ip] == 'I')
if (strncmp (str[ip], "INDEF", 5) == 0)
if (!IS_ALNUM (str[ip+5])) {
lval = INDEFL
ip = ip + 5
return (5)
}
neg = false
if (IS_DIGIT (str[ip+1]))
if (str[ip] == '-') {
neg = true
ip = ip + 1
} else if (str[ip] == '+')
ip = ip + 1
sum = 0
while (IS_DIGIT (str[ip])) {
sum = sum * 10 + TO_INTEG (str[ip])
ip = ip + 1
}
if (neg)
lval = -sum
else
lval = sum
return (ip - ip_start)
end
|