aboutsummaryrefslogtreecommitdiff
path: root/sys/libc/atol.c
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /sys/libc/atol.c
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/libc/atol.c')
-rw-r--r--sys/libc/atol.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/sys/libc/atol.c b/sys/libc/atol.c
new file mode 100644
index 00000000..f5780583
--- /dev/null
+++ b/sys/libc/atol.c
@@ -0,0 +1,49 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+*/
+
+#define import_spp
+#define import_libc
+#define import_ctype
+#include <iraf.h>
+
+
+/* ATOL -- Ascii to long integer. Convert a simple integer in decimal radix to
+** a binary long integer value.
+*/
+long
+atol (char *str)
+{
+ register char *ip = str;
+ register int ch;
+ register long lval;
+ int neg;
+
+
+ if (*str == EOS)
+ return (0);
+
+ /* Skip leading whitespace. */
+ while (isspace (*ip))
+ ip++;
+
+ /* Check for indefinite. */
+ if ((ch = *--ip) == 'I')
+ if (strncmp (ip, "INDEF", 5) == 0)
+ if (! (isalnum (ch = *(ip+5)) || ch == '_'))
+ return (INDEFL);
+
+ /* Check for leading + or - sign. */
+ neg = 0;
+ if (ch == '-') {
+ neg++;
+ ip++;
+ } else if (ch == '+')
+ ip++;
+
+ /* Accumulate sequence of digits. */
+ lval = 0;
+ while (isdigit (ch = *ip++))
+ lval = lval * 10 + tointeg(ch);
+
+ return (neg ? -lval : lval);
+}