/* tc.c: find character not in table to delimit fields */
# include "t.h"

void
choochar(void)
{
				/* choose funny characters to delimit fields */
	int	had[256], ilin, icol, k;
	char	*s;

	for (icol = 0; icol < 128; icol++)
		had[icol] = 0;
	F1 = F2 = 0;
	for (ilin = 0; ilin < nlin; ilin++) {
		if (instead[ilin]) 
			continue;
		if (fullbot[ilin]) 
			continue;
		for (icol = 0; icol < ncol; icol++) {
			k = ctype(ilin, icol);
			if (k == 0 || k == '-' || k == '=')
				continue;
			s = table[ilin][icol].col;
			if (point(s))
				while (*s)
					had[(unsigned char)*s++] = 1;
			s = table[ilin][icol].rcol;
			if (point(s))
				while (*s)
					had[(unsigned char)*s++] = 1;
		}
	}
				/* choose first funny character */
	for (
	    s = "\002\003\005\006\007!%&#/?,:;<=>@`^~_{}+-*ABCDEFGHIJKMNOPQRSTUVWXYZabcdefgjkoqrstwxyz"; 
	    *s; s++) {
		if (had[(unsigned char)*s] == 0) {
			F1 = (unsigned char)*s;
			had[F1] = 1;
			break;
		}
	}
				/* choose second funny character */
	for (
	    s = "\002\003\005\006\007:_~^`@;,<=>#%&!/?{}+-*ABCDEFGHIJKMNOPQRSTUVWXZabcdefgjkoqrstuwxyz"; 
	    *s; s++) {
		if (had[(unsigned char)*s] == 0) {
			F2 = (unsigned char)*s;
			break;
		}
	}
	if (F1 == 0 || F2 == 0)
		error("couldn't find characters to use for delimiters");
	return;
}


int
point(char *ss)
{
	int	s = (int)(uintptr)ss;
	return(s >= 128 || s < 0);
}


