13e12c5d1SDavid du Colombier /* tc.c: find character not in table to delimit fields */ 23e12c5d1SDavid du Colombier # include "t.h" 33e12c5d1SDavid du Colombier 4*43af371bSDavid du Colombier # define COMMON "\002\003\005\006\007!%&#/?,:;<=>@`^~_{}+-*" \ 5*43af371bSDavid du Colombier "ABCDEFGHIJKMNOPQRSTUVWXZabcdefgjkoqrstwxyz" 6*43af371bSDavid du Colombier 73e12c5d1SDavid du Colombier void choochar(void)83e12c5d1SDavid du Colombierchoochar(void) 93e12c5d1SDavid du Colombier { 103e12c5d1SDavid du Colombier /* choose funny characters to delimit fields */ 113e12c5d1SDavid du Colombier int had[128], ilin, icol, k; 123e12c5d1SDavid du Colombier char *s; 133e12c5d1SDavid du Colombier 143e12c5d1SDavid du Colombier for (icol = 0; icol < 128; icol++) 153e12c5d1SDavid du Colombier had[icol] = 0; 163e12c5d1SDavid du Colombier F1 = F2 = 0; 173e12c5d1SDavid du Colombier for (ilin = 0; ilin < nlin; ilin++) { 18*43af371bSDavid du Colombier if (instead[ilin] || fullbot[ilin]) 193e12c5d1SDavid du Colombier continue; 203e12c5d1SDavid du Colombier for (icol = 0; icol < ncol; icol++) { 213e12c5d1SDavid du Colombier k = ctype(ilin, icol); 223e12c5d1SDavid du Colombier if (k == 0 || k == '-' || k == '=') 233e12c5d1SDavid du Colombier continue; 243e12c5d1SDavid du Colombier s = table[ilin][icol].col; 253e12c5d1SDavid du Colombier if (point(s)) 26*43af371bSDavid du Colombier for (; *s; s++) 272cca75a1SDavid du Colombier if((unsigned char)*s < 128) 282cca75a1SDavid du Colombier had[(unsigned char)*s] = 1; 293e12c5d1SDavid du Colombier s = table[ilin][icol].rcol; 303e12c5d1SDavid du Colombier if (point(s)) 31*43af371bSDavid du Colombier for (; *s; s++) 322cca75a1SDavid du Colombier if((unsigned char)*s < 128) 332cca75a1SDavid du Colombier had[(unsigned char)*s] = 1; 343e12c5d1SDavid du Colombier } 353e12c5d1SDavid du Colombier } 363e12c5d1SDavid du Colombier /* choose first funny character */ 37*43af371bSDavid du Colombier for (s = COMMON "Y"; *s; s++) { 383e12c5d1SDavid du Colombier if (had[*s] == 0) { 393e12c5d1SDavid du Colombier F1 = *s; 403e12c5d1SDavid du Colombier had[F1] = 1; 413e12c5d1SDavid du Colombier break; 423e12c5d1SDavid du Colombier } 433e12c5d1SDavid du Colombier } 443e12c5d1SDavid du Colombier /* choose second funny character */ 45*43af371bSDavid du Colombier for (s = COMMON "u"; *s; s++) { 463e12c5d1SDavid du Colombier if (had[*s] == 0) { 473e12c5d1SDavid du Colombier F2 = *s; 483e12c5d1SDavid du Colombier break; 493e12c5d1SDavid du Colombier } 503e12c5d1SDavid du Colombier } 513e12c5d1SDavid du Colombier if (F1 == 0 || F2 == 0) 523e12c5d1SDavid du Colombier error("couldn't find characters to use for delimiters"); 533e12c5d1SDavid du Colombier } 543e12c5d1SDavid du Colombier 553e12c5d1SDavid du Colombier int point(char * ss)564de34a7eSDavid du Colombierpoint(char *ss) 573e12c5d1SDavid du Colombier { 58*43af371bSDavid du Colombier vlong s = (uintptr)ss; 594de34a7eSDavid du Colombier 604de34a7eSDavid du Colombier return(s >= 128 || s < 0); 613e12c5d1SDavid du Colombier } 62