xref: /csrg-svn/usr.bin/pascal/src/ato.c (revision 21952)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #ifndef lint
8 static char sccsid[] = "@(#)ato.c	5.1 (Berkeley) 06/04/85";
9 #endif not lint
10 
11 #include "whoami.h"
12 #include "0.h"
13 
14 long
15 a8tol(cp)
16 	char *cp;
17 {
18 	int err;
19 	long l;
20 	register CHAR c;
21 
22 	l = 0;
23 	err = 0;
24 	while ((c = *cp++) != '\0') {
25 		if (c == '8' || c == '9')
26 			if (err == 0) {
27 				error("8 or 9 in octal number");
28 				err++;
29 			}
30 		c -= '0';
31 		if ((l & 016000000000L) != 0)
32 			if (err == 0) {
33 				error("Number too large for this implementation");
34 				err++;
35 			}
36 		l = (l << 3) | c;
37 	}
38 	return (l);
39 }
40 
41 /*
42  * Note that the version of atof
43  * used in this compiler does not
44  * (sadly) complain when floating
45  * point numbers are too large.
46  */
47