



#include <stdio.h>
#include <ctype.h>
#include "defs.h"
#include "debug.h"

/*
 * addset - put c in array[i], if it fits, increment i
 *
 */
int
addset(c,array,i,maxsize)
char c;
char array[];
int *i;
int maxsize;
{
	int n,status = NO;
	dprintf("addset  ");
	n = *i;
	if (n <= maxsize - 1) {
		array[n++] = c;
		status = YES;
	}
	*i = n;
	return(status);
}

/*
 * addstr - add string s to str[i] if it fits, increment i
 *
 */
int
addstr(s,str,i,maxsize)
char s[];
char str[];
int *i;
int maxsize;
{
	int k,j,status = NO;

	dprintf("addstr  ");
	j = *i;
	if (j + strlen(s) <= maxsize - 1) {
		for (k = 0; s[k] != EOS; k++)
			str[j++] = s[k];
		status = YES;
	}
	*i = j;
	return(status);
}

/*
 * ctoi - convert string at in[i] to integer, increment i
 *
 */
int
ctoi(in,i)
char in[];
int *i;
{
	int j,n,sign;

	dprintf("ctoi  ");
	n = 0;
	for (j = *i; in[j] == ' ' || in[j] == '\t'; j++)
		;         /* skip leading garbage */
	sign = 1;
	if (in[j] == '+' || in[j] == '-') /* sign */
		sign = (in[j++] == '+') ? 1 : -1;
	for (n = 0; in[j] >= '0' && in[j] <= '9'; j++)
		n = 10 * n + in[j] - '0';
	*i = j;
	return(sign * n);
}

/*
 * error - print message and terminate
 *
 */
error(s)
char s[];
{
	fprintf(stderr,"%s\n",s);
	exit(1);
}

/*
 * getwrd - get non-blank word from in[i] into out, increment i
 *
 */
int
getwrd(in,i,out)
char in[];
int *i;
char out[];
{
	int j,size = 0;

	for (j = *i; in[j] == '\t' || in[j] == ' '; j++)
		;         /* skip leading garbage */
	while (in[j] != ' ' && in[j] != '\t' && 
	    in[j] != EOS && in[j] != '\n')
		out[size++] = in[j++];
	out[size++] = EOS;
	*i = j;
#ifdef DEBUG
	printf("getwrd: %s\n",out);
#endif
	return(size);
}
/*
 * skipbl - skip blanks, tabs at str[i], increment i
 *
 */
skipbl(str,i)
char str[];
int *i;
{
	int n;
	dprintf("skipbl  ");
	n = *i;
	while (str[n] == ' ' || str[n] == '\t')
		n++;
	*i = n;
}

/*
 * itoc - special version of itoa
 *
 */
int
itoc(n,str,size)
int n;
char str[];
int size;
{

	int i,j,k,sign;
	char c;

	dprintf("itoc  ");
	if ((sign = n) < 0)
		n = -n;
	i = 0;
	do {
		str[i++] = n % 10 + '0'; 
	} 
	while ((n /= 10) > 0 && i < size-2);
	if (sign < 0 && i < size-1)
		str[i++] = '-';
	str[i] = EOS;
	/*
		 * reverse the string and plug it back in
		 *
 */
	for (j = 0, k = strlen(str) - 1; j < k; j++, k--) {
		c = str[j];
		str[j] = str[k];
		str[k] = c;
	}
	return(i);
}

/*
 * usage - obvious..
 *
 */
usage()
{
#ifdef rainbow
	fprintf(stderr,"%s %s",
	"usage: proff \033[7m[+n] [-n] [-v] [-ifile] [-s] [-pon]\033[0m",
	"\033[1minfile\033[0m \033[7m[outfile]\033[0m\n");
#else
	fprintf(stderr,
	"usage: proff [+n] [-n] [-v] [-ifile] [-s] [-pon] infile [outfile]");
#endif
	exit(0);
}
