xref: /csrg-svn/usr.bin/pascal/src/ato.c (revision 3072)
1744Speter /* Copyright (c) 1979 Regents of the University of California */
2744Speter 
3*3072Smckusic static char sccsid[] = "@(#)ato.c 1.2 03/08/81";
4744Speter 
5744Speter #include "whoami.h"
6744Speter #include "0.h"
7744Speter 
8744Speter long
9744Speter a8tol(cp)
10744Speter 	char *cp;
11744Speter {
12744Speter 	int err;
13744Speter 	long l;
14744Speter 	register CHAR c;
15744Speter 
16744Speter 	l = 0;
17744Speter 	err = 0;
18744Speter 	while ((c = *cp++) != '\0') {
19744Speter 		if (c == '8' || c == '9')
20744Speter 			if (err == 0) {
21744Speter 				error("8 or 9 in octal number");
22744Speter 				err++;
23744Speter 			}
24744Speter 		c -= '0';
25*3072Smckusic 		if ((l & 016000000000L) != 0)
26744Speter 			if (err == 0) {
27744Speter 				error("Number too large for this implementation");
28744Speter 				err++;
29744Speter 			}
30744Speter 		l = (l << 3) | c;
31744Speter 	}
32744Speter 	return (l);
33744Speter }
34744Speter 
35744Speter /*
36744Speter  * Note that the version of atof
37744Speter  * used in this compiler does not
38744Speter  * (sadly) complain when floating
39744Speter  * point numbers are too large.
40744Speter  */
41