rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 1 | /* tc.c: find character not in table to delimit fields */ |
| 2 | # include "t.h" |
| 3 | |
| 4 | void |
| 5 | choochar(void) |
| 6 | { |
wkj | 8a3cbc1 | 2004-05-17 02:23:43 +0000 | [diff] [blame] | 7 | /* choose funny characters to delimit fields */ |
rsc | a5f3a00 | 2006-04-20 21:00:21 +0000 | [diff] [blame] | 8 | int had[256], ilin, icol, k; |
rsc | cb98c6f | 2005-01-14 18:46:35 +0000 | [diff] [blame] | 9 | char *s; |
rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 10 | |
| 11 | for (icol = 0; icol < 128; icol++) |
| 12 | had[icol] = 0; |
| 13 | F1 = F2 = 0; |
| 14 | for (ilin = 0; ilin < nlin; ilin++) { |
| 15 | if (instead[ilin]) |
| 16 | continue; |
| 17 | if (fullbot[ilin]) |
| 18 | continue; |
| 19 | for (icol = 0; icol < ncol; icol++) { |
| 20 | k = ctype(ilin, icol); |
| 21 | if (k == 0 || k == '-' || k == '=') |
| 22 | continue; |
| 23 | s = table[ilin][icol].col; |
| 24 | if (point(s)) |
| 25 | while (*s) |
rsc | cb98c6f | 2005-01-14 18:46:35 +0000 | [diff] [blame] | 26 | had[(unsigned char)*s++] = 1; |
rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 27 | s = table[ilin][icol].rcol; |
| 28 | if (point(s)) |
| 29 | while (*s) |
rsc | cb98c6f | 2005-01-14 18:46:35 +0000 | [diff] [blame] | 30 | had[(unsigned char)*s++] = 1; |
rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 31 | } |
| 32 | } |
| 33 | /* choose first funny character */ |
| 34 | for ( |
| 35 | s = "\002\003\005\006\007!%&#/?,:;<=>@`^~_{}+-*ABCDEFGHIJKMNOPQRSTUVWXYZabcdefgjkoqrstwxyz"; |
| 36 | *s; s++) { |
rsc | cb98c6f | 2005-01-14 18:46:35 +0000 | [diff] [blame] | 37 | if (had[(unsigned char)*s] == 0) { |
| 38 | F1 = (unsigned char)*s; |
rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 39 | had[F1] = 1; |
| 40 | break; |
| 41 | } |
| 42 | } |
| 43 | /* choose second funny character */ |
| 44 | for ( |
| 45 | s = "\002\003\005\006\007:_~^`@;,<=>#%&!/?{}+-*ABCDEFGHIJKMNOPQRSTUVWXZabcdefgjkoqrstuwxyz"; |
| 46 | *s; s++) { |
rsc | cb98c6f | 2005-01-14 18:46:35 +0000 | [diff] [blame] | 47 | if (had[(unsigned char)*s] == 0) { |
| 48 | F2 = (unsigned char)*s; |
rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 49 | break; |
| 50 | } |
| 51 | } |
| 52 | if (F1 == 0 || F2 == 0) |
| 53 | error("couldn't find characters to use for delimiters"); |
| 54 | return; |
| 55 | } |
| 56 | |
| 57 | |
| 58 | int |
rsc | a5f3a00 | 2006-04-20 21:00:21 +0000 | [diff] [blame] | 59 | point(char *ss) |
rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 60 | { |
rsc | a5f3a00 | 2006-04-20 21:00:21 +0000 | [diff] [blame] | 61 | int s = (int)(uintptr)ss; |
| 62 | return(s >= 128 || s < 0); |
rsc | 5cedca1 | 2004-05-15 23:24:00 +0000 | [diff] [blame] | 63 | } |
| 64 | |
| 65 | |