4.3BSD/usr/ingres/source/gutil/scompare.c

Compare this file to the similar file:
Show the results in this format:

# include	<useful.h>
# include	<sccs.h>

SCCSID(@(#)scompare.c	8.3	1/17/85)

/*
**  STRING COMPARE
**
**	The strings 'a_ptr' and 'b_ptr' are compared.  Blanks are
**	ignored.  The first string may be no longer than 'a_len'
**	bytes, and the second string may be no longer than 'b_len'
**	bytes.  If either length is zero, it is taken to be very
**	long.  A null byte also terminates the scan.
**
**	Compares are based on the ascii ordering.
**
**	Shorter strings are less than longer strings.
**
**	Return value is positive one for a > b, minus one for a < b,
**	and zero for a == b.
**
**	Examples:
**		"abc" > "ab"
**		"  a bc  " == "ab  c"
**		"abc" < "abd"
*/

scompare(a_ptr, a_len, b_ptr, b_len)
char	*a_ptr;
int	a_len;
char	*b_ptr;
int	b_len;
{
	char		*ap;
	char		*bp;
	register char	a;
	char		b;
	register int	al;
	register int	bl;

	ap = a_ptr;
	bp = b_ptr;
	al = a_len;
	if (al == 0)
		al = MAXI4;
	bl = b_len;
	if (bl == 0)
		bl = MAXI4;

	while (1)
	{

		/* supress blanks in both strings */
		while ((a = *ap) == ' ' && al > 0)
		{
			al--;
			ap++;
		}
		if (al == 0)
			a = 0;
		while (*bp == ' ' && bl > 0)
		{
			bl--;
			bp++;
		}
		if (bl == 0)
			b = 0;
		else
			b = *bp;

		/* do inequality tests */
		if (a < b)
			return (-1);
		if (a > b)
			return (1);
		if (a == 0)
			return (0);

		/* go on to the next character */
		ap++;
		al--;
		bp++;
		bl--;
	}
}