/* $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; }