3 static const char rcsid[] =
15 * List of characters that look "reasonable" in international
16 * language texts. That's almost all characters :), except a
17 * few in the control range of ASCII (all the known international
18 * charactersets share the bottom half with ASCII).
20 static char maybe_internat[256] = {
21 F, F, F, F, F, F, F, F, T, T, T, T, T, T, F, F, /* 0x0X */
22 F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */
23 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */
24 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */
25 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */
26 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */
27 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */
28 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, /* 0x7X */
29 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x8X */
30 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x9X */
31 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0xaX */
32 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0xbX */
33 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0xcX */
34 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0xdX */
35 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0xeX */
36 T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T /* 0xfX */
39 /* Maximal length of a line we consider "reasonable". */
40 #define MAXLINELEN 300
43 internatmagic(buf, nbytes)
52 /* First, look whether there are "unreasonable" characters. */
53 for (i = 0, cp = buf; i < nbytes; i++, cp++)
54 if (!maybe_internat[*cp])
58 * Now, look whether the file consists of lines of
59 * "reasonable" length.
62 for (i = 0; i < nbytes;) {
63 cp = memchr(buf, '\n', nbytes - i);
65 /* Don't fail if we hit the end of buffer. */
66 if (i + MAXLINELEN >= nbytes)
71 if (cp - buf > MAXLINELEN)
76 ckfputs("International language text", stdout);