Commit | Line | Data |
---|---|---|
c6667804 | 1 | ?RCS: $Id$ |
d8875586 MBT |
2 | ?RCS: |
3 | ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi | |
4 | ?RCS: | |
c6667804 | 5 | ?RCS: You may redistribute only under the terms of the Artistic License, |
d8875586 MBT |
6 | ?RCS: as specified in the README file that comes with the distribution. |
7 | ?RCS: You may reuse parts of this distribution only within the terms of | |
c6667804 | 8 | ?RCS: that same Artistic License; a copy of which may be found at the root |
d8875586 MBT |
9 | ?RCS: of the source tree for dist 4.0. |
10 | ?RCS: | |
11 | ?RCS: $Log: Tr.U,v $ | |
12 | ?RCS: Revision 3.0.1.2 1994/10/29 18:00:54 ram | |
13 | ?RCS: patch43: forgot to quote $@ to protect against "evil" characters | |
14 | ?RCS: | |
15 | ?RCS: Revision 3.0.1.1 1994/10/29 15:58:35 ram | |
16 | ?RCS: patch36: created | |
17 | ?RCS: | |
18 | ?X: | |
19 | ?X: This unit produces a bit of shell code that must be dotted in in order | |
20 | ?X: to do a character translation. It catches translations to uppercase or | |
21 | ?X: to lowercase, and then invokes the real tr to perform the job. | |
22 | ?X: | |
23 | ?X: This unit is necessary on HP machines (HP strikes again!) with non-ascii | |
24 | ?X: ROMAN8-charset, where normal letters are not arranged in a row, so a-z | |
25 | ?X: covers not the whole alphabet but lots of special chars. This was reported | |
26 | ?X: by Andreas Sahlbach <a.sahlbach@tu-bs.de>. | |
27 | ?X: | |
28 | ?X: Units performing a tr '[A-Z]' '[a-z]' or the other way round should include | |
29 | ?X: us in their dependency and use ./tr instead. | |
30 | ?X: | |
31 | ?MAKE:Tr: startsh tr eunicefix | |
32 | ?MAKE: -pick add $@ %< | |
33 | ?F:./tr | |
34 | ?T:up low LC_ALL | |
35 | : see whether [:lower:] and [:upper:] are supported character classes | |
36 | echo " " | |
37 | case "`echo AbyZ | LC_ALL=C $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in | |
38 | ABYZ) | |
39 | echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4 | |
40 | up='[:upper:]' | |
41 | low='[:lower:]' | |
42 | ;; | |
43 | *) # There is a discontinuity in EBCDIC between 'I' and 'J' | |
44 | # (0xc9 and 0xd1), therefore that is a nice testing point. | |
45 | if test "X$up" = X -o "X$low" = X; then | |
46 | case "`echo IJ | LC_ALL=C $tr '[I-J]' '[i-j]' 2>/dev/null`" in | |
47 | ij) up='[A-Z]' | |
48 | low='[a-z]' | |
49 | ;; | |
50 | esac | |
51 | fi | |
52 | if test "X$up" = X -o "X$low" = X; then | |
53 | case "`echo IJ | LC_ALL=C $tr I-J i-j 2>/dev/null`" in | |
54 | ij) up='A-Z' | |
55 | low='a-z' | |
56 | ;; | |
57 | esac | |
58 | fi | |
59 | if test "X$up" = X -o "X$low" = X; then | |
60 | case "`echo IJ | od -x 2>/dev/null`" in | |
61 | *C9D1*|*c9d1*) | |
62 | echo "Hey, this might be EBCDIC." >&4 | |
63 | if test "X$up" = X -o "X$low" = X; then | |
64 | case "`echo IJ | \ | |
65 | LC_ALL=C $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in | |
66 | ij) up='[A-IJ-RS-Z]' | |
67 | low='[a-ij-rs-z]' | |
68 | ;; | |
69 | esac | |
70 | fi | |
71 | if test "X$up" = X -o "X$low" = X; then | |
72 | case "`echo IJ | LC_ALL=C $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in | |
73 | ij) up='A-IJ-RS-Z' | |
74 | low='a-ij-rs-z' | |
75 | ;; | |
76 | esac | |
77 | fi | |
78 | ;; | |
79 | esac | |
80 | fi | |
81 | esac | |
82 | case "`echo IJ | LC_ALL=C $tr \"$up\" \"$low\" 2>/dev/null`" in | |
83 | ij) | |
84 | echo "Using $up and $low to convert case." >&4 | |
85 | ;; | |
86 | *) | |
87 | echo "I don't know how to translate letters from upper to lower case." >&4 | |
88 | echo "Your tr is not acting any way I know of." >&4 | |
89 | exit 1 | |
90 | ;; | |
91 | esac | |
92 | : set up the translation script tr, must be called with ./tr of course | |
93 | cat >tr <<EOSC | |
94 | $startsh | |
95 | case "\$1\$2" in | |
96 | '[A-Z][a-z]') LC_ALL=C exec $tr '$up' '$low';; | |
97 | '[a-z][A-Z]') LC_ALL=C exec $tr '$low' '$up';; | |
98 | esac | |
99 | LC_ALL=C exec $tr "\$@" | |
100 | EOSC | |
101 | chmod +x tr | |
102 | $eunicefix tr | |
103 |