125061Sjaap #ifndef lint 2*25087Sjaap static char sccsid[] = "@(#)delimfields.c 1.2 (CWI) 85/10/02"; 325061Sjaap #endif lint 425061Sjaap 525061Sjaap 6*25087Sjaap /* 7*25087Sjaap * find character not in table to delimit fields 8*25087Sjaap */ 925061Sjaap 1025061Sjaap #include "defs.h" 1125061Sjaap #include "ext.h" 1225061Sjaap 1325061Sjaap /* 1425061Sjaap * choose funny characters to delimit fields 1525061Sjaap */ 1625061Sjaap 1725061Sjaap /* 1825061Sjaap * strings to pick the characters from 1925061Sjaap */ 2025061Sjaap static char *funny1 = {"\002\003\005\006\007!%&#/?,:;<=>@`^~_{}+-*ABCDEFGHIJKMNOPQRSTUVWXYZabcdefgjkoqrstwxyz"}; 2125061Sjaap static char *funny2 = {"\002\003\005\006\007:_~^`@;,<=>#%&!/?{}+-*ABCDEFGHIJKMNOPQRSTUVWXZabcdefgjkoqrstuwxyz"}; 2225061Sjaap choochar()2325061Sjaapchoochar(){ 2425061Sjaap int had[128], ilin, icol, k; 2525061Sjaap char *s; 2625061Sjaap 2725061Sjaap for(icol = 0; icol < 128; icol++) 2825061Sjaap had[icol] = 0; 2925061Sjaap F1 = F2 = 0; 3025061Sjaap for(ilin = 0; ilin < nlin; ilin++){ 3125061Sjaap if(instead[ilin]) 3225061Sjaap continue; 3325061Sjaap if(fullbot[ilin]) 3425061Sjaap continue; 3525061Sjaap for(icol = 0; icol < ncol; icol++){ 3625061Sjaap k = ctype(ilin, icol); 3725061Sjaap if(k == 0 || k == '-' || k == '=') 3825061Sjaap continue; 3925061Sjaap s = table[ilin][icol].col; 4025061Sjaap if(point(s)) 4125061Sjaap while(*s) 4225061Sjaap had[*s++] = 1; 4325061Sjaap s = table[ilin][icol].rcol; 4425061Sjaap if(point(s)) 4525061Sjaap while(*s) 4625061Sjaap had[*s++] = 1; 4725061Sjaap } 4825061Sjaap } 4925061Sjaap /* 5025061Sjaap * choose first funny character 5125061Sjaap */ 5225061Sjaap for(s = funny1; *s; s++){ 5325061Sjaap if(had[*s] == 0){ 5425061Sjaap F1 = *s; 5525061Sjaap had[F1] = 1; 5625061Sjaap break; 5725061Sjaap } 5825061Sjaap } 5925061Sjaap /* 6025061Sjaap * choose second funny character 6125061Sjaap */ 6225061Sjaap for(s = funny2; *s; s++){ 6325061Sjaap if(had[*s] == 0){ 6425061Sjaap F2 = *s; 6525061Sjaap break; 6625061Sjaap } 6725061Sjaap } 6825061Sjaap if(F1 == 0 || F2 == 0) 6925061Sjaap error("couldn't find characters to use for delimiters"); 7025061Sjaap return; 7125061Sjaap } 7225061Sjaap 7325061Sjaap /* 7425061Sjaap * Very Ugly!! 7525061Sjaap * if s is not a character, we decide it is a pointer, so return true 7625061Sjaap * 7725061Sjaap * (Need to check or we can replace it with 7825061Sjaap #define point ((s) >= 128 || (s) < 0) 7925061Sjaap * or even isascii) 8025061Sjaap */ point(s)8125061Sjaappoint(s){ 8225061Sjaap return(s >= 128 || s < 0); 8325061Sjaap } 84