/*******************************************************************************
 *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
 *
 * 			Copyright (c) 1993 USENET Community Trust
 ******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#ifdef WFP_DEBUG
#include "/home/wfp5p/bin/debug_include/malloc.h"
#endif


int get_word(buffer, start, word, wordlen)
	char *buffer;
	int start;
	char *word;
	int wordlen;
{
	/*
	   Extracts the next white-space delimited word from the "buffer" starting
	   at "start" characters into the buffer and skipping any leading
	   white-space there.  Handles backslash-quoted characters and double-quote
	   bracked strings as an atomic unit.  The resulting word, up to "wordlen"
	   bytes long, is saved in "word".  Returns the buffer index where
	   extraction terminated, e.g. the next word can be extracted by starting
	   at start+<return-val>.  If no words are found in the buffer then -1 is
	   returned.
	*/

	register int len;
	register char *p;

	for (p = buffer + start; isspace(*p); ++p)
		;

	if (*p == '\0')
		return (-1);			/* nothing IN buffer! */

	while (*p != '\0')
	{
		len = len_next_part(p);
		if (len == 1 && isspace(*p))
			break;

		while (--len >= 0)
		{
			if (--wordlen > 0)
				*word++ = *p;
			++p;
		}
	}

	*word = '\0';
	return (p - buffer);
}


#ifdef _TEST
main()
{
	char buf[1024], word[1024], *bufp;
	int start, len;

	while (gets(buf) != NULL)
	{

		puts("parsing with front of buffer anchored");
		start = 0;
		while ((len = get_word(buf, start, word, sizeof(word))) > 0)
		{
			printf("start=%d len=%d word=%s\n", start, len, word);
			start = len;
		}
		putchar('\n');

		puts("parsing with front of buffer updated");
		bufp = buf;
		while ((len = get_word(bufp, 0, word, sizeof(word))) > 0)
		{
			printf("start=%d len=%d word=%s\n", 0, len, word);
			bufp += len;
		}
		putchar('\n');

	}

	exit(0);
}

#endif


syntax highlighted by Code2HTML, v. 0.9.1