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