// 2024-04-20 09:11:58
function string_variable_valid(str) {
	static valid_char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789";
	
	for( var i = 1; i <= string_length(str); i++ ) {
		var cch = string_char_at(str, i);
		if(string_pos(cch, valid_char) == 0) return false;
	}
	
	return true;
}

function string_decimal(str) {
	var neg = string_char_at(str, 1) == "-";
	if(neg) str = string_copy(str, 2, string_length(str) - 1);
	
	var dec = string_pos(".", str);
	if(dec == 0)  return (neg? "-" : "") + string_digits(str);
		
	var pre = string_copy(str, 1, dec - 1);
	var pos = string_copy(str, dec + 1, string_length(str) - dec);
	
	return (neg? "-" : "") + string_digits(pre) + "." + string_digits(pos);
}

function toNumber(str) {
	INLINE
	
	if(is_numeric(str)) return str;
	
	try { return real(str); } 
	catch(e) {}
	
	return 0;
}

//function toNumber(str) {
//	INLINE
	
//	if(is_real(str))   return str;
//	if(!isNumber(str)) return 0;
	
//	var expo = 0;
//	if(string_pos("e", str)) {
//		var pos = string_pos("e", str);
//		expo = real(string_copy(str, pos + 1, string_length(str) - pos));
//	}
	
//	str = string_replace_all(str, ",", ".");
//	str = string_decimal(str);
//	if(str == "") return 0;
//	if(str == ".") return 0;
//	if(str == "-") return 0;
//	return real(str) * power(10, expo);
//}

function isNumber(str) {
	if(is_real(str)) return true;
	str = string_trim(str);
	return str == string_decimal(str);
}