diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/word2x/scan_num.cc |
Initial commit
Diffstat (limited to 'support/word2x/scan_num.cc')
-rw-r--r-- | support/word2x/scan_num.cc | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/support/word2x/scan_num.cc b/support/word2x/scan_num.cc new file mode 100644 index 0000000000..f0f2d639d5 --- /dev/null +++ b/support/word2x/scan_num.cc @@ -0,0 +1,76 @@ +/* $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; +} |