mirror of
https://git.savannah.gnu.org/git/coreutils.git
synced 2025-09-10 07:59:52 +02:00
Compare commits
650 Commits
FILEUTILS-
...
FILEUTILS-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3abc240e82 | ||
|
|
ff8f4dde22 | ||
|
|
f880990daf | ||
|
|
7306126ef0 | ||
|
|
305e2306be | ||
|
|
2b10e67d59 | ||
|
|
dc74b3a1e7 | ||
|
|
2f21a269fe | ||
|
|
69408d229e | ||
|
|
f05badd230 | ||
|
|
6763fa97d2 | ||
|
|
b1b10e1e40 | ||
|
|
5810f4bee5 | ||
|
|
91b5e686d5 | ||
|
|
8c096b86ef | ||
|
|
698fd02798 | ||
|
|
28bac510d9 | ||
|
|
2413369d22 | ||
|
|
091109470c | ||
|
|
9481a7bd36 | ||
|
|
2be3dc067a | ||
|
|
c4542a7e8c | ||
|
|
6c9e0d702a | ||
|
|
062906c83a | ||
|
|
2c3fa56cef | ||
|
|
346edb7361 | ||
|
|
b9c91d0570 | ||
|
|
e20a9b89d2 | ||
|
|
0baa523154 | ||
|
|
d5f7b2a2db | ||
|
|
4c05896b20 | ||
|
|
ec974f5c39 | ||
|
|
15d2e7a86b | ||
|
|
069610a0f0 | ||
|
|
5617251659 | ||
|
|
398516f242 | ||
|
|
8e1452ffea | ||
|
|
6b36a017db | ||
|
|
30d2b031ab | ||
|
|
f72f631fa0 | ||
|
|
d10b18f2b9 | ||
|
|
511cd5b6ae | ||
|
|
09282a24f6 | ||
|
|
f36a801a9a | ||
|
|
1e219d6b71 | ||
|
|
2e0f5a2bac | ||
|
|
9234f12d32 | ||
|
|
bd2102efa4 | ||
|
|
6550d040a5 | ||
|
|
afdd1c5ca2 | ||
|
|
7af339b126 | ||
|
|
0d6c850979 | ||
|
|
a6db3e776e | ||
|
|
f5c9c07779 | ||
|
|
05de2104b9 | ||
|
|
22c0d963f1 | ||
|
|
6cfbe9468a | ||
|
|
630d0d3f8d | ||
|
|
d3af459dac | ||
|
|
b9cbaa7073 | ||
|
|
6c95094270 | ||
|
|
65c46d231a | ||
|
|
c401c7f12c | ||
|
|
5a7847d20f | ||
|
|
94129d72a5 | ||
|
|
e0e3f4ba72 | ||
|
|
61511d8bcb | ||
|
|
7eba3be340 | ||
|
|
971da27132 | ||
|
|
eff0f7cd2e | ||
|
|
b609a36366 | ||
|
|
e4dbcfc604 | ||
|
|
8a34174fb2 | ||
|
|
f22a30f1e5 | ||
|
|
4917680b1a | ||
|
|
3bd2800a3c | ||
|
|
783c48e864 | ||
|
|
07632c3ed9 | ||
|
|
808aa68e9c | ||
|
|
8c4882550e | ||
|
|
4a602cec80 | ||
|
|
6fdf590d36 | ||
|
|
5cbce55a86 | ||
|
|
9eda37263f | ||
|
|
57bb960867 | ||
|
|
320be1758d | ||
|
|
115758e03b | ||
|
|
24e8e8409d | ||
|
|
102caacbef | ||
|
|
cfe7b86608 | ||
|
|
7ec33cd342 | ||
|
|
2e05e2b7fa | ||
|
|
cc9b514f5d | ||
|
|
c49e7f4f22 | ||
|
|
f98d307bbb | ||
|
|
06c06bd6f7 | ||
|
|
8c63b56030 | ||
|
|
29e829a66a | ||
|
|
2f50c6930d | ||
|
|
a3fc960f32 | ||
|
|
91ac2fec34 | ||
|
|
55fa0c6a12 | ||
|
|
6bffd08ba5 | ||
|
|
0e09235c9f | ||
|
|
6b85baa502 | ||
|
|
d46a35bbff | ||
|
|
97523193b7 | ||
|
|
4f06def5c0 | ||
|
|
0ce2109a88 | ||
|
|
557af8f47e | ||
|
|
987955f7c5 | ||
|
|
c5187c959c | ||
|
|
7872d7c932 | ||
|
|
f1c24743b8 | ||
|
|
7cff7275f8 | ||
|
|
286e9d9766 | ||
|
|
acf8442f02 | ||
|
|
b6a764d8c6 | ||
|
|
07d20c7e44 | ||
|
|
1b6c640f46 | ||
|
|
101ae141c6 | ||
|
|
375c13c679 | ||
|
|
cbdf71ab00 | ||
|
|
05e6e5583e | ||
|
|
c4d7026cf9 | ||
|
|
baee6fd135 | ||
|
|
59339ab7e5 | ||
|
|
f5225442f8 | ||
|
|
1b5e676e38 | ||
|
|
cf6ad5dcca | ||
|
|
bb928b7ac4 | ||
|
|
8851d83616 | ||
|
|
41c5f76c2f | ||
|
|
0b23ffc1bf | ||
|
|
e2e5b7324e | ||
|
|
f706863aa6 | ||
|
|
c1e927ff6d | ||
|
|
717d76cf4b | ||
|
|
8bc2ecda80 | ||
|
|
5907ad7277 | ||
|
|
1645ace5e7 | ||
|
|
0af22e4bb2 | ||
|
|
7b165ea504 | ||
|
|
a21ac71b0a | ||
|
|
66964546be | ||
|
|
51ca1e585c | ||
|
|
bf43e9b11e | ||
|
|
b2e1221012 | ||
|
|
224fff6a3a | ||
|
|
7876eafaa1 | ||
|
|
8040d4c680 | ||
|
|
6e8ec1114f | ||
|
|
6cdbe93585 | ||
|
|
36daa470f4 | ||
|
|
5f9feb9aae | ||
|
|
6702048c64 | ||
|
|
9f5b324ec5 | ||
|
|
c13a28cc35 | ||
|
|
de9a877716 | ||
|
|
1df7091e3b | ||
|
|
30fc70c376 | ||
|
|
65851e8c38 | ||
|
|
3db1aef04e | ||
|
|
691513e7f3 | ||
|
|
a8871677d1 | ||
|
|
44dbec6a60 | ||
|
|
0d3ddaa85c | ||
|
|
637aa0759b | ||
|
|
e2c0a043f7 | ||
|
|
81718d1a58 | ||
|
|
9dc239aca7 | ||
|
|
ea525f532f | ||
|
|
476de46ee5 | ||
|
|
571d42e74b | ||
|
|
68e5120531 | ||
|
|
6b32b53027 | ||
|
|
8a25562446 | ||
|
|
764e739e01 | ||
|
|
a5bfc49347 | ||
|
|
386d762885 | ||
|
|
9df0229009 | ||
|
|
2d81adfab6 | ||
|
|
ac0c37fd78 | ||
|
|
65b35a9e36 | ||
|
|
67ec190a99 | ||
|
|
4b47f20e6a | ||
|
|
53d2086432 | ||
|
|
cec217ed93 | ||
|
|
0b7aeab254 | ||
|
|
b4e46d54f9 | ||
|
|
62dac2622f | ||
|
|
76f864a015 | ||
|
|
dcc7e653c9 | ||
|
|
1c04247f53 | ||
|
|
fcbef3a982 | ||
|
|
23d439f22b | ||
|
|
ff220fd012 | ||
|
|
670f9b2f8a | ||
|
|
789f74708c | ||
|
|
da60713a1d | ||
|
|
57808ffdb5 | ||
|
|
8c3db8987e | ||
|
|
373ced3924 | ||
|
|
f726258818 | ||
|
|
84e957d300 | ||
|
|
80871da192 | ||
|
|
dd1e7763d3 | ||
|
|
dab2c2f26f | ||
|
|
4aa83de94e | ||
|
|
67a257993d | ||
|
|
d45f587081 | ||
|
|
8d3deedb8d | ||
|
|
85f411e680 | ||
|
|
362c45be17 | ||
|
|
60b24ab5af | ||
|
|
95c67325f7 | ||
|
|
e16e6e2362 | ||
|
|
7179f4a0af | ||
|
|
7570ff1a15 | ||
|
|
ca1b49d35f | ||
|
|
61ef65be66 | ||
|
|
5398f98139 | ||
|
|
143c0051a7 | ||
|
|
c81b144d58 | ||
|
|
b9912b209f | ||
|
|
5f234e2759 | ||
|
|
70dbbd4077 | ||
|
|
cd2e512366 | ||
|
|
b8dc0dccca | ||
|
|
979fe5dc9a | ||
|
|
ec5d352d55 | ||
|
|
d34f5765a8 | ||
|
|
3c4c9446a6 | ||
|
|
063d10ae6c | ||
|
|
ac1e8485b3 | ||
|
|
f62bbb9cb9 | ||
|
|
d437084b93 | ||
|
|
9ddb95e93c | ||
|
|
e3bd3c1c39 | ||
|
|
ff4e97cf78 | ||
|
|
6d1aa48746 | ||
|
|
02ba1920dd | ||
|
|
fb829c2cd1 | ||
|
|
0a4ef2236d | ||
|
|
40c66374f4 | ||
|
|
0ec36fda44 | ||
|
|
84142eaa26 | ||
|
|
9d8529baea | ||
|
|
a579a9f85b | ||
|
|
767a68f512 | ||
|
|
f8c3b33277 | ||
|
|
77def80003 | ||
|
|
96018007df | ||
|
|
23d74f24e4 | ||
|
|
23d5af772e | ||
|
|
8bbc2e2937 | ||
|
|
5d694e4cc3 | ||
|
|
f893b3807d | ||
|
|
a374a307c5 | ||
|
|
b221905959 | ||
|
|
ff2333c835 | ||
|
|
bd4945f89c | ||
|
|
bda7fb978e | ||
|
|
535a5f905f | ||
|
|
34306581ac | ||
|
|
d25861b4da | ||
|
|
c9e90c55fa | ||
|
|
07feb846a6 | ||
|
|
0470b5dce9 | ||
|
|
449c9c39cc | ||
|
|
17c213ed3f | ||
|
|
42da57def9 | ||
|
|
eef13be7f9 | ||
|
|
3bea9c2f51 | ||
|
|
2de1a014ef | ||
|
|
764768f318 | ||
|
|
290848dd2b | ||
|
|
1ac0c21d89 | ||
|
|
17754acc90 | ||
|
|
0226382b34 | ||
|
|
1ca4f162fa | ||
|
|
84928ec02d | ||
|
|
46f2e4efeb | ||
|
|
6c4caf0dbf | ||
|
|
1003235282 | ||
|
|
fb4889bcd9 | ||
|
|
155695ed60 | ||
|
|
d5c47e9163 | ||
|
|
ea0df9b67d | ||
|
|
98ba27811d | ||
|
|
a66e71a1d2 | ||
|
|
4a03ccc044 | ||
|
|
57d52e5170 | ||
|
|
a7047bf647 | ||
|
|
6f3516dc97 | ||
|
|
057f710a76 | ||
|
|
168676d418 | ||
|
|
825a182517 | ||
|
|
34cc9acdd9 | ||
|
|
0f97cac340 | ||
|
|
6710abd4ae | ||
|
|
566b0c41e3 | ||
|
|
72a5a4b5af | ||
|
|
e105d08552 | ||
|
|
2e5a37a44e | ||
|
|
8e0c33f8ea | ||
|
|
16155b0807 | ||
|
|
1648386aa0 | ||
|
|
7447e09e2a | ||
|
|
96949ef7f5 | ||
|
|
44b1bde148 | ||
|
|
1e5c8f23ce | ||
|
|
f1029324fe | ||
|
|
c1eb26af14 | ||
|
|
93eaa3c661 | ||
|
|
67aaf0afa6 | ||
|
|
fc02691130 | ||
|
|
29f710b0e5 | ||
|
|
6c26ef5e0d | ||
|
|
a8d1ef1616 | ||
|
|
8bde83a334 | ||
|
|
85e0053136 | ||
|
|
b10b8369dd | ||
|
|
1aab3474a1 | ||
|
|
42a837c531 | ||
|
|
d1b4719534 | ||
|
|
81fde1922f | ||
|
|
7d2b2cc3f9 | ||
|
|
967bd9f5f0 | ||
|
|
f2a32f6e5b | ||
|
|
8e064c4377 | ||
|
|
5790705b19 | ||
|
|
fa36ee7ea2 | ||
|
|
8a29209450 | ||
|
|
82669abc1a | ||
|
|
794af09007 | ||
|
|
128307fa88 | ||
|
|
84f4450da4 | ||
|
|
038e5f009e | ||
|
|
4ab0a2a4c6 | ||
|
|
4b20f454fe | ||
|
|
33bebae5ae | ||
|
|
ccff4ede2b | ||
|
|
6f48cb1924 | ||
|
|
98ecd5b300 | ||
|
|
57e5f5a5b5 | ||
|
|
2a0b67dc3b | ||
|
|
805034d054 | ||
|
|
c180c51c79 | ||
|
|
e044763e67 | ||
|
|
b8da6c90b6 | ||
|
|
269630005b | ||
|
|
902d5e299d | ||
|
|
75789c4643 | ||
|
|
678cbc835e | ||
|
|
de8d09d22d | ||
|
|
b266f1a207 | ||
|
|
a61888be78 | ||
|
|
a3bafb3263 | ||
|
|
937c7d8bab | ||
|
|
b7af6cd62a | ||
|
|
09b7fb4252 | ||
|
|
f9ab8e8b03 | ||
|
|
fb9a0d3dff | ||
|
|
d45400c9a9 | ||
|
|
81eda26beb | ||
|
|
1a9b70d7a8 | ||
|
|
70c01e7963 | ||
|
|
bd4a3f044d | ||
|
|
13bc9dcc35 | ||
|
|
6b840273e0 | ||
|
|
9f92dfbf90 | ||
|
|
26656272e8 | ||
|
|
948cf23537 | ||
|
|
2395e90973 | ||
|
|
bb6f5c5913 | ||
|
|
d1b7514e91 | ||
|
|
53e173cca6 | ||
|
|
5157fd957e | ||
|
|
d39e2c5127 | ||
|
|
80e8a30f39 | ||
|
|
83d003e558 | ||
|
|
9715e45a87 | ||
|
|
5d3b030798 | ||
|
|
19a165cc9c | ||
|
|
7a7ef5ff5b | ||
|
|
2638bf642c | ||
|
|
9503681d86 | ||
|
|
7d8102bec2 | ||
|
|
b980775bb6 | ||
|
|
b96c6c60eb | ||
|
|
7de78927ed | ||
|
|
7a44e716a4 | ||
|
|
95b8288176 | ||
|
|
5a2d528081 | ||
|
|
8ab42dc273 | ||
|
|
705cf20084 | ||
|
|
fc08f1058a | ||
|
|
a343e68e00 | ||
|
|
e8e722d58e | ||
|
|
8313e867b2 | ||
|
|
4dac9be014 | ||
|
|
46554e300b | ||
|
|
8b5ed0399d | ||
|
|
e11d70c362 | ||
|
|
005c36b178 | ||
|
|
0e3b9af25b | ||
|
|
1ec1017a23 | ||
|
|
bab0581788 | ||
|
|
e23b334713 | ||
|
|
475a58337a | ||
|
|
1195909f5d | ||
|
|
0c44307f3b | ||
|
|
138cf56fdb | ||
|
|
a711e8e132 | ||
|
|
e32013660e | ||
|
|
b4e8324ac2 | ||
|
|
03455da71a | ||
|
|
c82037714e | ||
|
|
6faeb61968 | ||
|
|
82288821f0 | ||
|
|
28c95e39c1 | ||
|
|
47ac7c933a | ||
|
|
4ba5bee1a0 | ||
|
|
f063d2f7a2 | ||
|
|
ee81e2f472 | ||
|
|
c1e29b69ba | ||
|
|
13955cb7c1 | ||
|
|
e95aecb85e | ||
|
|
b66c78c236 | ||
|
|
b1d6d67405 | ||
|
|
086c4578e3 | ||
|
|
99d5294ab1 | ||
|
|
f99e33733b | ||
|
|
4d22e13282 | ||
|
|
18607df151 | ||
|
|
1b4fc0d733 | ||
|
|
1cea2b41a4 | ||
|
|
a2267a42f8 | ||
|
|
7228350401 | ||
|
|
22cdfc8955 | ||
|
|
cb47f7bef7 | ||
|
|
7fda0e1065 | ||
|
|
b91360e484 | ||
|
|
4b797e9d5c | ||
|
|
9b5e17f134 | ||
|
|
bee39b77d9 | ||
|
|
18eb7260a1 | ||
|
|
531ced1819 | ||
|
|
b6ee833da0 | ||
|
|
cfd67ae18c | ||
|
|
a26a44baba | ||
|
|
843d60096e | ||
|
|
bcfbd6fab1 | ||
|
|
84dc18f1db | ||
|
|
10c7ee785a | ||
|
|
6591e754b2 | ||
|
|
05c804e18f | ||
|
|
89e470b8e2 | ||
|
|
e26558d720 | ||
|
|
8fd9cfdd3c | ||
|
|
ca2cd27d3c | ||
|
|
8b2c09a944 | ||
|
|
41a7bbf8e0 | ||
|
|
08ae72e3a4 | ||
|
|
c127e62803 | ||
|
|
0bb442899e | ||
|
|
412590b094 | ||
|
|
6fcaba3a1e | ||
|
|
f5f7082712 | ||
|
|
20c6afc39f | ||
|
|
16fa90f7d0 | ||
|
|
aeb6ea6c01 | ||
|
|
e1eebd3966 | ||
|
|
e03ffca770 | ||
|
|
2f19e00c90 | ||
|
|
12fbee444c | ||
|
|
0abcbb7b3d | ||
|
|
b5f2d23a1c | ||
|
|
2d4a921699 | ||
|
|
66f0de09e8 | ||
|
|
fed1e6eceb | ||
|
|
505ee4c31c | ||
|
|
dda679e516 | ||
|
|
7cdcf3b47a | ||
|
|
e4024a94f8 | ||
|
|
a07027bbda | ||
|
|
cf8234804d | ||
|
|
fad7082c96 | ||
|
|
59b21e3f05 | ||
|
|
c0c398ba95 | ||
|
|
f8b8ef6242 | ||
|
|
707f9870ba | ||
|
|
26fe14166f | ||
|
|
1259760b63 | ||
|
|
9f315fd6f8 | ||
|
|
c6c4932d6c | ||
|
|
7a3247e23b | ||
|
|
a6fcc4893f | ||
|
|
4ff62130e9 | ||
|
|
c8d4c53bff | ||
|
|
4606c57a5c | ||
|
|
231c74cf2b | ||
|
|
3cc8a10875 | ||
|
|
dd7bb02a99 | ||
|
|
0856c30182 | ||
|
|
ef315fa054 | ||
|
|
1a1a070926 | ||
|
|
113874c5f5 | ||
|
|
58954a525e | ||
|
|
f0f1719546 | ||
|
|
47aa3de9f4 | ||
|
|
be9c42975f | ||
|
|
20b936fbd2 | ||
|
|
75e8fc40f8 | ||
|
|
9624b35110 | ||
|
|
10a0ecfe61 | ||
|
|
b1d0c95b4b | ||
|
|
961afa7d2f | ||
|
|
2ce235df9c | ||
|
|
07432a0f9d | ||
|
|
8dc0dbec88 | ||
|
|
270f765604 | ||
|
|
d1ea838331 | ||
|
|
d3172d80ef | ||
|
|
c36cde4138 | ||
|
|
71f2c2f9ec | ||
|
|
ed0c88b7f7 | ||
|
|
fabd45e6c6 | ||
|
|
08aa2e4bde | ||
|
|
5d4eefe8d8 | ||
|
|
fc6aa385f9 | ||
|
|
13cfe05e30 | ||
|
|
e7a73d59e6 | ||
|
|
20e7435ae7 | ||
|
|
555250c779 | ||
|
|
ca47081c5b | ||
|
|
5e8ad5a577 | ||
|
|
b19705597b | ||
|
|
e46de77883 | ||
|
|
a65fa10c4b | ||
|
|
6e38ee2da0 | ||
|
|
b1476fec95 | ||
|
|
48cb109a87 | ||
|
|
f18a0a4331 | ||
|
|
9200ad37c9 | ||
|
|
6b51b6027d | ||
|
|
4d70e59a85 | ||
|
|
d883ecee8a | ||
|
|
3be49c9564 | ||
|
|
898a08f344 | ||
|
|
a765a451e6 | ||
|
|
e246ae8765 | ||
|
|
57f1b329c9 | ||
|
|
998eae92d1 | ||
|
|
eb8c7c7924 | ||
|
|
bf94a704bc | ||
|
|
e3a15bed3c | ||
|
|
4dd5a9b806 | ||
|
|
8ddf290477 | ||
|
|
a197ef9f3c | ||
|
|
a2d3645e9c | ||
|
|
edc46711dd | ||
|
|
06db9a8db3 | ||
|
|
096564b06c | ||
|
|
0476aba87e | ||
|
|
8082ce8f53 | ||
|
|
7b5a5af07f | ||
|
|
c4731cc3f0 | ||
|
|
a19cffba7e | ||
|
|
f9fce0782d | ||
|
|
1aa01e7b7b | ||
|
|
8478414c5d | ||
|
|
bca7546dcd | ||
|
|
c7582bc4ab | ||
|
|
0cae6713e7 | ||
|
|
9c2d071799 | ||
|
|
35c14d81cf | ||
|
|
7387f60b85 | ||
|
|
8e369dfcaa | ||
|
|
196c0a27f0 | ||
|
|
bc1d502816 | ||
|
|
9ea7513f11 | ||
|
|
e7328f4f56 | ||
|
|
2a0577baa1 | ||
|
|
6dc48e999d | ||
|
|
f382570992 | ||
|
|
1e99421584 | ||
|
|
a06c23be9b | ||
|
|
d3defdfba8 | ||
|
|
5db7818497 | ||
|
|
1950561a91 | ||
|
|
13b5f7bc46 | ||
|
|
5c5d74ef09 | ||
|
|
dd408ec740 | ||
|
|
474e7801ff | ||
|
|
6970bbc17b | ||
|
|
db26cba77c | ||
|
|
f1052fb45f | ||
|
|
fae10f70e0 | ||
|
|
f484303d9e | ||
|
|
3f622f08e5 | ||
|
|
8287d3c4c4 | ||
|
|
8b86e4459b | ||
|
|
c44e7a8352 | ||
|
|
d11ec4a80f | ||
|
|
54651dc73c | ||
|
|
ae1e1e5e19 | ||
|
|
647e6ab644 | ||
|
|
41e1351fca | ||
|
|
1b5283ca7a | ||
|
|
dd7e9b194e | ||
|
|
40c0f14648 | ||
|
|
7f44579325 | ||
|
|
171778bed3 | ||
|
|
e7f7f3da11 | ||
|
|
1ccaa26ea4 | ||
|
|
376c3fe740 | ||
|
|
08da7047d0 | ||
|
|
0aa86039dd | ||
|
|
bfd09e35cc | ||
|
|
115372366e | ||
|
|
d67adf2b8c | ||
|
|
3ad83e6ad0 | ||
|
|
ad72fa61c8 | ||
|
|
c3ee42e3b0 | ||
|
|
ca3b34f491 | ||
|
|
cdcf38b40f | ||
|
|
3423927cfa | ||
|
|
fac400a428 | ||
|
|
894e9948f4 | ||
|
|
ed1684742a | ||
|
|
468dd2822c | ||
|
|
90f1e86e58 | ||
|
|
bfbd79ca59 | ||
|
|
fb71ae4c86 | ||
|
|
5b09432a60 | ||
|
|
3ba3797506 | ||
|
|
a64b525ff4 | ||
|
|
56533a5671 | ||
|
|
8999870c56 | ||
|
|
40540367af | ||
|
|
0806bbf608 | ||
|
|
589cf443b9 | ||
|
|
0430c3c938 | ||
|
|
db358e3feb | ||
|
|
032571f565 | ||
|
|
b38198f365 | ||
|
|
0e39b529b6 | ||
|
|
3957028d28 |
@@ -18,6 +18,12 @@ tag-prev-version = $(subst .,_,$(prev-version))
|
||||
this-cvs-tag = $(tag-package)-$(tag-this-version)
|
||||
prev-cvs-tag = $(tag-package)-$(tag-prev-version)
|
||||
|
||||
# Verify that all source files using _() are listed in po/POTFILES.in.
|
||||
po-check:
|
||||
grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1
|
||||
grep -E -l '\b_\(' lib/*.c src/*.c | sort > $@-2
|
||||
diff -u $@-1 $@-2
|
||||
rm -f $@-1 $@-2
|
||||
|
||||
# Tag before making distribution. Also, don't make a distribution if
|
||||
# checks fail. Also, make sure the NEWS file is up-to-date.
|
||||
@@ -37,11 +43,14 @@ my-distcheck:
|
||||
-rm -rf $(t)
|
||||
mkdir $(t)
|
||||
GZIP=$(GZIP) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
|
||||
# Removing $(DEPDIR) like this is a gross kludge to work around a bug
|
||||
# in automake. Remove that line once it's fixed.
|
||||
cd $(t)/$(distdir) \
|
||||
&& ./configure --disable-nls \
|
||||
&& $(MAKE) CFLAGS='-Wformat -Werror' \
|
||||
&& $(MAKE) dvi \
|
||||
&& $(MAKE) check \
|
||||
&& rm -rf $(DEPDIR) \
|
||||
&& $(MAKE) distclean
|
||||
cd $(t) && mv $(distdir) $(distdir).old \
|
||||
&& $(AMTAR) -zxf ../$(distdir).tar.gz
|
||||
@@ -108,6 +117,7 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
|
||||
)
|
||||
|
||||
alpha:
|
||||
$(MAKE) po-check
|
||||
$(MAKE) cvs-dist
|
||||
$(MAKE) -s announcement > /tmp/announce-$(distdir)
|
||||
ln $(distdir).tar.gz ../release
|
||||
|
||||
20
THANKS
20
THANKS
@@ -8,7 +8,8 @@ Akim Demaille: demaille@inf.enst.fr
|
||||
Alain Magloire: alain@qnx.com
|
||||
Alexey Solovyov: alekso@math.uu.se
|
||||
Andreas Jaeger: jaeger@gnu.org
|
||||
Andreas Schwab: schwab@issan.informatik.uni-dortmund.de
|
||||
Andreas Schwab: schwab@suse.de
|
||||
Andres Soolo: andres@soolo.matti.ee
|
||||
Andrew Dalke: dalke@bioreason.com
|
||||
Andrew Tridgell: tridge@samba.org
|
||||
Andries Brouwer: Andries.Brouwer@cwi.nl
|
||||
@@ -18,11 +19,14 @@ Bengt Martensson: bengt@mathematik.uni-Bremen.de
|
||||
Bernd Leibing: bernd.leibing@rz.uni-ulm.de
|
||||
Bjorn Helgaas: helgaas@rsn.hp.com
|
||||
Bob McCracken: kerouac@ravenet.com
|
||||
Bob Proulx: rwp@fc.hp.com
|
||||
Brendan O'Dea: bod@compusol.com.au
|
||||
Charles Karney: karney@pppl.gov
|
||||
Chip Salzenberg: chip@valinux.com
|
||||
Chris Yeo: cyeo@biking.org
|
||||
Christian von Roques: roques@pond.sub.org
|
||||
Colin Plumb: colin@nyx.net
|
||||
David Godfrey: dave@delta.demon.co.uk
|
||||
Dirk Lattermann: dlatt@t-online.de
|
||||
Don Parsons: dparsons@synapse.kent.edu
|
||||
Eirik Fuller: eirik@netcom.com
|
||||
@@ -30,11 +34,15 @@ Eli Zaretskii: eliz@is.elta.co.il
|
||||
Emile LeBlanc: leblanc@math.toronto.edu
|
||||
François Pinard: pinard@iro.umontreal.ca
|
||||
Galen Hazelwood: galenh@micron.net
|
||||
Germano Leichsenring: germano@jedi.cs.kobe-u.ac.jp
|
||||
Göran Uddeborg: goeran@uddeborg.pp.se
|
||||
Greg McGary: gkm@eng.ascend.com
|
||||
Gabor Z. Papp: gzp@gzp.org.hu
|
||||
Holger Berger: hberger@ess.nec.de
|
||||
Hugh Daniel: hugh@xanadu.com
|
||||
James: james@albion.glarp.com
|
||||
James Antill: jmanti%essex.ac.uk@seralph21.essex.ac.uk
|
||||
James Sneeringer: jvs@ocslink.com
|
||||
James Tanis: jtt@soscorp.com
|
||||
Jamie Lokier: jamie@imbolc.ucc.ie
|
||||
Janos Farkas: chexum@shadow.banki.hu
|
||||
@@ -44,6 +52,7 @@ Johan Danielsson: joda@pdc.kth.se
|
||||
John Bley: jbb6@acpub.duke.edu
|
||||
John Gatewood Ham: zappaman@alphabox.compsci.buu.ac.th
|
||||
John Gotts: jgotts@umich.edu
|
||||
Jürgen Fluk: louis@dachau.marco.de
|
||||
jvogel: jvogel@linkny.com
|
||||
Karl Heuer: kwzh@gnu.org
|
||||
Kjetil Torgrim Homme: kjetilho@ifi.uio.no
|
||||
@@ -54,31 +63,40 @@ Marcus Daniels: marcus@sysc.pdx.edu
|
||||
Mark A. Thomas: thommark@access.digex.net
|
||||
Mark Harris: mark@monitor.designacc.com
|
||||
Mark Kettenis: kettenis@phys.uva.nl
|
||||
Martin Mitchell: martin@debian.org
|
||||
Marty Leisner: leisner@sdsp.mc.xerox.com
|
||||
Masami Takikawa: takikawm@CS.ORST.EDU
|
||||
Matthew S. Levine: mslevine@theory.lcs.mit.edu
|
||||
Matthew Swift: swift@alum.mit.edu
|
||||
Matthias Urlichs: smurf@noris.de
|
||||
Michiel Bacchiani: bacchian@raven.bu.edu
|
||||
Michael ???:michael@roka.net
|
||||
Michael Veksler: mveksler@techunix.technion.ac.il
|
||||
Michael Stone: mstone@debian.org
|
||||
Miles Bader: miles@gnu.ai.mit.edu
|
||||
Noel Cragg: noel@red-bean.com
|
||||
Olav Morkrid: olav@funcom.com
|
||||
Per Kristian Hove: perhov@math.ntnu.no
|
||||
Peter Eriksson: peter@ifm.liu.se
|
||||
Peter Moulder: reiter@netspace.net.au
|
||||
Peter Samuelson: psamuels@sampo.creighton.edu
|
||||
Paul Eggert: eggert@twinsun.com
|
||||
Philippe De Muyter: phdm@macqel.be
|
||||
Rainer Orth: ro@TechFak.Uni-Bielefeld.DE
|
||||
Richard Braakman: dark@xs4all.nl
|
||||
Ross Ridge: rridge@calum.csclub.uwaterloo.ca
|
||||
Sami Farin: sfarin@ratol.fi
|
||||
Santiago Vila Doncel: sanvila@unex.es
|
||||
Scott Lurndal: slurn@griffin.engr.sgi.com
|
||||
Stuart Kemp: skemp@peter.bmc.com
|
||||
Thomas Bushnell, n/BSG: thomas@gnu.ai.mit.edu
|
||||
Ton Hospel: thospel@mail.dma.be
|
||||
Torbjorn Lindgren: tl@funcom.no
|
||||
Torsten Landschoff: torsten@pclab.ifg.uni-kiel.de
|
||||
Tony Leneis: tony@plaza.ds.adp.com
|
||||
Ulrich Drepper: drepper@cygnus.com
|
||||
Vin Shelton: acs@alumni.princeton.edu
|
||||
Volker Borchert: bt@teknon.de
|
||||
Wayne Stewart: wstewa@atl.com
|
||||
Wichert Akkerman: wichert@cistron.nl
|
||||
William Bader: william@nscs.fast.net
|
||||
|
||||
@@ -59,13 +59,17 @@ PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
DF_PROG = @DF_PROG@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
@@ -82,7 +86,6 @@ INTLOBJS = @INTLOBJS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
MVDIR_PROG = @MVDIR_PROG@
|
||||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
POFILES = @POFILES@
|
||||
@@ -93,6 +96,7 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
install_sh = @install_sh@
|
||||
l = @l@
|
||||
|
||||
|
||||
@@ -215,7 +219,7 @@ install-info-am: $(INFO_DEPS)
|
||||
@list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
d=$(srcdir); \
|
||||
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||
for ifile in `CDPATH=: && cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||
if test -f $$d/$$ifile; then \
|
||||
echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \
|
||||
$(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \
|
||||
@@ -236,9 +240,8 @@ uninstall-info:
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
d=$(srcdir); \
|
||||
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $$d/$$file"; \
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) --remove $$d/$$file; \
|
||||
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \
|
||||
done; \
|
||||
else :; fi
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@@ -254,7 +257,7 @@ dist-info: $(INFO_DEPS)
|
||||
list='$(INFO_DEPS)'; \
|
||||
for base in $$list; do \
|
||||
d=$(srcdir); \
|
||||
for file in `cd $$d && eval echo $$base*`; do \
|
||||
for file in `CDPATH=: && cd $$d && eval echo $$base*`; do \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
@@ -267,7 +270,7 @@ mostlyclean-aminfo:
|
||||
fileutils.kys fileutils.ps fileutils.log fileutils.pg \
|
||||
fileutils.toc fileutils.tp fileutils.tps fileutils.vr \
|
||||
fileutils.vrs fileutils.op fileutils.tr fileutils.cv \
|
||||
fileutils.cn
|
||||
fileutils.cn fileutils.cm fileutils.ov
|
||||
|
||||
clean-aminfo:
|
||||
|
||||
@@ -287,15 +290,10 @@ TAGS:
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
here=`cd $(top_builddir) && pwd`; \
|
||||
top_distdir=`cd $(top_distdir) && pwd`; \
|
||||
distdir=`cd $(distdir) && pwd`; \
|
||||
cd $(top_srcdir) \
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits doc/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@@ -340,6 +338,7 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
@@ -114,7 +114,7 @@ numerically or literally. All these strings specify the same calendar date:
|
||||
|
||||
@example
|
||||
1970-09-17 # ISO 8601.
|
||||
70-9-17 # This century assumed by default.
|
||||
70-9-17 # Assume 19xx for 69 through 99, 20xx for 00 through 68.
|
||||
70-09-17 # Leading zeros are ignored.
|
||||
9/17/72 # Common U.S. writing.
|
||||
24 September 1972
|
||||
@@ -141,8 +141,9 @@ For numeric months, the ISO 8601 format
|
||||
@samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is
|
||||
any positive number, @var{month} is a number between 01 and 12, and
|
||||
@var{day} is a number between 01 and 31. A leading zero must be present
|
||||
if a number is less than ten. If @var{year} is less than 100, then 1900
|
||||
is added to it to force a date in this century. The construct
|
||||
if a number is less than ten. If @var{year} is 68 or smaller, then 2000
|
||||
is added to it; otherwise, if @var{year} is less than 100,
|
||||
then 1900 is added to it. The construct
|
||||
@samp{@var{month}/@var{day}/@var{year}}, popular in the United States,
|
||||
is accepted. Also @samp{@var{month}/@var{day}}, omitting the year.
|
||||
|
||||
|
||||
@@ -366,15 +366,21 @@ pipeline.
|
||||
@section @code{false}: Do nothing, unsuccessfully
|
||||
|
||||
@pindex false
|
||||
|
||||
@cindex exit status of @code{true}
|
||||
@cindex do nothing, unsuccessfully
|
||||
@cindex failure exit status
|
||||
@cindex exit status of @code{false}
|
||||
|
||||
@code{false} does nothing except return an exit status of 1, meaning
|
||||
@dfn{failure}. It can be used as a place holder in shell scripts
|
||||
where an unsuccessful command is needed.
|
||||
|
||||
Any arguments are ignored, except for a lone @samp{--help} or
|
||||
@samp{--version} (@pxref{Common options}).
|
||||
@code{false} ignores @emph{all} command line arguments, even @samp{--help}
|
||||
and @samp{--version}, since to do otherwise would change expected
|
||||
behavior that some programmers may be relying on.
|
||||
|
||||
This version of @code{false} is implemented as a C program, and is thus
|
||||
more secure and faster than a shell script implementation, and may safely
|
||||
be used as a dummy shell for the purpose of disabling accounts.
|
||||
|
||||
|
||||
@node true invocation
|
||||
@@ -384,15 +390,20 @@ Any arguments are ignored, except for a lone @samp{--help} or
|
||||
@cindex do nothing, successfully
|
||||
@cindex no-op
|
||||
@cindex successful exit
|
||||
|
||||
@cindex exit status of @code{true}
|
||||
|
||||
@code{true} does nothing except return an exit status of 0, meaning
|
||||
@dfn{success}. It can be used as a place holder in shell scripts
|
||||
where a successful command is needed, although the shell built-in
|
||||
command @code{:} (colon) may be faster.
|
||||
command @code{:} (colon) does the same thing faster.
|
||||
|
||||
Any arguments are ignored, except for a lone @samp{--help} or
|
||||
@samp{--version} (@pxref{Common options}).
|
||||
@code{true} ignores @emph{all} command line arguments, even @samp{--help}
|
||||
and @samp{--version}, since to do otherwise would change expected
|
||||
behavior that some programmers may be relying on.
|
||||
|
||||
This version of @code{true} is implemented as a C program, and is thus
|
||||
more secure and faster than a shell script implementation, and may safely
|
||||
be used as a dummy shell for the purpose of disabling accounts.
|
||||
|
||||
|
||||
@node test invocation
|
||||
@@ -1165,7 +1176,7 @@ Print all current settings in human-readable form. This option may not
|
||||
be used in combination with any line settings.
|
||||
|
||||
@item -F @var{device}
|
||||
@itemx --file @var{device}
|
||||
@itemx --file=@var{device}
|
||||
@opindex -F
|
||||
@opindex --file
|
||||
Set the line opened by the filename specified in @var{device} instead of
|
||||
@@ -3030,7 +3041,7 @@ the values of the command line arguments.
|
||||
Synopsis:
|
||||
|
||||
@example
|
||||
sleep [@var{number}[smhd]]@dots{}
|
||||
sleep @var{number}[smhd]@dots{}
|
||||
@end example
|
||||
|
||||
@cindex time units
|
||||
@@ -3083,6 +3094,23 @@ numbers from standard input, delimited by newlines, tabs, or spaces.
|
||||
The only options are @samp{--help} and @samp{--version}. @xref{Common
|
||||
options}.
|
||||
|
||||
The algorithm it uses is not very sophisticated, so for some inputs
|
||||
@code{factor} runs for a long time. The hardest numbers to factor are
|
||||
the products of large primes. Factoring the square of the largest 32-bit
|
||||
prime number takes over 10 minutes of CPU time on a 400MHz Pentium II.
|
||||
|
||||
@example
|
||||
$ factor `echo '4294967291^2'|bc`
|
||||
18446744030759878681: 4294967291 4294967291
|
||||
@end example
|
||||
|
||||
In contrast, @code{factor} factors the largest 64-bit number in just
|
||||
over a tenth of a second:
|
||||
|
||||
@example
|
||||
$ factor `echo '2^64-1'|bc`
|
||||
18446744073709551615: 3 5 17 257 641 65537 6700417
|
||||
@end example
|
||||
|
||||
@node seq invocation
|
||||
@section @code{seq}: Print numeric sequences
|
||||
|
||||
644
doc/texinfo.tex
644
doc/texinfo.tex
@@ -3,7 +3,7 @@
|
||||
% Load plain if necessary, i.e., if running under initex.
|
||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||
%
|
||||
\def\texinfoversion{1999-04-25.15}%
|
||||
\def\texinfoversion{1999-09-25.10}
|
||||
%
|
||||
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
||||
% Free Software Foundation, Inc.
|
||||
@@ -29,15 +29,15 @@
|
||||
%
|
||||
% Please try the latest version of texinfo.tex before submitting bug
|
||||
% reports; you can get the latest version from:
|
||||
% ftp://ftp.gnu.org/pub/gnu/texinfo.tex
|
||||
% ftp://ftp.gnu.org/gnu/texinfo.tex
|
||||
% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
|
||||
% ftp://tug.org/tex/texinfo.tex
|
||||
% ftp://ctan.org/macros/texinfo/texinfo.tex
|
||||
% (and all CTAN mirrors, finger ctan@ctan.org for a list).
|
||||
% ftp://texinfo.org/tex/texinfo.tex
|
||||
% ftp://us.ctan.org/macros/texinfo/texinfo.tex
|
||||
% (and all CTAN mirrors, finger ctan@us.ctan.org for a list).
|
||||
% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
|
||||
% The texinfo.tex in any given Texinfo distribution could well be out
|
||||
% of date, so if that's what you're using, please check.
|
||||
% There is a small home page for Texinfo at http://texinfo.org/.
|
||||
% Texinfo has a small home page at http://texinfo.org/.
|
||||
%
|
||||
% Send bug reports to bug-texinfo@gnu.org. Please include including a
|
||||
% complete document in each bug report with which we can reproduce the
|
||||
@@ -86,14 +86,6 @@
|
||||
% For @tex, we can use \tabalign.
|
||||
\let\+ = \relax
|
||||
|
||||
% Get ready for pdf.
|
||||
\newif\ifpdf
|
||||
\ifx\pdfoutput\undefined\else
|
||||
\input pdfcolor
|
||||
\pdfoutput=1
|
||||
\pdftrue
|
||||
\fi
|
||||
|
||||
\message{Basics,}
|
||||
\chardef\other=12
|
||||
|
||||
@@ -251,7 +243,7 @@
|
||||
\unvbox\footlinebox
|
||||
\fi
|
||||
%
|
||||
\ifpdf\pdfmkdest{\the\pageno}\fi
|
||||
\ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
|
||||
%
|
||||
\ifcropmarks
|
||||
\egroup % end of \vbox\bgroup
|
||||
@@ -607,36 +599,42 @@ where each line of input produces a line of output.}
|
||||
%}}
|
||||
|
||||
\def\needx#1{%
|
||||
% Go into vertical mode, so we don't make a big box in the middle of a
|
||||
% Ensure vertical mode, so we don't make a big box in the middle of a
|
||||
% paragraph.
|
||||
\par
|
||||
%
|
||||
% Don't add any leading before our big empty box, but allow a page
|
||||
% break, since the best break might be right here.
|
||||
\allowbreak
|
||||
\nointerlineskip
|
||||
\vtop to #1\mil{\vfil}%
|
||||
%
|
||||
% TeX does not even consider page breaks if a penalty added to the
|
||||
% main vertical list is 10000 or more. But in order to see if the
|
||||
% empty box we just added fits on the page, we must make it consider
|
||||
% page breaks. On the other hand, we don't want to actually break the
|
||||
% page after the empty box. So we use a penalty of 9999.
|
||||
%
|
||||
% There is an extremely small chance that TeX will actually break the
|
||||
% page at this \penalty, if there are no other feasible breakpoints in
|
||||
% sight. (If the user is using lots of big @group commands, which
|
||||
% almost-but-not-quite fill up a page, TeX will have a hard time doing
|
||||
% good page breaking, for example.) However, I could not construct an
|
||||
% example where a page broke at this \penalty; if it happens in a real
|
||||
% document, then we can reconsider our strategy.
|
||||
\penalty9999
|
||||
%
|
||||
% Back up by the size of the box, whether we did a page break or not.
|
||||
\kern -#1\mil
|
||||
%
|
||||
% Do not allow a page break right after this kern.
|
||||
\nobreak
|
||||
% If the @need value is less than one line space, it's useless.
|
||||
\dimen0 = #1\mil
|
||||
\dimen2 = \ht\strutbox
|
||||
\advance\dimen2 by \dp\strutbox
|
||||
\ifdim\dimen0 > \dimen2
|
||||
%
|
||||
% Do a \strut just to make the height of this box be normal, so the
|
||||
% normal leading is inserted relative to the preceding line.
|
||||
% And a page break here is fine.
|
||||
\vtop to #1\mil{\strut\vfil}%
|
||||
%
|
||||
% TeX does not even consider page breaks if a penalty added to the
|
||||
% main vertical list is 10000 or more. But in order to see if the
|
||||
% empty box we just added fits on the page, we must make it consider
|
||||
% page breaks. On the other hand, we don't want to actually break the
|
||||
% page after the empty box. So we use a penalty of 9999.
|
||||
%
|
||||
% There is an extremely small chance that TeX will actually break the
|
||||
% page at this \penalty, if there are no other feasible breakpoints in
|
||||
% sight. (If the user is using lots of big @group commands, which
|
||||
% almost-but-not-quite fill up a page, TeX will have a hard time doing
|
||||
% good page breaking, for example.) However, I could not construct an
|
||||
% example where a page broke at this \penalty; if it happens in a real
|
||||
% document, then we can reconsider our strategy.
|
||||
\penalty9999
|
||||
%
|
||||
% Back up by the size of the box, whether we did a page break or not.
|
||||
\kern -#1\mil
|
||||
%
|
||||
% Do not allow a page break right after this kern.
|
||||
\nobreak
|
||||
\fi
|
||||
}
|
||||
|
||||
% @br forces paragraph break
|
||||
@@ -852,123 +850,175 @@ where each line of input produces a line of output.}
|
||||
|
||||
\message{pdf,}
|
||||
% adobe `portable' document format
|
||||
|
||||
\newcount\tempnum
|
||||
\newcount\lnkcount
|
||||
\newtoks\filename
|
||||
\newcount\filenamelength
|
||||
\newcount\pgn
|
||||
\newtoks\toksA
|
||||
\newtoks\toksB
|
||||
\newtoks\toksC
|
||||
\newtoks\toksD
|
||||
\newbox\boxA
|
||||
\newcount\countA
|
||||
\newif\ifpdf
|
||||
\newif\ifpdfmakepagedest
|
||||
|
||||
\ifpdf
|
||||
\def\pdfmkdest#1{\pdfdest name{#1@} xyz}
|
||||
\def\pdfmkpgn#1{#1@}
|
||||
|
||||
% Adding outlines to PDF; macros for calculating structure of outlines
|
||||
% come from Petr Olsak
|
||||
\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
|
||||
\else \csname#1\endcsname \fi}
|
||||
\def\advancenumber#1{\tempnum=\expnumber{#1}\relax
|
||||
\advance\tempnum by1
|
||||
\expandafter\xdef\csname#1\endcsname{\the\tempnum}}
|
||||
\def\pdfmakeoutlines{{%
|
||||
\openin 1 \jobname.toc
|
||||
\ifeof 1\else\bgroup
|
||||
\closein 1
|
||||
\def\code##1{##1}
|
||||
\def\file##1{##1}
|
||||
\def\TeX##1{TeX}
|
||||
\def\tt{}
|
||||
\def\char{char}
|
||||
\def\samp##1{##1}
|
||||
\def\kbd##1{##1}
|
||||
\def\key##1{##1}
|
||||
\def\rawbackslashxx{\string\\}
|
||||
\def\chapentry ##1##2##3{}
|
||||
\def\unnumbchapentry ##1##2{}
|
||||
\def\secentry ##1##2##3##4{\advancenumber{chap##2}}
|
||||
\def\unnumbsecentry ##1##2{}
|
||||
\def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
|
||||
\def\unnumbsubsecentry ##1##2{}
|
||||
\def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
|
||||
\def\unnumbsubsubsecentry ##1##2{}
|
||||
\input \jobname.toc
|
||||
\def\chapentry ##1##2##3{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
|
||||
\def\unnumbchapentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\def\secentry ##1##2##3##4{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
|
||||
\def\unnumbsecentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\def\subsecentry ##1##2##3##4##5{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
|
||||
\def\unnumbsubsecentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\def\subsubsecentry ##1##2##3##4##5##6{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
|
||||
\def\unnumbsubsubsecentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\input \jobname.toc
|
||||
\egroup\fi
|
||||
}}
|
||||
\pdfmakeoutlines
|
||||
|
||||
\def\makelinks #1,{%
|
||||
\def\params{#1}\def\E{END}%
|
||||
\ifx\params\E
|
||||
\let\nextmakelinks=\relax
|
||||
\else
|
||||
\let\nextmakelinks=\makelinks
|
||||
\ifnum\lnkcount>0,\fi
|
||||
\picknum{#1}%
|
||||
\Blue\pdfannotlink attr{/Border [0 0 0]}
|
||||
goto name{\pdfmkpgn{\the\pgn}}%
|
||||
#1%
|
||||
\advance\lnkcount by 1%
|
||||
\Black\pdfendlink
|
||||
\fi
|
||||
\nextmakelinks
|
||||
}
|
||||
|
||||
\def\picknum#1{\expandafter\pn#1}
|
||||
\def\pn#1{%
|
||||
\def\p{#1}%
|
||||
\ifx\p\lbrace
|
||||
\let\nextpn=\ppn
|
||||
\else
|
||||
\let\nextpn=\ppnn
|
||||
\def\first{#1}
|
||||
\fi
|
||||
\nextpn
|
||||
}
|
||||
\def\ppn#1{\pgn=#1\gobble}
|
||||
\def\ppnn{\pgn=\first}
|
||||
\def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
|
||||
|
||||
\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
|
||||
\def\skipspaces#1{\def\PP{#1}\def\D{|}%
|
||||
\ifx\PP\D\let\nextsp\relax
|
||||
\else\let\nextsp\skipspaces
|
||||
\ifx\p\space\else\addtokens{\filename}{\PP}%
|
||||
\advance\filenamelength by 1
|
||||
\fi
|
||||
\fi
|
||||
\nextsp}
|
||||
\def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
|
||||
|
||||
\def\pdflink#1{%
|
||||
\leavevmode\Red
|
||||
\begingroup
|
||||
\normalturnoffactive\def\@{@}%
|
||||
\pdfannotlink
|
||||
attr{/Border [0 0 0]}%
|
||||
user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
|
||||
\endgroup
|
||||
}
|
||||
|
||||
\ifx\pdfoutput\undefined
|
||||
\pdffalse
|
||||
\let\pdfmkdest = \gobble
|
||||
\let\pdfurl = \gobble
|
||||
\let\endlink = \relax
|
||||
\let\linkcolor = \relax
|
||||
\let\pdfmakeoutlines = \relax
|
||||
\else
|
||||
\let\pdflink = \gobble
|
||||
\fi % end \ifpdf
|
||||
\pdftrue
|
||||
\pdfoutput = 1
|
||||
\input pdfcolor
|
||||
\def\dopdfimage#1#2#3{%
|
||||
\def\imagewidth{#2}%
|
||||
\def\imageheight{#3}%
|
||||
\ifnum\pdftexversion < 14
|
||||
\pdfimage
|
||||
\else
|
||||
\pdfximage
|
||||
\fi
|
||||
\ifx\empty\imagewidth\else width \imagewidth \fi
|
||||
\ifx\empty\imageheight\else height \imageheight \fi
|
||||
{#1.pdf}%
|
||||
\ifnum\pdftexversion < 14 \else
|
||||
\pdfrefximage \pdflastximage
|
||||
\fi}
|
||||
\def\pdfmkdest#1{\pdfdest name{#1@} xyz}
|
||||
\def\pdfmkpgn#1{#1@}
|
||||
\let\linkcolor = \Cyan
|
||||
\def\endlink{\Black\pdfendlink}
|
||||
% Adding outlines to PDF; macros for calculating structure of outlines
|
||||
% come from Petr Olsak
|
||||
\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
|
||||
\else \csname#1\endcsname \fi}
|
||||
\def\advancenumber#1{\tempnum=\expnumber{#1}\relax
|
||||
\advance\tempnum by1
|
||||
\expandafter\xdef\csname#1\endcsname{\the\tempnum}}
|
||||
\def\pdfmakeoutlines{{%
|
||||
\openin 1 \jobname.toc
|
||||
\ifeof 1\else\bgroup
|
||||
\closein 1
|
||||
\indexnofonts
|
||||
\def\tt{}
|
||||
% thanh's hack / proper braces in bookmarks
|
||||
\edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
|
||||
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
|
||||
%
|
||||
\def\chapentry ##1##2##3{}
|
||||
\def\unnumbchapentry ##1##2{}
|
||||
\def\secentry ##1##2##3##4{\advancenumber{chap##2}}
|
||||
\def\unnumbsecentry ##1##2{}
|
||||
\def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
|
||||
\def\unnumbsubsecentry ##1##2{}
|
||||
\def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
|
||||
\def\unnumbsubsubsecentry ##1##2{}
|
||||
\input \jobname.toc
|
||||
\def\chapentry ##1##2##3{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
|
||||
\def\unnumbchapentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\def\secentry ##1##2##3##4{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
|
||||
\def\unnumbsecentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\def\subsecentry ##1##2##3##4##5{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
|
||||
\def\unnumbsubsecentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\def\subsubsecentry ##1##2##3##4##5##6{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
|
||||
\def\unnumbsubsubsecentry ##1##2{%
|
||||
\pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
|
||||
\input \jobname.toc
|
||||
\egroup\fi
|
||||
}}
|
||||
\def\makelinks #1,{%
|
||||
\def\params{#1}\def\E{END}%
|
||||
\ifx\params\E
|
||||
\let\nextmakelinks=\relax
|
||||
\else
|
||||
\let\nextmakelinks=\makelinks
|
||||
\ifnum\lnkcount>0,\fi
|
||||
\picknum{#1}%
|
||||
\startlink attr{/Border [0 0 0]}
|
||||
goto name{\pdfmkpgn{\the\pgn}}%
|
||||
\linkcolor #1%
|
||||
\advance\lnkcount by 1%
|
||||
\endlink
|
||||
\fi
|
||||
\nextmakelinks
|
||||
}
|
||||
\def\picknum#1{\expandafter\pn#1}
|
||||
\def\pn#1{%
|
||||
\def\p{#1}%
|
||||
\ifx\p\lbrace
|
||||
\let\nextpn=\ppn
|
||||
\else
|
||||
\let\nextpn=\ppnn
|
||||
\def\first{#1}
|
||||
\fi
|
||||
\nextpn
|
||||
}
|
||||
\def\ppn#1{\pgn=#1\gobble}
|
||||
\def\ppnn{\pgn=\first}
|
||||
\def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
|
||||
\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
|
||||
\def\skipspaces#1{\def\PP{#1}\def\D{|}%
|
||||
\ifx\PP\D\let\nextsp\relax
|
||||
\else\let\nextsp\skipspaces
|
||||
\ifx\p\space\else\addtokens{\filename}{\PP}%
|
||||
\advance\filenamelength by 1
|
||||
\fi
|
||||
\fi
|
||||
\nextsp}
|
||||
\def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
|
||||
\ifnum\pdftexversion < 14
|
||||
\let \startlink \pdfannotlink
|
||||
\else
|
||||
\let \startlink \pdfstartlink
|
||||
\fi
|
||||
\def\pdfurl#1{%
|
||||
\begingroup
|
||||
\normalturnoffactive\def\@{@}%
|
||||
\leavevmode\Red
|
||||
\startlink attr{/Border [0 0 0]}%
|
||||
user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
|
||||
% #1
|
||||
\endgroup}
|
||||
\def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
|
||||
\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
|
||||
\def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
|
||||
\def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
|
||||
\def\maketoks{%
|
||||
\expandafter\poptoks\the\toksA|ENDTOKS|
|
||||
\ifx\first0\adn0
|
||||
\else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
|
||||
\else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
|
||||
\else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
|
||||
\else
|
||||
\ifnum0=\countA\else\makelink\fi
|
||||
\ifx\first.\let\next=\done\else
|
||||
\let\next=\maketoks
|
||||
\addtokens{\toksB}{\the\toksD}
|
||||
\ifx\first,\addtokens{\toksB}{\space}\fi
|
||||
\fi
|
||||
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
|
||||
\next}
|
||||
\def\makelink{\addtokens{\toksB}%
|
||||
{\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
|
||||
\def\pdflink#1{%
|
||||
\startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
|
||||
\linkcolor #1\endlink}
|
||||
\def\mkpgn#1{#1@}
|
||||
\def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
|
||||
\fi % \ifx\pdfoutput
|
||||
|
||||
|
||||
\message{fonts,}
|
||||
% Font-change commands.
|
||||
@@ -1039,23 +1089,17 @@ where each line of input produces a line of output.}
|
||||
\setfont\deftt\ttshape{10}{\magstep1}
|
||||
\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
|
||||
|
||||
% Fonts for indices and small examples (9pt).
|
||||
% We actually use the slanted font rather than the italic,
|
||||
% because texinfo normally uses the slanted fonts for that.
|
||||
% Do not make many font distinctions in general in the index, since they
|
||||
% aren't very useful.
|
||||
\setfont\ninett\ttshape{9}{1000}
|
||||
\setfont\ninettsl\ttslshape{10}{900}
|
||||
\setfont\indrm\rmshape{9}{1000}
|
||||
\setfont\indit\itshape{9}{1000}
|
||||
\setfont\indsl\slshape{9}{1000}
|
||||
\let\indtt=\ninett
|
||||
\let\indttsl=\ninettsl
|
||||
\let\indsf=\indrm
|
||||
\let\indbf=\indrm
|
||||
\setfont\indsc\scshape{10}{900}
|
||||
\font\indi=cmmi9
|
||||
\font\indsy=cmsy9
|
||||
% Fonts for indices, footnotes, small examples (9pt).
|
||||
\setfont\smallrm\rmshape{9}{1000}
|
||||
\setfont\smalltt\ttshape{9}{1000}
|
||||
\setfont\smallbf\bfshape{10}{900}
|
||||
\setfont\smallit\itshape{9}{1000}
|
||||
\setfont\smallsl\slshape{9}{1000}
|
||||
\setfont\smallsf\sfshape{9}{1000}
|
||||
\setfont\smallsc\scshape{10}{900}
|
||||
\setfont\smallttsl\ttslshape{10}{900}
|
||||
\font\smalli=cmmi9
|
||||
\font\smallsy=cmsy9
|
||||
|
||||
% Fonts for title page:
|
||||
\setfont\titlerm\rmbshape{12}{\magstep3}
|
||||
@@ -1169,11 +1213,12 @@ where each line of input produces a line of output.}
|
||||
\let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
|
||||
\resetmathfonts \setleading{15pt}}
|
||||
\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
|
||||
\def\indexfonts{%
|
||||
\let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
|
||||
\let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
|
||||
\let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
|
||||
\resetmathfonts \setleading{12pt}}
|
||||
\def\smallfonts{%
|
||||
\let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
|
||||
\let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
|
||||
\let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
|
||||
\let\tenttsl=\smallttsl
|
||||
\resetmathfonts \setleading{11pt}}
|
||||
|
||||
% Set up the default fonts, so we can use them for creating boxes.
|
||||
%
|
||||
@@ -1222,9 +1267,9 @@ where each line of input produces a line of output.}
|
||||
}
|
||||
\let\ttfont=\t
|
||||
\def\samp#1{`\tclose{#1}'\null}
|
||||
\setfont\smallrm\rmshape{8}{1000}
|
||||
\font\smallsy=cmsy9
|
||||
\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
|
||||
\setfont\keyrm\rmshape{8}{1000}
|
||||
\font\keysy=cmsy9
|
||||
\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
|
||||
\raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
|
||||
\vbox{\hrule\kern-0.4pt
|
||||
\hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
|
||||
@@ -1335,8 +1380,9 @@ where each line of input produces a line of output.}
|
||||
% a hypertex \special here.
|
||||
%
|
||||
\def\uref#1{\douref #1,,,\finish}
|
||||
\def\douref#1,#2,#3,#4\finish{%
|
||||
\pdflink{#1}%
|
||||
\def\douref#1,#2,#3,#4\finish{\begingroup
|
||||
\unsepspaces
|
||||
\pdfurl{#1}%
|
||||
\setbox0 = \hbox{\ignorespaces #3}%
|
||||
\ifdim\wd0 > 0pt
|
||||
\unhbox0 % third arg given, show only that
|
||||
@@ -1344,19 +1390,16 @@ where each line of input produces a line of output.}
|
||||
\setbox0 = \hbox{\ignorespaces #2}%
|
||||
\ifdim\wd0 > 0pt
|
||||
\ifpdf
|
||||
\unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
|
||||
\else
|
||||
\unhbox0 % PDF: 2nd arg given, show only it
|
||||
\else
|
||||
\unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
|
||||
\fi
|
||||
\else
|
||||
\code{#1}% only url given, so show it
|
||||
\fi
|
||||
\fi
|
||||
%
|
||||
\ifpdf
|
||||
\Black\pdfendlink
|
||||
\fi
|
||||
}
|
||||
\endlink
|
||||
\endgroup}
|
||||
|
||||
% rms does not like angle brackets --karl, 17may97.
|
||||
% So now @email is just like @uref, unless we are pdf.
|
||||
@@ -1364,12 +1407,13 @@ where each line of input produces a line of output.}
|
||||
%\def\email#1{\angleleft{\tt #1}\angleright}
|
||||
\ifpdf
|
||||
\def\email#1{\doemail#1,,\finish}
|
||||
\def\doemail#1,#2,#3\finish{%
|
||||
\pdflink{mailto:#1}%
|
||||
\def\doemail#1,#2,#3\finish{\begingroup
|
||||
\unsepspaces
|
||||
\pdfurl{mailto:#1}%
|
||||
\setbox0 = \hbox{\ignorespaces #2}%
|
||||
\ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
|
||||
\Black\pdfendlink
|
||||
}
|
||||
\endlink
|
||||
\endgroup}
|
||||
\else
|
||||
\let\email=\uref
|
||||
\fi
|
||||
@@ -1491,6 +1535,8 @@ where each line of input produces a line of output.}
|
||||
\global\let\shortcontents = \relax
|
||||
\fi
|
||||
%
|
||||
\ifpdf \pdfmakepagedesttrue \fi
|
||||
%
|
||||
\HEADINGSon
|
||||
}
|
||||
|
||||
@@ -2141,15 +2187,18 @@ where each line of input produces a line of output.}
|
||||
% If so, do nothing. If not, give it an appropriate dimension based on
|
||||
% current baselineskip.
|
||||
\ifdim\multitablelinespace=0pt
|
||||
\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
|
||||
\global\advance\multitablelinespace by-\ht0
|
||||
%% strut to put in table in case some entry doesn't have descenders,
|
||||
%% to keep lines equally spaced
|
||||
\let\multistrut = \strut
|
||||
\else
|
||||
%% FIXME: what is \box0 supposed to be?
|
||||
\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
|
||||
width0pt\relax} \fi
|
||||
%% Test to see if parskip is larger than space between lines of
|
||||
%% table. If not, do nothing.
|
||||
%% If so, set to same dimension as multitablelinespace.
|
||||
\else
|
||||
\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
|
||||
width0pt\relax} \fi
|
||||
\ifdim\multitableparskip>\multitablelinespace
|
||||
\global\multitableparskip=\multitablelinespace
|
||||
\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
|
||||
@@ -2212,6 +2261,7 @@ width0pt\relax} \fi
|
||||
\let\deftypefn = \relax
|
||||
\let\deftypefun = \relax
|
||||
\let\deftypeivar = \relax
|
||||
\let\deftypeop = \relax
|
||||
\let\deftypevar = \relax
|
||||
\let\deftypevr = \relax
|
||||
\let\defun = \relax
|
||||
@@ -2355,14 +2405,13 @@ width0pt\relax} \fi
|
||||
% stuff compared to the main input.
|
||||
%
|
||||
\nullfont
|
||||
\let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont
|
||||
\let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont
|
||||
\let\tensf = \nullfont
|
||||
% Similarly for index fonts (mostly for their use in
|
||||
% smallexample)
|
||||
\let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont
|
||||
\let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont
|
||||
\let\indsf = \nullfont
|
||||
\let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
|
||||
\let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
|
||||
\let\tensf=\nullfont
|
||||
% Similarly for index fonts (mostly for their use in smallexample).
|
||||
\let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
|
||||
\let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
|
||||
\let\smallsf=\nullfont
|
||||
%
|
||||
% Don't complain when characters are missing from the fonts.
|
||||
\tracinglostchars = 0
|
||||
@@ -2626,7 +2675,7 @@ width0pt\relax} \fi
|
||||
\def\@{@}% will be @@ when we switch to @ as escape char.
|
||||
% Need these in case \tex is in effect and \{ is a \delimiter again.
|
||||
% But can't use \lbracecmd and \rbracecmd because texindex assumes
|
||||
% braces and backslashes are used only as delimiters.
|
||||
% braces and backslashes are used only as delimiters.
|
||||
\let\{ = \mylbrace
|
||||
\let\} = \myrbrace
|
||||
\def\_{{\realbackslash _}}%
|
||||
@@ -2739,6 +2788,7 @@ width0pt\relax} \fi
|
||||
\let\url=\indexdummyfont
|
||||
\let\uref=\indexdummyfont
|
||||
\let\env=\indexdummyfont
|
||||
\let\acronym=\indexdummyfont
|
||||
\let\command=\indexdummyfont
|
||||
\let\option=\indexdummyfont
|
||||
\let\file=\indexdummyfont
|
||||
@@ -2892,7 +2942,7 @@ width0pt\relax} \fi
|
||||
\def\doprintindex#1{\begingroup
|
||||
\dobreak \chapheadingskip{10000}%
|
||||
%
|
||||
\indexfonts \rm
|
||||
\smallfonts \rm
|
||||
\tolerance = 9500
|
||||
\indexbreaks
|
||||
%
|
||||
@@ -3019,7 +3069,11 @@ width0pt\relax} \fi
|
||||
% The `\ ' here is removed by the implicit \unskip that TeX does as
|
||||
% part of (the primitive) \par. Without it, a spurious underfull
|
||||
% \hbox ensues.
|
||||
\ #2% The page number ends the paragraph.
|
||||
\ifpdf
|
||||
\pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
|
||||
\else
|
||||
\ #2% The page number ends the paragraph.
|
||||
\fi
|
||||
\fi%
|
||||
\par
|
||||
\endgroup}
|
||||
@@ -3186,12 +3240,44 @@ width0pt\relax} \fi
|
||||
\newcount\subsubsecno \subsubsecno=0
|
||||
|
||||
% This counter is funny since it counts through charcodes of letters A, B, ...
|
||||
% The \the is necessary, despite appearances, because \appendixletter is
|
||||
% expanded while writing the .toc file. \char\appendixno is not
|
||||
% expandable, thus it is written literally, thus all appendixes come out
|
||||
% with the same letter (or @) in the toc without it.
|
||||
\newcount\appendixno \appendixno = `\@
|
||||
\def\appendixletter{\char\the\appendixno}
|
||||
% \def\appendixletter{\char\the\appendixno}
|
||||
% We do the following for the sake of pdftex, which needs the actual
|
||||
% letter in the expansion, not just typeset.
|
||||
\def\appendixletter{%
|
||||
\ifnum\appendixno=`A A%
|
||||
\else\ifnum\appendixno=`B B%
|
||||
\else\ifnum\appendixno=`C C%
|
||||
\else\ifnum\appendixno=`D D%
|
||||
\else\ifnum\appendixno=`E E%
|
||||
\else\ifnum\appendixno=`F F%
|
||||
\else\ifnum\appendixno=`G G%
|
||||
\else\ifnum\appendixno=`H H%
|
||||
\else\ifnum\appendixno=`I I%
|
||||
\else\ifnum\appendixno=`J J%
|
||||
\else\ifnum\appendixno=`K K%
|
||||
\else\ifnum\appendixno=`L L%
|
||||
\else\ifnum\appendixno=`M M%
|
||||
\else\ifnum\appendixno=`N N%
|
||||
\else\ifnum\appendixno=`O O%
|
||||
\else\ifnum\appendixno=`P P%
|
||||
\else\ifnum\appendixno=`Q Q%
|
||||
\else\ifnum\appendixno=`R R%
|
||||
\else\ifnum\appendixno=`S S%
|
||||
\else\ifnum\appendixno=`T T%
|
||||
\else\ifnum\appendixno=`U U%
|
||||
\else\ifnum\appendixno=`V V%
|
||||
\else\ifnum\appendixno=`W W%
|
||||
\else\ifnum\appendixno=`X X%
|
||||
\else\ifnum\appendixno=`Y Y%
|
||||
\else\ifnum\appendixno=`Z Z%
|
||||
% The \the is necessary, despite appearances, because \appendixletter is
|
||||
% expanded while writing the .toc file. \char\appendixno is not
|
||||
% expandable, thus it is written literally, thus all appendixes come out
|
||||
% with the same letter (or @) in the toc without it.
|
||||
\else\char\the\appendixno
|
||||
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
|
||||
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
|
||||
|
||||
% Each @chapter defines this as the name of the chapter.
|
||||
% page headings and footings can use it. @section does likewise.
|
||||
@@ -3725,6 +3811,7 @@ width0pt\relax} \fi
|
||||
\fi
|
||||
\vfill \eject
|
||||
\contentsalignmacro % in case @setchapternewpage odd is in effect
|
||||
\pdfmakeoutlines
|
||||
\endgroup
|
||||
\lastnegativepageno = \pageno
|
||||
\pageno = \savepageno
|
||||
@@ -3775,7 +3862,7 @@ width0pt\relax} \fi
|
||||
|
||||
% See comments in \dochapentry re vbox and related settings
|
||||
\def\shortchapentry#1#2#3{%
|
||||
\tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
|
||||
\tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
|
||||
}
|
||||
|
||||
% Typeset the label for a chapter or appendix for the short contents.
|
||||
@@ -3783,10 +3870,14 @@ width0pt\relax} \fi
|
||||
% We could simplify the code here by writing out an \appendixentry
|
||||
% command in the toc file for appendices, instead of using \chapentry
|
||||
% for both, but it doesn't seem worth it.
|
||||
\setbox0 = \hbox{\shortcontrm \putwordAppendix }
|
||||
\newdimen\shortappendixwidth \shortappendixwidth = \wd0
|
||||
|
||||
%
|
||||
\newdimen\shortappendixwidth
|
||||
%
|
||||
\def\shortchaplabel#1{%
|
||||
% Compute width of word "Appendix", may change with language.
|
||||
\setbox0 = \hbox{\shortcontrm \putwordAppendix}%
|
||||
\shortappendixwidth = \wd0
|
||||
%
|
||||
% We typeset #1 in a box of constant width, regardless of the text of
|
||||
% #1, so the chapter titles will come out aligned.
|
||||
\setbox0 = \hbox{#1}%
|
||||
@@ -3801,7 +3892,7 @@ width0pt\relax} \fi
|
||||
}
|
||||
|
||||
\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
|
||||
\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
|
||||
\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
|
||||
|
||||
% Sections.
|
||||
\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
|
||||
@@ -3828,24 +3919,24 @@ width0pt\relax} \fi
|
||||
\penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
|
||||
\begingroup
|
||||
\chapentryfonts
|
||||
\tocentry{#1}{\dopageno{#2}}%
|
||||
\tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
||||
\endgroup
|
||||
\nobreak\vskip .25\baselineskip plus.1\baselineskip
|
||||
}
|
||||
|
||||
\def\dosecentry#1#2{\begingroup
|
||||
\secentryfonts \leftskip=\tocindent
|
||||
\tocentry{#1}{\dopageno{#2}}%
|
||||
\tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
||||
\endgroup}
|
||||
|
||||
\def\dosubsecentry#1#2{\begingroup
|
||||
\subsecentryfonts \leftskip=2\tocindent
|
||||
\tocentry{#1}{\dopageno{#2}}%
|
||||
\tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
||||
\endgroup}
|
||||
|
||||
\def\dosubsubsecentry#1#2{\begingroup
|
||||
\subsubsecentryfonts \leftskip=3\tocindent
|
||||
\tocentry{#1}{\dopageno{#2}}%
|
||||
\tocentry{#1}{\dopageno\bgroup#2\egroup}%
|
||||
\endgroup}
|
||||
|
||||
% Final typesetting of a toc entry; we use the same \entry macro as for
|
||||
@@ -4123,7 +4214,7 @@ width0pt\relax} \fi
|
||||
\def\smalllispx{\begingroup
|
||||
\def\Esmalllisp{\nonfillfinish\endgroup}%
|
||||
\def\Esmallexample{\nonfillfinish\endgroup}%
|
||||
\indexfonts
|
||||
\smallfonts
|
||||
\lisp
|
||||
}
|
||||
|
||||
@@ -4139,7 +4230,7 @@ width0pt\relax} \fi
|
||||
%
|
||||
\def\smalldisplayx{\begingroup
|
||||
\def\Esmalldisplay{\nonfillfinish\endgroup}%
|
||||
\indexfonts \rm
|
||||
\smallfonts \rm
|
||||
\display
|
||||
}
|
||||
|
||||
@@ -4156,7 +4247,7 @@ width0pt\relax} \fi
|
||||
%
|
||||
\def\smallformatx{\begingroup
|
||||
\def\Esmallformat{\nonfillfinish\endgroup}%
|
||||
\indexfonts \rm
|
||||
\smallfonts \rm
|
||||
\format
|
||||
}
|
||||
|
||||
@@ -4326,23 +4417,39 @@ width0pt\relax} \fi
|
||||
\exdentamount=\defbodyindent
|
||||
\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
|
||||
|
||||
% @deftypemethod has an extra argument that nothing else does. Sigh.
|
||||
% Used for @deftypemethod and @deftypeivar.
|
||||
% #1 is the \E... control sequence to end the definition (which we define).
|
||||
% #2 is the \...x control sequence for consecutive fns (which we define).
|
||||
% #3 is the control sequence to call to resume processing.
|
||||
% #4, delimited by the space, is the class name.
|
||||
% #4, delimited by a space, is the class name.
|
||||
% #5 is the method's return type.
|
||||
%
|
||||
\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %
|
||||
\medbreak %
|
||||
% Define the end token that this defining construct specifies
|
||||
% so that it will exit this group.
|
||||
\def#1{\endgraf\endgroup\medbreak}%
|
||||
\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
|
||||
\parindent=0in
|
||||
\advance\leftskip by \defbodyindent
|
||||
\exdentamount=\defbodyindent
|
||||
\begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
|
||||
\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
|
||||
\medbreak
|
||||
\def#1{\endgraf\endgroup\medbreak}%
|
||||
\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
|
||||
\parindent=0in
|
||||
\advance\leftskip by \defbodyindent
|
||||
\exdentamount=\defbodyindent
|
||||
\begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
|
||||
|
||||
% Used for @deftypeop. The change from \deftypemethparsebody is an
|
||||
% extra argument at the beginning which is the `category', instead of it
|
||||
% being the hardwired string `Method' or `Instance Variable'. We have
|
||||
% to account for this both in the \...x definition and in parsing the
|
||||
% input at hand. Thus also need a control sequence (passed as #5) for
|
||||
% the \E... definition to assign the category name to.
|
||||
%
|
||||
\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
|
||||
\medbreak
|
||||
\def#1{\endgraf\endgroup\medbreak}%
|
||||
\def#2##1 ##2 ##3 {%
|
||||
\def#4{##1}%
|
||||
\begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
|
||||
\parindent=0in
|
||||
\advance\leftskip by \defbodyindent
|
||||
\exdentamount=\defbodyindent
|
||||
\begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
|
||||
|
||||
\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
|
||||
\medbreak %
|
||||
@@ -4558,13 +4665,29 @@ width0pt\relax} \fi
|
||||
\def\defop #1 {\def\defoptype{#1}%
|
||||
\defopparsebody\Edefop\defopx\defopheader\defoptype}
|
||||
%
|
||||
\def\defopheader #1#2#3{%
|
||||
\def\defopheader#1#2#3{%
|
||||
\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
|
||||
\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
|
||||
\defunargs {#3}\endgroup %
|
||||
}
|
||||
|
||||
% @deftypemethod CLASS RETURN-TYPE METHOD ARG...
|
||||
% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
|
||||
%
|
||||
\def\deftypeop #1 {\def\deftypeopcategory{#1}%
|
||||
\deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
|
||||
\deftypeopcategory}
|
||||
%
|
||||
% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
|
||||
\def\deftypeopheader#1#2#3#4{%
|
||||
\dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
|
||||
\begingroup
|
||||
\defname{\defheaderxcond#2\relax$$$#3}
|
||||
{\deftypeopcategory\ \putwordon\ \code{#1}}%
|
||||
\deftypefunargs{#4}%
|
||||
\endgroup
|
||||
}
|
||||
|
||||
% @deftypemethod CLASS TYPE METHOD ARG...
|
||||
%
|
||||
\def\deftypemethod{%
|
||||
\deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
|
||||
@@ -4713,6 +4836,7 @@ width0pt\relax} \fi
|
||||
\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
|
||||
\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
|
||||
\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
|
||||
\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
|
||||
\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
|
||||
\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
|
||||
\def\defunx#1 {\errmessage{@defunx in invalid context}}
|
||||
@@ -5000,7 +5124,14 @@ width0pt\relax} \fi
|
||||
|
||||
|
||||
% @alias.
|
||||
\def\alias#1=#2{\gdef#1{#2}}
|
||||
% We need some trickery to remove the optional spaces around the equal
|
||||
% sign. Just make them active and then expand them all to nothing.
|
||||
\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
|
||||
\def\aliasxxx #1{\aliasyyy#1\relax}
|
||||
\def\aliasyyy #1=#2\relax{\ignoreactivespaces
|
||||
\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
|
||||
\expandafter\noexpand\csname#2\endcsname}%
|
||||
\expandafter\endgroup\next}
|
||||
|
||||
|
||||
\message{cross references,}
|
||||
@@ -5048,20 +5179,10 @@ width0pt\relax} \fi
|
||||
|
||||
% @anchor{NAME} -- define xref target at arbitrary point.
|
||||
%
|
||||
{ \catcode`\@ = 11
|
||||
% From latex.ltx, to make @anchor truely invisible.
|
||||
\newdimen\@savsk
|
||||
\newcount\@savsf
|
||||
\gdef\@bsphack{\relax
|
||||
\ifhmode \@savsk\lastskip \@savsf\spacefactor \fi
|
||||
}
|
||||
\gdef\@esphack{\relax
|
||||
\ifhmode \spacefactor\@savsf
|
||||
\ifdim\@savsk>\z@ \ignorespaces \fi
|
||||
\fi
|
||||
}
|
||||
\gdef\anchor#1{\@bsphack \setref{#1}{Ynothing}\@esphack}
|
||||
}
|
||||
\newcount\savesfregister
|
||||
\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
|
||||
\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
|
||||
\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
|
||||
|
||||
% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
|
||||
% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have
|
||||
@@ -5071,7 +5192,7 @@ width0pt\relax} \fi
|
||||
%
|
||||
\def\setref#1#2{{%
|
||||
\indexdummies
|
||||
\ifpdf \pdfmkdest{#1}\fi
|
||||
\pdfmkdest{#1}%
|
||||
\dosetq{#1-title}{Ytitle}%
|
||||
\dosetq{#1-pg}{Ypagenumber}%
|
||||
\dosetq{#1-snt}{#2}%
|
||||
@@ -5086,6 +5207,7 @@ width0pt\relax} \fi
|
||||
\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
|
||||
\def\ref#1{\xrefX[#1,,,,,,,]}
|
||||
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
|
||||
\unsepspaces
|
||||
\def\printedmanual{\ignorespaces #5}%
|
||||
\def\printednodename{\ignorespaces #3}%
|
||||
\setbox1=\hbox{\printedmanual}%
|
||||
@@ -5123,13 +5245,13 @@ width0pt\relax} \fi
|
||||
\leavevmode
|
||||
\getfilename{#4}%
|
||||
\ifnum\filenamelength>0
|
||||
\pdfannotlink attr{/Border [0 0 0]}%
|
||||
\startlink attr{/Border [0 0 0]}%
|
||||
goto file{\the\filename.pdf} name{#1@}%
|
||||
\else
|
||||
\pdfannotlink attr{/Border [0 0 0]}%
|
||||
\startlink attr{/Border [0 0 0]}%
|
||||
goto name{#1@}%
|
||||
\fi
|
||||
\BlueGreen
|
||||
\linkcolor
|
||||
\fi
|
||||
%
|
||||
\ifdim \wd1 > 0pt
|
||||
@@ -5151,7 +5273,7 @@ width0pt\relax} \fi
|
||||
% page 3
|
||||
\turnoffactive \putwordpage\tie\refx{#1-pg}{}%
|
||||
\fi
|
||||
\ifpdf \Black\pdfendlink \fi
|
||||
\endlink
|
||||
\endgroup}
|
||||
|
||||
% \dosetq is the interface for calls from other macros
|
||||
@@ -5388,6 +5510,8 @@ width0pt\relax} \fi
|
||||
\xspaceskip\z@skip
|
||||
\parindent\defaultparindent
|
||||
%
|
||||
\smallfonts \rm
|
||||
%
|
||||
% Hang the footnote text off the number.
|
||||
\hang
|
||||
\textindent{\thisfootno}%
|
||||
@@ -5402,7 +5526,7 @@ width0pt\relax} \fi
|
||||
\else\let\next\f@t\fi \next}
|
||||
\def\f@@t{\bgroup\aftergroup\@foot\let\next}
|
||||
\def\f@t#1{#1\@foot}
|
||||
\def\@foot{\strut\egroup}
|
||||
\def\@foot{\strut\par\egroup}
|
||||
|
||||
}%end \catcode `\@=11
|
||||
|
||||
@@ -5497,7 +5621,9 @@ width0pt\relax} \fi
|
||||
% #2 is (optional) width, #3 is (optional) height.
|
||||
% #4 is just the usual extra ignored arg for parsing this stuff.
|
||||
\def\imagexxx#1,#2,#3,#4\finish{%
|
||||
\ifx\pdfoutput\undefined
|
||||
\ifpdf
|
||||
\centerline{\dopdfimage{#1}{#2}{#3}}%
|
||||
\else
|
||||
% \epsfbox itself resets \epsf?size at each figure.
|
||||
\setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
|
||||
\setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
|
||||
@@ -5518,8 +5644,6 @@ width0pt\relax} \fi
|
||||
\epsfbox{#1.eps}%
|
||||
\fi
|
||||
\endgroup
|
||||
\else
|
||||
\centerline{\pdfimage #1.pdf}%
|
||||
\fi
|
||||
}
|
||||
|
||||
@@ -5863,6 +5987,6 @@ should work if nowhere else does.}
|
||||
@c eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
@c page-delimiter: "^\\\\message"
|
||||
@c time-stamp-start: "def\\\\texinfoversion{"
|
||||
@c time-stamp-format: "%:y-%02m-%02d.%H"
|
||||
@c time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
@c time-stamp-end: "}"
|
||||
@c End:
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
START-INFO-DIR-ENTRY
|
||||
* Text utilities: (textutils). GNU text utilities.
|
||||
* cat: (textutils)cat invocation. Concatenate and write files.
|
||||
* cksum: (textutils)cksum invocation. Print @sc{POSIX} CRC checksum.
|
||||
* cksum: (textutils)cksum invocation. Print @sc{posix} CRC checksum.
|
||||
* comm: (textutils)comm invocation. Compare sorted files by line.
|
||||
* csplit: (textutils)csplit invocation. Split by context.
|
||||
* cut: (textutils)cut invocation. Print selected parts of lines.
|
||||
@@ -220,7 +220,7 @@ involved in improving this manual. The entire GNU community will
|
||||
benefit.
|
||||
|
||||
@cindex POSIX.2
|
||||
The GNU text utilities are mostly compatible with the @sc{POSIX.2} standard.
|
||||
The GNU text utilities are mostly compatible with the @sc{posix.2} standard.
|
||||
|
||||
@c This paragraph appears in all of fileutils.texi, textutils.texi, and
|
||||
@c sh-utils.texi too -- so be sure to keep them consistent.
|
||||
@@ -317,18 +317,18 @@ Equivalent to @samp{-vET}.
|
||||
@opindex -B
|
||||
@opindex --binary
|
||||
@cindex binary and text I/O in cat
|
||||
On MS-DOS and MS-Windows only, causes @code{cat} read and write the
|
||||
On MS-DOS and MS-Windows only, read and write the
|
||||
files in binary mode. By default, @code{cat} on MS-DOS/MS-Windows uses
|
||||
binary mode only when standard output is redirected to a file or a pipe;
|
||||
this option overrides that. Binary file I/O is used so that the files
|
||||
retain their format (Unix text as opposed to DOS text and binary),
|
||||
because @code{cat} is frequently used as file copying program. Some
|
||||
because @code{cat} is frequently used as a file-copying program. Some
|
||||
options (see below) cause @code{cat} read and write files in text mode
|
||||
because then the original file contents aren't important (e.g., when
|
||||
lines are numbered by @code{cat}, or when line endings should be
|
||||
marked). This is so these options work as DOS/Windows users would
|
||||
expect; for example, DOS-style text files have their lines end with
|
||||
@key{CR-LF} pair of characters which won't be processed as an empty line
|
||||
the CR-LF pair of characters which won't be processed as an empty line
|
||||
by @samp{-b} unless the file is read in text mode.
|
||||
|
||||
@item -b
|
||||
@@ -375,7 +375,7 @@ Equivalent to @samp{-vT}.
|
||||
@itemx --show-tabs
|
||||
@opindex -T
|
||||
@opindex --show-tabs
|
||||
Display @key{TAB} characters as @samp{^I}.
|
||||
Display TAB characters as @samp{^I}.
|
||||
|
||||
@item -u
|
||||
@opindex -u
|
||||
@@ -385,10 +385,10 @@ Ignored; for Unix compatibility.
|
||||
@itemx --show-nonprinting
|
||||
@opindex -v
|
||||
@opindex --show-nonprinting
|
||||
Display control characters except for @key{LFD} and @key{TAB} using
|
||||
Display control characters except for LFD and TAB using
|
||||
@samp{^} notation and precede characters that have the high bit set with
|
||||
@samp{M-}. On MS-DOS and MS-Windows, this option causes @code{cat} to
|
||||
read files and standard input in DOS binary mode, so the @key{CR}
|
||||
read files and standard input in DOS binary mode, so the CR
|
||||
characters at the end of each line are also visible.
|
||||
|
||||
@end table
|
||||
@@ -583,7 +583,7 @@ Do not reset the line number at the start of a logical page.
|
||||
@opindex -s
|
||||
@opindex --number-separator
|
||||
Separate the line number from the text line in the output with
|
||||
@var{string} (default is @key{TAB}).
|
||||
@var{string} (default is the TAB character).
|
||||
|
||||
@item -v @var{number}
|
||||
@itemx --starting-line-number=@var{number}
|
||||
@@ -672,7 +672,7 @@ Output at most @var{bytes} bytes of the input. Prefixes and suffixes on
|
||||
@opindex --strings
|
||||
@cindex string constants, outputting
|
||||
Instead of the normal output, output only @dfn{string constants}: at
|
||||
least @var{n} (3 by default) consecutive @sc{ASCII} graphic characters,
|
||||
least @var{n} (3 by default) consecutive @sc{ascii} graphic characters,
|
||||
followed by a null (zero) byte.
|
||||
|
||||
@item -t @var{type}
|
||||
@@ -687,14 +687,14 @@ of each output line using each of the data types that you specified,
|
||||
in the order that you specified.
|
||||
|
||||
Adding a trailing ``z'' to any type specification appends a display
|
||||
of the @sc{ASCII} character representation of the printable characters
|
||||
of the @sc{ascii} character representation of the printable characters
|
||||
to the output line generated by the type specification.
|
||||
|
||||
@table @samp
|
||||
@item a
|
||||
named character,
|
||||
@item c
|
||||
@sc{ASCII} character or backslash escape,
|
||||
@sc{ascii} character or backslash escape,
|
||||
@item d
|
||||
signed decimal,
|
||||
@item f
|
||||
@@ -762,8 +762,8 @@ is not given at all, the default is 16.
|
||||
|
||||
@end table
|
||||
|
||||
The next several options map the old, pre-@sc{POSIX} format specification
|
||||
options to the corresponding @sc{POSIX} format specs. GNU @code{od} accepts
|
||||
The next several options map the old, pre-@sc{posix} format specification
|
||||
options to the corresponding @sc{posix} format specs. GNU @code{od} accepts
|
||||
any combination of old- and new-style options. Format specification
|
||||
options accumulate.
|
||||
|
||||
@@ -779,7 +779,7 @@ Output as octal bytes. Equivalent to @samp{-toC}.
|
||||
|
||||
@item -c
|
||||
@opindex -c
|
||||
Output as @sc{ASCII} characters or backslash escapes. Equivalent to
|
||||
Output as @sc{ascii} characters or backslash escapes. Equivalent to
|
||||
@samp{-tc}.
|
||||
|
||||
@item -d
|
||||
@@ -1065,7 +1065,7 @@ Double space the output.
|
||||
@opindex --expand-tabs
|
||||
@cindex input tabs
|
||||
Expand @var{tab}s to spaces on input. Optional argument @var{in-tabchar} is
|
||||
the input tab character (default is @key{TAB}). Second optional
|
||||
the input tab character (default is the TAB character). Second optional
|
||||
argument @var{in-tabwidth} is the input tab character's width (default
|
||||
is 8).
|
||||
|
||||
@@ -1097,7 +1097,7 @@ indispensable.
|
||||
@opindex --output-tabs
|
||||
@cindex output tabs
|
||||
Replace spaces with @var{tab}s on output. Optional argument @var{out-tabchar}
|
||||
is the output tab character (default is @key{TAB}). Second optional
|
||||
is the output tab character (default is the TAB character). Second optional
|
||||
argument @var{out-tabwidth} is the output tab character's width (default
|
||||
is 8).
|
||||
|
||||
@@ -1151,7 +1151,7 @@ line of the input file (not the 1st line printed, compare the
|
||||
@samp{--page} option and @samp{-N} option).
|
||||
Optional argument @var{number-separator} is the character appended to
|
||||
the line number to separate it from the text followed. The default
|
||||
separator is a @key{TAB}. In a strict sense a @key{TAB} is always
|
||||
separator is the TAB character. In a strict sense a TAB is always
|
||||
printed with single column output only. The @var{TAB}-width varies
|
||||
with the @var{TAB}-position, e.g. with the left @var{margin} specified
|
||||
by @samp{-o} option. With multicolumn output priority is given to
|
||||
@@ -1192,7 +1192,7 @@ opened. (The exit status will still be nonzero, however.)
|
||||
@opindex -s
|
||||
@opindex --separator
|
||||
Separate columns by a single character @var{char}. Default for @var{char}
|
||||
is the @key{TAB} character without @samp{-w} and @samp{no character} with
|
||||
is the TAB character without @samp{-w} and @samp{no character} with
|
||||
@samp{-w}. Without @samp{-s} default separator @samp{space} is set.
|
||||
@samp{-s[char]} turns off line truncation of all three column options
|
||||
(@samp{-COLUMN}|@samp{-a -COLUMN}|@samp{-m}) except @samp{-w} is set.
|
||||
@@ -1203,16 +1203,19 @@ That is a @var{posix} compliant formulation.
|
||||
@itemx --sep-string[=@var{string}]
|
||||
@opindex -S
|
||||
@opindex --sep-string
|
||||
Separate columns by any string @var{string}. The @samp{-S} option doesn't
|
||||
react upon the @samp{-W/-w} option (unlike @samp{-s} option does). It
|
||||
does not affect line truncation or column alignment. A separator is
|
||||
defined, nothing else. Without @samp{-S}: default separator @key{TAB}
|
||||
is used with @samp{-J} and @samp{space} otherwise (same as @samp{-S" "}).
|
||||
With @samp{-S} only: no separator is used, same as @samp{-S""}. Quotes
|
||||
should be used with blanks and some shell active characters. Some of the
|
||||
@code{pr} options don't allow the option letter to be separated from its
|
||||
argument. @samp{-S/-s} is one of them. Don't use @samp{-S "STRING"}.
|
||||
That's @var{posix} compliant.
|
||||
Use @var{string} to separate output columns. The @samp{-S} option doesn't
|
||||
affect the @samp{-W/-w} option, unlike the @samp{-s} option which does. It
|
||||
does not affect line truncation or column alignment.
|
||||
Without @samp{-S}, and with @samp{-J}, @code{pr} uses the default output
|
||||
separator, TAB.
|
||||
Without @samp{-S} or @samp{-J}, @code{pr} uses a @samp{space}
|
||||
(same as @samp{-S" "}).
|
||||
Using @samp{-S} with no @var{string} is equivalent to @samp{-S""}.
|
||||
Note that for some of @code{pr}'s options the single-letter option
|
||||
character must be followed immediately by any corresponding argument;
|
||||
there may not be any intervening white space.
|
||||
@samp{-S/-s} is one of them. Don't use @samp{-S "STRING"}.
|
||||
@sc{posix} requires this.
|
||||
|
||||
@item -t
|
||||
@itemx --omit-header
|
||||
@@ -1222,7 +1225,7 @@ Do not print the usual header [and footer] on each page, and do not fill
|
||||
out the bottom of pages (with blank lines or a form feed). No page
|
||||
structure is produced, but form feeds set in the input files are retained.
|
||||
The predefined pagination is not changed. @samp{-t} or @samp{-T} may be
|
||||
useful together with other options; e.g.: @samp{-t -e4}, expand @key{TAB}
|
||||
useful together with other options; e.g.: @samp{-t -e4}, expand TAB characters
|
||||
in the input file to 4 spaces but don't make any other changes. Use of
|
||||
@samp{-t} overrides @samp{-h}.
|
||||
|
||||
@@ -1483,13 +1486,13 @@ gets output from a different file, to indicate which file that output is
|
||||
from.
|
||||
|
||||
There are two ways to specify how you'd like to track files with this option,
|
||||
but that difference is noticeable only when a followed file is removed.
|
||||
but that difference is noticeable only when a followed file is removed or
|
||||
renamed.
|
||||
If you'd like to continue to track the end of a growing file even after
|
||||
it has been unlinked, use @samp{--follow=descriptor}. This is the default
|
||||
behavior, but it is not useful if you're tracking a log file that may be
|
||||
rotated (removed and reopened). In that case, use @samp{--follow=name} to
|
||||
track the named file by reopening it periodically
|
||||
@c FIXME: cross reference to the new option name
|
||||
rotated (removed or renamed, then reopened). In that case, use
|
||||
@samp{--follow=name} to track the named file by reopening it periodically
|
||||
to see if it has been removed and recreated by some other program.
|
||||
|
||||
No matter which method you use, if the tracked file is determined to have
|
||||
@@ -1499,16 +1502,71 @@ and resumes tracking the end of the file from the newly-determined endpoint.
|
||||
When a file is removed, @code{tail}'s behavior depends on whether it is
|
||||
following the name or the descriptor. When following by name, tail can
|
||||
detect that a file has been removed and gives a message to that effect,
|
||||
and if @samp{--allow-missing} has been specified it will continue checking
|
||||
and if @samp{--retry} has been specified it will continue checking
|
||||
periodically to see if the file reappears.
|
||||
When following a descriptor, tail does not detect that the file has
|
||||
been unlinked and issues no message.
|
||||
been unlinked or renamed and issues no message; even though the file
|
||||
may no longer be accessible via its original name, it may still be
|
||||
growing.
|
||||
|
||||
The option values @samp{descriptor} and @samp{name} may be specified only
|
||||
with the long form of the option, not with @samp{-f}.
|
||||
|
||||
@c FIXME-describe --allow-missing [useful only with --follow]
|
||||
@c FIXME-describe --sleep-interval [useful only with --follow]
|
||||
@itemx --retry
|
||||
@opindex --retry
|
||||
This option is meaningful only when following by name.
|
||||
Without this option, when tail encounters a file that doesn't
|
||||
exist or is otherwise inaccessible, it reports that fact and
|
||||
never checks it again.
|
||||
|
||||
@itemx --sleep-interval=@var{n}
|
||||
@opindex --sleep-interval
|
||||
Change the number of seconds to wait between iterations (the default is 1).
|
||||
During one iteration, every specified file is checked to see if it has
|
||||
changed size.
|
||||
|
||||
@itemx --pid=@var{pid}
|
||||
@opindex --pid
|
||||
When following by name or by descriptor, you may specify the process ID,
|
||||
@var{pid}, of the sole writer of all @var{file} arguments. Then, shortly
|
||||
after that process terminates, tail will also terminate. This will
|
||||
work properly only if the writer and the tailing process are running on
|
||||
the same machine. For example, to save the output of a build in a file
|
||||
and to watch the file grow, if you invoke @code{make} and @code{tail}
|
||||
like this then the tail process will stop when your build completes.
|
||||
Without this option, you would have had to kill the @code{tail -f}
|
||||
process yourself.
|
||||
@example
|
||||
$ make >& makerr & tail --pid=$! -f makerr
|
||||
@end example
|
||||
If you specify a @var{pid} that is not in use or that does not correspond
|
||||
to the process that is writing to the tailed files, then @code{tail}
|
||||
may terminate long before any @var{file}s stop growing or it may not
|
||||
terminate until long after the real writer has terminated.
|
||||
Note that @samp{--pid} cannot be supported on some systems; @code{tail}
|
||||
will print a warning if this is the case.
|
||||
|
||||
@itemx --max-consecutive-size-changes=@var{n}
|
||||
@opindex --max-consecutive-size-changes
|
||||
This option is meaningful only when following by name.
|
||||
Use it to control how long @code{tail} follows the descriptor of a file
|
||||
that continues growing at a rapid pace even after it is deleted or renamed.
|
||||
After detecting @var{n} consecutive size changes for a file,
|
||||
@code{open}/@code{fstat} the file to determine if that file name is
|
||||
still associated with the same device/inode-number pair as before.
|
||||
See the output of @code{tail --help} for the default value.
|
||||
|
||||
@itemx --max-unchanged-stats=@var{n}
|
||||
@opindex --max-unchanged-stats
|
||||
When tailing a file by name, if there have been this many consecutive
|
||||
iterations for which the size has remained the same, then
|
||||
@code{open}/@code{fstat} the file to determine if that file name is
|
||||
still associated with the same device/inode-number pair as before.
|
||||
When following a log file that is rotated, this is approximately the
|
||||
number of seconds between when tail prints the last pre-rotation lines
|
||||
and when it prints the lines that have accumulated in the new log file.
|
||||
See the output of @code{tail --help} for the default value.
|
||||
This option is meaningful only when following by name.
|
||||
|
||||
@itemx -n @var{n}
|
||||
@itemx --lines=@var{n}
|
||||
@@ -1762,6 +1820,11 @@ given as an argument, it prints the file name following the counts. If
|
||||
more than one @var{file} is given, @code{wc} prints a final line
|
||||
containing the cumulative counts, with the file name @file{total}. The
|
||||
counts are printed in this order: newlines, words, bytes.
|
||||
By default, each count is output right-justified in a 7-byte field with
|
||||
one space between fields so that the numbers and file names line up nicely
|
||||
in columns. However, POSIX requires that there be exactly one space
|
||||
separating columns. You can make @code{wc} use the POSIX-mandated
|
||||
output format by setting the @env{POSIXLY_CORRECT} environment variable.
|
||||
|
||||
By default, @code{wc} prints all three counts. Options can specify
|
||||
that only certain counts be printed. Options do not undo others
|
||||
@@ -1884,7 +1947,7 @@ by comparing the @code{cksum} output for the received files with the
|
||||
@code{cksum} output for the original files (typically given in the
|
||||
distribution).
|
||||
|
||||
The CRC algorithm is specified by the @sc{POSIX.2} standard. It is not
|
||||
The CRC algorithm is specified by the @sc{posix.2} standard. It is not
|
||||
compatible with the BSD or System V @code{sum} algorithms (see the
|
||||
previous section); it is more robust.
|
||||
|
||||
@@ -2066,10 +2129,12 @@ or global options are specified, @samp{-s} has no effect.
|
||||
GNU @code{sort} (as specified for all GNU utilities) has no limits on
|
||||
input line length or restrictions on bytes allowed within lines. In
|
||||
addition, if the final byte of an input file is not a newline, GNU
|
||||
@code{sort} silently supplies one. A line's trailing newline is part of
|
||||
the line for comparison purposes; for example, with no options in an
|
||||
@sc{ASCII} locale, a line starting with a tab sorts before an empty line
|
||||
because tab precedes newline in the @sc{ASCII} collating sequence.
|
||||
@code{sort} silently supplies one. A line's trailing newline is not
|
||||
part of the line for comparison purposes.@footnote{@sc{posix}.2-1992
|
||||
requires that the trailing newline be part of the comparison, and some
|
||||
@code{sort} implementations obey this requirement, but it is widely
|
||||
considered to be a bug in the standard and the next version of
|
||||
@sc{posix}.2 will likely remove this requirement.}
|
||||
|
||||
Upon any error, @code{sort} exits with a status of @samp{2}.
|
||||
|
||||
@@ -2216,7 +2281,7 @@ check that no pair of consecutive lines compares equal.
|
||||
@item -k @var{pos1}[,@var{pos2}]
|
||||
@opindex -k
|
||||
@cindex sort field
|
||||
The recommended, @sc{POSIX}, option for specifying a sort field. The field
|
||||
The recommended, @sc{posix}, option for specifying a sort field. The field
|
||||
consists of the part of the line between @var{pos1} and @var{pos2} (or the
|
||||
end of the line, if @var{pos2} is omitted), @emph{inclusive}.
|
||||
Fields and character positions are numbered starting with 1.
|
||||
@@ -2226,8 +2291,8 @@ See below for more examples.
|
||||
@item -z
|
||||
@opindex -z
|
||||
@cindex sort zero-terminated lines
|
||||
Treat the input as a set of lines, each terminated by a zero byte (@sc{ASCII}
|
||||
@sc{NUL} (Null) character) instead of an @sc{ASCII} @sc{LF} (Line Feed).
|
||||
Treat the input as a set of lines, each terminated by a zero byte (@sc{ascii}
|
||||
@sc{nul} (Null) character) instead of an @sc{ascii} @sc{lf} (Line Feed).
|
||||
This option can be useful in conjunction with @samp{perl -0} or
|
||||
@samp{find -print0} and @samp{xargs -0} which do the same in order to
|
||||
reliably handle arbitrary pathnames (even those which contain Line Feed
|
||||
@@ -2247,9 +2312,9 @@ options}.
|
||||
|
||||
Historical (BSD and System V) implementations of @code{sort} have
|
||||
differed in their interpretation of some options, particularly
|
||||
@samp{-b}, @samp{-f}, and @samp{-n}. GNU sort follows the @sc{POSIX}
|
||||
@samp{-b}, @samp{-f}, and @samp{-n}. GNU sort follows the @sc{posix}
|
||||
behavior, which is usually (but not always!) like the System V behavior.
|
||||
According to @sc{POSIX}, @samp{-n} no longer implies @samp{-b}. For
|
||||
According to @sc{posix}, @samp{-n} no longer implies @samp{-b}. For
|
||||
consistency, @samp{-M} has been changed in the same way. This may
|
||||
affect the meaning of character positions in field specifications in
|
||||
obscure cases. The only fix is to add an explicit @samp{-b}.
|
||||
@@ -2274,7 +2339,7 @@ from the global options it will be attached to both.
|
||||
Keys may span multiple fields.
|
||||
|
||||
Here are some examples to illustrate various combinations of options.
|
||||
In them, the @sc{POSIX} @samp{-k} option is used to specify sort keys rather
|
||||
In them, the @sc{posix} @samp{-k} option is used to specify sort keys rather
|
||||
than the obsolete @samp{+@var{pos1}-@var{pos2}} syntax.
|
||||
|
||||
@itemize @bullet
|
||||
@@ -2286,12 +2351,13 @@ Sort in descending (reverse) numeric order.
|
||||
sort -nr
|
||||
@end example
|
||||
|
||||
@item
|
||||
Sort alphabetically, omitting the first and second fields.
|
||||
This uses a single key composed of the characters beginning
|
||||
at the start of field three and extending to the end of each line.
|
||||
|
||||
@example
|
||||
sort -k3
|
||||
sort -k 3
|
||||
@end example
|
||||
|
||||
@item
|
||||
@@ -2333,6 +2399,7 @@ sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
|
||||
|
||||
@item
|
||||
Generate a tags file in case insensitive sorted order.
|
||||
|
||||
@example
|
||||
find src -type f -print0 | sort -t / -z -f | xargs -0 etags --append
|
||||
@end example
|
||||
@@ -2480,14 +2547,19 @@ standard input. Synopsis:
|
||||
comm [@var{option}]@dots{} @var{file1} @var{file2}
|
||||
@end example
|
||||
|
||||
The input files must be sorted before @code{comm} can be used.
|
||||
@vindex LC_COLLATE
|
||||
Before @code{comm} can be used, the input files must be sorted using the
|
||||
collating sequence specified by the @env{LC_COLLATE} locale, with
|
||||
trailing newlines significant. If an input file ends in a non-newline
|
||||
character, a newline is silently appended. The @code{sort} command with
|
||||
no options always outputs a file that is suitable input to @code{comm}.
|
||||
|
||||
@cindex differing lines
|
||||
@cindex common lines
|
||||
With no options, @code{comm} produces three column output. Column one
|
||||
contains lines unique to @var{file1}, column two contains lines unique
|
||||
to @var{file2}, and column three contains lines common to both files.
|
||||
Columns are separated by @key{TAB}.
|
||||
Columns are separated by a single TAB character.
|
||||
@c FIXME: when there's an option to supply an alternative separator
|
||||
@c string, append `by default' to the above sentence.
|
||||
|
||||
@@ -2646,7 +2718,7 @@ As it is setup now, the program assumes that the input file is coded
|
||||
using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
|
||||
@emph{unless} if it is compiled for MS-DOS, in which case it uses the
|
||||
character set of the IBM-PC. (GNU @code{ptx} is not known to work on
|
||||
smaller MS-DOS machines anymore.) Compared to 7-bit @sc{ASCII}, the set of
|
||||
smaller MS-DOS machines anymore.) Compared to 7-bit @sc{ascii}, the set of
|
||||
characters which are letters is then different, this fact alters the
|
||||
behaviour of regular expression matching. Thus, the default regular
|
||||
expression for a keyword allows foreign or diacriticized letters.
|
||||
@@ -2935,7 +3007,7 @@ sequence @code{^\@{ @}} and @code{~\@{ @}} respectively. Other
|
||||
diacriticized characters of the underlying character set produce an
|
||||
appropriate @TeX{} sequence as far as possible. The other non-graphical
|
||||
characters, like newline and tab, and all others characters which are
|
||||
not part of @sc{ASCII}, are merely changed to exactly one space, with no
|
||||
not part of @sc{ascii}, are merely changed to exactly one space, with no
|
||||
special attempt to compress consecutive spaces. Let me know how to
|
||||
improve this special character processing for @TeX{}.
|
||||
|
||||
@@ -3072,14 +3144,14 @@ take up 1 character.
|
||||
@opindex -f
|
||||
@opindex --fields
|
||||
Print only the fields listed in @var{field-list}. Fields are
|
||||
separated by a @key{TAB} by default.
|
||||
separated by a TAB character by default.
|
||||
|
||||
@item -d @var{input_delim_byte}
|
||||
@itemx --delimiter=@var{input_delim_byte}
|
||||
@opindex -d
|
||||
@opindex --delimiter
|
||||
For @samp{-f}, fields are separated in the input by the first character
|
||||
in @var{input_delim_byte} (default is @key{TAB}).
|
||||
in @var{input_delim_byte} (default is TAB).
|
||||
|
||||
@item -n
|
||||
@opindex -n
|
||||
@@ -3108,7 +3180,7 @@ The default is to use the input delimiter.
|
||||
@cindex merging files
|
||||
|
||||
@code{paste} writes to standard output lines consisting of sequentially
|
||||
corresponding lines of each given file, separated by @key{TAB}.
|
||||
corresponding lines of each given file, separated by a TAB character.
|
||||
Standard input is used for a file name of @samp{-} or if no input files
|
||||
are given.
|
||||
|
||||
@@ -3130,11 +3202,11 @@ Paste the lines of one file at a time rather than one line from each
|
||||
file.
|
||||
|
||||
@item -d @var{delim-list}
|
||||
@itemx --delimiters @var{delim-list}
|
||||
@itemx --delimiters=@var{delim-list}
|
||||
@opindex -d
|
||||
@opindex --delimiters
|
||||
Consecutively use the characters in @var{delim-list} instead of
|
||||
@key{TAB} to separate merged lines. When @var{delim-list} is
|
||||
TAB to separate merged lines. When @var{delim-list} is
|
||||
exhausted, start again at its beginning.
|
||||
|
||||
@end table
|
||||
@@ -3153,10 +3225,12 @@ lines that have identical join fields. Synopsis:
|
||||
join [@var{option}]@dots{} @var{file1} @var{file2}
|
||||
@end example
|
||||
|
||||
@vindex LC_COLLATE
|
||||
Either @var{file1} or @var{file2} (but not both) can be @samp{-},
|
||||
meaning standard input. @var{file1} and @var{file2} should be already
|
||||
sorted in increasing order (not numerically) on the join fields; unless
|
||||
the @samp{-t} option is given, they should be sorted ignoring blanks at
|
||||
sorted in increasing textual order on the join fields, using the
|
||||
collating sequence specified by the @env{LC_COLLATE} locale. Unless
|
||||
the @samp{-t} option is given, the input should be sorted ignoring blanks at
|
||||
the start of the join field, as in @code{sort -b}. If the
|
||||
@samp{--ignore-case} option is given, lines should be sorted without
|
||||
regard to the case of characters in the join field, as in @code{sort -f}.
|
||||
@@ -3217,7 +3291,7 @@ to the join field. However, when printing unpairable lines
|
||||
(using either of the @samp{-a} or @samp{-v} options), there is no way
|
||||
to specify the join field using @var{m.n} in @var{field-list}
|
||||
if there are unpairable lines in both files.
|
||||
To give @code{join} that functionality, @sc{POSIX} invented the @samp{0}
|
||||
To give @code{join} that functionality, @sc{posix} invented the @samp{0}
|
||||
field specification notation.
|
||||
|
||||
The elements in @var{field-list}
|
||||
@@ -3460,7 +3534,7 @@ typically have the same length. If @var{set1} is shorter than
|
||||
@var{set2}, the extra characters at the end of @var{set2} are ignored.
|
||||
|
||||
On the other hand, making @var{set1} longer than @var{set2} is not
|
||||
portable; @sc{POSIX.2} says that the result is undefined. In this situation,
|
||||
portable; @sc{posix.2} says that the result is undefined. In this situation,
|
||||
BSD @code{tr} pads @var{set2} to the length of @var{set1} by repeating
|
||||
the last character of @var{set2} as many times as necessary. System V
|
||||
@code{tr} truncates @var{set1} to the length of @var{set2}.
|
||||
@@ -3521,7 +3595,7 @@ non-alphanumeric characters to newlines, then squeezes each string
|
||||
of repeated newlines into a single newline:
|
||||
|
||||
@example
|
||||
tr -cs '[a-zA-Z0-9]' '[\n*]'
|
||||
tr -cs 'a-zA-Z0-9' '[\n*]'
|
||||
@end example
|
||||
|
||||
@item
|
||||
@@ -3549,6 +3623,39 @@ cat "$@@" \
|
||||
| uniq -d
|
||||
@end example
|
||||
|
||||
@item
|
||||
Deleting a small set of characters is usually straightforward. For example,
|
||||
to remove all @samp{a}s, @samp{x}s, and @samp{M}s you would do this:
|
||||
|
||||
@example
|
||||
tr -d axM
|
||||
@end example
|
||||
|
||||
However, when @samp{-} is one of those characters, it can be tricky because
|
||||
@samp{-} has special meanings. Performing the same task as above but also
|
||||
removing all @samp{-} characters, we might try @code{tr -d -axM}, but
|
||||
that would fail because @code{tr} would try to interpret @samp{-a} as
|
||||
a command-line option. Alternatively, we could try putting the hyphen
|
||||
inside the string, @code{tr -d a-xM}, but that wouldn't work either because
|
||||
it would make @code{tr} interpret @code{a-x} as the range of characters
|
||||
@samp{a}@dots{}@samp{x} rather than the three.
|
||||
One way to solve the problem is to put the hyphen at the end of the list
|
||||
of characters:
|
||||
|
||||
@example
|
||||
tr -d axM-
|
||||
@end example
|
||||
|
||||
More generally, use the character class notation @code{[=c=]}
|
||||
with @samp{-} (or any other character) in place of the @samp{c}:
|
||||
|
||||
@example
|
||||
tr -d '[=-=]axM'
|
||||
@end example
|
||||
|
||||
Note how single quotes are used in the above example to protect the
|
||||
square brackets from interpretation by a shell.
|
||||
|
||||
@end itemize
|
||||
|
||||
|
||||
@@ -3558,7 +3665,7 @@ cat "$@@" \
|
||||
@vindex POSIXLY_CORRECT
|
||||
Setting the environment variable @env{POSIXLY_CORRECT} turns off the
|
||||
following warning and error messages, for strict compliance with
|
||||
@sc{POSIX.2}. Otherwise, the following diagnostics are issued:
|
||||
@sc{posix.2}. Otherwise, the following diagnostics are issued:
|
||||
|
||||
@enumerate
|
||||
|
||||
@@ -3566,7 +3673,7 @@ following warning and error messages, for strict compliance with
|
||||
When the @samp{--delete} option is given but @samp{--squeeze-repeats}
|
||||
is not, and @var{set2} is given, GNU @code{tr} by default prints
|
||||
a usage message and exits, because @var{set2} would not be used.
|
||||
The @sc{POSIX} specification says that @var{set2} must be ignored in
|
||||
The @sc{posix} specification says that @var{set2} must be ignored in
|
||||
this case. Silently ignoring arguments is a bad idea.
|
||||
|
||||
@item
|
||||
@@ -3577,7 +3684,7 @@ value 400 octal does not fit into a single byte.
|
||||
@end enumerate
|
||||
|
||||
GNU @code{tr} does not provide complete BSD or System V compatibility.
|
||||
For example, it is impossible to disable interpretation of the @sc{POSIX}
|
||||
For example, it is impossible to disable interpretation of the @sc{posix}
|
||||
constructs @samp{[:alpha:]}, @samp{[=c=]}, and @samp{[c*10]}. Also, GNU
|
||||
@code{tr} does not delete zero bytes automatically, unlike traditional
|
||||
Unix versions, which provide no way to preserve zero bytes.
|
||||
@@ -3795,7 +3902,7 @@ redirected standard output of your program away from your screen.
|
||||
For filter programs to work together, the format of the data has to be
|
||||
agreed upon. The most straightforward and easiest format to use is simply
|
||||
lines of text. Unix data files are generally just streams of bytes, with
|
||||
lines delimited by the @sc{ASCII} @sc{LF} (Line Feed) character,
|
||||
lines delimited by the @sc{ascii} @sc{lf} (Line Feed) character,
|
||||
conventionally called a ``newline'' in the Unix literature. (This is
|
||||
@code{'\n'} if you're a C programmer.) This is the format used by all
|
||||
the traditional filtering programs. (Many earlier operating systems
|
||||
@@ -4047,7 +4154,7 @@ $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' | ...
|
||||
The second @code{tr} command operates on the complement of the listed
|
||||
characters, which are all the letters, the digits, the underscore, and
|
||||
the blank. The @samp{\012} represents the newline character; it has to
|
||||
be left alone. (The @sc{ASCII} tab character should also be included for
|
||||
be left alone. (The @sc{ascii} tab character should also be included for
|
||||
good measure in a production script.)
|
||||
|
||||
At this point, we have data consisting of words separated by blank space.
|
||||
|
||||
9
lib/.cppi-disable
Normal file
9
lib/.cppi-disable
Normal file
@@ -0,0 +1,9 @@
|
||||
error.h
|
||||
fnmatch.h
|
||||
getopt.h
|
||||
getopt.c
|
||||
getopt1.c
|
||||
md5.h
|
||||
obstack.h
|
||||
regex.h
|
||||
getpagesize.h
|
||||
@@ -20,13 +20,16 @@ libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
|
||||
|
||||
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
|
||||
dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
|
||||
getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h \
|
||||
getdate.h getline.h getopt.h getpagesize.h \
|
||||
group-member.h human.h lchown.h long-options.h \
|
||||
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
|
||||
posixtm.h quotearg.h regex.h safe-read.h same.h save-cwd.h \
|
||||
savedir.h strverscmp.h \
|
||||
version-etc.h xalloc.h xstrtol.h
|
||||
|
||||
BUILT_SOURCES = getdate.c lstat.c stat.c
|
||||
MAINTAINERCLEANFILES = $(BUILT_SOURCES)
|
||||
DISTCLEANFILES = lstat.c stat.c
|
||||
|
||||
EXTRA_DIST = xstat.in
|
||||
lstat.c: xstat.in
|
||||
|
||||
227
lib/Makefile.in
227
lib/Makefile.in
@@ -59,13 +59,17 @@ PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
DF_PROG = @DF_PROG@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
@@ -83,7 +87,6 @@ LIBOBJS = @LIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
MVDIR_PROG = @MVDIR_PROG@
|
||||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
POFILES = @POFILES@
|
||||
@@ -94,6 +97,7 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
install_sh = @install_sh@
|
||||
l = @l@
|
||||
|
||||
|
||||
@@ -118,7 +122,8 @@ libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
|
||||
|
||||
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
|
||||
dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
|
||||
getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h \
|
||||
getdate.h getline.h getopt.h getpagesize.h \
|
||||
group-member.h human.h lchown.h long-options.h \
|
||||
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
|
||||
posixtm.h quotearg.h regex.h safe-read.h same.h save-cwd.h \
|
||||
savedir.h strverscmp.h \
|
||||
@@ -126,6 +131,8 @@ version-etc.h xalloc.h xstrtol.h
|
||||
|
||||
|
||||
BUILT_SOURCES = getdate.c lstat.c stat.c
|
||||
MAINTAINERCLEANFILES = $(BUILT_SOURCES)
|
||||
DISTCLEANFILES = lstat.c stat.c
|
||||
|
||||
EXTRA_DIST = xstat.in
|
||||
subdir = lib
|
||||
@@ -161,8 +168,8 @@ HEADERS = $(noinst_HEADERS)
|
||||
DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in TODO alloca.c \
|
||||
chown.c dup2.c error.c error.h euidaccess.c fileblocks.c fnmatch.c \
|
||||
fsusage.c ftruncate.c getdate.c getgroups.c getline.c group-member.c \
|
||||
lchown.c malloc.c memchr.c memcmp.c memcpy.c memset.c mkdir.c mktime.c \
|
||||
mountlist.c obstack.c obstack.h realloc.c regex.c rename.c rmdir.c \
|
||||
lchown.c malloc.c memchr.c memcmp.c memcpy.c memmove.c memset.c mkdir.c \
|
||||
mktime.c mountlist.c obstack.c obstack.h realloc.c regex.c rmdir.c \
|
||||
rpmatch.c stpcpy.c strcasecmp.c strdup.c strftime.c strncasecmp.c \
|
||||
strndup.c strstr.c strtol.c strtoul.c strtoull.c strtoumax.c \
|
||||
strverscmp.c utime.c
|
||||
@@ -171,26 +178,34 @@ strverscmp.c utime.c
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
DEP_FILES = .deps/addext.P .deps/alloca.P .deps/argmatch.P \
|
||||
.deps/backupfile.P .deps/basename.P .deps/chown.P .deps/closeout.P \
|
||||
.deps/dirname.P .deps/dup2.P .deps/error.P .deps/euidaccess.P \
|
||||
.deps/exclude.P .deps/fileblocks.P .deps/filemode.P .deps/fnmatch.P \
|
||||
.deps/fsusage.P .deps/ftruncate.P .deps/full-write.P .deps/getdate.P \
|
||||
.deps/getgroups.P .deps/getline.P .deps/getopt.P .deps/getopt1.P \
|
||||
.deps/group-member.P .deps/hash.P .deps/human.P .deps/idcache.P \
|
||||
.deps/isdir.P .deps/lchown.P .deps/long-options.P .deps/lstat.P \
|
||||
.deps/makepath.P .deps/malloc.P .deps/memchr.P .deps/memcmp.P \
|
||||
.deps/memcpy.P .deps/memset.P .deps/mkdir.P .deps/mktime.P \
|
||||
.deps/modechange.P .deps/mountlist.P .deps/obstack.P \
|
||||
.deps/path-concat.P .deps/posixtm.P .deps/quotearg.P .deps/realloc.P \
|
||||
.deps/regex.P .deps/rename.P .deps/rmdir.P .deps/rpmatch.P \
|
||||
.deps/safe-read.P .deps/same.P .deps/save-cwd.P .deps/savedir.P \
|
||||
.deps/stat.P .deps/stpcpy.P .deps/strcasecmp.P .deps/strdup.P \
|
||||
.deps/strftime.P .deps/stripslash.P .deps/strncasecmp.P .deps/strndup.P \
|
||||
.deps/strstr.P .deps/strtol.P .deps/strtoul.P .deps/strtoull.P \
|
||||
.deps/strtoumax.P .deps/strverscmp.P .deps/userspec.P .deps/utime.P \
|
||||
.deps/version-etc.P .deps/xgetcwd.P .deps/xmalloc.P .deps/xstrdup.P \
|
||||
.deps/xstrtol.P .deps/xstrtoul.P .deps/xstrtoumax.P .deps/yesno.P
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/addext$U.Po $(DEPDIR)/alloca.Po \
|
||||
$(DEPDIR)/argmatch$U.Po $(DEPDIR)/backupfile$U.Po \
|
||||
$(DEPDIR)/basename$U.Po $(DEPDIR)/chown.Po $(DEPDIR)/closeout$U.Po \
|
||||
$(DEPDIR)/dirname$U.Po $(DEPDIR)/dup2.Po $(DEPDIR)/error.Po \
|
||||
$(DEPDIR)/euidaccess.Po $(DEPDIR)/exclude$U.Po $(DEPDIR)/fileblocks.Po \
|
||||
$(DEPDIR)/filemode$U.Po $(DEPDIR)/fnmatch.Po $(DEPDIR)/fsusage.Po \
|
||||
$(DEPDIR)/ftruncate.Po $(DEPDIR)/full-write$U.Po $(DEPDIR)/getdate$U.Po \
|
||||
$(DEPDIR)/getgroups.Po $(DEPDIR)/getline.Po $(DEPDIR)/getopt$U.Po \
|
||||
$(DEPDIR)/getopt1$U.Po $(DEPDIR)/group-member.Po $(DEPDIR)/hash$U.Po \
|
||||
$(DEPDIR)/human$U.Po $(DEPDIR)/idcache$U.Po $(DEPDIR)/isdir$U.Po \
|
||||
$(DEPDIR)/lchown.Po $(DEPDIR)/long-options$U.Po $(DEPDIR)/lstat.Po \
|
||||
$(DEPDIR)/makepath$U.Po $(DEPDIR)/malloc.Po $(DEPDIR)/memchr.Po \
|
||||
$(DEPDIR)/memcmp.Po $(DEPDIR)/memcpy.Po $(DEPDIR)/memmove.Po \
|
||||
$(DEPDIR)/memset.Po $(DEPDIR)/mkdir.Po $(DEPDIR)/mktime.Po \
|
||||
$(DEPDIR)/modechange$U.Po $(DEPDIR)/mountlist.Po $(DEPDIR)/obstack.Po \
|
||||
$(DEPDIR)/path-concat$U.Po $(DEPDIR)/posixtm$U.Po \
|
||||
$(DEPDIR)/quotearg$U.Po $(DEPDIR)/realloc.Po $(DEPDIR)/regex.Po \
|
||||
$(DEPDIR)/rmdir.Po $(DEPDIR)/rpmatch.Po $(DEPDIR)/safe-read$U.Po \
|
||||
$(DEPDIR)/same$U.Po $(DEPDIR)/save-cwd$U.Po $(DEPDIR)/savedir$U.Po \
|
||||
$(DEPDIR)/stat.Po $(DEPDIR)/stpcpy.Po $(DEPDIR)/strcasecmp.Po \
|
||||
$(DEPDIR)/strdup.Po $(DEPDIR)/strftime.Po $(DEPDIR)/stripslash$U.Po \
|
||||
$(DEPDIR)/strncasecmp.Po $(DEPDIR)/strndup.Po $(DEPDIR)/strstr.Po \
|
||||
$(DEPDIR)/strtol.Po $(DEPDIR)/strtoul.Po $(DEPDIR)/strtoull.Po \
|
||||
$(DEPDIR)/strtoumax.Po $(DEPDIR)/strverscmp.Po $(DEPDIR)/userspec$U.Po \
|
||||
$(DEPDIR)/utime.Po $(DEPDIR)/version-etc$U.Po $(DEPDIR)/xgetcwd$U.Po \
|
||||
$(DEPDIR)/xmalloc$U.Po $(DEPDIR)/xstrdup$U.Po $(DEPDIR)/xstrtol$U.Po \
|
||||
$(DEPDIR)/xstrtoul$U.Po $(DEPDIR)/xstrtoumax$U.Po $(DEPDIR)/yesno$U.Po
|
||||
SOURCES = $(libfu_a_SOURCES)
|
||||
OBJECTS = $(am_libfu_a_OBJECTS)
|
||||
|
||||
@@ -243,8 +258,6 @@ libfu.a: $(libfu_a_OBJECTS) $(libfu_a_DEPENDENCIES)
|
||||
-rm -f libfu.a
|
||||
$(libfu_a_AR) libfu.a $(libfu_a_OBJECTS) $(libfu_a_LIBADD)
|
||||
$(RANLIB) libfu.a
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
addext_.c: addext.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/addext.c; then echo $(srcdir)/addext.c; else echo addext.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > addext_.c
|
||||
alloca_.c: alloca.c $(ANSI2KNR)
|
||||
@@ -317,6 +330,8 @@ memcmp_.c: memcmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcmp.c; then echo $(srcdir)/memcmp.c; else echo memcmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcmp_.c
|
||||
memcpy_.c: memcpy.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcpy.c; then echo $(srcdir)/memcpy.c; else echo memcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcpy_.c
|
||||
memmove_.c: memmove.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memmove.c; then echo $(srcdir)/memmove.c; else echo memmove.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memmove_.c
|
||||
memset_.c: memset.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memset.c; then echo $(srcdir)/memset.c; else echo memset.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memset_.c
|
||||
mkdir_.c: mkdir.c $(ANSI2KNR)
|
||||
@@ -339,8 +354,6 @@ realloc_.c: realloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > realloc_.c
|
||||
regex_.c: regex.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/regex.c; then echo $(srcdir)/regex.c; else echo regex.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > regex_.c
|
||||
rename_.c: rename.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rename.c; then echo $(srcdir)/rename.c; else echo rename.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rename_.c
|
||||
rmdir_.c: rmdir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rmdir.c; then echo $(srcdir)/rmdir.c; else echo rmdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rmdir_.c
|
||||
rpmatch_.c: rpmatch.c $(ANSI2KNR)
|
||||
@@ -407,12 +420,12 @@ fileblocks_.o filemode_.o fnmatch_.o fsusage_.o ftruncate_.o \
|
||||
full-write_.o getdate_.o getgroups_.o getline_.o getopt_.o getopt1_.o \
|
||||
group-member_.o hash_.o human_.o idcache_.o isdir_.o lchown_.o \
|
||||
long-options_.o lstat_.o makepath_.o malloc_.o memchr_.o memcmp_.o \
|
||||
memcpy_.o memset_.o mkdir_.o mktime_.o modechange_.o mountlist_.o \
|
||||
obstack_.o path-concat_.o posixtm_.o quotearg_.o realloc_.o regex_.o \
|
||||
rename_.o rmdir_.o rpmatch_.o safe-read_.o same_.o save-cwd_.o \
|
||||
savedir_.o stat_.o stpcpy_.o strcasecmp_.o strdup_.o strftime_.o \
|
||||
stripslash_.o strncasecmp_.o strndup_.o strstr_.o strtol_.o strtoul_.o \
|
||||
strtoull_.o strtoumax_.o strverscmp_.o userspec_.o utime_.o \
|
||||
memcpy_.o memmove_.o memset_.o mkdir_.o mktime_.o modechange_.o \
|
||||
mountlist_.o obstack_.o path-concat_.o posixtm_.o quotearg_.o \
|
||||
realloc_.o regex_.o rmdir_.o rpmatch_.o safe-read_.o same_.o \
|
||||
save-cwd_.o savedir_.o stat_.o stpcpy_.o strcasecmp_.o strdup_.o \
|
||||
strftime_.o stripslash_.o strncasecmp_.o strndup_.o strstr_.o strtol_.o \
|
||||
strtoul_.o strtoull_.o strtoumax_.o strverscmp_.o userspec_.o utime_.o \
|
||||
version-etc_.o xgetcwd_.o xmalloc_.o xstrdup_.o xstrtol_.o xstrtoul_.o \
|
||||
xstrtoumax_.o yesno_.o : $(ANSI2KNR)
|
||||
.y.c:
|
||||
@@ -424,23 +437,27 @@ xstrtoumax_.o yesno_.o : $(ANSI2KNR)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
awk ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
awk ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@@ -454,15 +471,10 @@ maintainer-clean-tags:
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
here=`cd $(top_builddir) && pwd`; \
|
||||
top_distdir=`cd $(top_distdir) && pwd`; \
|
||||
distdir=`cd $(distdir) && pwd`; \
|
||||
cd $(top_srcdir) \
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits lib/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@@ -471,37 +483,102 @@ distdir: $(DISTFILES)
|
||||
done
|
||||
|
||||
|
||||
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
|
||||
|
||||
-include $(DEP_FILES)
|
||||
@AMDEP@include $(DEPDIR)/addext$U.Po
|
||||
@AMDEP@include $(DEPDIR)/alloca.Po
|
||||
@AMDEP@include $(DEPDIR)/argmatch$U.Po
|
||||
@AMDEP@include $(DEPDIR)/backupfile$U.Po
|
||||
@AMDEP@include $(DEPDIR)/basename$U.Po
|
||||
@AMDEP@include $(DEPDIR)/chown.Po
|
||||
@AMDEP@include $(DEPDIR)/closeout$U.Po
|
||||
@AMDEP@include $(DEPDIR)/dirname$U.Po
|
||||
@AMDEP@include $(DEPDIR)/dup2.Po
|
||||
@AMDEP@include $(DEPDIR)/error.Po
|
||||
@AMDEP@include $(DEPDIR)/euidaccess.Po
|
||||
@AMDEP@include $(DEPDIR)/exclude$U.Po
|
||||
@AMDEP@include $(DEPDIR)/fileblocks.Po
|
||||
@AMDEP@include $(DEPDIR)/filemode$U.Po
|
||||
@AMDEP@include $(DEPDIR)/fnmatch.Po
|
||||
@AMDEP@include $(DEPDIR)/fsusage.Po
|
||||
@AMDEP@include $(DEPDIR)/ftruncate.Po
|
||||
@AMDEP@include $(DEPDIR)/full-write$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getdate$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getgroups.Po
|
||||
@AMDEP@include $(DEPDIR)/getline.Po
|
||||
@AMDEP@include $(DEPDIR)/getopt$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getopt1$U.Po
|
||||
@AMDEP@include $(DEPDIR)/group-member.Po
|
||||
@AMDEP@include $(DEPDIR)/hash$U.Po
|
||||
@AMDEP@include $(DEPDIR)/human$U.Po
|
||||
@AMDEP@include $(DEPDIR)/idcache$U.Po
|
||||
@AMDEP@include $(DEPDIR)/isdir$U.Po
|
||||
@AMDEP@include $(DEPDIR)/lchown.Po
|
||||
@AMDEP@include $(DEPDIR)/long-options$U.Po
|
||||
@AMDEP@include $(DEPDIR)/lstat.Po
|
||||
@AMDEP@include $(DEPDIR)/makepath$U.Po
|
||||
@AMDEP@include $(DEPDIR)/malloc.Po
|
||||
@AMDEP@include $(DEPDIR)/memchr.Po
|
||||
@AMDEP@include $(DEPDIR)/memcmp.Po
|
||||
@AMDEP@include $(DEPDIR)/memcpy.Po
|
||||
@AMDEP@include $(DEPDIR)/memmove.Po
|
||||
@AMDEP@include $(DEPDIR)/memset.Po
|
||||
@AMDEP@include $(DEPDIR)/mkdir.Po
|
||||
@AMDEP@include $(DEPDIR)/mktime.Po
|
||||
@AMDEP@include $(DEPDIR)/modechange$U.Po
|
||||
@AMDEP@include $(DEPDIR)/mountlist.Po
|
||||
@AMDEP@include $(DEPDIR)/obstack.Po
|
||||
@AMDEP@include $(DEPDIR)/path-concat$U.Po
|
||||
@AMDEP@include $(DEPDIR)/posixtm$U.Po
|
||||
@AMDEP@include $(DEPDIR)/quotearg$U.Po
|
||||
@AMDEP@include $(DEPDIR)/realloc.Po
|
||||
@AMDEP@include $(DEPDIR)/regex.Po
|
||||
@AMDEP@include $(DEPDIR)/rmdir.Po
|
||||
@AMDEP@include $(DEPDIR)/rpmatch.Po
|
||||
@AMDEP@include $(DEPDIR)/safe-read$U.Po
|
||||
@AMDEP@include $(DEPDIR)/same$U.Po
|
||||
@AMDEP@include $(DEPDIR)/save-cwd$U.Po
|
||||
@AMDEP@include $(DEPDIR)/savedir$U.Po
|
||||
@AMDEP@include $(DEPDIR)/stat.Po
|
||||
@AMDEP@include $(DEPDIR)/stpcpy.Po
|
||||
@AMDEP@include $(DEPDIR)/strcasecmp.Po
|
||||
@AMDEP@include $(DEPDIR)/strdup.Po
|
||||
@AMDEP@include $(DEPDIR)/strftime.Po
|
||||
@AMDEP@include $(DEPDIR)/stripslash$U.Po
|
||||
@AMDEP@include $(DEPDIR)/strncasecmp.Po
|
||||
@AMDEP@include $(DEPDIR)/strndup.Po
|
||||
@AMDEP@include $(DEPDIR)/strstr.Po
|
||||
@AMDEP@include $(DEPDIR)/strtol.Po
|
||||
@AMDEP@include $(DEPDIR)/strtoul.Po
|
||||
@AMDEP@include $(DEPDIR)/strtoull.Po
|
||||
@AMDEP@include $(DEPDIR)/strtoumax.Po
|
||||
@AMDEP@include $(DEPDIR)/strverscmp.Po
|
||||
@AMDEP@include $(DEPDIR)/userspec$U.Po
|
||||
@AMDEP@include $(DEPDIR)/utime.Po
|
||||
@AMDEP@include $(DEPDIR)/version-etc$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xgetcwd$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xmalloc$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrdup$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrtol$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrtoul$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrtoumax$U.Po
|
||||
@AMDEP@include $(DEPDIR)/yesno$U.Po
|
||||
|
||||
mostlyclean-depend:
|
||||
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf .deps
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
maintainer-clean-depend:
|
||||
|
||||
%.o: %.c
|
||||
@echo '$(COMPILE) -c -o $@ $<'; \
|
||||
$(COMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
|
||||
@-cp .deps/$(*D)/$(*F).pp .deps/$(*D)/$(*F).P; \
|
||||
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
|
||||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
||||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm .deps/$(*D)/$(*F).pp
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
|
||||
%.lo: %.c
|
||||
@echo '$(LTCOMPILE) -c -o $@ $<'; \
|
||||
$(LTCOMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
|
||||
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
|
||||
< .deps/$(*D)/$(*F).pp > .deps/$(*D)/$(*F).P; \
|
||||
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
|
||||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
||||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm -f .deps/$(*D)/$(*F).pp
|
||||
info-am:
|
||||
info: info-am
|
||||
dvi-am:
|
||||
@@ -535,9 +612,11 @@ clean-generic:
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES)
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
-test -z "getdate.c$(BUILT_SOURCES)" || rm -f getdate.c $(BUILT_SOURCES)
|
||||
-rm -f Makefile.in
|
||||
-test -z "getdate.c$(BUILT_SOURCES)$(MAINTAINERCLEANFILES)" || rm -f getdate.c $(BUILT_SOURCES) $(MAINTAINERCLEANFILES)
|
||||
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
|
||||
mostlyclean-generic
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
|
||||
literal_quoting_style. */
|
||||
#ifndef ARGMATCH_QUOTING_STYLE
|
||||
# define ARGMATCH_QUOTING_STYLE escape_quoting_style
|
||||
# define ARGMATCH_QUOTING_STYLE locale_quoting_style
|
||||
#endif
|
||||
|
||||
/* The following test is to work around the gross typo in
|
||||
@@ -155,21 +155,11 @@ argcasematch (const char *arg, const char *const *arglist,
|
||||
void
|
||||
argmatch_invalid (const char *context, const char *value, int problem)
|
||||
{
|
||||
enum quoting_style saved_quoting_style;
|
||||
char const *format;
|
||||
char const *format = (problem == -1
|
||||
? _("invalid argument %s for `%s'")
|
||||
: _("ambiguous argument %s for `%s'"));
|
||||
|
||||
/* Make sure to have a good quoting style to report errors.
|
||||
literal is insane here. */
|
||||
saved_quoting_style = get_quoting_style (NULL);
|
||||
set_quoting_style (NULL, ARGMATCH_QUOTING_STYLE);
|
||||
|
||||
format = (problem == -1
|
||||
? _("invalid argument `%s' for `%s'")
|
||||
: _("ambiguous argument `%s' for `%s'"));
|
||||
|
||||
error (0, 0, format, quotearg (value), context);
|
||||
|
||||
set_quoting_style (NULL, saved_quoting_style);
|
||||
error (0, 0, format, quotearg_style (ARGMATCH_QUOTING_STYLE, value), context);
|
||||
}
|
||||
|
||||
/* List the valid arguments for argmatch.
|
||||
|
||||
@@ -23,10 +23,20 @@
|
||||
# define FILESYSTEM_PREFIX_LEN(Filename) 0
|
||||
#endif
|
||||
|
||||
#ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef ISSLASH
|
||||
# define ISSLASH(C) ((C) == '/')
|
||||
#endif
|
||||
|
||||
char *base_name PARAMS ((char const *name));
|
||||
|
||||
/* In general, we can't use the builtin `basename' function if available,
|
||||
since it has different meanings in different environments.
|
||||
In some environments the builtin `basename' modifies its argument.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Error handler for noninteractive utilities
|
||||
Copyright (C) 1990,91,92,93,94,95,96,97,98 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990,91,92,93,94,95,96,97,98, 99 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library. Its master source is NOT part of
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
@@ -230,7 +230,10 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist)
|
||||
{
|
||||
#if defined HAVE_STRERROR_R || defined _LIBC
|
||||
char errbuf[1024];
|
||||
fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf));
|
||||
/* Don't use __strerror_r's return value because on some systems
|
||||
(at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */
|
||||
__strerror_r (errnum, errbuf, sizeof errbuf);
|
||||
fprintf (stderr, ": %s", errbuf);
|
||||
#else
|
||||
fprintf (stderr, ": %s", strerror (errnum));
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Convert file size to number of blocks on System V-like machines.
|
||||
Copyright (C) 1990, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -27,7 +27,7 @@
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#if !HAVE_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE
|
||||
#if !HAVE_STRUCT_STAT_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE
|
||||
|
||||
# if HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* fsusage.c -- return space usage of mounted filesystems
|
||||
Copyright (C) 1991, 1992, 1996, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 1992, 1996, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -184,7 +184,7 @@ get_fs_usage (const char *path, const char *disk, struct fs_usage *fsp)
|
||||
truncation, presumably without botching the 4.1.1 case, in which
|
||||
the values are not truncated. The correct counts are stored in
|
||||
undocumented spare fields. */
|
||||
if (fsd.f_blocks == 0x1fffff && fsd.f_spare[0] > 0)
|
||||
if (fsd.f_blocks == 0x7fffffff / fsd.f_bsize && fsd.f_spare[0] > 0)
|
||||
{
|
||||
fsd.f_blocks = fsd.f_spare[0];
|
||||
fsd.f_bfree = fsd.f_spare[1];
|
||||
|
||||
1652
lib/getdate.y
1652
lib/getdate.y
File diff suppressed because it is too large
Load Diff
42
lib/getopt.c
42
lib/getopt.c
@@ -1,25 +1,23 @@
|
||||
/* Getopt for GNU.
|
||||
NOTE: getopt is now part of the C library, so if you don't know what
|
||||
"Keep this file name-space clean" means, talk to drepper@gnu.org
|
||||
before changing it!
|
||||
NOTE: The canonical source of this file is maintained with the GNU
|
||||
C Library. Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
|
||||
Ditto for AIX 3.2 and <stdlib.h>. */
|
||||
@@ -29,13 +27,13 @@
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if !defined __STDC__ || !__STDC__
|
||||
#else
|
||||
# if !defined __STDC__ || !__STDC__
|
||||
/* This is a separate conditional since some stdc systems
|
||||
reject `defined (const)'. */
|
||||
# ifndef const
|
||||
# define const
|
||||
# ifndef const
|
||||
# define const
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -109,7 +107,7 @@
|
||||
Also, when `ordering' is RETURN_IN_ORDER,
|
||||
each non-option ARGV-element is returned here. */
|
||||
|
||||
char *optarg = NULL;
|
||||
char *optarg;
|
||||
|
||||
/* Index in ARGV of the next element to be scanned.
|
||||
This is used for communication to and from the caller
|
||||
@@ -130,7 +128,7 @@ int optind = 1;
|
||||
causes problems with re-calling getopt as programs generally don't
|
||||
know that. */
|
||||
|
||||
int __getopt_initialized = 0;
|
||||
int __getopt_initialized;
|
||||
|
||||
/* The next char to be scanned in the option-element
|
||||
in which the last option character we returned was found.
|
||||
|
||||
26
lib/getopt.h
26
lib/getopt.h
@@ -1,21 +1,21 @@
|
||||
/* Declarations for getopt.
|
||||
Copyright (C) 1989,90,91,92,93,94,96,97,98 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@gnu.org.
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
#ifndef _GETOPT_H
|
||||
|
||||
|
||||
@@ -1,29 +1,26 @@
|
||||
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
||||
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "getopt.h"
|
||||
|
||||
#else
|
||||
#if !defined __STDC__ || !__STDC__
|
||||
/* This is a separate conditional since some stdc systems
|
||||
reject `defined (const)'. */
|
||||
@@ -31,6 +28,9 @@
|
||||
#define const
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "getopt.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
35
lib/getpagesize.h
Normal file
35
lib/getpagesize.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/* Emulate getpagesize on systems that lack it. */
|
||||
|
||||
#ifndef HAVE_GETPAGESIZE
|
||||
|
||||
#ifdef VMS
|
||||
#define getpagesize() 512
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef _SC_PAGESIZE
|
||||
#define getpagesize() sysconf(_SC_PAGESIZE)
|
||||
#else
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
#ifdef EXEC_PAGESIZE
|
||||
#define getpagesize() EXEC_PAGESIZE
|
||||
#else
|
||||
#ifdef NBPG
|
||||
#define getpagesize() NBPG * CLSIZE
|
||||
#ifndef CLSIZE
|
||||
#define CLSIZE 1
|
||||
#endif /* no CLSIZE */
|
||||
#else /* no NBPG */
|
||||
#ifdef NBPC
|
||||
#define getpagesize() NBPC
|
||||
#endif /* NBPC */
|
||||
#endif /* no NBPG */
|
||||
#endif /* no EXEC_PAGESIZE */
|
||||
#endif /* no _SC_PAGESIZE */
|
||||
|
||||
#endif /* not HAVE_GETPAGESIZE */
|
||||
85
lib/hard-locale.c
Normal file
85
lib/hard-locale.c
Normal file
@@ -0,0 +1,85 @@
|
||||
/* hard-locale.c -- Determine whether a locale is hard.
|
||||
Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifndef __GNUC__
|
||||
# ifdef HAVE_ALLOCA_H
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifdef _AIX
|
||||
# pragma alloca
|
||||
# else
|
||||
# ifdef _WIN32
|
||||
# include <malloc.h>
|
||||
# include <io.h>
|
||||
# else
|
||||
# ifndef alloca
|
||||
char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if HAVE_LOCALE_H
|
||||
# include <locale.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
/* Return nonzero if the current CATEGORY locale is hard, i.e. if you
|
||||
can't get away with assuming traditional C or POSIX behavior. */
|
||||
int
|
||||
hard_locale (int category)
|
||||
{
|
||||
#if ! (defined ENABLE_NLS && HAVE_SETLOCALE)
|
||||
return 0;
|
||||
#else
|
||||
|
||||
int hard = 1;
|
||||
char const *p = setlocale (category, 0);
|
||||
|
||||
if (p)
|
||||
{
|
||||
# if defined __GLIBC__ && __GLIBC__ >= 2
|
||||
if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0)
|
||||
hard = 0;
|
||||
# else
|
||||
char *locale = alloca (strlen (p) + 1);
|
||||
strcpy (locale, p);
|
||||
|
||||
/* Temporarily set the locale to the "C" and "POSIX" locales to
|
||||
find their names, so that we can determine whether one or the
|
||||
other is the caller's locale. */
|
||||
if (((p = setlocale (category, "C")) && strcmp (p, locale) == 0)
|
||||
|| ((p = setlocale (category, "POSIX")) && strcmp (p, locale) == 0))
|
||||
hard = 0;
|
||||
|
||||
/* Restore the caller's locale. */
|
||||
setlocale (category, locale);
|
||||
# endif
|
||||
}
|
||||
|
||||
return hard;
|
||||
|
||||
#endif
|
||||
}
|
||||
18
lib/hard-locale.h
Normal file
18
lib/hard-locale.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef HARD_LOCALE_H_
|
||||
# define HARD_LOCALE_H_ 1
|
||||
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
# endif
|
||||
|
||||
int hard_locale PARAMS ((int));
|
||||
|
||||
#endif /* HARD_LOCALE_H_ */
|
||||
53
lib/human.c
53
lib/human.c
@@ -73,6 +73,15 @@ static const char suffixes[] =
|
||||
'Y' /* Yotta */
|
||||
};
|
||||
|
||||
/* Like human_readable_inexact, except always round to even. */
|
||||
char *
|
||||
human_readable (uintmax_t n, char *buf,
|
||||
int from_block_size, int output_block_size)
|
||||
{
|
||||
return human_readable_inexact (n, buf, from_block_size, output_block_size,
|
||||
human_round_to_even);
|
||||
}
|
||||
|
||||
/* Convert N to a human readable format in BUF.
|
||||
|
||||
N is expressed in units of FROM_BLOCK_SIZE. FROM_BLOCK_SIZE must
|
||||
@@ -82,6 +91,9 @@ static const char suffixes[] =
|
||||
the output number. OUTPUT_BLOCK_SIZE must be a multiple of
|
||||
FROM_BLOCK_SIZE or vice versa.
|
||||
|
||||
Use INEXACT_STYLE to determine whether to take the ceiling or floor
|
||||
of any result that cannot be expressed exactly.
|
||||
|
||||
If OUTPUT_BLOCK_SIZE is negative, use a format like "127k" if
|
||||
possible, using powers of -OUTPUT_BLOCK_SIZE; otherwise, use
|
||||
ordinary decimal format. Normally -OUTPUT_BLOCK_SIZE is either
|
||||
@@ -95,8 +107,9 @@ static const char suffixes[] =
|
||||
than -OUTPUT_BLOCK_SIZE aren't modified. */
|
||||
|
||||
char *
|
||||
human_readable (uintmax_t n, char *buf,
|
||||
int from_block_size, int output_block_size)
|
||||
human_readable_inexact (uintmax_t n, char *buf,
|
||||
int from_block_size, int output_block_size,
|
||||
enum human_inexact_style inexact_style)
|
||||
{
|
||||
uintmax_t amt;
|
||||
int base;
|
||||
@@ -207,24 +220,33 @@ human_readable (uintmax_t n, char *buf,
|
||||
|
||||
if (amt < 10)
|
||||
{
|
||||
tenths += 2 < rounding + (tenths & 1);
|
||||
|
||||
if (tenths == 10)
|
||||
if (2 * (1 - (int) inexact_style)
|
||||
< rounding + (tenths & (inexact_style == human_round_to_even)))
|
||||
{
|
||||
amt++;
|
||||
tenths = 0;
|
||||
tenths++;
|
||||
rounding = 0;
|
||||
|
||||
if (tenths == 10)
|
||||
{
|
||||
amt++;
|
||||
tenths = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (amt < 10)
|
||||
{
|
||||
*--p = '0' + tenths;
|
||||
*--p = '.';
|
||||
tenths = 0;
|
||||
tenths = rounding = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (5 < tenths + (2 < rounding + (amt & 1)))
|
||||
if (inexact_style == human_ceiling
|
||||
? 0 < tenths + rounding
|
||||
: inexact_style == human_round_to_even
|
||||
? 5 < tenths + (2 < rounding + (amt & 1))
|
||||
: /* inexact_style == human_floor */ 0)
|
||||
{
|
||||
amt++;
|
||||
|
||||
@@ -254,13 +276,19 @@ human_readable (uintmax_t n, char *buf,
|
||||
static char const *const block_size_args[] = { "human-readable", "si", 0 };
|
||||
static int const block_size_types[] = { -1024, -1000 };
|
||||
|
||||
static int
|
||||
default_block_size (void)
|
||||
{
|
||||
return getenv ("POSIXLY_CORRECT") ? 512 : DEFAULT_BLOCK_SIZE;
|
||||
}
|
||||
|
||||
static strtol_error
|
||||
humblock (char const *spec, int *block_size)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (! spec && ! (spec = getenv ("BLOCK_SIZE")))
|
||||
*block_size = getenv ("POSIXLY_CORRECT") ? 512 : DEFAULT_BLOCK_SIZE;
|
||||
*block_size = default_block_size ();
|
||||
else if (0 <= (i = ARGMATCH (spec, block_size_args, block_size_types)))
|
||||
*block_size = block_size_types[i];
|
||||
else
|
||||
@@ -284,6 +312,11 @@ void
|
||||
human_block_size (char const *spec, int report_errors, int *block_size)
|
||||
{
|
||||
strtol_error e = humblock (spec, block_size);
|
||||
if (*block_size == 0)
|
||||
{
|
||||
*block_size = default_block_size ();
|
||||
e = LONGINT_INVALID;
|
||||
}
|
||||
if (e != LONGINT_OK && report_errors)
|
||||
STRTOL_FATAL_ERROR (spec, _("block size"), e);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,16 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
enum human_inexact_style
|
||||
{
|
||||
human_floor = -1,
|
||||
human_round_to_even = 0,
|
||||
human_ceiling = 1
|
||||
};
|
||||
|
||||
char *human_readable PARAMS ((uintmax_t, char *, int, int));
|
||||
char *human_readable_inexact PARAMS ((uintmax_t, char *, int, int,
|
||||
enum human_inexact_style));
|
||||
|
||||
void human_block_size PARAMS ((char const *, int, int *));
|
||||
|
||||
|
||||
@@ -27,6 +27,13 @@ extern int errno;
|
||||
#endif
|
||||
#include "lchown.h"
|
||||
|
||||
#ifdef STAT_MACROS_BROKEN
|
||||
# undef S_ISLNK
|
||||
#endif
|
||||
#if !defined(S_ISLNK) && defined(S_IFLNK)
|
||||
# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
|
||||
#endif
|
||||
|
||||
/* Declare chown to avoid a warning. Don't include unistd.h,
|
||||
because it may have a conflicting prototype for lchown. */
|
||||
int chown ();
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
# define ENOSYS ENOTSUP
|
||||
# else
|
||||
/* Some systems don't have ENOTSUP either. */
|
||||
# define ENOSYS ENOMSG
|
||||
# define ENOSYS EINVAL
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* linebuffer.c -- read arbitrarily long lines
|
||||
Copyright (C) 1986, 1991, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1986, 1991, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -22,6 +22,7 @@
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include "linebuffer.h"
|
||||
|
||||
char *xmalloc ();
|
||||
@@ -39,9 +40,9 @@ initbuffer (struct linebuffer *linebuffer)
|
||||
}
|
||||
|
||||
/* Read an arbitrarily long line of text from STREAM into LINEBUFFER.
|
||||
Remove any newline. Does not null terminate.
|
||||
Return zero upon error or upon end of file.
|
||||
Otherwise, return LINEBUFFER. */
|
||||
Keep the newline; append a newline if it's the last line of a file
|
||||
that ends in a non-newline character. Do not null terminate.
|
||||
Return LINEBUFFER, except at end of file return 0. */
|
||||
|
||||
struct linebuffer *
|
||||
readline (struct linebuffer *linebuffer, FILE *stream)
|
||||
@@ -52,33 +53,32 @@ readline (struct linebuffer *linebuffer, FILE *stream)
|
||||
char *end = buffer + linebuffer->size; /* Sentinel. */
|
||||
|
||||
if (feof (stream) || ferror (stream))
|
||||
{
|
||||
linebuffer->length = 0;
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
|
||||
while (1)
|
||||
do
|
||||
{
|
||||
c = getc (stream);
|
||||
if (c == EOF)
|
||||
{
|
||||
if (p == buffer)
|
||||
return 0;
|
||||
if (p[-1] == '\n')
|
||||
break;
|
||||
c = '\n';
|
||||
}
|
||||
if (p == end)
|
||||
{
|
||||
linebuffer->size *= 2;
|
||||
buffer = (char *) xrealloc (buffer, linebuffer->size);
|
||||
p += buffer - linebuffer->buffer;
|
||||
p = p - linebuffer->buffer + buffer;
|
||||
linebuffer->buffer = buffer;
|
||||
end = buffer + linebuffer->size;
|
||||
}
|
||||
if (c == EOF || c == '\n')
|
||||
break;
|
||||
*p++ = c;
|
||||
}
|
||||
while (c != '\n');
|
||||
|
||||
if (feof (stream) && p == buffer)
|
||||
{
|
||||
linebuffer->length = 0;
|
||||
return 0;
|
||||
}
|
||||
linebuffer->length = p - linebuffer->buffer;
|
||||
linebuffer->length = p - buffer;
|
||||
return linebuffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* linebuffer.h -- declarations for reading arbitrarily long lines
|
||||
Copyright (C) 1986, 1991, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1986, 1991, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -22,8 +22,8 @@
|
||||
|
||||
struct linebuffer
|
||||
{
|
||||
long size; /* Allocated. */
|
||||
long length; /* Used. */
|
||||
size_t size; /* Allocated. */
|
||||
size_t length; /* Used. */
|
||||
char *buffer;
|
||||
};
|
||||
|
||||
@@ -39,7 +39,8 @@ struct linebuffer
|
||||
void initbuffer PARAMS ((struct linebuffer *linebuffer));
|
||||
|
||||
/* Read an arbitrarily long line of text from STREAM into LINEBUFFER.
|
||||
Remove any newline. Does not null terminate.
|
||||
Keep the newline; append a newline if it's the last line of a file
|
||||
that ends in a non-newline character. Do not null terminate.
|
||||
Return LINEBUFFER, except at end of file return 0. */
|
||||
struct linebuffer *readline PARAMS ((struct linebuffer *linebuffer,
|
||||
FILE *stream));
|
||||
|
||||
@@ -369,7 +369,7 @@ make_path (const char *argpath,
|
||||
if (verbose_fmt_string != NULL)
|
||||
error (0, 0, verbose_fmt_string, dirpath);
|
||||
|
||||
if (owner != (uid_t) -1 && group != (gid_t) -1)
|
||||
if (owner != (uid_t) -1 || group != (gid_t) -1)
|
||||
{
|
||||
if (chown (basename_dir, owner, group)
|
||||
#ifdef AFS
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* md5.h - Declaration of functions and data types used for MD5 sum
|
||||
computing library functions.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1999 Free Software Foundation, Inc.
|
||||
NOTE: The canonical source of this file is maintained with the GNU C
|
||||
Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
|
||||
@@ -118,7 +118,7 @@ extern void md5_process_bytes __P ((const void *buffer, size_t len,
|
||||
endian byte order, so that a byte-wise output yields to the wanted
|
||||
ASCII representation of the message digest.
|
||||
|
||||
IMPORTANT: On some systems it is required that RESBUF is correctly
|
||||
IMPORTANT: On some systems it is required that RESBUF be correctly
|
||||
aligned for a 32 bits value. */
|
||||
extern void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *resbuf));
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1993, 1997 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1993, 1997, 1999 Free Software Foundation, Inc.
|
||||
Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
|
||||
with help from Dan Sahlin (dan@sics.se) and
|
||||
commentary by Jim Blandy (jimb@ai.mit.edu);
|
||||
@@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#undef __ptr_t
|
||||
@@ -45,7 +45,7 @@ USA. */
|
||||
#define LONG_MAX_32_BITS 2147483647
|
||||
|
||||
#ifndef LONG_MAX
|
||||
#define LONG_MAX LONG_MAX_32_BITS
|
||||
# define LONG_MAX LONG_MAX_32_BITS
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
71
lib/memcoll.c
Normal file
71
lib/memcoll.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/* Locale-specific memory comparison.
|
||||
Copyright 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Contributed by Paul Eggert <eggert@twinsun.com>. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
/* Compare S1 (with length S1LEN) and S2 (with length S2LEN) according
|
||||
to the LC_COLLATE locale. S1 and S2 do not overlap, and are not
|
||||
adjacent. Temporarily modify the bytes after S1 and S2, but
|
||||
restore their original contents before returning. */
|
||||
int
|
||||
memcoll (char *s1, size_t s1len, char *s2, size_t s2len)
|
||||
{
|
||||
int diff;
|
||||
char n1 = s1[s1len];
|
||||
char n2 = s2[s2len];
|
||||
|
||||
s1[s1len++] = '\0';
|
||||
s2[s2len++] = '\0';
|
||||
|
||||
while (! (diff = strcoll (s1, s2)))
|
||||
{
|
||||
/* strcoll found no difference, but perhaps it was fooled by NUL
|
||||
characters in the data. Work around this problem by advancing
|
||||
past the NUL chars. */
|
||||
size_t size1 = strlen (s1) + 1;
|
||||
size_t size2 = strlen (s2) + 1;
|
||||
s1 += size1;
|
||||
s2 += size2;
|
||||
s1len -= size1;
|
||||
s2len -= size2;
|
||||
|
||||
if (s1len == 0)
|
||||
{
|
||||
if (s2len != 0)
|
||||
diff = -1;
|
||||
break;
|
||||
}
|
||||
else if (s2len == 0)
|
||||
{
|
||||
diff = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
s1[s1len - 1] = n1;
|
||||
s2[s2len - 1] = n2;
|
||||
|
||||
return diff;
|
||||
}
|
||||
18
lib/memcoll.h
Normal file
18
lib/memcoll.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef MEMCOLL_H_
|
||||
# define MEMCOLL_H_ 1
|
||||
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
# endif
|
||||
|
||||
int memcoll PARAMS ((char *, size_t, char *, size_t));
|
||||
|
||||
#endif /* MEMCOLL_H_ */
|
||||
@@ -1,5 +1,5 @@
|
||||
/* mountlist.c -- return a list of mounted filesystems
|
||||
Copyright (C) 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 1992, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* path-concat.c -- concatenate two arbitrary pathnames
|
||||
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -33,21 +33,49 @@
|
||||
|
||||
char *malloc ();
|
||||
|
||||
/* Concatenate two pathname components, DIR and BASE, in newly-allocated
|
||||
storage and return the result. Return 0 if out of memory. Add a slash
|
||||
between DIR and BASE in the result if neither would contribute one.
|
||||
If each would contribute at least one, elide one from the end of DIR.
|
||||
Otherwise, simply concatenate DIR and BASE. In any case, if
|
||||
BASE_IN_RESULT is non-NULL, set *BASE_IN_RESULT to point to the copy of
|
||||
BASE in the returned concatenation. */
|
||||
#ifndef DIRECTORY_SEPARATOR
|
||||
# define DIRECTORY_SEPARATOR '/'
|
||||
#endif
|
||||
|
||||
#ifndef ISSLASH
|
||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||
#endif
|
||||
|
||||
#include "xalloc.h"
|
||||
#include "path-concat.h"
|
||||
|
||||
/* Concatenate two pathname components, DIR and BASE, in
|
||||
newly-allocated storage and return the result. Return 0 if out of
|
||||
memory. Add a slash between DIR and BASE in the result if neither
|
||||
would contribute one. If each would contribute at least one, elide
|
||||
one from the end of DIR. Otherwise, simply concatenate DIR and
|
||||
BASE. In any case, if BASE_IN_RESULT is non-NULL, set
|
||||
*BASE_IN_RESULT to point to the copy of BASE in the returned
|
||||
concatenation.
|
||||
|
||||
DIR may be NULL, BASE must not be.
|
||||
|
||||
Return NULL if memory is exhausted. */
|
||||
|
||||
char *
|
||||
path_concat (const char *dir, const char *base, char **base_in_result)
|
||||
{
|
||||
char *p;
|
||||
char *p_concat;
|
||||
size_t base_len = strlen (base);
|
||||
size_t dir_len = strlen (dir);
|
||||
size_t base_len;
|
||||
size_t dir_len;
|
||||
|
||||
if (!dir)
|
||||
{
|
||||
p_concat = strdup (base);
|
||||
if (base_in_result)
|
||||
*base_in_result = p_concat;
|
||||
return p_concat;
|
||||
}
|
||||
|
||||
/* DIR is not empty. */
|
||||
base_len = strlen (base);
|
||||
dir_len = strlen (dir);
|
||||
|
||||
p_concat = malloc (dir_len + base_len + 2);
|
||||
if (!p_concat)
|
||||
@@ -55,10 +83,10 @@ path_concat (const char *dir, const char *base, char **base_in_result)
|
||||
|
||||
p = mempcpy (p_concat, dir, dir_len);
|
||||
|
||||
if (*(p - 1) == '/' && *base == '/')
|
||||
if (ISSLASH (*(p - 1)) && ISSLASH(*base))
|
||||
--p;
|
||||
else if (*(p - 1) != '/' && *base != '/')
|
||||
*p++ = '/';
|
||||
else if (!ISSLASH (*(p - 1)) && !ISSLASH(*base))
|
||||
*p++ = DIRECTORY_SEPARATOR;
|
||||
|
||||
if (base_in_result)
|
||||
*base_in_result = p;
|
||||
@@ -67,3 +95,14 @@ path_concat (const char *dir, const char *base, char **base_in_result)
|
||||
|
||||
return p_concat;
|
||||
}
|
||||
|
||||
/* Same, but die when memory is exhausted. */
|
||||
|
||||
char *
|
||||
xpath_concat (const char *dir, const char *base, char **base_in_result)
|
||||
{
|
||||
char *res = path_concat (dir, base, base_in_result);
|
||||
if (res)
|
||||
return res;
|
||||
xalloc_die ();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Define PATH_MAX somehow. Requires sys/types.h.
|
||||
Copyright (C) 1992 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -16,38 +16,39 @@
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _PATHMAX_H
|
||||
#define _PATHMAX_H
|
||||
# define _PATHMAX_H
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
# ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
# endif
|
||||
|
||||
/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
|
||||
PATH_MAX but might cause redefinition warnings when sys/param.h is
|
||||
later included (as on MORE/BSD 4.3). */
|
||||
#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
|
||||
#include <limits.h>
|
||||
#endif
|
||||
# if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
|
||||
# include <limits.h>
|
||||
# endif
|
||||
|
||||
#ifndef _POSIX_PATH_MAX
|
||||
#define _POSIX_PATH_MAX 255
|
||||
#endif
|
||||
# ifndef _POSIX_PATH_MAX
|
||||
# define _POSIX_PATH_MAX 255
|
||||
# endif
|
||||
|
||||
#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
|
||||
#define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
|
||||
#endif
|
||||
# if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
|
||||
# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 \
|
||||
: pathconf ("/", _PC_PATH_MAX))
|
||||
# endif
|
||||
|
||||
/* Don't include sys/param.h if it already has been. */
|
||||
#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
# if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
|
||||
# include <sys/param.h>
|
||||
# endif
|
||||
|
||||
#if !defined(PATH_MAX) && defined(MAXPATHLEN)
|
||||
#define PATH_MAX MAXPATHLEN
|
||||
#endif
|
||||
# if !defined(PATH_MAX) && defined(MAXPATHLEN)
|
||||
# define PATH_MAX MAXPATHLEN
|
||||
# endif
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX _POSIX_PATH_MAX
|
||||
#endif
|
||||
# ifndef PATH_MAX
|
||||
# define PATH_MAX _POSIX_PATH_MAX
|
||||
# endif
|
||||
|
||||
#endif /* _PATHMAX_H */
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
/* Written by Paul Eggert <eggert@twinsun.com> */
|
||||
|
||||
/* FIXME: Multibyte characters are not supported yet. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
@@ -37,6 +39,13 @@
|
||||
# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
|
||||
#endif
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
# define _(text) gettext (text)
|
||||
#else
|
||||
# define _(text) text
|
||||
#endif
|
||||
|
||||
#if HAVE_LIMITS_H
|
||||
# include <limits.h>
|
||||
#endif
|
||||
@@ -76,6 +85,7 @@ char const *const quoting_style_args[] =
|
||||
"shell-always",
|
||||
"c",
|
||||
"escape",
|
||||
"locale",
|
||||
0
|
||||
};
|
||||
|
||||
@@ -86,7 +96,8 @@ enum quoting_style const quoting_style_vals[] =
|
||||
shell_quoting_style,
|
||||
shell_always_quoting_style,
|
||||
c_quoting_style,
|
||||
escape_quoting_style
|
||||
escape_quoting_style,
|
||||
locale_quoting_style
|
||||
};
|
||||
|
||||
/* The default quoting options. */
|
||||
@@ -150,8 +161,9 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
{
|
||||
unsigned char c;
|
||||
size_t i;
|
||||
size_t len;
|
||||
int quote_mark;
|
||||
size_t len = 0;
|
||||
char const *quote_string;
|
||||
size_t quote_string_len;
|
||||
struct quoting_options const *p = o ? o : &default_quoting_options;
|
||||
enum quoting_style quoting_style = p->style;
|
||||
#define STORE(c) \
|
||||
@@ -174,7 +186,6 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
break;
|
||||
|
||||
default:
|
||||
len = 0;
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
if (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize)
|
||||
@@ -199,31 +210,39 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
|
||||
STORE (c);
|
||||
}
|
||||
|
||||
needs_quoting:;
|
||||
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Fall through. */
|
||||
|
||||
case shell_always_quoting_style:
|
||||
quote_mark = '\'';
|
||||
STORE ('\'');
|
||||
quote_string = "'";
|
||||
quote_string_len = 1;
|
||||
break;
|
||||
|
||||
case c_quoting_style:
|
||||
quote_mark = '"';
|
||||
STORE ('"');
|
||||
quote_string = "\"";
|
||||
quote_string_len = 1;
|
||||
break;
|
||||
|
||||
case locale_quoting_style:
|
||||
for (quote_string = _("`"); *quote_string; quote_string++)
|
||||
STORE (*quote_string);
|
||||
quote_string = _("'");
|
||||
quote_string_len = strlen (quote_string);
|
||||
break;
|
||||
|
||||
default:
|
||||
quote_mark = 0;
|
||||
quote_string = 0;
|
||||
quote_string_len = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
len = 0;
|
||||
|
||||
if (quote_mark)
|
||||
STORE (quote_mark);
|
||||
|
||||
for (i = 0; ! (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize); i++)
|
||||
{
|
||||
c = arg[i];
|
||||
@@ -245,6 +264,7 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
|
||||
case c_quoting_style:
|
||||
case escape_quoting_style:
|
||||
case locale_quoting_style:
|
||||
switch (c)
|
||||
{
|
||||
case '?': /* Do not generate trigraphs. */
|
||||
@@ -258,12 +278,12 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
case '\t': c = 't'; goto store_escape;
|
||||
case '\v': c = 'v'; goto store_escape;
|
||||
|
||||
case '"':
|
||||
if (quoting_style == c_quoting_style)
|
||||
goto store_escape;
|
||||
break;
|
||||
case ' ': break;
|
||||
|
||||
default:
|
||||
if (quote_string_len
|
||||
&& strncmp (arg + i, quote_string, quote_string_len) == 0)
|
||||
goto store_escape;
|
||||
if (!ISGRAPH (c))
|
||||
{
|
||||
STORE ('\\');
|
||||
@@ -286,8 +306,9 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
STORE (c);
|
||||
}
|
||||
|
||||
if (quote_mark)
|
||||
STORE (quote_mark);
|
||||
if (quote_string)
|
||||
for (; *quote_string; quote_string++)
|
||||
STORE (*quote_string);
|
||||
|
||||
done:
|
||||
if (len < buffersize)
|
||||
@@ -351,6 +372,21 @@ quotearg (char const *arg)
|
||||
return quotearg_n (0, arg);
|
||||
}
|
||||
|
||||
char *
|
||||
quotearg_n_style (unsigned int n, enum quoting_style s, char const *arg)
|
||||
{
|
||||
struct quoting_options o;
|
||||
o.style = s;
|
||||
memset (o.quote_these_too, 0, sizeof o.quote_these_too);
|
||||
return quotearg_n_options (n, arg, &o);
|
||||
}
|
||||
|
||||
char *
|
||||
quotearg_style (enum quoting_style s, char const *arg)
|
||||
{
|
||||
return quotearg_n_style (0, s, arg);
|
||||
}
|
||||
|
||||
char *
|
||||
quotearg_char (char const *arg, char ch)
|
||||
{
|
||||
|
||||
@@ -24,11 +24,11 @@ enum quoting_style
|
||||
shell_quoting_style, /* --quoting-style=shell */
|
||||
shell_always_quoting_style, /* --quoting-style=shell-always */
|
||||
c_quoting_style, /* --quoting-style=c */
|
||||
escape_quoting_style /* --quoting-style=escape */
|
||||
escape_quoting_style, /* --quoting-style=escape */
|
||||
locale_quoting_style /* --quoting-style=locale */
|
||||
};
|
||||
|
||||
/* For now, --quoting-style=literal is the default, but
|
||||
this is planned to change to --quoting-style=shell in the future. */
|
||||
/* For now, --quoting-style=literal is the default, but this may change. */
|
||||
#ifndef DEFAULT_QUOTING_STYLE
|
||||
# define DEFAULT_QUOTING_STYLE literal_quoting_style
|
||||
#endif
|
||||
@@ -93,6 +93,15 @@ char *quotearg_n PARAMS ((unsigned int n, char const *arg));
|
||||
/* Equivalent to quotearg_n (0, ARG). */
|
||||
char *quotearg PARAMS ((char const *arg));
|
||||
|
||||
/* Use style S and storage slot N to return a quoted version of the string ARG.
|
||||
This is like quotearg_n (N, ARG), except that it uses S with no other
|
||||
options to specify the quoting method. */
|
||||
char *quotearg_n_style PARAMS ((unsigned int n, enum quoting_style s,
|
||||
char const *arg));
|
||||
|
||||
/* Equivalent to quotearg_n_style (0, S, ARG). */
|
||||
char *quotearg_style PARAMS ((enum quoting_style s, char const *arg));
|
||||
|
||||
/* Like quotearg (ARG), except also quote any instances of CH. */
|
||||
char *quotearg_char PARAMS ((char const *arg, char ch));
|
||||
|
||||
|
||||
113
lib/rename.c
113
lib/rename.c
@@ -1,113 +0,0 @@
|
||||
/* BSD compatible rename and directory rename function for System V.
|
||||
Copyright (C) 1988, 1990 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#if STAT_MACROS_BROKEN
|
||||
# undef S_ISDIR
|
||||
#endif
|
||||
|
||||
#if !defined(S_ISDIR) && defined(S_IFDIR)
|
||||
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#endif
|
||||
|
||||
/* Rename file FROM to file TO.
|
||||
Return 0 if successful, -1 if not. */
|
||||
|
||||
int
|
||||
rename (char *from, char *to)
|
||||
{
|
||||
struct stat from_stats, to_stats;
|
||||
|
||||
if (stat (from, &from_stats))
|
||||
return -1;
|
||||
|
||||
/* Be careful not to unlink `from' if it happens to be equal to `to' or
|
||||
(on filesystems that silently truncate filenames after 14 characters)
|
||||
if `from' and `to' share the significant characters. */
|
||||
if (stat (to, &to_stats))
|
||||
{
|
||||
if (errno != ENOENT)
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((from_stats.st_dev == to_stats.st_dev)
|
||||
&& (from_stats.st_ino == to_stats.st_ino))
|
||||
/* `from' and `to' designate the same file on that filesystem. */
|
||||
return 0;
|
||||
|
||||
if (unlink (to) && errno != ENOENT)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef MVDIR
|
||||
|
||||
/* If MVDIR is defined, it should be the full filename of a setuid root
|
||||
program able to link and unlink directories. If MVDIR is not defined,
|
||||
then the capability of renaming directories may be missing. */
|
||||
|
||||
if (S_ISDIR (from_stats.st_mode))
|
||||
{
|
||||
/* Need a setuid root process to link and unlink directories. */
|
||||
int status;
|
||||
pid_t pid = fork ();
|
||||
switch (pid)
|
||||
{
|
||||
case -1: /* Error. */
|
||||
return -1; /* errno already set */
|
||||
|
||||
case 0: /* Child. */
|
||||
execl (MVDIR, "mvdir", from, to, (char *) 0);
|
||||
_exit (1);
|
||||
|
||||
default: /* Parent. */
|
||||
while (wait (&status) != pid)
|
||||
/* Do nothing. */ ;
|
||||
|
||||
if (status)
|
||||
{
|
||||
/* MVDIR failed. */
|
||||
errno = EIO;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
#endif /* MVDIR */
|
||||
|
||||
{
|
||||
if (link (from, to))
|
||||
return -1;
|
||||
if (unlink (from) && errno != ENOENT)
|
||||
{
|
||||
unlink (to);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/* savedir.c -- save the list of files in a directory in a string
|
||||
Copyright (C) 1990, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -76,7 +76,7 @@ char *stpcpy ();
|
||||
Return NULL if DIR cannot be opened or if out of memory. */
|
||||
|
||||
char *
|
||||
savedir (const char *dir, unsigned int name_size)
|
||||
savedir (const char *dir, off_t name_size)
|
||||
{
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
@@ -102,7 +102,7 @@ savedir (const char *dir, unsigned int name_size)
|
||||
|| (dp->d_name[1] != '\0'
|
||||
&& (dp->d_name[1] != '.' || dp->d_name[2] != '\0')))
|
||||
{
|
||||
unsigned size_needed = (namep - name_space) + NAMLEN (dp) + 2;
|
||||
off_t size_needed = (namep - name_space) + NAMLEN (dp) + 2;
|
||||
|
||||
if (size_needed > name_size)
|
||||
{
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
# endif
|
||||
|
||||
char *
|
||||
savedir PARAMS ((const char *dir, unsigned int name_size));
|
||||
savedir PARAMS ((const char *dir, off_t name_size));
|
||||
|
||||
#endif
|
||||
|
||||
@@ -100,7 +100,7 @@ extern char *tzname[];
|
||||
#endif
|
||||
|
||||
#ifndef __P
|
||||
# if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
|
||||
# if defined __GNUC__ || (defined __STDC__ && __STDC__)
|
||||
# define __P(args) args
|
||||
# else
|
||||
# define __P(args) ()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1994, 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -24,6 +24,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
*
|
||||
* Stephen R. van den Berg, berg@pool.informatik.rwth-aachen.de */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -71,7 +75,7 @@ strstr (const char *phaystack, const char *pneedle)
|
||||
a = *++haystack;
|
||||
if (a == '\0')
|
||||
goto ret0;
|
||||
shloop: }
|
||||
shloop:; }
|
||||
while (a != b);
|
||||
|
||||
jin: a = *++haystack;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
@@ -17,6 +17,6 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define UNSIGNED 1
|
||||
#define UNSIGNED 1
|
||||
|
||||
#include <strtol.c>
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Written by Jim Meyering. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
@@ -28,19 +30,41 @@
|
||||
#else
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
#define N_(Text) Text
|
||||
|
||||
/* Default copyright goes to the FSF. */
|
||||
|
||||
char* version_etc_copyright =
|
||||
N_("Copyright (C) 1999 Free Software Foundation, Inc.");
|
||||
|
||||
|
||||
/* Display the --version information the standard way.
|
||||
|
||||
If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
|
||||
the program. The formats are therefore:
|
||||
|
||||
PACKAGE VERSION
|
||||
|
||||
or
|
||||
|
||||
COMMAND_NAME (PACKAGE) VERSION. */
|
||||
void
|
||||
version_etc (FILE *stream,
|
||||
const char *command_name, const char *package,
|
||||
const char *version, const char *authors)
|
||||
{
|
||||
fprintf (stream, "%s (%s) %s\n", command_name, package, version);
|
||||
if (command_name)
|
||||
fprintf (stream, "%s (%s) %s\n", command_name, package, version);
|
||||
else
|
||||
fprintf (stream, "%s %s\n", package, version);
|
||||
fprintf (stream, _("Written by %s.\n"), authors);
|
||||
putc ('\n', stream);
|
||||
|
||||
fputs (_(version_etc_copyright), stream);
|
||||
putc ('\n', stream);
|
||||
|
||||
fputs (_("\
|
||||
\n\
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.\n\
|
||||
This is free software; see the source for copying conditions. There is NO\n\
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
|
||||
"
|
||||
), stream);
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"),
|
||||
stream);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
/* Utility to help print --version output in a consistent format.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Written by Jim Meyering. */
|
||||
|
||||
#ifndef VERSION_ETC_H
|
||||
# define VERSION_ETC_H 1
|
||||
|
||||
@@ -9,9 +28,11 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
extern char *version_etc_copyright;
|
||||
|
||||
void
|
||||
version_etc PARAMS ((FILE *stream,
|
||||
const char *command_name, const char *package,
|
||||
const char *version, const char *authors));
|
||||
const char *command_name, const char *package,
|
||||
const char *version, const char *authors));
|
||||
|
||||
#endif /* VERSION_ETC_H */
|
||||
|
||||
45
lib/xalloc.h
45
lib/xalloc.h
@@ -26,6 +26,16 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifndef __attribute__
|
||||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
|
||||
# define __attribute__(x)
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifndef ATTRIBUTE_NORETURN
|
||||
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
|
||||
# endif
|
||||
|
||||
/* Exit value when the requested amount of memory is not available.
|
||||
It is initialized to EXIT_FAILURE, but the caller may set it to
|
||||
some other value. */
|
||||
@@ -33,20 +43,45 @@ extern int xalloc_exit_failure;
|
||||
|
||||
/* If this pointer is non-zero, run the specified function upon each
|
||||
allocation failure. It is initialized to zero. */
|
||||
extern void (*xalloc_fail_func) ();
|
||||
extern void (*xalloc_fail_func) PARAMS ((void));
|
||||
|
||||
/* If XALLOC_FAIL_FUNC is undefined or a function that returns, this
|
||||
message must be non-NULL. It is translated via gettext.
|
||||
The default value is "Memory exhausted". */
|
||||
extern char *const xalloc_msg_memory_exhausted;
|
||||
|
||||
/* This function is always triggered when memory is exhausted. It is
|
||||
in charge of honoring the three previous items. This is the
|
||||
function to call when one wants the program to die because of a
|
||||
memory allocation failure. */
|
||||
extern void xalloc_die PARAMS ((void)) ATTRIBUTE_NORETURN;
|
||||
|
||||
void *xmalloc PARAMS ((size_t n));
|
||||
void *xcalloc PARAMS ((size_t n, size_t s));
|
||||
void *xrealloc PARAMS ((void *p, size_t n));
|
||||
char *xstrdup PARAMS ((const char *str));
|
||||
|
||||
# define XMALLOC(Type, N_items) ((Type *) xmalloc (sizeof (Type) * (N_items)))
|
||||
# define XCALLOC(Type, N_items) ((Type *) xcalloc (sizeof (Type), (N_items)))
|
||||
# define XREALLOC(Ptr, Type, N_items) \
|
||||
((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_items)))
|
||||
|
||||
/* Declare and alloc memory for VAR of type TYPE. */
|
||||
# define NEW(Type, Var) Type *(Var) = XMALLOC (Type, 1)
|
||||
|
||||
/* Free VAR only if non NULL. */
|
||||
# define XFREE(Var) \
|
||||
do { \
|
||||
if (Var) \
|
||||
free (Var); \
|
||||
} while (0)
|
||||
|
||||
/* Return a pointer to a malloc'ed copy of the array SRC of NUM elements. */
|
||||
# define CCLONE(Src, Num) \
|
||||
(memcpy (xmalloc (sizeof (*Src) * (Num)), (Src), sizeof (*Src) * (Num)))
|
||||
|
||||
/* Return a malloc'ed copy of SRC. */
|
||||
# define CLONE(Src) CCLONE (Src, 1)
|
||||
|
||||
# define XMALLOC(Type, N_bytes) ((Type *) xmalloc (sizeof (Type) * (N_bytes)))
|
||||
# define XCALLOC(Type, N_bytes) ((Type *) xcalloc (sizeof (Type), (N_bytes)))
|
||||
# define XREALLOC(Ptr, Type, N_bytes) \
|
||||
((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_bytes)))
|
||||
|
||||
#endif /* !XALLOC_H_ */
|
||||
|
||||
@@ -59,18 +59,22 @@ you must run the autoconf test for a properly working realloc -- see realloc.m4
|
||||
int xalloc_exit_failure = EXIT_FAILURE;
|
||||
|
||||
/* If non NULL, call this function when memory is exhausted. */
|
||||
void (*xalloc_fail_func) () = 0;
|
||||
void (*xalloc_fail_func) PARAMS ((void)) = 0;
|
||||
|
||||
/* If XALLOC_FAIL_FUNC is NULL, or does return, display this message
|
||||
before exiting when memory is exhausted. Goes through gettext. */
|
||||
char *const xalloc_msg_memory_exhausted = N_("Memory exhausted");
|
||||
|
||||
static void
|
||||
xalloc_fail (void)
|
||||
void
|
||||
xalloc_die (void)
|
||||
{
|
||||
if (xalloc_fail_func)
|
||||
(*xalloc_fail_func) ();
|
||||
error (xalloc_exit_failure, 0, "%s", _(xalloc_msg_memory_exhausted));
|
||||
/* The `noreturn' cannot be given to error, since it may return if
|
||||
its first argument is 0. To help compilers understand the
|
||||
xalloc_die does terminate, call exit. */
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Allocate N bytes of memory dynamically, with error checking. */
|
||||
@@ -82,7 +86,7 @@ xmalloc (size_t n)
|
||||
|
||||
p = malloc (n);
|
||||
if (p == 0)
|
||||
xalloc_fail ();
|
||||
xalloc_die ();
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -95,7 +99,7 @@ xrealloc (void *p, size_t n)
|
||||
{
|
||||
p = realloc (p, n);
|
||||
if (p == 0)
|
||||
xalloc_fail ();
|
||||
xalloc_die ();
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -108,6 +112,6 @@ xcalloc (size_t n, size_t s)
|
||||
|
||||
p = calloc (n, s);
|
||||
if (p == 0)
|
||||
xalloc_fail ();
|
||||
xalloc_die ();
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -78,7 +78,17 @@ extern int errno;
|
||||
|
||||
#include "xstrtol.h"
|
||||
|
||||
__strtol_t __strtol ();
|
||||
#ifndef strtol
|
||||
long int strtol ();
|
||||
#endif
|
||||
|
||||
#ifndef strtoul
|
||||
unsigned long int strtoul ();
|
||||
#endif
|
||||
|
||||
#ifndef strtoumax
|
||||
uintmax_t strtoumax ();
|
||||
#endif
|
||||
|
||||
static int
|
||||
bkm_scale (__strtol_t *x, int scale_factor)
|
||||
|
||||
145
m4/ChangeLog
145
m4/ChangeLog
@@ -1,3 +1,144 @@
|
||||
1999-11-18 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* m4/largefile.m4 (AC_SYS_LARGEFILE_FLAGS): Work around a
|
||||
problem with the QNX 4.25 shell, which doesn't propagate exit
|
||||
status of failed commands inside shell assignments.
|
||||
|
||||
1999-11-17 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* gettext.m4: Use new AC_CONFIG_LINKS in place of AC_LINK_FILES.
|
||||
|
||||
1999-11-07 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* getloadavg.m4: Add `, 1, [FIXME]' to each use of AC_DEFINE.
|
||||
|
||||
1999-11-06 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* link-follow.m4 (jm_AC_FUNC_LINK_FOLLOWS_SYMLINK): New file/macro.
|
||||
* jm-macros.m4 (jm_MACROS): Use it here.
|
||||
|
||||
1999-11-05 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4 (jm_CHECK_ALL_TYPES): Move some tests from configure.in
|
||||
of textutils, fileutils, and sh-utils into this one (shared between
|
||||
those packages) file.
|
||||
Use `AC_CHECK_MEMBERS((struct stat.st_blksize))' instead of deprecated
|
||||
AC_STRUCT_ST_BLKSIZE.
|
||||
|
||||
1999-11-03 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* ssize_t.m4: Remove file. No longer needed since the new version of
|
||||
AC_CHECK_TYPE checks includes unistd.h.
|
||||
* jm-macros.m4: Use straight `AC_CHECK_TYPE(ssize_t, int)'.
|
||||
Suggestion from Akim Demaille.
|
||||
|
||||
1999-10-30 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* uintmax_t.m4: Require 2.14a. Remove backslash before backtick in
|
||||
m4-quoted string.
|
||||
* ls-mntd-fs.m4: Likewise.
|
||||
* jm-macros.m4: Likewise. Also, use AC_TYPE_SSIZE_T instead
|
||||
* jm-winsz1.m4: Likewise.
|
||||
|
||||
* const.m4: Remove file, since the fix made it into the experimental
|
||||
version of autoconf.
|
||||
* mktime.m4: Likewise.
|
||||
|
||||
* check-type.m4: Remove file, now that the latest version of
|
||||
AC_CHECK_TYPE takes a third arg to specify additional #includes.
|
||||
|
||||
* ssize_t.m4: New file, requires experimental version of autoconf.
|
||||
* jm-macros.m4: Use new AC_TYPE_SSIZE_T instead of my hacked
|
||||
AC_CHECK_TYPE.
|
||||
|
||||
1999-10-04 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: Don't require autoconf-2.14.1.
|
||||
|
||||
1999-09-22 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* largefile.m4 (AC_SYS_LARGEFILE_FLAGS): Work around GCC
|
||||
2.95.1 bug with HP-UX 10.20.
|
||||
|
||||
1999-09-17 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4 (AC_REPLACE_FUNCS): Add strdup.
|
||||
Paul Nevai reported a link failure on a NeXT CUBE with NeXTSTEP 3.3
|
||||
due to missing strdup (against sh-utils-2.0).
|
||||
|
||||
1999-08-29 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: Require jm_BISON.
|
||||
* bison.m4: New file.
|
||||
|
||||
1999-08-17 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* m4/largefile.m4 (AC_SYS_LARGEFILE): Fix typo: missing comma
|
||||
in value for _FILE_OFFSET_BITS, which broke ports to HP-UX 10.20.
|
||||
|
||||
1999-08-05 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* getline.m4: Rename test file from conftestdata to conftest.data
|
||||
to avoid conflicts with `conftest' on 8+3 filesystems.
|
||||
Suggestion from Eli Zaretskii.
|
||||
|
||||
1999-08-04 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: Move a 4-line block of code from the configure.in of
|
||||
fileutils and sh-utils (textutils's getline test was inadequate).
|
||||
(AM_FUNC_GETLINE): Run this test.
|
||||
(AC_CHECK_FUNCS): Check for getdelim.
|
||||
Reported by Bob Proulx.
|
||||
|
||||
1999-08-02 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: Add a comment.
|
||||
|
||||
1999-08-01 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* mktime.m4 (AC_FUNC_MKTIME): Undefine to avoid syntax errors from m4.
|
||||
|
||||
1999-08-01 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* lfs.m4: Remove this file.
|
||||
* largefile.m4: New file. It contains the old contents of
|
||||
lfs.m4, except that all names with prefix AC_LFS have been
|
||||
changed to use the prefix AC_SYS_LARGEFILE instead, to be
|
||||
compatible with future autoconf versions. Also, some minor m4
|
||||
quoting problems have been fixed.
|
||||
|
||||
1999-07-16 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): Make sure
|
||||
that we can shift, multiply and divide unsigned long long
|
||||
values; Ultrix cc can't do it.
|
||||
|
||||
1999-07-14 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): Check whether
|
||||
<inttypes.h> defines strtoumax as a macro (and not as a
|
||||
function).
|
||||
|
||||
1999-07-05 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* gettext.m4 (AM_WITH_NLS): Remove unnecessary lines.
|
||||
Fix typo: $nls_cv_header_intl was misspelled as $nsl_cv_header_intl.
|
||||
(AM_GNU_GETTEXT): Fix problem with brackets and m4 quoting,
|
||||
and simplify the shell code.
|
||||
|
||||
1999-07-03 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* mktime.m4: New file, which is a preview of what should appear
|
||||
in the next public autoconf release.
|
||||
|
||||
1999-07-20 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4 (AC_REPLACE_FUNCS): Add memmove.
|
||||
|
||||
1999-07-15 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: (AC_CHECK_FUNCS): Check for getpagesize.
|
||||
|
||||
1999-05-22 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4 (AC_REPLACE_FUNCS): Add memchr.
|
||||
@@ -97,7 +238,7 @@
|
||||
* group-member.m4: New file -- extracted from sh-utils' configure.in.
|
||||
|
||||
1999-02-05 Eli Zaretskii <eliz@is.elta.co.il>
|
||||
* m4/gettext.m4: Support DOS-style d:/foo/bar absolute file names.
|
||||
* gettext.m4: Support DOS-style d:/foo/bar absolute file names.
|
||||
|
||||
1999-02-06 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
@@ -446,7 +587,7 @@
|
||||
Add lseek and memchr.
|
||||
|
||||
* decl.m4: s/HAVE_DECLARATION_/HAVE_DECL_/g.
|
||||
T.E.Dickey <dickey@clark.net> said that some older preprocessors
|
||||
T.E.Dickey <dickey@clark.net> said that some older preprocessors
|
||||
have a 20-character limit on names.
|
||||
|
||||
1997-11-30 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
@@ -4,10 +4,9 @@
|
||||
EXTRA_DIST = README Makefile.am.in \
|
||||
afs.m4 \
|
||||
assert.m4 \
|
||||
bison.m4 \
|
||||
check-decl.m4 \
|
||||
check-type.m4 \
|
||||
chown.m4 \
|
||||
const.m4 \
|
||||
d-ino.m4 \
|
||||
d-type.m4 \
|
||||
decl.m4 \
|
||||
@@ -27,9 +26,10 @@ jm-macros.m4 \
|
||||
jm-mktime.m4 \
|
||||
jm-winsz1.m4 \
|
||||
jm-winsz2.m4 \
|
||||
largefile.m4 \
|
||||
lchown.m4 \
|
||||
lcmessage.m4 \
|
||||
lfs.m4 \
|
||||
link-follow.m4 \
|
||||
ls-mntd-fs.m4 \
|
||||
lstat.m4 \
|
||||
malloc.m4 \
|
||||
|
||||
@@ -59,13 +59,17 @@ PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
DF_PROG = @DF_PROG@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
@@ -83,7 +87,6 @@ LIBOBJS = @LIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
MVDIR_PROG = @MVDIR_PROG@
|
||||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
POFILES = @POFILES@
|
||||
@@ -94,16 +97,16 @@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
install_sh = @install_sh@
|
||||
l = @l@
|
||||
|
||||
|
||||
EXTRA_DIST = README Makefile.am.in \
|
||||
afs.m4 \
|
||||
assert.m4 \
|
||||
bison.m4 \
|
||||
check-decl.m4 \
|
||||
check-type.m4 \
|
||||
chown.m4 \
|
||||
const.m4 \
|
||||
d-ino.m4 \
|
||||
d-type.m4 \
|
||||
decl.m4 \
|
||||
@@ -123,9 +126,10 @@ jm-macros.m4 \
|
||||
jm-mktime.m4 \
|
||||
jm-winsz1.m4 \
|
||||
jm-winsz2.m4 \
|
||||
largefile.m4 \
|
||||
lchown.m4 \
|
||||
lcmessage.m4 \
|
||||
lfs.m4 \
|
||||
link-follow.m4 \
|
||||
ls-mntd-fs.m4 \
|
||||
lstat.m4 \
|
||||
malloc.m4 \
|
||||
@@ -177,15 +181,10 @@ TAGS:
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
here=`cd $(top_builddir) && pwd`; \
|
||||
top_distdir=`cd $(top_distdir) && pwd`; \
|
||||
distdir=`cd $(distdir) && pwd`; \
|
||||
cd $(top_srcdir) \
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits m4/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@@ -228,6 +227,7 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
8
m4/bison.m4
Normal file
8
m4/bison.m4
Normal file
@@ -0,0 +1,8 @@
|
||||
#serial 1
|
||||
|
||||
AC_DEFUN(jm_BISON,
|
||||
[
|
||||
# getdate.y works with bison only.
|
||||
: ${YACC='bison -y'}
|
||||
AC_SUBST(YACC)
|
||||
])
|
||||
@@ -1,30 +0,0 @@
|
||||
#serial 2
|
||||
|
||||
dnl Just like AC_CHECK_TYPE from autoconf-2.12, but also checks in unistd.h
|
||||
dnl on systems that have it. Fujitsu UXP/V needs this for ssize_t.
|
||||
dnl Now, also uses the three-argument form of AC_DEFINE.
|
||||
|
||||
undefine([AC_CHECK_TYPE])
|
||||
dnl AC_CHECK_TYPE(TYPE, DEFAULT)
|
||||
AC_DEFUN(AC_CHECK_TYPE,
|
||||
[AC_REQUIRE([AC_HEADER_STDC])dnl
|
||||
AC_CHECK_HEADERS(unistd.h)
|
||||
AC_MSG_CHECKING(for $1)
|
||||
AC_CACHE_VAL(ac_cv_type_$1,
|
||||
[AC_EGREP_CPP(dnl
|
||||
changequote(<<,>>)dnl
|
||||
<<$1[^a-zA-Z_0-9]>>dnl
|
||||
changequote([,]), [#include <sys/types.h>
|
||||
#if STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
# include <stddef.h>
|
||||
#endif
|
||||
#if HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl
|
||||
AC_MSG_RESULT($ac_cv_type_$1)
|
||||
if test $ac_cv_type_$1 = no; then
|
||||
AC_DEFINE($1, $2,
|
||||
[ Define to \`$2' if certain system header files doesn't define it.])
|
||||
fi
|
||||
])
|
||||
66
m4/const.m4
66
m4/const.m4
@@ -1,66 +0,0 @@
|
||||
#serial 1
|
||||
|
||||
dnl Just like AC_C_CONST from autoconf-2.12, but with an initializer
|
||||
dnl for `charset x' and with
|
||||
dnl AC_DEFINE(const, )
|
||||
dnl changed to
|
||||
dnl AC_DEFINE_UNQUOTED(const, [/* empty */])
|
||||
dnl to avoid this warning:
|
||||
dnl [...]/m4: Warning: Excess arguments to built-in `define' ignored
|
||||
|
||||
undefine([AC_C_CONST])
|
||||
AC_DEFUN(AC_C_CONST,
|
||||
[dnl This message is consistent in form with the other checking messages,
|
||||
dnl and with the result message.
|
||||
AC_CACHE_CHECK([for working const], ac_cv_c_const,
|
||||
[AC_TRY_COMPILE(,
|
||||
changequote(<<, >>)dnl
|
||||
<<
|
||||
/* Ultrix mips cc rejects this. */
|
||||
typedef int charset[2]; const charset x = {0, 0};
|
||||
/* SunOS 4.1.1 cc rejects this. */
|
||||
char const *const *ccp;
|
||||
char **p;
|
||||
/* NEC SVR4.0.2 mips cc rejects this. */
|
||||
struct point {int x, y;};
|
||||
static struct point const zero = {0,0};
|
||||
/* AIX XL C 1.02.0.0 rejects this.
|
||||
It does not let you subtract one const X* pointer from another in an arm
|
||||
of an if-expression whose if-part is not a constant expression */
|
||||
const char *g = "string";
|
||||
ccp = &g + (g ? g-g : 0);
|
||||
/* HPUX 7.0 cc rejects these. */
|
||||
++ccp;
|
||||
p = (char**) ccp;
|
||||
ccp = (char const *const *) p;
|
||||
{ /* SCO 3.2v4 cc rejects this. */
|
||||
char *t;
|
||||
char const *s = 0 ? (char *) 0 : (char const *) 0;
|
||||
|
||||
*t++ = 0;
|
||||
}
|
||||
{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
|
||||
int x[] = {25, 17};
|
||||
const int *foo = &x[0];
|
||||
++foo;
|
||||
}
|
||||
{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
|
||||
typedef const int *iptr;
|
||||
iptr p = 0;
|
||||
++p;
|
||||
}
|
||||
{ /* AIX XL C 1.02.0.0 rejects this saying
|
||||
"k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
|
||||
struct s { int j; const int *ap[3]; };
|
||||
struct s *b; b->j = 5;
|
||||
}
|
||||
{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
|
||||
const int foo = 10;
|
||||
}
|
||||
>>,
|
||||
changequote([, ])dnl
|
||||
ac_cv_c_const=yes, ac_cv_c_const=no)])
|
||||
if test $ac_cv_c_const = no; then
|
||||
AC_DEFINE_UNQUOTED(const, [/* empty */])
|
||||
fi
|
||||
])
|
||||
@@ -14,7 +14,7 @@ AC_DEFUN(AM_FUNC_GETLINE,
|
||||
if test $am_getline_needs_run_time_check = yes; then
|
||||
AC_CHECK_HEADERS(string.h)
|
||||
AC_CACHE_CHECK([for working getline function], am_cv_func_working_getline,
|
||||
[echo fooN |tr -d '\012'|tr N '\012' > conftestdata
|
||||
[echo fooN |tr -d '\012'|tr N '\012' > conftest.data
|
||||
AC_TRY_RUN([
|
||||
# include <stdio.h>
|
||||
# include <sys/types.h>
|
||||
@@ -26,7 +26,7 @@ AC_DEFUN(AM_FUNC_GETLINE,
|
||||
char *line = NULL;
|
||||
size_t siz = 0;
|
||||
int len;
|
||||
FILE *in = fopen ("./conftestdata", "r");
|
||||
FILE *in = fopen ("./conftest.data", "r");
|
||||
if (!in)
|
||||
return 1;
|
||||
len = getline (&line, &siz, in);
|
||||
|
||||
@@ -37,14 +37,14 @@ fi
|
||||
AC_REPLACE_FUNCS(getloadavg)
|
||||
|
||||
if test $ac_cv_func_getloadavg = yes; then
|
||||
AC_DEFINE(HAVE_GETLOADAVG)
|
||||
AC_DEFINE(HAVE_GETLOADAVG, 1, [FIXME])
|
||||
ac_have_func=yes
|
||||
else
|
||||
AC_DEFINE(C_GETLOADAVG, 1, [Define if using getloadavg.c.])
|
||||
# Figure out what our getloadavg.c needs.
|
||||
ac_have_func=no
|
||||
AC_CHECK_HEADER(sys/dg_sys_info.h,
|
||||
[ac_have_func=yes; AC_DEFINE(DGUX)
|
||||
[ac_have_func=yes; AC_DEFINE(DGUX, 1, [FIXME])
|
||||
AC_CHECK_LIB(dgc, dg_sys_info)])
|
||||
|
||||
AC_CHECK_HEADER(locale.h)
|
||||
@@ -54,18 +54,18 @@ else
|
||||
# uses stabs), but it is still SVR4. We cannot check for <elf.h> because
|
||||
# Irix 4.0.5F has the header but not the library.
|
||||
if test $ac_have_func = no && test $ac_cv_lib_elf_elf_begin = yes; then
|
||||
ac_have_func=yes; AC_DEFINE(SVR4)
|
||||
ac_have_func=yes; AC_DEFINE(SVR4, 1, [FIXME])
|
||||
fi
|
||||
|
||||
if test $ac_have_func = no; then
|
||||
AC_CHECK_HEADER(inq_stats/cpustats.h,
|
||||
[ac_have_func=yes; AC_DEFINE(UMAX)
|
||||
AC_DEFINE(UMAX4_3)])
|
||||
[ac_have_func=yes; AC_DEFINE(UMAX, 1, [FIXME])
|
||||
AC_DEFINE(UMAX4_3, 1, [FIXME])])
|
||||
fi
|
||||
|
||||
if test $ac_have_func = no; then
|
||||
AC_CHECK_HEADER(sys/cpustats.h,
|
||||
[ac_have_func=yes; AC_DEFINE(UMAX)])
|
||||
[ac_have_func=yes; AC_DEFINE(UMAX, 1, [FIXME])])
|
||||
fi
|
||||
|
||||
if test $ac_have_func = no; then
|
||||
@@ -73,13 +73,13 @@ else
|
||||
fi
|
||||
|
||||
AC_CHECK_HEADER(nlist.h,
|
||||
[AC_DEFINE(NLIST_STRUCT)
|
||||
[AC_DEFINE(NLIST_STRUCT, 1, [FIXME])
|
||||
AC_CACHE_CHECK([for n_un in struct nlist], ac_cv_struct_nlist_n_un,
|
||||
[AC_TRY_COMPILE([#include <nlist.h>],
|
||||
[struct nlist n; n.n_un.n_name = 0;],
|
||||
ac_cv_struct_nlist_n_un=yes, ac_cv_struct_nlist_n_un=no)])
|
||||
if test $ac_cv_struct_nlist_n_un = yes; then
|
||||
AC_DEFINE(NLIST_NAME_UNION)
|
||||
AC_DEFINE(NLIST_NAME_UNION, 1, [FIXME])
|
||||
fi
|
||||
])dnl
|
||||
fi # Do not have getloadavg in system libraries.
|
||||
@@ -95,7 +95,7 @@ Yowza Am I SETGID yet
|
||||
#endif],
|
||||
ac_cv_func_getloadavg_setgid=yes, ac_cv_func_getloadavg_setgid=no)])
|
||||
if test $ac_cv_func_getloadavg_setgid = yes; then
|
||||
NEED_SETGID=true; AC_DEFINE(GETLOADAVG_PRIVILEGED)
|
||||
NEED_SETGID=true; AC_DEFINE(GETLOADAVG_PRIVILEGED, 1, [FIXME])
|
||||
else
|
||||
NEED_SETGID=false
|
||||
fi
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# but which still want to provide support for the GNU gettext functionality.
|
||||
# Please note that the actual code is *not* freely available.
|
||||
|
||||
# serial 106
|
||||
# serial 107
|
||||
|
||||
AC_PREREQ(2.13) dnl Minimum Autoconf version required.
|
||||
|
||||
@@ -48,21 +48,11 @@ AC_DEFUN(AM_WITH_NLS,
|
||||
|
||||
if test "$gt_cv_func_gettext_libc" != "yes"; then
|
||||
AC_CHECK_LIB(intl, bindtextdomain,
|
||||
[AC_CACHE_CHECK([for gettext in libintl],
|
||||
gt_cv_func_gettext_libintl,
|
||||
[AC_CHECK_LIB(intl, gettext,
|
||||
gt_cv_func_gettext_libintl=yes,
|
||||
gt_cv_func_gettext_libintl=no)],
|
||||
gt_cv_func_gettext_libintl=no)])
|
||||
|
||||
if test "$gt_cv_func_gettext_libintl" = yes; then
|
||||
LIBS="$LIBS -lintl"
|
||||
fi
|
||||
|
||||
[AC_CHECK_LIB(intl, gettext)])
|
||||
fi
|
||||
|
||||
if test "$gt_cv_func_gettext_libc" = "yes" \
|
||||
|| test "$gt_cv_func_gettext_libintl" = "yes"; then
|
||||
|| test "$ac_cv_lib_intl_gettext" = "yes"; then
|
||||
AC_DEFINE(HAVE_GETTEXT, 1,
|
||||
[Define to 1 if you have gettext and don't want to use GNU gettext.])
|
||||
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
||||
@@ -166,11 +156,11 @@ AC_DEFUN(AM_WITH_NLS,
|
||||
nls_cv_header_intl=intl/libintl.h
|
||||
nls_cv_header_libgt=intl/libgettext.h
|
||||
fi
|
||||
if test -z "$nsl_cv_header_intl"; then
|
||||
if test -z "$nls_cv_header_intl"; then
|
||||
# Clean out junk possibly left behind by a previous configuration.
|
||||
rm -f intl/libintl.h
|
||||
fi
|
||||
AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
|
||||
AC_CONFIG_LINKS($nls_cv_header_intl:$nls_cv_header_libgt)
|
||||
AC_OUTPUT_COMMANDS(
|
||||
[case "$CONFIG_FILES" in *po/Makefile.in*)
|
||||
sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
|
||||
@@ -313,17 +303,16 @@ strdup __argz_count __argz_stringify __argz_next])
|
||||
dnl Generate list of files to be processed by xgettext which will
|
||||
dnl be included in po/Makefile.
|
||||
test -d po || mkdir po
|
||||
if test "x$srcdir" != "x."; then
|
||||
changequote(, )dnl
|
||||
if test "x`echo $srcdir | sed -e 's@^[A-z]:@@' -e 's@/.*@@'`" = "x"; then
|
||||
posrcprefix="$srcdir/"
|
||||
else
|
||||
posrcprefix="../$srcdir/"
|
||||
fi
|
||||
changequote([, ])dnl
|
||||
else
|
||||
posrcprefix="../"
|
||||
fi
|
||||
changequote(, )dnl
|
||||
case "$srcdir" in
|
||||
.)
|
||||
posrcprefix="../" ;;
|
||||
/* | [A-Za-z]:*)
|
||||
posrcprefix="$srcdir/" ;;
|
||||
*)
|
||||
posrcprefix="../$srcdir/" ;;
|
||||
esac
|
||||
changequote([, ])dnl
|
||||
rm -f po/POTFILES
|
||||
sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
|
||||
< $srcdir/po/POTFILES.in > po/POTFILES
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#serial 7
|
||||
#serial 10
|
||||
|
||||
dnl Misc type-related macros for fileutils, sh-utils, textutils.
|
||||
|
||||
AC_DEFUN(jm_MACROS,
|
||||
[
|
||||
AC_PREREQ(2.14.1) dnl Minimum Autoconf version required.
|
||||
AC_PREREQ(2.14a)
|
||||
|
||||
GNU_PACKAGE="GNU $PACKAGE"
|
||||
AC_DEFINE_UNQUOTED(GNU_PACKAGE, "$GNU_PACKAGE",
|
||||
[The concatenation of the strings \`GNU ', and PACKAGE.])
|
||||
[The concatenation of the strings `GNU ', and PACKAGE.])
|
||||
AC_SUBST(GNU_PACKAGE)
|
||||
|
||||
dnl This macro actually runs replacement code. See isc-posix.m4.
|
||||
@@ -16,6 +16,7 @@ AC_DEFUN(jm_MACROS,
|
||||
|
||||
jm_INCLUDED_REGEX([lib/regex.c])
|
||||
|
||||
AC_REQUIRE([jm_BISON])
|
||||
AC_REQUIRE([jm_ASSERT])
|
||||
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
|
||||
AC_REQUIRE([jm_STRUCT_UTIMBUF])
|
||||
@@ -38,9 +39,17 @@ AC_DEFUN(jm_MACROS,
|
||||
AC_REQUIRE([jm_FUNC_FNMATCH])
|
||||
AC_REQUIRE([jm_AFS])
|
||||
AC_REQUIRE([jm_AC_PREREQ_XSTRTOUMAX])
|
||||
AC_REQUIRE([jm_AC_FUNC_LINK_FOLLOWS_SYMLINK])
|
||||
|
||||
AC_REPLACE_FUNCS(strcasecmp strncasecmp)
|
||||
AC_REPLACE_FUNCS(dup2)
|
||||
|
||||
dnl used by e.g. intl/*domain.c and lib/canon-host.c
|
||||
AC_REPLACE_FUNCS(strdup)
|
||||
|
||||
AC_REPLACE_FUNCS(memchr)
|
||||
AC_REPLACE_FUNCS(memmove)
|
||||
AC_CHECK_FUNCS(getpagesize)
|
||||
|
||||
# By default, argmatch should fail calling usage (1).
|
||||
AC_DEFINE(ARGMATCH_DIE, [usage (1)],
|
||||
@@ -49,12 +58,37 @@ AC_DEFUN(jm_MACROS,
|
||||
[Define to the declaration of the xargmatch failure function.])
|
||||
|
||||
dnl Used to define SETVBUF in sys2.h.
|
||||
dnl This evokes the following warning from autoconf:
|
||||
dnl ...: warning: AC_TRY_RUN called without default to allow cross compiling
|
||||
AC_FUNC_SETVBUF_REVERSED
|
||||
|
||||
AM_FUNC_GETLINE
|
||||
if test $am_cv_func_working_getline != yes; then
|
||||
AC_CHECK_FUNCS(getdelim)
|
||||
fi
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN(jm_CHECK_ALL_TYPES,
|
||||
[
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_BIGENDIAN
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
AC_C_LONG_DOUBLE
|
||||
|
||||
AC_HEADER_DIRENT
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_MEMBERS((struct stat.st_blksize))
|
||||
AC_STRUCT_ST_BLOCKS
|
||||
|
||||
AC_STRUCT_TM
|
||||
AC_HEADER_TIME
|
||||
AC_STRUCT_TIMEZONE
|
||||
AC_HEADER_STAT
|
||||
AC_STRUCT_ST_MTIM_NSEC
|
||||
AC_STRUCT_ST_DM_MODE
|
||||
|
||||
AC_TYPE_GETGROUPS
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_OFF_T
|
||||
@@ -63,7 +97,11 @@ AC_DEFUN(jm_CHECK_ALL_TYPES,
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_UID_T
|
||||
AC_CHECK_TYPE(ino_t, unsigned long)
|
||||
|
||||
dnl This relies on the fact that autoconf 2.14a's implementation of
|
||||
dnl AC_CHECK_TYPE checks includes unistd.h.
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
|
||||
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
|
||||
AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
|
||||
])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl From Jim Meyering.
|
||||
#serial 2
|
||||
#serial 3
|
||||
AC_DEFUN(jm_HEADER_TIOCGWINSZ_IN_TERMIOS_H,
|
||||
[AC_REQUIRE([AM_SYS_POSIX_TERMIOS])
|
||||
AC_CACHE_CHECK([whether use of TIOCGWINSZ requires termios.h],
|
||||
@@ -21,6 +21,6 @@ AC_DEFUN(jm_HEADER_TIOCGWINSZ_IN_TERMIOS_H,
|
||||
AC_DEFUN(jm_WINSIZE_IN_PTEM,
|
||||
[AC_CHECK_HEADER([sys/ptem.h],
|
||||
AC_DEFINE(WINSIZE_IN_PTEM, 1,
|
||||
[Define if your system defines \`struct winsize' in sys/ptem.h.]))
|
||||
[Define if your system defines `struct winsize' in sys/ptem.h.]))
|
||||
]
|
||||
)
|
||||
|
||||
129
m4/largefile.m4
Normal file
129
m4/largefile.m4
Normal file
@@ -0,0 +1,129 @@
|
||||
#serial 7
|
||||
|
||||
dnl By default, many hosts won't let programs access large files;
|
||||
dnl one must use special compiler options to get large-file access to work.
|
||||
dnl For more details about this brain damage please see:
|
||||
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
||||
|
||||
dnl Written by Paul Eggert <eggert@twinsun.com>.
|
||||
|
||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
||||
dnl AC_SYS_LARGEFILE_FLAGS(FLAGSNAME)
|
||||
AC_DEFUN(AC_SYS_LARGEFILE_FLAGS,
|
||||
[AC_CACHE_CHECK([for $1 value to request large file support],
|
||||
ac_cv_sys_largefile_$1,
|
||||
[if ($GETCONF LFS_$1) >conftest.1 2>conftest.2 && test ! -s conftest.2
|
||||
then
|
||||
ac_cv_sys_largefile_$1=`cat conftest.1`
|
||||
else
|
||||
ac_cv_sys_largefile_$1=no
|
||||
ifelse($1, CFLAGS,
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 requires -D__STDC_EXT__ with gcc 2.95.1.
|
||||
changequote(, )dnl
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
changequote([, ])dnl
|
||||
if test "$GCC" = yes; then
|
||||
ac_cv_sys_largefile_CFLAGS=-D__STDC_EXT__
|
||||
fi
|
||||
;;
|
||||
# IRIX 6.2 and later require cc -n32.
|
||||
changequote(, )dnl
|
||||
irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
|
||||
changequote([, ])dnl
|
||||
if test "$GCC" != yes; then
|
||||
ac_cv_sys_largefile_CFLAGS=-n32
|
||||
fi
|
||||
esac
|
||||
if test "$ac_cv_sys_largefile_CFLAGS" != no; then
|
||||
ac_save_CC="$CC"
|
||||
CC="$CC $ac_cv_sys_largefile_CFLAGS"
|
||||
AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
|
||||
CC="$ac_save_CC"
|
||||
fi])
|
||||
fi
|
||||
rm -f conftest*])])
|
||||
|
||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
||||
dnl AC_SYS_LARGEFILE_SPACE_APPEND(VAR, VAL)
|
||||
AC_DEFUN(AC_SYS_LARGEFILE_SPACE_APPEND,
|
||||
[case $2 in
|
||||
no) ;;
|
||||
?*)
|
||||
case "[$]$1" in
|
||||
'') $1=$2 ;;
|
||||
*) $1=[$]$1' '$2 ;;
|
||||
esac ;;
|
||||
esac])
|
||||
|
||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
||||
dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
|
||||
AC_DEFUN(AC_SYS_LARGEFILE_MACRO_VALUE,
|
||||
[AC_CACHE_CHECK([for $1], $2,
|
||||
[$2=no
|
||||
changequote(, )dnl
|
||||
$4
|
||||
for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
-D$1)
|
||||
$2=1 ;;
|
||||
-D$1=*)
|
||||
$2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
|
||||
esac
|
||||
done
|
||||
changequote([, ])dnl
|
||||
])
|
||||
if test "[$]$2" != no; then
|
||||
AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
|
||||
fi])
|
||||
|
||||
AC_DEFUN(AC_SYS_LARGEFILE,
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_ARG_ENABLE(largefile,
|
||||
[ --disable-largefile omit support for large files])
|
||||
if test "$enable_largefile" != no; then
|
||||
AC_CHECK_TOOL(GETCONF, getconf)
|
||||
AC_SYS_LARGEFILE_FLAGS(CFLAGS)
|
||||
AC_SYS_LARGEFILE_FLAGS(LDFLAGS)
|
||||
AC_SYS_LARGEFILE_FLAGS(LIBS)
|
||||
|
||||
for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
no) ;;
|
||||
-D_FILE_OFFSET_BITS=*) ;;
|
||||
-D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
|
||||
-D_LARGE_FILES | -D_LARGE_FILES=*) ;;
|
||||
-D?* | -I?*)
|
||||
AC_SYS_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
|
||||
*)
|
||||
AC_SYS_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
|
||||
esac
|
||||
done
|
||||
AC_SYS_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
|
||||
AC_SYS_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
|
||||
ac_cv_sys_file_offset_bits,
|
||||
[Number of bits in a file offset, on hosts where this is settable.],
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_sys_file_offset_bits=64 ;;
|
||||
esac])
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
|
||||
ac_cv_sys_largefile_source,
|
||||
[Define to make fseeko etc. visible, on some hosts.],
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_sys_largefile_source=1 ;;
|
||||
esac])
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
|
||||
ac_cv_sys_large_files,
|
||||
[Define for large files, on AIX-style hosts.],
|
||||
[case "$host_os" in
|
||||
# AIX 4.2 and later
|
||||
aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
|
||||
ac_cv_sys_large_files=1 ;;
|
||||
esac])
|
||||
fi
|
||||
])
|
||||
106
m4/lfs.m4
106
m4/lfs.m4
@@ -1,106 +0,0 @@
|
||||
#serial 3
|
||||
|
||||
dnl The problem is that the default compilation flags in Solaris 2.6 won't
|
||||
dnl let programs access large files; you need to tell the compiler that
|
||||
dnl you actually want your programs to work on large files. For more
|
||||
dnl details about this brain damage please see:
|
||||
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
||||
|
||||
dnl Written by Paul Eggert <eggert@twinsun.com>.
|
||||
|
||||
dnl Internal subroutine of AC_LFS.
|
||||
dnl AC_LFS_FLAGS(FLAGSNAME)
|
||||
AC_DEFUN(AC_LFS_FLAGS,
|
||||
[AC_CACHE_CHECK([for $1 value to request large file support], ac_cv_lfs_$1,
|
||||
[ac_cv_lfs_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
|
||||
ac_cv_lfs_$1=no
|
||||
ifelse($1, CFLAGS,
|
||||
[case "$host_os" in
|
||||
# IRIX 6.2 and later
|
||||
irix6.[[2-9]]* | irix6.1[[0-9]]* | irix[[7-9]].* | irix[[1-9]][[0-9]]*)
|
||||
if test "$GCC" != yes; then
|
||||
ac_cv_lfs_CFLAGS=-n32
|
||||
fi
|
||||
ac_save_CC="$CC"
|
||||
CC="$ac_save_CC $ac_cv_lfs_CFLAGS"
|
||||
AC_TRY_LINK(, , , ac_cv_lfs_CFLAGS=no)
|
||||
CC="$ac_save_CC"
|
||||
esac])
|
||||
}])])
|
||||
|
||||
dnl Internal subroutine of AC_LFS.
|
||||
dnl AC_LFS_SPACE_APPEND(VAR, VAL)
|
||||
AC_DEFUN(AC_LFS_SPACE_APPEND,
|
||||
[case $2 in
|
||||
no) ;;
|
||||
?*)
|
||||
case "[$]$1" in
|
||||
'') $1=$2 ;;
|
||||
*) $1=[$]$1' '$2 ;;
|
||||
esac ;;
|
||||
esac])
|
||||
|
||||
dnl Internal subroutine of AC_LFS.
|
||||
dnl AC_LFS_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
|
||||
AC_DEFUN(AC_LFS_MACRO_VALUE,
|
||||
[AC_CACHE_CHECK([for $1], $2,
|
||||
[[$2=no
|
||||
$4
|
||||
for ac_flag in $ac_cv_lfs_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
-D$1)
|
||||
$2=1 ;;
|
||||
-D$1=*)
|
||||
$2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
|
||||
esac
|
||||
done]])
|
||||
if test "[$]$2" != no; then
|
||||
AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
|
||||
fi])
|
||||
|
||||
AC_DEFUN(AC_LFS,
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_ARG_ENABLE(lfs,
|
||||
[ --disable-lfs omit Large File Support])
|
||||
if test "$enable_lfs" != no; then
|
||||
AC_CHECK_TOOL(GETCONF, getconf)
|
||||
AC_LFS_FLAGS(CFLAGS)
|
||||
AC_LFS_FLAGS(LDFLAGS)
|
||||
AC_LFS_FLAGS(LIBS)
|
||||
for ac_flag in $ac_cv_lfs_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
no) ;;
|
||||
-D_FILE_OFFSET_BITS=*) ;;
|
||||
-D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
|
||||
-D_LARGE_FILES | -D_LARGE_FILES=*) ;;
|
||||
-[[DI]]?*)
|
||||
AC_LFS_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
|
||||
*)
|
||||
AC_LFS_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
|
||||
esac
|
||||
done
|
||||
AC_LFS_SPACE_APPEND(LDFLAGS, "$ac_cv_lfs_LDFLAGS")
|
||||
AC_LFS_SPACE_APPEND(LIBS, "$ac_cv_lfs_LIBS")
|
||||
AC_LFS_MACRO_VALUE(_FILE_OFFSET_BITS, ac_cv_file_offset_bits,
|
||||
[Number of bits in a file offset, on hosts where this is settable. ],
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_file_offset_bits=64 ;;
|
||||
esac])
|
||||
AC_LFS_MACRO_VALUE(_LARGEFILE_SOURCE, ac_cv_largefile_source,
|
||||
[Define to make fseeko etc. visible, on some hosts. ],
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_largefile_source=1 ;;
|
||||
esac])
|
||||
AC_LFS_MACRO_VALUE(_LARGE_FILES, ac_cv_large_files,
|
||||
[Define for large files, on AIX-style hosts. ],
|
||||
[case "$host_os" in
|
||||
# AIX 4.2 and later
|
||||
aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
|
||||
ac_cv_large_files=1 ;;
|
||||
esac])
|
||||
fi
|
||||
])
|
||||
64
m4/link-follow.m4
Normal file
64
m4/link-follow.m4
Normal file
@@ -0,0 +1,64 @@
|
||||
#serial 1
|
||||
dnl Run a program to determine whether whether link(2) follows symlinks.
|
||||
dnl Set LINK_FOLLOWS_SYMLINKS accordingly.
|
||||
|
||||
AC_DEFUN(jm_AC_FUNC_LINK_FOLLOWS_SYMLINK,
|
||||
[dnl
|
||||
AC_CACHE_CHECK([whether link(2) follows symlinks],
|
||||
jm_ac_cv_func_link_follows_symlink,
|
||||
[
|
||||
dnl poor-man's AC_REQUIRE: FIXME: repair this once autoconf-3 provides
|
||||
dnl the appropriate framework.
|
||||
test -z "$ac_cv_header_unistd_h" \
|
||||
&& AC_CHECK_HEADERS(unistd.h)
|
||||
|
||||
# Create a regular file.
|
||||
echo > conftest.file
|
||||
AC_TRY_RUN(
|
||||
[
|
||||
# include <sys/types.h>
|
||||
# include <sys/stat.h>
|
||||
# ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
# endif
|
||||
|
||||
# define SAME_INODE(Stat_buf_1, Stat_buf_2) \
|
||||
((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \
|
||||
&& (Stat_buf_1).st_dev == (Stat_buf_2).st_dev)
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
const char *file = "conftest.file";
|
||||
const char *sym = "conftest.sym";
|
||||
const char *hard = "conftest.hard";
|
||||
struct stat sb_file, sb_hard;
|
||||
|
||||
/* Create a symlink to the regular file. */
|
||||
if (symlink (file, sym))
|
||||
abort ();
|
||||
|
||||
/* Create a hard link to that symlink. */
|
||||
if (link (sym, hard))
|
||||
abort ();
|
||||
|
||||
if (lstat (hard, &sb_hard))
|
||||
abort ();
|
||||
if (lstat (file, &sb_file))
|
||||
abort ();
|
||||
|
||||
/* If the dev/inode of hard and file are the same, then
|
||||
the link call followed the symlink. */
|
||||
return SAME_INODE (sb_hard, sb_file) ? 0 : 1;
|
||||
}
|
||||
],
|
||||
jm_ac_cv_func_link_follows_symlink=yes,
|
||||
jm_ac_cv_func_link_follows_symlink=no,
|
||||
jm_ac_cv_func_link_follows_symlink=yes dnl We're cross compiling.
|
||||
)
|
||||
])
|
||||
if test $jm_ac_cv_func_link_follows_symlink = yes; then
|
||||
AC_DEFINE(LINK_FOLLOWS_SYMLINKS, 1,
|
||||
[Define if `link(2)' dereferences symbolic links.])
|
||||
fi
|
||||
])
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 2
|
||||
#serial 3
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl
|
||||
@@ -11,6 +11,8 @@ dnl FIXME: add AC_REQUIRE uses to pull in all definitions required
|
||||
dnl for all uses of $ac_cv_func_* and $ac_cv_header_* variables below.
|
||||
dnl
|
||||
|
||||
AC_PREREQ(2.14a)
|
||||
|
||||
AC_DEFUN(jm_LIST_MOUNTED_FILESYSTEMS,
|
||||
[
|
||||
# Determine how to get the list of mounted filesystems.
|
||||
@@ -130,7 +132,7 @@ if test -z "$list_mounted_fs"; then
|
||||
AC_DEFINE(MOUNTED_VMOUNT, 1,
|
||||
[Define if there is a function named mntctl that can be used to read
|
||||
the list of mounted filesystems, and there is a system header file
|
||||
that declares \`struct vmount.' (AIX)])
|
||||
that declares `struct vmount.' (AIX)])
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#serial 3
|
||||
#serial 4
|
||||
|
||||
dnl From Paul Eggert.
|
||||
|
||||
AC_PREREQ(2.13)
|
||||
AC_PREREQ(2.14a)
|
||||
|
||||
# Define uintmax_t to `unsigned long' or `unsigned long long'
|
||||
# if <inttypes.h> does not exist.
|
||||
@@ -16,7 +16,7 @@ AC_DEFUN(jm_AC_TYPE_UINTMAX_T,
|
||||
&& ac_type='unsigned long long' \
|
||||
|| ac_type='unsigned long'
|
||||
AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
|
||||
[ Define to \`unsigned long' or \`unsigned long long'
|
||||
[ Define to `unsigned long' or `unsigned long long'
|
||||
if <inttypes.h> doesn't define.])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl From Paul Eggert.
|
||||
|
||||
AC_DEFUN(jm_AC_TYPE_UNSIGNED_LONG_LONG,
|
||||
[
|
||||
AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
|
||||
[AC_TRY_COMPILE([],
|
||||
[unsigned long long i = (unsigned long long) -1;],
|
||||
[AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
|
||||
[unsigned long long ullmax = (unsigned long long) -1;
|
||||
return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
|
||||
ac_cv_type_unsigned_long_long=yes,
|
||||
ac_cv_type_unsigned_long_long=no)])
|
||||
if test $ac_cv_type_unsigned_long_long = yes; then
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
# autoconf tests required for use of xstrtoumax.c
|
||||
|
||||
@@ -7,14 +7,26 @@ AC_DEFUN(jm_AC_PREREQ_XSTRTOUMAX,
|
||||
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
|
||||
AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
|
||||
AC_CHECK_HEADERS(stdlib.h)
|
||||
AC_REPLACE_FUNCS(strtoumax)
|
||||
|
||||
AC_CACHE_CHECK([whether <inttypes.h> defines strtoumax as a macro],
|
||||
jm_cv_func_strtoumax_macro,
|
||||
AC_EGREP_CPP([inttypes_h_defines_strtoumax], [#include <inttypes.h>
|
||||
#ifdef strtoumax
|
||||
inttypes_h_defines_strtoumax
|
||||
#endif],
|
||||
jm_cv_func_strtoumax_macro=yes,
|
||||
jm_cv_func_strtoumax_macro=no))
|
||||
|
||||
if test "$jm_cv_func_strtoumax_macro" != yes; then
|
||||
AC_REPLACE_FUNCS(strtoumax)
|
||||
fi
|
||||
|
||||
dnl We don't need (and can't compile) the replacement strtoull
|
||||
dnl unless the type `unsigned long long' exists.
|
||||
dnl Also, only the replacement strtoumax invokes strtoull,
|
||||
dnl so we need the replacement strtoull only if strtoumax does not exist.
|
||||
case "$ac_cv_type_unsigned_long_long,$ac_cv_func_strtoumax" in
|
||||
yes,no)
|
||||
case "$ac_cv_type_unsigned_long_long,$jm_cv_func_strtoumax_macro,$ac_cv_func_strtoumax" in
|
||||
yes,no,no)
|
||||
AC_REPLACE_FUNCS(strtoull)
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
basename \- strip directory and suffix from filenames
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
cat \- concatenate files and print on the standard output
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
chgrp \- change group ownership
|
||||
[DESCRIPTION]
|
||||
." Add any additional description here
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
[NAME]
|
||||
chmod \- change file access permissions
|
||||
[DESCRIPTION]
|
||||
This manual page
|
||||
documents the GNU version of
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
[NAME]
|
||||
chown \- change file owner and group
|
||||
[DESCRIPTION]
|
||||
This manual page
|
||||
documents the GNU version of
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
chroot \- run command or interactive shell with special root directory
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
cksum \- checksum and count the bytes in a file
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
comm \- compare two sorted files line by line
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
18
man/cp.x
18
man/cp.x
@@ -1,18 +1,4 @@
|
||||
.\" Copyright (C) 1994, 95, 96, 97 Free Software Foundation, Inc.
|
||||
.\"
|
||||
.\" Permission is granted to make and distribute verbatim copies of this
|
||||
.\" manual provided the copyright notice and this permission notice are
|
||||
.\" preserved on all copies.
|
||||
.\"
|
||||
.\" Permission is granted to copy and distribute modified versions of
|
||||
.\" this manual under the conditions for verbatim copying, provided that
|
||||
.\" the entire resulting derived work is distributed under the terms of a
|
||||
.\" permission notice identical to this one.
|
||||
.\"
|
||||
.\" Permission is granted to copy and distribute translations of this
|
||||
.\" manual into another language, under the above conditions for modified
|
||||
.\" versions, except that this permission notice may be stated in a
|
||||
.\" translation approved by the Foundation.
|
||||
.\"
|
||||
[NAME]
|
||||
cp \- copy files and directories
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
csplit \- split a file into sections determined by context lines
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
cut \- remove sections from each line of files
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
date \- print or set the system date and time
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
2
man/dd.x
2
man/dd.x
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
dd \- convert and copy a file
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
18
man/df.x
18
man/df.x
@@ -1,19 +1,5 @@
|
||||
.\" Copyright (C) 1994, 95, 96, 97, 98 Free Software Foundation, Inc.
|
||||
.\"
|
||||
.\" Permission is granted to make and distribute verbatim copies of this
|
||||
.\" manual provided the copyright notice and this permission notice are
|
||||
.\" preserved on all copies.
|
||||
.\"
|
||||
.\" Permission is granted to copy and distribute modified versions of
|
||||
.\" this manual under the conditions for verbatim copying, provided that
|
||||
.\" the entire resulting derived work is distributed under the terms of a
|
||||
.\" permission notice identical to this one.
|
||||
.\"
|
||||
.\" Permission is granted to copy and distribute translations of this
|
||||
.\" manual into another language, under the above conditions for modified
|
||||
.\" versions, except that this permission notice may be stated in a
|
||||
.\" translation approved by the Foundation.
|
||||
.\"
|
||||
[NAME]
|
||||
df \- report filesystem disk space usage
|
||||
[DESCRIPTION]
|
||||
This manual page
|
||||
documents the GNU version of
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
dir \- list directory contents
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
dircolors \- color setup for ls
|
||||
[DESCRIPTION]
|
||||
." Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
dirname \- strip non-directory suffix from file name
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
2
man/du.x
2
man/du.x
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
du \- estimate file space usage
|
||||
[DESCRIPTION]
|
||||
." Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
echo \- display a line of text
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
env \- run a program in a modified environment
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
expand \- convert tabs to spaces
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
expr \- evaluate expressions
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
false \- do nothing, unsuccessfully
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
fmt \- simple optimal text formatter
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
fold \- wrap each input line to fit in specified width
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
groups \- print the groups a user is in
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
head \- output the first part of files
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
534
man/help2man
534
man/help2man
@@ -18,14 +18,16 @@
|
||||
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# Written by Brendan O'Dea <bod@compusol.com.au>
|
||||
# Available from ftp://ftp.gnu.org/gnu/help2man/
|
||||
|
||||
use 5.004;
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
use Text::Tabs qw(expand);
|
||||
use POSIX qw(strftime setlocale LC_TIME);
|
||||
|
||||
my $this_program = 'help2man';
|
||||
my $this_version = '1.010';
|
||||
my $this_version = '1.019';
|
||||
my $version_info = <<EOT;
|
||||
$this_program $this_version
|
||||
|
||||
@@ -41,95 +43,126 @@ my $help_info = <<EOT;
|
||||
|
||||
Usage: $this_program [OPTION]... EXECUTABLE
|
||||
|
||||
--name=STRING use `STRING' as the description for the NAME paragraph
|
||||
--include=FILE include material from `FILE'
|
||||
--opt-include=FILE include material from `FILE' if it exists
|
||||
--output=FILE send output to `FILE'
|
||||
--no-info suppress pointer to Texinfo manual
|
||||
--help print this help, then exit
|
||||
--version print $this_program program version number, then exit
|
||||
-n, --name=STRING use `STRING' as the description for the NAME paragraph
|
||||
-s, --section=SECTION use `SECTION' as the section for the man page
|
||||
-i, --include=FILE include material from `FILE'
|
||||
-I, --opt-include=FILE include material from `FILE' if it exists
|
||||
-o, --output=FILE send output to `FILE'
|
||||
-N, --no-info suppress pointer to Texinfo manual
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
|
||||
EXECUTABLE should accept `--help' and `version' options.
|
||||
EXECUTABLE should accept `--help' and `--version' options.
|
||||
EOT
|
||||
|
||||
my ($include, $opt_name, $opt_include, $opt_output, $opt_no_info);
|
||||
my $section = 1;
|
||||
my ($opt_name, @opt_include, $opt_output, $opt_no_info);
|
||||
|
||||
# Parse options.
|
||||
Getopt::Long::config('bundling');
|
||||
GetOptions (
|
||||
'name=s' => \$opt_name,
|
||||
'include=s' => \$include,
|
||||
'opt-include=s' => \$opt_include,
|
||||
'output=s' => \$opt_output,
|
||||
'no-info' => \$opt_no_info,
|
||||
help => sub { print $help_info; exit },
|
||||
version => sub { print $version_info; exit },
|
||||
'n|name=s' => \$opt_name,
|
||||
's|section=s' => \$section,
|
||||
'i|include=s' => sub { push @opt_include, [ pop, 1 ] },
|
||||
'I|opt-include=s' => sub { push @opt_include, [ pop, 0 ] },
|
||||
'o|output=s' => \$opt_output,
|
||||
'N|no-info' => \$opt_no_info,
|
||||
help => sub { print $help_info; exit },
|
||||
version => sub { print $version_info; exit },
|
||||
) or die $help_info;
|
||||
|
||||
die $help_info unless @ARGV == 1;
|
||||
|
||||
my %include = ();
|
||||
my @include = (); # to retain order
|
||||
my %append = ();
|
||||
my @include = (); # retain order given in include file
|
||||
|
||||
# Provide replacement `quote-regex' operator for pre-5.005.
|
||||
BEGIN { eval q(sub qr { '' =~ $_[0]; $_[0] }) if $] < 5.005 }
|
||||
|
||||
# Process include file (if given). Format is:
|
||||
#
|
||||
# [section name]
|
||||
# verbatim text
|
||||
# [section name]
|
||||
# verbatim text
|
||||
#
|
||||
# or
|
||||
#
|
||||
# /pattern/
|
||||
# verbatim text
|
||||
#
|
||||
|
||||
if ($include or $opt_include)
|
||||
for (@opt_include)
|
||||
{
|
||||
if (open INC, $include || $opt_include)
|
||||
{
|
||||
my $sect;
|
||||
my ($inc, $required) = @$_;
|
||||
|
||||
while (<INC>)
|
||||
next unless -f $inc or $required;
|
||||
die "$this_program: can't open `$inc' ($!)\n"
|
||||
unless open INC, $inc;
|
||||
|
||||
my $key;
|
||||
my $hash = \%include;
|
||||
|
||||
while (<INC>)
|
||||
{
|
||||
# [section]
|
||||
if (/^\[([^]]+)\]/)
|
||||
{
|
||||
if (/^\[([^]]+)\]/)
|
||||
$key = uc $1;
|
||||
$key =~ s/^\s+//;
|
||||
$key =~ s/\s+$//;
|
||||
$hash = \%include;
|
||||
push @include, $key unless $include{$key};
|
||||
next;
|
||||
}
|
||||
|
||||
# /pattern/
|
||||
if (m!^/(.*)/([ims]*)!)
|
||||
{
|
||||
my $pat = $2 ? "(?$2)$1" : $1;
|
||||
|
||||
# Check pattern.
|
||||
eval { $key = qr($pat) };
|
||||
if ($@)
|
||||
{
|
||||
$sect = uc $1;
|
||||
$sect =~ s/^\s+//;
|
||||
$sect =~ s/\s+$//;
|
||||
next;
|
||||
$@ =~ s/ at .*? line \d.*//;
|
||||
die "$inc:$.:$@";
|
||||
}
|
||||
|
||||
# Silently ignore anything before the first
|
||||
# section--allows for comments and revision info.
|
||||
next unless $sect;
|
||||
|
||||
push @include, $sect unless $include{$sect};
|
||||
$include{$sect} ||= '';
|
||||
$include{$sect} .= $_;
|
||||
$hash = \%append;
|
||||
next;
|
||||
}
|
||||
|
||||
close INC;
|
||||
# Silently ignore anything before the first
|
||||
# section--allows for comments and revision info.
|
||||
next unless $key;
|
||||
|
||||
die "$this_program: no valid information found in `$include'\n"
|
||||
unless %include;
|
||||
$hash->{$key} ||= '';
|
||||
$hash->{$key} .= $_;
|
||||
}
|
||||
|
||||
# Compress trailing blank lines.
|
||||
for (keys %include)
|
||||
{
|
||||
$include{$_} =~ s/\n+$//;
|
||||
$include{$_} .= "\n" unless /^NAME$/;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
die "$this_program: can't open `$include' ($!)\n" if $include;
|
||||
}
|
||||
close INC;
|
||||
|
||||
die "$this_program: no valid information found in `$inc'\n"
|
||||
unless $key;
|
||||
}
|
||||
|
||||
# Compress trailing blank lines.
|
||||
for my $hash (\(%include, %append))
|
||||
{
|
||||
for (keys %$hash) { $hash->{$_} =~ s/\n+$/\n/ }
|
||||
}
|
||||
|
||||
# Turn off localisation of executable's ouput.
|
||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||
|
||||
# Turn off localisation of date (for strftime)
|
||||
# Turn off localisation of date (for strftime).
|
||||
setlocale LC_TIME, 'C';
|
||||
|
||||
# Grab help and version paragraphs from executable
|
||||
my @help = split /\n\n+/, `$ARGV[0] --help 2>/dev/null`
|
||||
or die "$this_program: can't get `--help' info from $ARGV[0]\n";
|
||||
|
||||
my @version = split /\n\n+/, `$ARGV[0] --version 2>/dev/null`
|
||||
or die "$this_program: can't get `--version' info from $ARGV[0]\n";
|
||||
# Grab help and version info from executable.
|
||||
my ($help_text, $version_text) = map {
|
||||
join '', map { s/ +$//; expand $_ } `$ARGV[0] --$_ 2>/dev/null`
|
||||
or die "$this_program: can't get `--$_' info from $ARGV[0]\n"
|
||||
} qw(help version);
|
||||
|
||||
my $date = strftime "%B %Y", localtime;
|
||||
(my $program = $ARGV[0]) =~ s!.*/!!;
|
||||
@@ -157,16 +190,16 @@ if ($opt_output)
|
||||
#
|
||||
# and seperated from any copyright/author details by a blank line.
|
||||
|
||||
$_ = shift @version;
|
||||
($_, $version_text) = split /\n+/, $version_text, 2;
|
||||
|
||||
if (/^(\S+)\s+\(((?:GNU|Free)\s+[^)]+)\)\s+(.*)/ or
|
||||
/^(\S+)\s+-\s*((?:GNU|Free)\s+\S+)\s+(.*)/)
|
||||
if (/^(\S+) +\(((?:GNU|Free) +[^)]+)\) +(.*)/ or
|
||||
/^(\S+) +- *((?:GNU|Free) +\S+) +(.*)/)
|
||||
{
|
||||
$program = $1;
|
||||
$package = $2;
|
||||
$version = $3;
|
||||
}
|
||||
elsif (/^((?:GNU|Free)\s+)?(\S+)\s+(.*)/)
|
||||
elsif (/^((?:GNU|Free) +)?(\S+) +(.*)/)
|
||||
{
|
||||
$program = $2;
|
||||
$package = $1 ? "$1$2" : $2;
|
||||
@@ -179,160 +212,241 @@ else
|
||||
|
||||
$program =~ s!.*/!!;
|
||||
|
||||
# no info for `info' itself
|
||||
# No info for `info' itself.
|
||||
$opt_no_info = 1 if $program eq 'info';
|
||||
|
||||
# --name overrides --include contents
|
||||
$include{NAME} = "$program \\- $opt_name" if $opt_name;
|
||||
# --name overrides --include contents.
|
||||
$include{NAME} = "$program \\- $opt_name\n" if $opt_name;
|
||||
|
||||
# Default (useless) NAME paragraph
|
||||
$include{NAME} ||= "$program \\- manual page for $program $version";
|
||||
# Default (useless) NAME paragraph.
|
||||
$include{NAME} ||= "$program \\- manual page for $program $version\n";
|
||||
|
||||
# Man pages traditionally have the page title in caps.
|
||||
my $PROGRAM = uc $program;
|
||||
|
||||
# Header.
|
||||
print <<EOT;
|
||||
.\\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
|
||||
.TH $PROGRAM 1 "$date" "$package $version" "FSF"
|
||||
.SH NAME
|
||||
$include{NAME}
|
||||
EOT
|
||||
# Extract usage clause(s) [if any] for SYNOPSIS.
|
||||
if ($help_text =~ s/^Usage:( +(\S+))(.*)((?:\n(?: {6}\1| *or: +\S).*)*)//m)
|
||||
{
|
||||
my @syn = $2 . $3;
|
||||
|
||||
my $accumulate = 1;
|
||||
my @description = ();
|
||||
if ($_ = $4)
|
||||
{
|
||||
s/^\n//;
|
||||
for (split /\n/) { s/^ *(or: +)?//; push @syn, $_ }
|
||||
}
|
||||
|
||||
my $synopsis = '';
|
||||
for (@syn)
|
||||
{
|
||||
$synopsis .= ".br\n" if $synopsis;
|
||||
s/(\S+) *//;
|
||||
$synopsis .= ".B $1\n";
|
||||
s/\s+$//;
|
||||
s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
|
||||
s/^/\\fI/ unless s/^\\fR//;
|
||||
$_ .= '\fR';
|
||||
s/(\\fI)( *)/$2$1/g;
|
||||
s/\\fI\\fR//g;
|
||||
s/^\\fR//;
|
||||
s/\\fI$//;
|
||||
s/^\./\\&./;
|
||||
|
||||
$synopsis .= "$_\n";
|
||||
}
|
||||
|
||||
$include{SYNOPSIS} ||= $synopsis;
|
||||
}
|
||||
|
||||
# Process text, initial section is DESCRIPTION.
|
||||
my $sect = 'DESCRIPTION';
|
||||
$_ = "$help_text\n\n$version_text";
|
||||
|
||||
# Normalise paragraph breaks.
|
||||
s/^\n+//;
|
||||
s/\n*$/\n/;
|
||||
s/\n\n+/\n\n/g;
|
||||
|
||||
# Temporarily exchange leading dots and backslashes for tokens.
|
||||
s/^\./\x80/mg;
|
||||
s/\\/\x81/g;
|
||||
|
||||
# Start a new paragraph (if required) for these.
|
||||
s/([^\n])\n(Report +bugs|Email +bug +reports +to|Written +by)/$1\n\n$2/g;
|
||||
|
||||
sub convert_option;
|
||||
|
||||
# Output converted --help information.
|
||||
for (@help)
|
||||
while (length)
|
||||
{
|
||||
chomp;
|
||||
|
||||
if (s/^Usage:\s+\S+\s+(.*)\n?//)
|
||||
# Convert some standard paragraph names.
|
||||
if (s/^(Options|Examples): *\n//)
|
||||
{
|
||||
# Turn the usage clause into a synopsis.
|
||||
my $synopsis = '';
|
||||
|
||||
do {
|
||||
my $syn = $1;
|
||||
$syn =~ s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
|
||||
$syn =~ s/^/\\fI/ unless $syn =~ s/^\\fR//;
|
||||
$syn .= '\fR';
|
||||
$syn =~ s/\\fI(\s*)\\fR/$1/g;
|
||||
|
||||
$synopsis .= ".br\n" unless $accumulate;
|
||||
$synopsis .= ".B $program\n";
|
||||
$synopsis .= "$syn\n";
|
||||
$accumulate = 0;
|
||||
} while s/^(?:Usage|\s*or):\s+\S+\s+(.*)\n?//;
|
||||
|
||||
# Include file overrides SYNOPSIS.
|
||||
print ".SH SYNOPSIS\n", $include{SYNOPSIS} || $synopsis;
|
||||
|
||||
# Dump any accumulated description text.
|
||||
print ".SH DESCRIPTION\n";
|
||||
print @description;
|
||||
|
||||
# Add additional description text from include file.
|
||||
if ($include{DESCRIPTION})
|
||||
{
|
||||
print ".PP\n" unless $include{DESCRIPTION} =~ /^\..P/;
|
||||
print $include{DESCRIPTION};
|
||||
}
|
||||
|
||||
next unless $_;
|
||||
}
|
||||
|
||||
# Accumulate text if the synopsis has not been produced yet.
|
||||
if ($accumulate)
|
||||
{
|
||||
push @description, ".PP\n" if @description;
|
||||
push @description, "$_\n";
|
||||
$sect = uc $1;
|
||||
next;
|
||||
}
|
||||
|
||||
# Convert some standard paragraph names
|
||||
if (s/^(Options|Examples):\s*\n//)
|
||||
# Copyright section
|
||||
if (/^Copyright +[(\xa9]/)
|
||||
{
|
||||
print qq(.SH \U$1\n);
|
||||
next unless length;
|
||||
$sect = 'COPYRIGHT';
|
||||
$include{$sect} ||= '';
|
||||
$include{$sect} .= ".PP\n" if $include{$sect};
|
||||
|
||||
my $copy;
|
||||
($copy, $_) = split /\n\n/, $_, 2;
|
||||
|
||||
for ($copy)
|
||||
{
|
||||
# Add back newline
|
||||
s/\n*$/\n/;
|
||||
|
||||
# Convert iso9959-1 copyright symbol or (c) to nroff
|
||||
# character.
|
||||
s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg;
|
||||
|
||||
# Insert line breaks before additional copyright messages
|
||||
# and the disclaimer.
|
||||
s/(.)\n(Copyright |This +is +free +software)/$1\n.br\n$2/g;
|
||||
|
||||
# Join hyphenated lines.
|
||||
s/([A-Za-z])-\n */$1/g;
|
||||
}
|
||||
|
||||
$include{$sect} .= $copy;
|
||||
$_ ||= '';
|
||||
next;
|
||||
}
|
||||
|
||||
# Catch bug report text.
|
||||
if (/^Report bugs |^Email bug reports to /)
|
||||
if (/^(Report +bugs|Email +bug +reports +to) /)
|
||||
{
|
||||
print qq(.SH "REPORTING BUGS"\n$_\n);
|
||||
$sect = 'REPORTING BUGS';
|
||||
}
|
||||
|
||||
# Author section.
|
||||
elsif (/^Written +by/)
|
||||
{
|
||||
$sect = 'AUTHOR';
|
||||
}
|
||||
|
||||
# Examples, indicated by an indented leading $, % or > are
|
||||
# rendered in a constant width font.
|
||||
if (/^( +)([\$\%>] )\S/)
|
||||
{
|
||||
my $indent = $1;
|
||||
my $prefix = $2;
|
||||
my $break = '.IP';
|
||||
$include{$sect} ||= '';
|
||||
while (s/^$indent\Q$prefix\E(\S.*)\n*//)
|
||||
{
|
||||
$include{$sect} .= "$break\n\\f(CW$prefix$1\\fR\n";
|
||||
$break = '.br';
|
||||
}
|
||||
|
||||
next;
|
||||
}
|
||||
|
||||
# Special case for tar 1.12: --label=NAME\nPATTERN.
|
||||
s{(\n[ \t]*)(-V,[ \t]+--label=NAME.*)\n[ \t]+PATTERN[ \t]+}
|
||||
{$1$2$1\\&...=PATTERN };
|
||||
my $matched = '';
|
||||
$include{$sect} ||= '';
|
||||
|
||||
# Convert options.
|
||||
s/((?:^|,)\s+)(-[][\w=-]+|\\&\S+)/$1 . convert_option $2/mge;
|
||||
|
||||
# Option subsections have second line indented.
|
||||
print qq(.SS "$1"\n) if s/^(\S.*)\n(\s)/$2/;
|
||||
|
||||
my $ind = 0;
|
||||
for (split /\n/)
|
||||
# Sub-sections have a trailing colon and the second line indented.
|
||||
if (s/^(\S.*:) *\n / /)
|
||||
{
|
||||
# indented paragraph
|
||||
if (/^\s/)
|
||||
{
|
||||
# Join continued lines when indented to the same point as
|
||||
# text following at least two spaces on the previous line.
|
||||
if ($ind > 0 and /^ {$ind}\S/)
|
||||
{
|
||||
s/^\s+//;
|
||||
print "$_\n" if $_;
|
||||
}
|
||||
else
|
||||
{
|
||||
# use the words(s) before two or more spaces for the
|
||||
# tag
|
||||
s/^(\s+)//;
|
||||
$ind = length $1;
|
||||
$matched .= $& if %append;
|
||||
$include{$sect} .= qq(.SS "$1"\n);
|
||||
}
|
||||
|
||||
if (s/(\s\s+)/\n/)
|
||||
{
|
||||
$ind += (length $1) + index $_, "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$ind = 0;
|
||||
}
|
||||
my $indent = 0;
|
||||
my $content = '';
|
||||
|
||||
print ".TP\n$_\n" if $_;
|
||||
}
|
||||
}
|
||||
# Anything else.
|
||||
else
|
||||
# Option with description.
|
||||
if (s/^( {1,10}([+-]\S.*?))(?:( +)|\n( {20,}))(\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$indent = length ($4 || "$1$3");
|
||||
$content = ".TP\n\x82$2\n\x82$5\n";
|
||||
unless ($4)
|
||||
{
|
||||
print ".PP\n" unless $ind < 0;
|
||||
print "$_\n";
|
||||
$ind = -1;
|
||||
# Indent may be different on second line.
|
||||
$indent = length $& if /^ {20,}/;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Print any include items other than the ones we have already dealt
|
||||
# with.
|
||||
for (@include)
|
||||
{
|
||||
print qq(.SH "$_"\n$include{$_})
|
||||
unless /^(NAME|SYNOPSIS|DESCRIPTION|SEE ALSO)$/;
|
||||
# Option without description.
|
||||
elsif (s/^ {1,10}([+-]\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$content = ".HP\n\x82$1\n";
|
||||
$indent = 80; # not continued
|
||||
}
|
||||
|
||||
# Indented paragraph with tag.
|
||||
elsif (s/^( +(\S.*?) +)(\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$indent = length $1;
|
||||
$content = ".TP\n\x82$2\n\x82$3\n";
|
||||
}
|
||||
|
||||
# Indented paragraph.
|
||||
elsif (s/^( +)(\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$indent = length $1;
|
||||
$content = ".IP\n\x82$2\n";
|
||||
}
|
||||
|
||||
# Left justified paragraph.
|
||||
else
|
||||
{
|
||||
s/(.*)\n//;
|
||||
$matched .= $& if %append;
|
||||
$content = ".PP\n" if $include{$sect};
|
||||
$content .= "$1\n";
|
||||
}
|
||||
|
||||
# Append continuations.
|
||||
while (s/^ {$indent}(\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$content .= "\x82$1\n"
|
||||
}
|
||||
|
||||
# Move to next paragraph.
|
||||
s/^\n+//;
|
||||
|
||||
for ($content)
|
||||
{
|
||||
# Leading dot protection.
|
||||
s/\x82\./\x80/g;
|
||||
s/\x82//g;
|
||||
|
||||
# Convert options.
|
||||
s/(^| )(-[][\w=-]+)/$1 . convert_option $2/mge;
|
||||
}
|
||||
|
||||
# Check if matched paragraph contains /pat/.
|
||||
if (%append)
|
||||
{
|
||||
for my $pat (keys %append)
|
||||
{
|
||||
if ($matched =~ $pat)
|
||||
{
|
||||
$content .= ".PP\n" unless $append{$pat} =~ /^\./;
|
||||
$content .= $append{$pat};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$include{$sect} .= $content;
|
||||
}
|
||||
|
||||
# Refer to the real documentation.
|
||||
if ($include{'SEE ALSO'} or !$opt_no_info)
|
||||
unless ($opt_no_info)
|
||||
{
|
||||
print qq(.SH "SEE ALSO"\n);
|
||||
print $include{'SEE ALSO'}, ".PP\n" if $include{'SEE ALSO'};
|
||||
|
||||
print <<EOT unless $opt_no_info;
|
||||
$sect = 'SEE ALSO';
|
||||
$include{$sect} ||= '';
|
||||
$include{$sect} .= ".PP\n" if $include{$sect};
|
||||
$include{$sect} .= <<EOT;
|
||||
The full documentation for
|
||||
.B $program
|
||||
is maintained as a Texinfo manual. If the
|
||||
@@ -347,27 +461,33 @@ should give you access to the complete manual.
|
||||
EOT
|
||||
}
|
||||
|
||||
# Output converted --version information.
|
||||
for (@version)
|
||||
# Output header.
|
||||
print <<EOT;
|
||||
.\\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
|
||||
.TH $PROGRAM "$section" "$date" "$package $version" FSF
|
||||
EOT
|
||||
|
||||
# Section ordering.
|
||||
my @pre = qw(NAME SYNOPSIS DESCRIPTION OPTIONS EXAMPLES);
|
||||
my @post = ('AUTHOR', 'REPORTING BUGS', 'COPYRIGHT', 'SEE ALSO');
|
||||
my $filter = join '|', @pre, @post;
|
||||
|
||||
# Output content.
|
||||
for (@pre, (grep ! /^($filter)$/o, @include), @post)
|
||||
{
|
||||
chomp;
|
||||
|
||||
# Join hyphenated lines.
|
||||
s/([A-Za-z])-\n */$1/g;
|
||||
|
||||
# Convert copyright symbol or (c) to nroff character.
|
||||
s/Copyright\s+(?:\xa9|\([Cc]\))/Copyright \\(co/g;
|
||||
|
||||
# Insert appropriate headings for copyright and author.
|
||||
if (/^Copyright\s\\/) { print ".SH COPYRIGHT\n" }
|
||||
elsif (/^Written\s+by/) { print ".SH AUTHOR\n" }
|
||||
else { print ".PP\n"; }
|
||||
|
||||
# Insert line breaks before additional copyright messages and the
|
||||
# disclaimer.
|
||||
s/(.)\n(Copyright\s|This is free software)/$1\n.br\n$2/g;
|
||||
|
||||
print "$_\n";
|
||||
if ($include{$_})
|
||||
{
|
||||
my $quote = /\W/ ? '"' : '';
|
||||
print ".SH $quote$_$quote\n";
|
||||
|
||||
for ($include{$_})
|
||||
{
|
||||
# Replace leading dot an backslash tokens.
|
||||
s/\x80/\\&./g;
|
||||
s/\x81/\\e/g;
|
||||
print;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
exit;
|
||||
@@ -376,15 +496,15 @@ exit;
|
||||
# embolden. Option arguments get italicised.
|
||||
sub convert_option
|
||||
{
|
||||
my $option = '\fB' . shift;
|
||||
local $_ = '\fB' . shift;
|
||||
|
||||
$option =~ s/-/\\-/g;
|
||||
unless ($option =~ s/\[=(.*)\]$/\\fR[=\\fI$1\\fR]/)
|
||||
s/-/\\-/g;
|
||||
unless (s/\[=(.*)\]$/\\fR[=\\fI$1\\fR]/)
|
||||
{
|
||||
$option =~ s/=(.)/\\fR=\\fI$1/;
|
||||
$option =~ s/ (.)/ \\fI$1/;
|
||||
$option .= '\fR';
|
||||
s/=(.)/\\fR=\\fI$1/;
|
||||
s/ (.)/ \\fI$1/;
|
||||
$_ .= '\fR';
|
||||
}
|
||||
|
||||
$option;
|
||||
$_;
|
||||
}
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
hostid \- print the numeric identifier for the current host
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
hostname \- set or print the name of the current host system
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
2
man/id.x
2
man/id.x
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
id \- print real and effective UIDs and GIDs
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
join \- join lines of two files on a common field
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
|
||||
2
man/ln.x
2
man/ln.x
@@ -1,2 +1,4 @@
|
||||
[NAME]
|
||||
ln \- make links between files
|
||||
[DESCRIPTION]
|
||||
." Add any additional description here
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user