atod
int atod(double *dp, char *st);
//ENDH
/*****************************************

   String in double umwandeln, 
   liefert Anzahl gelesene Zeichen zurck

   von Thorsten Tietz thorsten.tietz@cww.de


******************************************/

int atod(double *dp, char *st)
{
	int negative=0;
	double d=0.0;
	double powi();
	char *p=st;
	
	if (StrLen(st) == 0) {			/* Leerer String */
		*dp = 0.0;
		return(0);
		}

	while( (*p == ' ') || (*p == '\t') )	/* Fhrende Leerzeichen */
		++p;

	if( *p=='-' ) /* [-]nnnnn.nnnnE-nnn */
	{
		negative=1;
		p++; 
	}
	else
	{
		if( *p=='+' )
		{
			p++;
		}
	}

	while(*p >= '0' && *p <= '9' ) /* -[nnnnn].nnnnE-nnn */
	{
		d*=10;
	    d+=(*p-'0');
		p++; 
	}

	if( *p=='.' || *p== ',') /* -nnnnn[.]nnnnE-nnn Punkt oder Komma */
	{
	    double shifter=0.1;
		p++;
	    while( *p >= '0' && *p <= '9' ) /* -nnnnn.[nnnn]E-nnn */
		{
			d+=(shifter*(*p-'0'));
			shifter/=10;
			p++; 
		}
	}

	if( negative ) /* [-]nnnnn.nnnnE-nnn */
    {
		d=-d;
	}

	if( *p=='e' || *p=='E' ) /* -nnnnn.nnnn[E]-nnn */
	{
	    int exp=0;
		double expm;

	    p++;

		negative=0;

		if( *p=='-' ) /* -nnnnn.nnnnE[-]nnn */
		{
			negative=1;
			p++; 
		}
		else
		{
			if( *p=='+' )
			{
				p++;
			}
		}

		while( *p >= '0' && *p <= '9' ) /* -nnnnn.nnnnE-[nnn] */
		{
			exp*=10;
			exp+=(*p-'0');
			p++; 
		}

		expm=powi(10.0, exp);

		if( negative ) /* -nnnnn.nnnnE[-]nnn */
		{
			expm = 1.0 / expm;
		}
		d*=expm; 
	}

	*dp=d;

	return(p-st);
}


# ifndef VCPPOWI
# define VCPPOWI 1
//
// *********************************************************
// powi(): x^i mit i = integer
// *********************************************************
//
double powi(double x, int i)
{
double wert = 1.0;
int k, flag = 0;

if (i < 0) {
	i *= -1;
	flag = -1;
	}

for (k = 0; k < i; k++) { 
	wert *= x;
	}

if (flag == -1) wert = 1.0/ wert;

return (wert);
}
#endif