summaryrefslogtreecommitdiff
path: root/support/word2x/scan_num.cc
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/word2x/scan_num.cc
Initial commit
Diffstat (limited to 'support/word2x/scan_num.cc')
-rw-r--r--support/word2x/scan_num.cc76
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;
+}