#include <stdio.h>
#include <ctype.h>
#include "getline.h"

#define	ISSPACE(c)	(isascii(c) && isspace(c))

/*----------------------------
 * Read a line from text file.
 *----------------------------
 */

int __regargs 
getline (char *buffer, unsigned long textmax, int tabstop, FILE *fd)
{
	register unsigned long len = 0;
	register int ch = ~EOF;

	if ( !buffer || !textmax || !fd || feof(fd) )
		return (-1);

	while (len+1 < textmax)
	{
		ch = getc(fd);
		if (ch==EOF || ch=='\0' || ch=='\n' || ch=='\r' || ch=='\f')
			break;

		if (!tabstop)
			buffer[len++] = ch;
		else if (tabstop < 0)
		{
			if (!ISSPACE(ch))
				buffer[len++] = ch;
			else if (!len)
				continue;
			else if (ISSPACE(buffer[len-1]))
				continue;
			else
				buffer[len++] = ' ';
		}
		else if (ch == '\t')
		{
			while (len+1 < textmax)
			{
				buffer[len++] = ' ';
				if ( (len % tabstop) == 0 )
					break;
			}
		}
		else
			buffer[len++] = ch;
	}
	if (tabstop < 0)
		while (len && ISSPACE(buffer[len-1]))
			--len;
	buffer[len] = '\0';
	return (ch == EOF && len == 0) ? -1 : (int)len;
}

