File:  [Research Unix] / researchv10no / cmd / basic / bite / src / atof1.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:35 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Norman

/* Copyright Bell Telephone Laboratories Whippany, N.J.

 *	***********************************
 *	***********************************
 *	**** ASCII TO FLOAT CONVERSION ****
 *	*** R. B. Drake WH 8C-005 X4163 ***
 *	**** Fri Aug 24 14:29:13 1979 *****
 *	***********************************
 *	***********************************

*/
/*   "@(#) atof1.c:  V 1.1  12/21/80" */

/*
this is a more generalized version of atof. It is also written in "c"
so that it can be compiled for the LSX system.
 * CONVERT STRING TO FLOAT
 */
double atof1(s)
char s[];
{
	register char *s1, *s2;	/* string pointer regs */
	register	i;	/* index register */
	double val,power;
	int sign,esin,exp;

	s1 = s;
	s2 = s;
	while(*s2 != '\0')
		switch (*s2) {
			case ' ' :
			case '\015' :
			case '\012' :
			case '\t':
			s2++;
			break;
			case 'E':
			*s1++ = 'e';
			s2++;
			break;
			default:
			*s1++ = *s2++;
		}
	*s1 = '\0';
	i=0;
	sign = 1;
	if(s[i] == '+' || s[i] == '-')
		sign = (s[i++] == '+') ? 1 : -1 ;
	for(val = 0;s[i] >= '0' && s[i] <= '9';i++)
		val = 10 * val + s[i] - '0';
	if(s[i] == '.')
	{
		i++;
		for(power = 1;s[i] >= '0' && s[i] <= '9'; i++)
		{
			val = val * 10 + s[i] - '0';
			power *= 10;
		}
		val /= power;
	}
	if(s[i] == 'e')
	{
		i++;
		esin = 1;
		if(s[i] == '+' || s[i] == '-')
			esin = (s[i++] == '+') ? 1 : -1;
		for(exp = 0;s[i] >= '0' && s[i] <= '9';i++)
			exp = 10 * exp + s[i] - '0';
		power = 1;
		for(i=0;i<exp;i++)
			power *= 10;
		val = (esin == -1) ? val/power : val * power ;
	}
	return(sign * val);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.