xref: /csrg-svn/usr.bin/pascal/src/ato.c (revision 62203)
148116Sbostic /*-
2*62203Sbostic  * Copyright (c) 1980, 1993
3*62203Sbostic  *	The Regents of the University of California.  All rights reserved.
448116Sbostic  *
548116Sbostic  * %sccs.include.redist.c%
621952Sdist  */
7744Speter 
814727Sthien #ifndef lint
9*62203Sbostic static char sccsid[] = "@(#)ato.c	8.1 (Berkeley) 06/06/93";
1048116Sbostic #endif /* not lint */
11744Speter 
12744Speter #include "whoami.h"
13744Speter #include "0.h"
14744Speter 
15744Speter long
a8tol(cp)16744Speter a8tol(cp)
17744Speter 	char *cp;
18744Speter {
19744Speter 	int err;
20744Speter 	long l;
21744Speter 	register CHAR c;
22744Speter 
23744Speter 	l = 0;
24744Speter 	err = 0;
25744Speter 	while ((c = *cp++) != '\0') {
26744Speter 		if (c == '8' || c == '9')
27744Speter 			if (err == 0) {
28744Speter 				error("8 or 9 in octal number");
29744Speter 				err++;
30744Speter 			}
31744Speter 		c -= '0';
323072Smckusic 		if ((l & 016000000000L) != 0)
33744Speter 			if (err == 0) {
34744Speter 				error("Number too large for this implementation");
35744Speter 				err++;
36744Speter 			}
37744Speter 		l = (l << 3) | c;
38744Speter 	}
39744Speter 	return (l);
40744Speter }
41744Speter 
42744Speter /*
43744Speter  * Note that the version of atof
44744Speter  * used in this compiler does not
45744Speter  * (sadly) complain when floating
46744Speter  * point numbers are too large.
47744Speter  */
48