1: # include <useful.h>
2: # include <sccs.h>
3:
4: SCCSID(@(#)atol.c 8.2 1/16/85)
5:
6: /*
7: ** ASCII CHARACTER STRING TO 32-BIT INTEGER CONVERSION
8: **
9: ** `a' is a pointer to the character string, `i' is a
10: ** pointer to the doubleword which is to contain the result.
11: **
12: ** The return value of the function is:
13: ** zero: succesful conversion; `i' contains the integer
14: ** +1: numeric overflow; `i' is unchanged
15: ** -1: syntax error; `i' is unchanged
16: **
17: ** A valid string is of the form:
18: ** <space>* [+-] <space>* <digit>* <space>*
19: */
20:
21: atol(a, i)
22: register char *a;
23: long *i;
24: {
25: register int sign; /* flag to indicate the sign */
26: long x; /* holds the integer being formed */
27: register char c;
28:
29: sign = 0;
30: /* skip leading blanks */
31: while (*a == ' ')
32: a++;
33: /* check for sign */
34: switch (*a)
35: {
36:
37: case '-':
38: sign = -1;
39:
40: case '+':
41: while (*++a == ' ');
42: }
43:
44: /* at this point everything had better be numeric */
45: x = 0;
46: while ((c = *a) <= '9' && c >= '0')
47: {
48: /* check for overflow */
49: /* 2 ** 31 = 2147483648 */
50: if (x > MAXI8 )
51: return (1);
52: x = x * 10 + (c - '0');
53: if (x < 0) /* check if new digit caused overflow */
54: return (1);
55: a++;
56: }
57:
58: /* eaten all the numerics; better be all blanks */
59: while (c = *a++)
60: if(c != ' ') /* syntax error */
61: return (-1);
62: *i = sign ? -x : x;
63: return (0); /* successful termination */
64: }
Defined functions
atol
defined in line
4;
never used