+// Check if a string looks like a valid dataflex number\r
+//True\r
+// showln (is_number("99999999999999.99999999")) (is_number("-99999999999999.99999999"))\r
+// showln (is_number("99999999999999.0")) (is_number("0")) (is_number("-0")) (is_number("100"))\r
+//False\r
+// showln (is_number("99999999999999.999999999")) (is_number("-999999999999999.99999999"))\r
+// showln (is_number("999999999999999.99999999")) (is_number("1-0")) (is_number(".0D"))\r
+// showln (is_number("")) (is_number("-")) (is_number("100A")) (is_number("A100"))\r
+function is_number global string argv returns integer\r
+ local integer l_iChar l_iDec l_iNum l_iLen l_i l_iNeg\r
+ \r
+ move 0 to l_iNum \r
+ move 0 to l_iDec\r
+ \r
+ // Is the value negative\r
+ if (ascii(mid(argv,1,1)) = 45);\r
+ move 1 to l_iNeg\r
+ else;\r
+ move 0 to l_iNeg\r
+ \r
+ move (length(argv)) to l_iLen\r
+ \r
+ // Check basic length conforms to number\r
+ if ((l_iLen-L_iNeg = 0) or (l_iLen-l_iNeg > 23)) function_return 0\r
+ \r
+ //Check for non numerics\r
+ for l_i from (1+l_iNeg) to l_iLen\r
+ move (ascii(mid(argv,1,l_i))) to l_iChar\r
+ if ((l_iChar = 46) and ((l_iDec = 1) or (l_i > 15+l_iNeg))) break\r
+ if not ((l_iChar >= 48) and (l_iChar <= 57) or (l_iChar = 46)) break \r
+ if (l_iChar = 46);\r
+ move 1 to l_iDec\r
+ increment l_iNum\r
+ loop\r
+ \r
+ function_return ((l_iNum+l_iNeg) = l_iLen)\r
+end_function\r
+\r
+\r
+// Check if a string looks like a valid dataflex integer\r
+//True\r
+// showln (is_integer("2147483647")) (is_integer("2147483638")) \r
+// showln (is_integer("-2147483647")) (is_integer("-2147483648")) \r
+// showln (is_integer("0")) (is_integer("-0"))\r
+//False\r
+// showln (is_integer("214748364 ")) (is_integer("2147483648")) (is_integer("2947483647"))\r
+// showln (is_integer("-2147483649")) (is_integer("21474836478")) (is_integer("21474836470"))\r
+// showln (is_integer("-21474836470")) (is_integer("214748364A")) (is_integer("-A"))\r
+// showln (is_integer("-214748364A")) (is_integer("-")) (is_integer("-21474B364P"))\r
+function is_integer global string argv returns integer\r
+ local integer l_iChar l_iInt l_iLen l_i l_iNeg \r
+ \r
+ move 0 to l_iInt\r
+ move (length(argv)) to l_iLen\r
+ \r
+ //Is the value negative\r
+ if (ascii(mid(argv,1,1)) = 45);\r
+ move 1 to l_iNeg\r
+ else;\r
+ move 0 to l_iNeg \r
+ \r
+ // Check basic length conforms to integer\r
+ if ((l_iLen-L_iNeg = 0) or (l_iLen-l_iNeg > 10)) function_return 0 \r
+ \r
+ //Check for non numerics\r
+ for l_i from (1+l_iNeg) to l_iLen\r
+ move (ascii(mid(argv,1,l_i))) to l_iChar\r
+ if not ((l_iChar >= 48) and (l_iChar <= 57)) break\r
+ increment l_iInt\r
+ loop\r
+\r
+ //Check for 32 bit signed integer bounds\r
+ if ((l_iLen-l_iNeg = 10) and ((l_iInt+l_iNeg) = l_iLen)) begin \r
+ if (integer(mid(argv,9,1+l_iNeg)) > 214748364);\r
+ function_return 0\r
+ if (integer(mid(argv,9,1+l_iNeg)) = 214748364) begin \r
+ if (integer(mid(argv,1,10+l_iNeg)) > 7+l_iNeg);\r
+ function_return 0\r
+ end\r
+ end\r
+ \r
+ function_return ((l_iInt+l_iNeg) = l_iLen)\r
+end_function\r
+\r