xref: /csrg-svn/usr.bin/pascal/src/ato.c (revision 744)
1*744Speter /* Copyright (c) 1979 Regents of the University of California */
2*744Speter 
3*744Speter static	char sccsid[] = "@(#)ato.c 1.1 08/27/80";
4*744Speter 
5*744Speter #include "whoami.h"
6*744Speter #include "0.h"
7*744Speter 
8*744Speter long
9*744Speter a8tol(cp)
10*744Speter 	char *cp;
11*744Speter {
12*744Speter 	int err;
13*744Speter 	long l;
14*744Speter 	register CHAR c;
15*744Speter 
16*744Speter 	l = 0;
17*744Speter 	err = 0;
18*744Speter 	while ((c = *cp++) != '\0') {
19*744Speter 		if (c == '8' || c == '9')
20*744Speter 			if (err == 0) {
21*744Speter 				error("8 or 9 in octal number");
22*744Speter 				err++;
23*744Speter 			}
24*744Speter 		c -= '0';
25*744Speter 		if ((l & 0160000000000L) != 0)
26*744Speter 			if (err == 0) {
27*744Speter 				error("Number too large for this implementation");
28*744Speter 				err++;
29*744Speter 			}
30*744Speter 		l = (l << 3) | c;
31*744Speter 	}
32*744Speter 	return (l);
33*744Speter }
34*744Speter 
35*744Speter /*
36*744Speter  * Note that the version of atof
37*744Speter  * used in this compiler does not
38*744Speter  * (sadly) complain when floating
39*744Speter  * point numbers are too large.
40*744Speter  */
41