view libutil/numstring.c @ 275:def9f6e4f49e default tip

doc/Use-outside-USA: Fake-NANP-numbers article is here
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 27 Nov 2023 21:49:19 -0800
parents d712d518059e
children
line wrap: on
line source

/*
 * Utility functions for number string initial parsing or preening.
 * grok_number_string() checks whether or not a user-supplied string
 * argument is fully numeric (with possibility of allowing hyphens),
 * and returns the number of digits.  dehyphen_number_string() copies
 * a possibly-hyphenated number string to a new buffer with all hyphens
 * taken out.
 */

#include <ctype.h>

grok_number_string(str, allow_hyphen)
	char *str;
{
	char *cp;
	int c, n, last_hyphen;

	n = 0;
	last_hyphen = 0;
	for (cp = str; *cp; ) {
		c = *cp++;
		if (isdigit(c)) {
			n++;
			last_hyphen = 0;
		} else if (c == '-') {
			if (!allow_hyphen || !n || last_hyphen)
				return(-1);
			last_hyphen = 1;
		} else
			return(-1);
	}
	if (last_hyphen)
		return(-1);
	return n;
}

dehyphen_number_string(src, dest)
	char *src, *dest;
{
	char *cp, *dp;
	int c;

	dp = dest;
	for (cp = src; *cp; ) {
		c = *cp++;
		if (isdigit(c))
			*dp++ = c;
	}
	*dp = '\0';
}