xref: /csrg-svn/usr.bin/pascal/src/ato.c (revision 21952)
1*21952Sdist /*
2*21952Sdist  * Copyright (c) 1980 Regents of the University of California.
3*21952Sdist  * All rights reserved.  The Berkeley software License Agreement
4*21952Sdist  * specifies the terms and conditions for redistribution.
5*21952Sdist  */
6744Speter 
714727Sthien #ifndef lint
8*21952Sdist static char sccsid[] = "@(#)ato.c	5.1 (Berkeley) 06/04/85";
9*21952Sdist #endif not lint
10744Speter 
11744Speter #include "whoami.h"
12744Speter #include "0.h"
13744Speter 
14744Speter long
15744Speter a8tol(cp)
16744Speter 	char *cp;
17744Speter {
18744Speter 	int err;
19744Speter 	long l;
20744Speter 	register CHAR c;
21744Speter 
22744Speter 	l = 0;
23744Speter 	err = 0;
24744Speter 	while ((c = *cp++) != '\0') {
25744Speter 		if (c == '8' || c == '9')
26744Speter 			if (err == 0) {
27744Speter 				error("8 or 9 in octal number");
28744Speter 				err++;
29744Speter 			}
30744Speter 		c -= '0';
313072Smckusic 		if ((l & 016000000000L) != 0)
32744Speter 			if (err == 0) {
33744Speter 				error("Number too large for this implementation");
34744Speter 				err++;
35744Speter 			}
36744Speter 		l = (l << 3) | c;
37744Speter 	}
38744Speter 	return (l);
39744Speter }
40744Speter 
41744Speter /*
42744Speter  * Note that the version of atof
43744Speter  * used in this compiler does not
44744Speter  * (sadly) complain when floating
45744Speter  * point numbers are too large.
46744Speter  */
47