diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /sys/fmtio/ctol.x | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/fmtio/ctol.x')
-rw-r--r-- | sys/fmtio/ctol.x | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/sys/fmtio/ctol.x b/sys/fmtio/ctol.x new file mode 100644 index 00000000..a83d1384 --- /dev/null +++ b/sys/fmtio/ctol.x @@ -0,0 +1,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 |