/* $Id: scan_num.cc,v 1.4 1997/04/10 20:42:47 dps Exp $ */
/* Simple number analyser */
#define __EXCLUDE_READER_CLASSES
#include "lib.h"

num_info scan_num(const char *scan)
{
    int nd, p;
    num_info r;

    r.wd[0]=r.wd[1]=r.has_sign=nd=0;
    p=1;

    switch (*scan)
    {
    case '-':
    case '+':
	scan++;
	r.wd[0]++;
	p++;
	r.has_sign=1;
	break;

    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
	break;

    default:
	r.dot_pos=-1;
	return r;
    }

    for ( ; *scan!='\0'; scan++, p++)
    {
	switch (*scan)
	{
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
	    r.wd[nd]++;	// Digit
	    break;

	case '.':
	    r.dot_pos=p;
	    if ((++nd)==1)
		break;
	    /* Fall through */
	default:
	    r.dot_pos=-1;
	    return r;
	}
    }
    if (r.wd[0]+r.wd[1]<=r.has_sign)
    {
	r.dot_pos=-1;
	return r;
    }
    if (nd==0)
	r.dot_pos=p;
    return r;
}
