File: issue53.html

package info (click to toggle)
lg-issue53 2-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,968 kB
  • ctags: 113
  • sloc: sh: 99; perl: 64; makefile: 34
file content (10373 lines) | stat: -rw-r--r-- 422,873 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327
9328
9329
9330
9331
9332
9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
9343
9344
9345
9346
9347
9348
9349
9350
9351
9352
9353
9354
9355
9356
9357
9358
9359
9360
9361
9362
9363
9364
9365
9366
9367
9368
9369
9370
9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381
9382
9383
9384
9385
9386
9387
9388
9389
9390
9391
9392
9393
9394
9395
9396
9397
9398
9399
9400
9401
9402
9403
9404
9405
9406
9407
9408
9409
9410
9411
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
9424
9425
9426
9427
9428
9429
9430
9431
9432
9433
9434
9435
9436
9437
9438
9439
9440
9441
9442
9443
9444
9445
9446
9447
9448
9449
9450
9451
9452
9453
9454
9455
9456
9457
9458
9459
9460
9461
9462
9463
9464
9465
9466
9467
9468
9469
9470
9471
9472
9473
9474
9475
9476
9477
9478
9479
9480
9481
9482
9483
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9501
9502
9503
9504
9505
9506
9507
9508
9509
9510
9511
9512
9513
9514
9515
9516
9517
9518
9519
9520
9521
9522
9523
9524
9525
9526
9527
9528
9529
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
9542
9543
9544
9545
9546
9547
9548
9549
9550
9551
9552
9553
9554
9555
9556
9557
9558
9559
9560
9561
9562
9563
9564
9565
9566
9567
9568
9569
9570
9571
9572
9573
9574
9575
9576
9577
9578
9579
9580
9581
9582
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592
9593
9594
9595
9596
9597
9598
9599
9600
9601
9602
9603
9604
9605
9606
9607
9608
9609
9610
9611
9612
9613
9614
9615
9616
9617
9618
9619
9620
9621
9622
9623
9624
9625
9626
9627
9628
9629
9630
9631
9632
9633
9634
9635
9636
9637
9638
9639
9640
9641
9642
9643
9644
9645
9646
9647
9648
9649
9650
9651
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
9662
9663
9664
9665
9666
9667
9668
9669
9670
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9691
9692
9693
9694
9695
9696
9697
9698
9699
9700
9701
9702
9703
9704
9705
9706
9707
9708
9709
9710
9711
9712
9713
9714
9715
9716
9717
9718
9719
9720
9721
9722
9723
9724
9725
9726
9727
9728
9729
9730
9731
9732
9733
9734
9735
9736
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
9872
9873
9874
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
9898
9899
9900
9901
9902
9903
9904
9905
9906
9907
9908
9909
9910
9911
9912
9913
9914
9915
9916
9917
9918
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
9934
9935
9936
9937
9938
9939
9940
9941
9942
9943
9944
9945
9946
9947
9948
9949
9950
9951
9952
9953
9954
9955
9956
9957
9958
9959
9960
9961
9962
9963
9964
9965
9966
9967
9968
9969
9970
9971
9972
9973
9974
9975
9976
9977
9978
9979
9980
9981
9982
9983
9984
9985
9986
9987
9988
9989
9990
9991
9992
9993
9994
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
10011
10012
10013
10014
10015
10016
10017
10018
10019
10020
10021
10022
10023
10024
10025
10026
10027
10028
10029
10030
10031
10032
10033
10034
10035
10036
10037
10038
10039
10040
10041
10042
10043
10044
10045
10046
10047
10048
10049
10050
10051
10052
10053
10054
10055
10056
10057
10058
10059
10060
10061
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
10091
10092
10093
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
10116
10117
10118
10119
10120
10121
10122
10123
10124
10125
10126
10127
10128
10129
10130
10131
10132
10133
10134
10135
10136
10137
10138
10139
10140
10141
10142
10143
10144
10145
10146
10147
10148
10149
10150
10151
10152
10153
10154
10155
10156
10157
10158
10159
10160
10161
10162
10163
10164
10165
10166
10167
10168
10169
10170
10171
10172
10173
10174
10175
10176
10177
10178
10179
10180
10181
10182
10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
10198
10199
10200
10201
10202
10203
10204
10205
10206
10207
10208
10209
10210
10211
10212
10213
10214
10215
10216
10217
10218
10219
10220
10221
10222
10223
10224
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
10236
10237
10238
10239
10240
10241
10242
10243
10244
10245
10246
10247
10248
10249
10250
10251
10252
10253
10254
10255
10256
10257
10258
10259
10260
10261
10262
10263
10264
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
10294
10295
10296
10297
10298
10299
10300
10301
10302
10303
10304
10305
10306
10307
10308
10309
10310
10311
10312
10313
10314
10315
10316
10317
10318
10319
10320
10321
10322
10323
10324
10325
10326
10327
10328
10329
10330
10331
10332
10333
10334
10335
10336
10337
10338
10339
10340
10341
10342
10343
10344
10345
10346
10347
10348
10349
10350
10351
10352
10353
10354
10355
10356
10357
10358
10359
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> Linux Gazette Table of Contents LG #53</TITLE>
<META NAME="robots" CONTENT="noindex, nofollow">
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
ALINK="#FF0000" >
<center>
<!-- A HREF="http://www.linuxgazette.com/">
<H1><IMG SRC="../gx/newlogo.jpg" ALT="LINUX GAZETTE" border="0"></H1></A> --> 
<A HREF="http://www.linuxgazette.com/">
<H1><IMG ALT="LINUX GAZETTE" SRC="../gx/lglogo.jpg" 
	WIDTH="600" HEIGHT="124" border="0"></H1></A> 
<H2>May 2000, Issue 53 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Published by <I>Linux Journal</I></H2> 

<A HREF=../index.html>Front Page</A> &nbsp;|&nbsp;
<A HREF=../index.html>Back Issues</A> &nbsp;|&nbsp;
<A HREF=../faq/index.html>FAQ</A> &nbsp;|&nbsp;
<A HREF=../mirrors.html>Mirrors</A> &nbsp;|&nbsp;
<A HREF=http://www.linuxgazette.com/search.html>Search</A>
</center>

<!--=================================================================-->

<table>
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=30 VSPACE=2 HEIGHT=1
WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
<tr><td>
<table>
<tr>
<td VALIGN="top"><H1><font color="#BB0000">Visit Our Sponsors:</font></H1></td></tr>



<!-- *** BEGIN sponsors *** -->
<TR><TD>
	<A HREF="http://www.linuxjournal.com"><IMG ALT="Linux Journal" SRC="../gx/ljtop.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>

<TR><TD>
	<A HREF="http://www.pervasive.com/linuxgazette"><IMG ALT="Pervasive Software" SRC="../gx/sponsors/pervasive.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>

<TR><TD>
	<A HREF="http://www.linuxcare.com"><IMG ALT="LinuxCare" SRC="../gx/linuxcare.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>

<TR><TD>
	<A HREF="http://www.linuxmall.com/"><IMG ALT="LinuxMall" SRC="../gx/linuxmall.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>

<TR><TD>
	<A HREF="http://www.linuxjournal.com/lr-toc.html"><IMG ALT="Linux Resources" SRC="../gx/linux6.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>

<TR><TD>
	<A HREF="http://www.cygnus.com"><IMG ALT="Cygnus Solutions" SRC="../gx/sponsors/cygnus.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>

<TR><TD>
	<A HREF="http://www.vmware.com"><IMG ALT="VMware" SRC="../gx/sponsors/vmware.jpg" BORDER="0" VSPACE="10"></A>
</TD></TR>

<TR><TD>
	<A HREF="http://www.infomagic.com"><IMG ALT="InfoMagic" SRC="../gx/infologo.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>


<!-- *** END sponsors *** -->




</table>
</td>
<!--==================================================================-->
<TD ROWSPAN="3" WIDTH="2" BGCOLOR="#000000" NOSAVE><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=1 HEIGHT=1 WIDTH=1%></TD>
<td VALIGN=top>
<H1><font color="#BB0000">Table of Contents:</font></H1>




<!-- *** BEGIN toc *** -->
<UL>
	<LI>  <a HREF="lg_mail53.html">The MailBag</A> 
	<UL>
		<LI>  <a HREF="lg_mail53.html#help">Help Wanted &amp; Article Ideas</A> 
		<LI>  <a HREF="lg_mail53.html#gen">General Mail</A> 
	</UL>
	<LI>  <a HREF="lg_bytes53.html">News Bytes</A> 
	<UL>
		<LI>  <a HREF="lg_bytes53.html#distro">Distro News</A> 
		<LI>  <a HREF="lg_bytes53.html#general">News in General</A> 
		<LI>  <a HREF="lg_bytes53.html#software">Software Announcements</A> 
	</UL>
	<LI>  <a HREF="lg_answer53.html">The Answer Guy</A> , <EM>by James T. Dennis</EM>
	<LI>  <a HREF="lg_tips53.html">More 2-Cent Tips</A> 
	<LI>  <a HREF="baptista.html">Graphical Programs</A> , <EM>by Paulo Henrique Baptista de Oliveira</EM>
	<LI>  <a HREF="boldyshev.html">Introduction to UNIX Assembly Programming</A> , <EM>by Konstantin Boldyshev</EM>
	<LI>  <a HREF="collinge.html">HelpDex</A> , <EM>by Shane Collinge</EM>
	<LI>  <a HREF="correa1.html">Miguel de Icaza on Gnome and His New Company HelixCode</A> , <EM>by Fernando Ribeiro Corr&ecirc;a</EM>
	<LI>  <a HREF="correa2.html">KDE2 is Just Around the Corner. Are You Curious?</A> , <EM>by Fernando Ribeiro Corr&ecirc;a</EM>
	<LI>  <a HREF="correa3.html">Linux in France: Guess Mandraksoft's Next Move</A> , <EM>by Fernando Ribeiro Corr&ecirc;a</EM>
	<LI>  <a HREF="eyler.html">Functions and aliases in bash</A> , <EM>by Pat Eyler</EM>
	<LI>  <a HREF="lamb.html">Linux Site O' The Month: SourceForge</A> , <EM>by Sean Lamb</EM>
	<LI>  <a HREF="okopnik.html">Introduction to Shell Scripting</A> , <EM>by Ben Okopnik</EM>
	<LI>  <a HREF="sipos.html">Setting Up International Keyboards</A> , <EM>by Juraj Sipos</EM>
	<LI>  <a HREF="stagner.html">Connecting to Your Home Computer</A> , <EM>by Robert Stagner</EM>
	<LI>  <a HREF="ward.html">Some issues on floating-point precision under Linux</A> , <EM>by Alan Ward</EM>
	<LI>  <a HREF="lg_backpage53.html">The Back Page</A> 
	<UL>
		<LI>  <a HREF="lg_backpage53.html#authors">About This Month's Authors</A> 
		<LI>  <a HREF="lg_backpage53.html#notlinux">Not Linux</A> 
	</UL>
</UL>

<!-- *** END toc *** -->




</td>
</tr>
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
	SRC="../gx/hammel/cleardot.gif" 
	ALT="-------------------------------------------------------------" 
	HSPACE=30 VSPACE=2 HEIGHT=1 WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
</table> 

<!--=============================================================-->
<P> 
<table>
<tr><td>
<A HREF="issue53.txt.gz">TWDT 1 (gzipped text file)</A><BR>
<A HREF="issue53.html">TWDT 2 (HTML file)</A><BR>
are files containing the entire issue: one in text format, one in HTML. 
They are provided 
strictly as a way to save the contents as one file for later printing in
the format of your choice; 
there is no guarantee of working links in the HTML version.
 </td></tr>
<!--==================================================================-->
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=30 VSPACE=2 HEIGHT=1
WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
<tr><td>
<center>
<I>Linux Gazette</I><img alt="[tm]" src="../gx/tm.gif">, 
<A HREF="http://www.linuxgazette.com/">http://www.linuxgazette.com/</A><BR> 
This page maintained by the Editor of <I>Linux Gazette</I>,
<A HREF="mailto: gazette@ssc.com"> gazette@ssc.com</A>
<P> 
<H5>Copyright &copy; 1996-2000 Specialized Systems Consultants, Inc.</H5>
</center>
</td></tr>
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=30 VSPACE=2 HEIGHT=1
WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
</table>
<H4>"Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>  
<HR> 
<center>
<table width="100%" cellpadding=7><tr><td>
<H2><a NAME="mail"><IMG SRC="../gx/mailbox.gif" ALIGN=MIDDLE ALT=" ">
The Mailbag!</a> </H2>
Write the Gazette at <A HREF="mailto:gazette@ssc.com"> gazette@ssc.com</A>
</td><td>
<H3>Contents:</H3>
<ul>
<li><a HREF="#help">Help Wanted -- Article Ideas</a>
<li><a HREF="#gen">General Mail</a>
</ul>
</td></tr></table>
</center>

<a name="help"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="maroon">Help Wanted -- Article Ideas</font></H3></center>
<P> 
Answers to these questions should be sent directly to the e-mail address of
the inquirer with or without a copy to gazette@ssc.com. Answers that are
copied to <I>LG</I> will be printed in the next issue in the Tips column.

<P> <STRONG>Before asking a question, please check the
<A HREF=../faq/index.html><I>Linux Gazette</I> FAQ</A> to see if it has been
answered there.</STRONG>


<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 31 Mar 2000 20:57:04 -0000
<BR>From: The Strangemores &lt;<A HREF="mailto:sstrange@crrstv.net">sstrange@crrstv.net</A>&gt;
<BR>Subject: 

<P> Do you know what the Linux kernel split is?  If so, can you tell me about
it?

<P> Chantil




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sat, 01 Apr 2000 01:03:33 -0600
<BR>From: Randall E. Cook, Sr. &lt;<A HREF="mailto:Randy@MNCom.Net">Randy@MNCom.Net</A>&gt;
<BR>Subject: Help in setting up Red Hat as a dial-up server

<P>     I have searched and searched for 2 months now and can not get any
info on how to set up a server for customers to dial into and access the
internet with mail accounts and such.
    I have been to every news group and discussion I can find. No one
will give any information on how to set this up.
    The ONLY help or answer I get is...:"why do you want to be an ISP,
they are to expensive to set up?"
    Please have a "How-To" for the beginner to set up an ISP for the
first time?

<P> Thanks in advance.



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 02 Apr 2000 15:37:16 -0500
<BR>From: Dan Stroock &lt;<A HREF="mailto:dws@math.mit.edu">dws@math.mit.edu</A>&gt;
<BR>Subject: linux and DHCP

<P> I have been trying, without success, to hitch my Linux box to a
Linksys Etherfast cable router.  I set networking configuration
to use DHCP, but my machine does not  get the information which
it needs.  Has anyone got a HOWTO page or other source of information
about this sort of thing?




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 2 Apr 2000 23:31:20 +0100
<BR>From: andrew sprott &lt;<A HREF="mailto:andru@btinternet.com">andru@btinternet.com</A>&gt;
<BR>Subject: sharing filesystems

<P> hi

<P> i have tried searchin your site for 'share', 'sharing filesystem' etc., but nothin
came up. basically, i've got 6 networked machines, half of which can't take
a full installation of suse 6.3. what i want to do is export the installation on
a 20.4gb disk to the other machines. so say, most of /etc can be shared by
the other machines.

<P> the thing is how can linux be installed on the other machines without doin
a seperate install that takes up all disk space on the local machines. has
anybody tackled this and wrote about it? the thing that appeals to me is
the prospect of simply loggin onto any machine and access my usual apps
and data etc.




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 02 Apr 2000 22:55:05 -0200
<BR>From: Rakesh Mistry &lt;<A HREF="mailto:rakeshm@REMOVETHIS.netactive.co.za">rakeshm@REMOVETHIS.netactive.co.za</A>&gt;
<BR>Subject: Swing on Linux

<P> Hi 

<P> I am having trouble installing Swing1.0.3/1.1.1 on my RH6.0 system. I
have managed to setup jdk117_v3 successfully sometime ago. 

<P> I have unzipped the tar.Z and placed it in
/usr/local/lib/jdk117_v3/swing-1.0.3/ directory. I have added this path
to my CLASSPATH. I have also added it to a SWING_HOME variable as well
as added a JAVA_HOME variable.

<P> However, everytime I try and compile a java program which tries to
import a swing package, I get the following error :

<PRE>
SwingUI.java:4: Package javax.swing not found in import.
import javax.swing.*;
       ^
SwingUI.java:6: Superclass JFrame of class SwingUI not found.
class SwingUI extends JFrame 
                      ^
SwingUI.java:24: '(' expected.
        panel.setLayout(new BorderLayout);
                                        ^
3 errors
</PRE>


<P> I have copied this code straight out of a java tutorial. 

<P> Any help would be greatly appreciated !!!



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 03 Apr 2000 17:16:28 +0200
<BR>From: Silvia Scarpetta &lt;<A HREF="mailto:scarpetta@na.infn.it">scarpetta@na.infn.it</A>&gt;
<BR>Subject: linux and win2000

<P>  I have updated winNT to windows2000, and  LILO  is not able to boot  either
linux or win2000 , any more
(before I had winNT and Linux on the two harddisks and it works!)

<P> I mean LILO starts but when I says to boot windows2000 it says:
<PRE>
NTLDR is missing.
???????
</PRE>
Anyone knows if win2000 has been made in order to
not to be compatible with Linux?
is there a way to solve the problem?

<P> I tryed to do  again
<PRE>
sbin/lilo
</PRE>
(in case the MBR was damneged)
but it did not work either.




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 05 Apr 2000 10:53:22 PDT
<BR>From: Paul Grainger &lt;<A HREF="mailto:psfgrainger@hotmail.com">psfgrainger@hotmail.com</A>&gt;
<BR>Subject: Interfacing with Novell Netware

<P> Hi there,
can you help me with tips on how to interface to a Novell Netware network 
(3.12 bindery). I am currently running Mandrake 7 and have a 3 Com ethernet 
adapter (which Linux seems to be able to auto-configure). Whenever I try to 
configure my card the system requests IP addresses, which is not relevant in 
this instant.
I know that IPX support is provided but what are the steps required to 
enable use of file and print services on the network?
Thanks in anticipation of your help,




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Thu, 6 Apr 2000 23:16:16 +0200
<BR>From: Andrea &lt;<A HREF="mailto:amerini@dada.it">amerini@dada.it</A>&gt;
<BR>Subject: LILO

<P> Hi , I 'm a new user of Linux (Great!!) and I have a little problem:

<P> I have 2 HD , the 1st SCSI with Win 98 and th 2nd EIDE with Red Hat 6.1.

<P> I can't start windoze from LILO , (the machine does nothing)and I must switch the boot from BIOS.
Could you tell me please , how to solve this little problem ?



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 12 Apr 2000 13:42:43 +0200
<BR>From: Otto Wyss &lt;<A HREF="mailto:Otto.Wyss@eds.com">Otto.Wyss@eds.com</A>&gt;
<BR>Subject: More than one keyboard with different layout

<P> Sorry I'm not sure if this is the right place to ask, please tell me the
right place if I'm wrong.

<P> I have 2 keyboards connected to my PC, one is a old AT-serial keyboard
and the other an USB-keyboard with Win98 key assignment. Now I'd like to
modify the keymap so I could use the new Command("Windows")-key.
Unfortunalty this conflicts with the old keyboard (which I still need in
case of an emergency). I have to install 2 different keymaps, each one
for each keyboard. but currently the kernel (2.2.14) only allows for one
keyboard.

<P> My wish for enhancement:
Keyboards should be implemented as ordinary devices in the kernel (like
mouses), so an arbitrary count of keyboards where possible. Keymaps,
kbdrates, etc. should be attached to keyboard devices as well.



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 11 Apr 2000 17:47:22 EDT
<BR>From:  &lt;<A HREF="mailto:JDGIOVINCO@aol.com">JDGIOVINCO@aol.com</A>&gt;
<BR>Subject: shell scripting in a "C++" based shell

<P> I recently read your article about the basic scripting commands in the April 
issue.  However, the bash system and i are like oil and water, because i am 
more familiar with programing in "C++"  After some searching I was able to 
find some incredibly informative manuals that also contained cdrom packages 
with libraries, patches and other assorted tools to help learn how to script 
some of the varieties of "C" based shell.  Soon enough, my happiness was 
brought to a skreaching halt when i glanced down at some of the prices.  So I 
was writing to ask if maybe in your next issue, you could follow up the 
scripting article with some basic commands in "ksh" or  "zsh," or just inform 
me of any manuals published within a reasonable price range.  
Thanks


<H2>The author Ben Okopnic  &lt;<A HREF="mailto:fuzzybear@pocketmail.com">fuzzybear@pocketmail.com</A>&gt; writes:</H2>

<P> My current goal in writing the column is to concentrate on "bash" until I feel that my readers, by following the column, have reached a high enough level of proficiency that they would be interested in other options - and those may include a look at other shells. Unfortunately for your requirements, this isn't likely to happen for quite a long while. Do be aware, though, that unless you get into somewhat deep scripting stuff (co-processes, async pipelines, etc.), there isn't _that_ much difference between, say, "ksh" and "bash": "ksh" is actually a superset of "sh" which is bash-compatible, and "bash" incorporates a number of "ksh" and "csh" features.

<P> Since I don't know what your level of general scripting/shell expertise may be, let me toss in a perspective from my own experience: the first shell that I ever used was "sh", and it was nothing short of a battle to produce my first script, simple as it was. Later, in my rather brief flirtations with other shells, I found that learning their specific syntax was an *incremental* task - I had already learned 90+% of what I needed to write scripts for them via my experience with "sh". You too may find that it isn't only "bash" that is problematic: there is a learning curve associated with any shell - they all have their quirks. I'm certainly not trying to talk you into switching your shell preference, but you should realize that there's a "cost" associated with entering the "shell game" - and the type of shell is, in my opinion, largely irrelevant to that "cost".

<P> Given the nature of Linux, you'll find that the information that is freely available is copious and of high quality. This implies that any commercially available material will be a) _outstanding_ in quality (this is certainly true in my experience), and b) relatively expensive, since "quality costs". My suggestion for you is to study the free material, look for info on the Net (e.g., "ksh keybindings (vi keys)" in The Answer Guy's column, issue 51 of LG, has some good pointers), and study other people's "zsh"/"ksh" scripts (hint: use AltaVista's Advanced search to look for "#!*/bin/[kz]sh".)

<P> By the time you exhaust those resources, you should either feel justified in your purchase of those "expensive" books - or you may decide that you've lerned enough that you don't need them after all.






<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 12 Apr 2000 14:40:44 -0700
<BR>From: Anderson, Randy (FRM) &lt;<A HREF="mailto:randy.anderson@compaq.com">randy.anderson@compaq.com</A>&gt;
<BR>Subject: adding pseudo devices in a sunos 4.1.4 environment..

<P> hi,
my sunos kernel is already configed for 256 pseudo devices. my users
complain about running out
of them often...i know they are not using even a fraction of that number, so
what gives??  do i need to 
add /dev device files? recompile the kernel (GENERIC) again??? help!

<P> thanks for any assistance..






<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 14 Apr 2000 11:14:17 -0500
<BR>From: David K. Daniels &lt;<A HREF="mailto:daved@hutchtel.net">daved@hutchtel.net</A>&gt;
<BR>Subject: Is There a Version of PC/NFS for Linux?

<P> I have the O'Reilly book "Managing NFS and NIS" and there is a section in
the back of the book called PC/NFS describing a Unix utility that enables a
PC DOS machine to access a Unix machine using the NFS file system as an
extended DOS file system.  I am wondering if there is a Linux version of
this available?

<P> I would like to be able to run a Linux server on a TCP/IP network and have
the capability of booting a PC using DOS and map a drive letter to the file
system running on the Linux server for the purpose of using a utility called
"Ghost" and make a ghost image of the DOS/Windows drive and drop it on the
Linux server for storage.

<P> Any information or pointers would be appreciated.



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sat, 15 Apr 2000 00:02:45 +0530
<BR>From: US Mohalanobish &lt;<A HREF="mailto:usmbish@crosswinds.net">usmbish@crosswinds.net</A>&gt;
<BR>Subject: SiS6215C graphics adapter card

<P> Can anybody help me make my SiS6215c graphics card deliver a resolution more than 640x480 in Linux? On Windows, I get resolutions as high as 1024x768 with 256 colors or 800x600 with 16bit colors.



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
05 Apr 2000 09:19:10 +0200
<BR>From: Andr&eacute;s Hortig&uuml;ela Garc&iacute;a &lt;<A HREF="mailto:Andres.Hortiguela@csbs.jcyl.es">Andres.Hortiguela@csbs.jcyl.es</A>&gt;
<BR>Subject: Graphics card question (Spanish)

<P> Necesito un driver para la tarjeta grfica integrada en placa base con chipset Intel 810, para configurar mi Linux (EsWare - Red Hat 6.0)

<P> Me podis ayudar? Donde lo puedo obtener?

<P> Muchas gracias, ... Andrs.





<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 14 Apr 2000 11:50:22 -0700
<BR>From: Ahmad &lt;<A HREF="mailto:al-iman@net.sy">al-iman@net.sy</A>&gt;
<BR>Subject: How to hack a proxy

dear sir 
we are in bad need for a program to pass the firewall because our server is filltering the most of hackers sites and all the free Email.

your prompt positive reply is highly appreciated
thanks, best regards.


</BLOCKQUOTE>

<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 16 Apr 2000 14:39:06 -0400
<BR>From: Robin and David Pickens &lt;<A HREF="mailto:rdpickens@email.msn.com">rdpickens@email.msn.com</A>&gt;
<BR>Subject: Downloading X11/ XF86 upgrades

<P> I am new to the alternative OS world of Linux. I recently purchased a (old)
beginners version of Caldera Linux 1.3 and, through much frustration on my part
as well as the tech reps at Mandrake, have come to realize that my computer's
on- board video card is too modern for the XF86Setup v. 3.3.2. I discovered (I
think) that XF86Setup v. 3.3.6 is the updated one which supports my card (a
Trident Blade 3D/ MVP4). I went to the XF86 web site to download the proper
files and uncovered a plethora of files and folders that have left me rather
confused as to which ones to use. Can anybody tell me which ones (specifically)
from that site to download or, direct me to another mirror site with a bit less
confusing archives and easier to follow guidelines for acquiring these most
needed programs? P.S. I have looked through "rpmfind.net" and could only find
version 4.0 of XF86 for Trident Blade cards. The tech rep at Mandrake said 4.0
would probably not help me. Any further assistance would be greatly
appreciated. Thanks, David P. 



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 17 Apr 2000 15:34:34 +0530
<BR>From: Prakash Nair &lt;<A HREF="mailto:nairp@zeenetwork.com">nairp@zeenetwork.com</A>&gt;
<BR>Subject: Switching from Xchange Server To Linux

<P> Hello..
I hope u can help me with this. We  have MS Exchange server with 400
users.We would now like to switch to linux as the mail server(remove Xchange
server). How could this be done?

<P> Pl. help as this is to be done urgently.




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 17 Apr 2000 14:39:39 -0700
<BR>From: Chetan Gadgil (Work - Linux) &lt;<A HREF="mailto:chetan@objectstream.com">chetan@objectstream.com</A>&gt;
<BR>Subject: Porting to a new language

<P> I am interested in porting Linux to "Indic (Indian)" languages. Is there
a good place to start?
Could anyone please provide a brief outline of how a port to a new
language/script is done?

<P> Does Linux use GNU/gettext for the locale specific languages?




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 18 Apr 2000 04:18:11 -0700 (PDT)
<BR>From: Phil Coval - RzR.online.FR &lt;<A HREF="mailto:philippe_coval@yahoo.com">philippe_coval@yahoo.com</A>&gt;
<BR>Subject: is Debian  deadbian ?

<P> When next debian is out ?

<P> i've seen on magazine that it will be out in a few
weeks that was on jannuary 2000 ?
the site isnt updated 

<P> Whats the matter ?



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 18 Apr 2000 09:32:26 -0500
<BR>From: Mark Contatore &lt;<A HREF="mailto:contatorem@iivip.com">contatorem@iivip.com</A>&gt;
<BR>Subject: Compaq help

<P> I recently acquired a Compaq ProSignia 300, it has the on board NCR53C810
SCSI controller. I have been totally unsuccessful  in installing RedHat
Linux 6.2, the system indicates the driver is incorrect . I am asking for
anyone with the experience of a successful install on this platform to
please help!



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 19 Apr 2000 14:50:52 +0200
<BR>From: Joseph Simushi &lt;<A HREF="mailto:jsimushi@pulse.com.zm">jsimushi@pulse.com.zm</A>&gt;
<BR>Subject: LAN Administrator Books.

<P> Help me with information as regards where I can find the above books or if
you offer some, please send me some on the address below.

<P> Regards,

<P> Simushi Joseph<BR>
LAN Administrator<BR>
PULSE Project<BR>
P.O. Box RW 51269<BR>
Lusaka<BR>
Zambia.<BR>
Tel: 295642 (W), 250236 (H)




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 19 Apr 2000 15:23:27 +0100
<BR>From: Stephen Wileman &lt;<A HREF="mailto:Pcrep@mancat44.freeserve.co.uk">Pcrep@mancat44.freeserve.co.uk</A>&gt;
<BR>Subject: linux courses / books

<P> I am IT teacher being asked a lot of questions to do with 
the linux operating systems in particular Linux Red Hat 6 and 
above.

<P> Please could you help with any suggestions on a good basic book 
or material which I could use to help my students out with their 
problems or a any recognised Linux professional qualifications I
can undertake to aid my own understanding of the Linux / Red 
Hat operating system?
 

  



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 19 Apr 2000 20:28:49 -0700 (PDT)
<BR>From: Venkat Rajagopal &lt;<A HREF="mailto:venkat_rajagopal@yahoo.com">venkat_rajagopal@yahoo.com</A>&gt;
<BR>Subject: Command line editing

<P> Hi,

<P>     I have been trying to set command line editing (vi mode) as part of my
bash shell environment and have been unsuccessful so far. You might think
this is trivial - well so did I.

<P>     I am using Red Hat Linux 6.1 and wanted to use "set -o vi" in my start up
scripts. I have tried all possible combinations but it JUST DOES NOT WORK.
I inserted the line in /etc/profile , in my .bash_profile, in my .bashrc
etc but I cannot get it to work. How can I get this done? This used to be a
breeze in the korn shell. Where am I going wrong?



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Thu, 20 Apr 2000 21:59:27 +0200
<BR>From: Matej Cepl &lt;<A HREF="mailto:CeplM@seznam.cz">CeplM@seznam.cz</A>&gt;
<BR>Subject: Other markup languages - LG #27

<P> Hi,

<P> I have found your article on "markup languages and lout" on the 
website of Linux Gazette. Thank you for it -- as beginer in lout (and 
emigre from LaTeX), I have greatly appreciated it your open attitude 
towards something different than TeX.

<P> However, I would be very interested in other articles from series -- 
on TeX and troff. When I tried to found them on LG site, I have not 
found either of them. Are they presented anywhere on the Web? If 
so, would you be so kind and send me URL, please?

<P> 		Have a very nice day

<P> 							Matej Cepl



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Thu, 20 Apr 2000 16:37:53 -0700
<BR>From: Martin Perry &lt;<A HREF="mailto:m.perry@dtn.ntl.com">m.perry@dtn.ntl.com</A>&gt;
<BR>Subject: Screen Dump of Linux

<P> I am writing to request a screen dump picture of what Linux looks like when it is running.

<P> I am currently doing a HNC in Business Information Technology and I have got to give a presentation on Linux in a weeks time and would like to put a screen dump on the OHP for people to see.  From what I understand it can either look like windows or the Mac equivalent.

<P> I have been searching for days to find this on the net with no luck as yet.

<P> Sorry for any inconvience.

<P> Maria Perry.
m.perry@dtn.ntl.com

<BLOCKQUOTE> <EM>
[I think several distributions have such images on their web sites,
usually in a section called "Screenshots".  Go to 
<A HREF="www.linuxjournal.com">www.linuxjournal.com</A>,
"How to Get Linux" and follow the links from there.

<P> Also, the GUI interfaces (KDE and GNOME) and window managers have
screen shots on their web sites, to give you a preview of what the 
program will look like.  <A HREF="http://www.kde.org">www.kde.org</A>, 
<A HREF="http://www.gnome.org">www.gnome.org</A>, 
<A HREF="http://www.enlightenment.org">www.enlightenment.org</A>, 
<A HREF="http://www.windowmaker.org">www.windowmaker.org</A>, 
<A HREF="http://www.plig.org/xwinman/fvwm95.html">
http://www.plig.org/xwinman/fvwm95.html</A>, etc. -Ed.]
</EM> </BLOCKQUOTE>



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 11:41:19 +1000 (EST)
<BR>From: Russ Pitman &lt;<A HREF="mailto:russ@tasman.net.au">russ@tasman.net.au</A>&gt;
<BR>Subject: BU backup utility

<P> 	This was the subject of an excellent article in Issue 32 of
the Gazette. 

<P> 	My only hard copy is missing and the site (http://www.crel.com)
is not reachable. Also mail to vstemen@crel.com is undeliverable.

<P> 	Web searching has not, for me, found any other address for bu
so I came here hoping that the Gazette can help.

<P> 	Does any one know where a copy of Vincent Stemens 'bu' can be
obtained.
	Thanks for your time.



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 00:21:56 -0700
<BR>From: MVE &lt;<A HREF="mailto:getsome@mcsi.net">getsome@mcsi.net</A>&gt;
<BR>Subject: Please Help

<P> Please help me. I am at my wits end.

<P> I have VERY recently installed Linux, so I am very new to all of this, and
pehaps I am going about this the wrong way. I want to install Oracle8i on my
system. ALL the information says I have to install a JRE (JRE 1.1.6v5) in order
to get Oracle to work. (NOT JDK...JRE).

<P> I CAN NOT find it for the life of me!!!! PLEASE PLEASE PLEASE do not send
me to Blackdown.org. They do not have it either. Do not send me to Sun, because
they do not have it either. Nor does Susie, nor does Red Hat...NOBODY!! I can
NOT find it. What is up with this??? Is this usual? Why would a company sell me
an operating system (I know, it's free), and the SAME company (Mandrake) sell
me the Oracle81 program, and NOT include it in their package??? (They don't
have JRE 1.1.6v5 either)!

<P> Where can I find it???? I am becoming very discouraged with all the support
I have heard about concerning Linux...(there doesn't seem to be ANY). 





<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 03:30:51 -0700 (PDT)
<BR>From: belahcene abdelkader &lt;<A HREF="mailto:belahcene@yahoo.com">belahcene@yahoo.com</A>&gt;
<BR>Subject: troubling with ftp , telnet

<P> hi,
someone can help me!
I have a lab with several PCs, pentium II, running
under linux redhat 6.0. The installation is complete
on 
each one, with ftp, http, telnet etc.... The ping is
correct for all machines. 
 I can use internet with  netscape from each one. I
use one machine as server with proxy. 
Clearly :
 I have machine 1 with proxy package, this machine is
connected to internet via modem, the machines 2 
and 3 are connected in LAN and can access to internet
via machine 1.
My probleme is: when I want to get file from  one
machine in another, via ftp, the system refuse with
non 
permission. Sometimes it is possible in one sens and
not in the other.
I have the same probleme with telnet.
I have login and passwd in all the machines and i can
enter as root.
Thank you.









<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 18:48:03 BST
<BR>From: Ben Parsons &lt;<A HREF="mailto:ukbenz@hotmail.com">ukbenz@hotmail.com</A>&gt;
<BR>Subject: Help with email

<P> Hello. I've only just really started out with linux Mandrake (call it 
redhat) and I wanted to know if I can get my hotmail email into say, Pine or 
Elm, I looked through all the docs but it dosen't mention it and in any case 
I don't know where to start. Cheers in advance to anyone who can help.




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 00:36:59 +0200
<BR>From: Gonzalo Aguilar &lt;<A HREF="mailto:gad@reymad.com">gad@reymad.com</A>&gt;
<BR>Subject: XFree 4.0 and internationalization

<P> Hello, I'm an Spanish linux user and XFree 4.0 is having problems with
the "special characters" of my keyboard.

<P> I cannot write letter with "" on the top (is very important for my
languaje) or cannot put "" also. 

<P> Those work after in XFree 3.3.5 but now...

<P> Do you know any tips on this. Nobody seems to know cause a lot of people
has the same problem.
Thanks



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 10:43:12 +0200
<BR>From: Dominic   STEUR &lt;<A HREF="mailto:dominic.steur@belgacom.be">dominic.steur@belgacom.be</A>&gt;
<BR>Subject: GUI

<P> Hello,
I am kind of a beginner in the linux world and I have little knowledge about
unix and even less about linux.
I have installed the Linux Redhat 6.1 recently, and that went quite smooth,
it is on an intel machine with now
a lilo boot and a win2000 boot menu, in which I can choose 98 or 2000.
Here comes my problem: when booting the linux i end up in the bourne-shell
login screen, but this is not quite what
I had in mind for interface... 
i had performed the gnome workstation installation, so it should end up in a
x-windows environment if I am correct.
When i did an upgrade installation, it became clear that there were no
interface ( or similar) packages installed, so
I selected the lot of them and installed it. But after rebooting the
bourne-shell was back, and I am at a loss.
It probably is a stupid problem with a simple solution (I hope), but I fancy
some help.





<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 18:19:37 +0100
<BR>From:  &lt;<A HREF="mailto:saqib@saqib-shaikh.freeserve.co.uk">saqib@saqib-shaikh.freeserve.co.uk</A>&gt;
<BR>Subject: A Problem

<P> Dear Editor,

<P> My name is Saqib Shaikh and I live in the UK. I have been reading 
Linux books for a few years now, and decided to put my knowledge 
into practice. I got out my CD of Slackware 3.6, and my old 
computer. My computer's specifications are: 486, 33 mhz 
processor, 4 MB RAM, 80 MB hard drive. The Slackware guide 
said that 4 MB was enough RAM, so gave it a go. I made the boot 
and root floppies. I inserted the boot floppy, powered up, inserted 
the root floppy when asked. It stood there, blank screen, doing 
nothing. I thought on such an old computer it must just be taking 
its time. 25 minutes later I pressed ctrl+alt+del. This has resulted 
in my computer, whenever turned on, giving the error "Cannot find 
ROM basic"!. It does not even check the floppy disk. One last thing 
to mention is that before starting the install I used fdisk to remove 
all partitions, and used fdisk /mbr to remove the mbr. I would be 
extremely greatful for your help. I do not mind throwing the 
computer away, but rather would like to learn the cause for the 
future.

<P> REgards, Saqib Shaikh

<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 18:19:37 +0100
<BR>From: Linux Gazette &lt;<A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A>&gt;


<P> Hai,<BR>
I want to take backup on HP 5GB Dat Drive.
Could u please help me any body how to configure it.
Thanks in advance.

<BLOCKQUOTE> <EM>
	[I inadvertently cut off the querent's name and e-mail address.
	Please send answers to the <EM>Gazette</EM>. -Ed.]
</EM> </BLOCKQUOTE>


<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 18:19:37 +0100
<BR>From: Linux Gazette &lt;<A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A>&gt;

The following questions received this month are answered in the
<A HREF="http://www.linuxgazette.com/faq/index.html">Linux Gazette FAQ</A>:

<UL>
	<LI> Will my Winmodem (this time a PCI Internal faxmodem Well FM-56PC
V:RWH-A) work under Linux?
</UL>



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 26 Apr 2000 10:52:35 +0800
<BR>From: Kana Krishna &lt;<A HREF="mailto:Kana_Krishna@netcel360.com">Kana_Krishna@netcel360.com</A>&gt;

<P> My name is Kanagaraj and I'm from Malaysia . Currently I'm doing my degree
in Computer Science in a local university here . I need help in creating a
script that can log into telnet or ftp server ( with user name and password
) to copy a file(log file) and send it to a pc that
is connected to the network . What I really need to do is :-

<OL>
	<LI> Telnet a site with its password and user name.
	<LI> From there , ftp another site (with password and user name).Get a
log file and send it through both the servers again to a pc that is
connected to the network
</OL>

<P> I need the automate the process by scripting for one of my projects and I'm
really having a tough time doing it . I'm have to connect using MS-Dos
enviroment. As I was looking for some information or somebody to help me , I
found your e-mail address in one of the web sites . It would nice if you
could help me .Bye




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 26 Apr 2000 18:42:50 -0400
<BR>From: Aurelio Mart&iacute;nez Dalis &lt;<A HREF="mailto:aureliomd@cantv.net">aureliomd@cantv.net</A>&gt;


<P> My Name is Aurelio Mart&iacute;nez, from Venezuela, Latin America. I speak
english just a little, and I am a Linux begineer. I would like to know if
exists any other video system for linux other than X11, free or comercial,
under development or stable. Can you help me ? Thanks.



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 28 Apr 2000 14:42:50 -0400
<BR>From: Roland Glenn McIntosh &lt;<A HREF="mailto:roland@sunriselabs.com">roland@sunriselabs.com</A>&gt;
<BR>Subject: Two problems - change password with Eudora, how to APOP?

<P> I'm using the IMAP package, whichever version comes with Red Hat Linux 6.2.
I'd like to be able to change my mail password on the server from the client,
using Eudora's "change password" feature.

<P> I'd also like to be able to use APOP authentication, though I haven't seen
how to set this up anyplace on the server side.  Please help!



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 28 Apr 2000 15:05:17 -0700
<BR>From: Julio &lt;<A HREF="mailto:axios@dccnet.com">axios@dccnet.com</A>&gt;
<BR>Subject: leading distributions 


<P> hello there folks,

<P> thank you for the quality publication

<P> would you please help me find information on the leading distributions of
Linux?

<P> I have looked everywhere I can think of, including linuxorg, linux this and
linux that. Also IDC and IDG. Internet.com, cnet...

<P> where o where can I find a simple explanation of the top distributions,
what is their market share, how many copies each has sold and if it is broken
down by continent then all the better.

<P> sorry to bother you but after 3 days of fruitless searching, I just came to
the conclusion that I should start asking people who are likely to know

<P> I am another new convert -  I am having a dual processor Linux machine
built as I type this and will deep six Windows for good.  Finally. And good
riddance.

<P> please help if you can, even if you don't know that answer, please direct
me to somebody that does know the answers to the above questions.

<P> thanks for your help,







<a name="gen"></a>
<P> <hr> <P> 
<!-- =================================================================== -->
<center><H3><font color="maroon">General Mail</font></H3></center>

<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 3 Apr 2000 23:27:54 -0400
<BR>From: Pierre Abbat &lt;<A HREF="mailto:phma@oltronics.net">phma@oltronics.net</A>&gt;
<BR>Subject: Best Linux and BestCrypt

<P> Best Linux is at Technology Center Hermia, Tampere. BestCrypt is by Jetico,
which is on Hermiankatu, Tampere. Any connection?

<P> phma



<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 11 Apr 2000 15:23:46 GMT
<BR>From: Harry &lt;<A HREF="mailto:harryw@thegenstore.com">harryw@thegenstore.com</A>&gt;
<BR>Subject: Good work.

<P> Hi

<P> I read the Linux Gazette regularly, but I hadn't read it for the few
months just passed.  I read the new cartoon Helpdex, and
really liked it.  So much in fact that I decided it was worth
e-mailing you to tell you that I think it's a great addition to
a great 'Zine.

<P> Keep up the good work.




<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 24 Apr 2000 17:45:25 GMT
<BR>From: Michael Williams &lt;<A HREF="mailto:iamalsogod@hotmail.com">iamalsogod@hotmail.com</A>&gt;
<BR>Subject: Newbie installation tips and reorganizing the tech support columns

<BLOCKQUOTE> <EM><H4>[These are excerpts from a long conversation.  My 
proposal is near the end.  Readers: please send in your suggestions or offers
to help! -Ed.]</H4></EM></BLOCKQUOTE>

<P> How about setting up a regular section where people email their problems 
with setting up Linux, especially on a machine that already runs windows 
(along with the solutions of course). I'm suggesting this because of the 
problems that I found when installing Linux - I believe that this is a major 
factor in stopping people from using the operatins system. It wouldn't be 
immediate, but I would be happy to put it all together if you would just 
mention it in the next issue.


<H2>Your humble Editor wrote:</H2>
<P> How would this be different from the Mailbag/2-cent Tips and The Answer Guy?
Do you wish the installation questions moved all together under their own
heading?  Or what is it you're looking for?

<H2>Michael responded:</H2>
<P> Okay....

<P> 1. It is different from the answer guy/2 cent tips as it allows the readers 
to offer their solutions for problems. As good as he is, the answer guy 
cannot answer every problem that may arrise simply because of the range of 
hardware available. If enough people responded, it would end up as a pretty 
comprehensive list of problems that may arrise during the Linux 
installation.  I see your point, it is fairly 
similair to two cent tips. However, it would be purely based around 
installation issues.

<P> 2. Yes, I believe that the installation issues should be moved under a
seperate heading. This is by far the most difficult/traumatic part of Linux (in
my view), especially when there's another OS involved (ie windows). This put me
off installing Linux for almost two whole years.  Those were two wasted years -
there should definately be a comprehensive and detailed guide to installing
Linux (yes, I know they do exist, but I haven't seen any that allow user
contribution on this scale). 




<H2>Your magnificent Editor wrote:</H2>

<P> You are very right about people putting off installing Linux because of
potential installation problems, and how this is "wasted time" when they could
be learning the OS.  Unfortunately, even the most comprehensive book will not
cover all situations.

<P> I'm cc'ing Jim Dennis and Heather Stern (the Answer Guy and HTML Gal)
and Margie Richardson (the Ruler of the Gazette) to get their input
on this.

<P> A good portion of our questions are indeed first-time user issues, and
another good portion deals with adding hardware.  I'm unsure whether
trying to separate those questions out would be worthwhile.  The thing is, the
technical details regarding first-time installation also come back when you add
new hardware, install Linux on `a different computer, etc.

<P> Would you be interested in coordinating the installation- and hardware-
related questions in the Mailbag and 2-Cent Tips?

<P> You could also build something like a knowledge-base index based on
subject with links to the letters, if you're ambitious.  This would be
something to help newbies find the information they need.

<P> The LG FAQ also has a section for questions that come up so frequently
(like Winmodems) that Jim, Heather and I get tired of repeating them,
so we just point people to the FAQ.  If you'd like to augment that
section of the FAQ, it might help some readers.  (Now if readers would only
realize the FAQ exists.  It seems that links on every page and even a link in
the blurb about how to submit a question doesn't help....)

<H2>Heather Stern chimed in:</H2>

<P> Also with many querents it's not clear if they'd fall into the space of
"first tine user" - they didn't say, so we'd be presuming to say so.  And
a very experienced person is often new to the one aspect they're asking about.

<P> The readers already are supposed to be putting forward their own problems
and solutions with 2cent Tips;  but we're getting an increase of people
sending raw Tips to The Answer Guy, usually inspired by a previous letter
in his column.

<P> My personal inclination would lean toward, if Michael's willing to
coordinate it, sprouting Tips (short answers only), Answer Guy, and the
Clueful Hoard (i.e. answerguy like answers from the readership, to
technical questions to the Mailbag) into its own meta-section, with the
FAQ and/or sorted best answers prominently bulleted below these.  For such
an endeavor I'd be happy to throw together some extra graphics, and send
him the current edition of the AnswerGuy preprocessing script, with some
docs on how to use it effectively :)

<P> This would mean some things that presently get pubbed as Tips, and some
messages that come to The Answer Guy, would be moved to the Clueful Hoard.

<P> Jim had originally (way back in the teen issues) figured the Answer Guy
would someday become an Answer Gang.  This is one way to do it.  Another
way to do it would be to turn Answer Guy into a moderated list where the
querent gets a consensus or best answer from the Gang.  I have on occasion
piped in an editorial comment as well...

<P> It's hard to tell who uses Past Answers since if they got their answer,
they generally don't email us...

<P> I made an attempt at sorting Past Answers into topics and Michael, you're
welcome to look at them, even, to become their maintainer (I'm usually a
month or two behind on them), and for the FAQ too.  Deciding on where to
split the topics can be difficult, even if you're willing to link a question
multiple times.  It's behind (3 months I think ;P) but -All- the answers the
Answer Guy wrote up to the last maintenance visit I made to them, are in the
Past Answers.


<H2>Your all-around good guy Mr Editor wrote:</H2>

<P> I'm hearing lots of good suggestions.  Let's think about it for a month
before deciding what to do.  We have two requests: (1) giving Linux newbies
better access to information about configuring their hardware, and (2) a
general reorganizing of the tech support columns.

<P> It's clear that the Answer Guy column is better organized than the
Mailbag/2-Cent Tips in regard to finding the messages that deal with your
question, so I'd like to consider moving all the tech support questions to
that framework.  The Mailbag would then be just for general mail (which usually
means mail about the <EM>Gazette</EM>), and 2-Cent Tips would be for standalone
tips: nifty shell scripts, cool .bashrc settings, etc.  (I really enjoy doing
the standalone tips, so nobody's taking that part away from me. :)


<H2>Heather responded:</H2>

Michael wrote:
<BLOCKQUOTE>
How about creating a regular section entirely devoted to newbie's? It would 
almost be like a 'sub magazine' in its own right, with its own sections. To 
go into more detail....
</BLOCKQUOTE>

<A HREF="http://www.linuxnewbie.org">www.linuxnewbie.org</A> and
<A HREF="http://www.linuxstart.org">www.linuxstart.com</A> 
(multilingual)--both aimed at newbies--already exist.
 
 <BLOCKQUOTE>
It would be split up into 5 seperate sections:

<P> 1. Distrubution Reviews (which would have an archive of distribution
reviews as well as new ones)
</BLOCKQUOTE>

Just another article type, really.
 
<BLOCKQUOTE>
2. A newbie version of the answer guy (all newbie questions would go here)
</BLOCKQUOTE>

<P> The Answer Guy is popular because he is (1) an ordinary person answering
ordinary people and (2) he will chase down a lot of weird answers (his 
experience can lead him to give much better than a newbie knows to ask for).

<P> I think it is harmful rather than helpful to suggest that newbies should
somehow get shoved into a corner (what, they're not "allowed" to speak to
the answer guy?  the same one who actually -answers- when he gently flames
the poor weener who is not quite on-topic, or has asked in a creatively
misunderstanding way? I don't think so)  And lest you suggest that I have no 
experience with them... I teach on Mondays, to a few people who are newbies
to Linux and computers themselves at the same time.  If you'd be assuming 
that they even know what an A: is... you'd do them a terrible disservice.

<P> I have no objections to a transformation into a Answer Gang (multiple gurus
in the column, maybe more bubble types?) or a Clueful Hoard (someone edits 
answers from the multitude into a similar column, while the wizardly Answer
Guy answers his as well) but I have a *serious* objection to completely 
restructuring the whole webzine.
 
<BLOCKQUOTE>
3. Reader's Tips (this is basically my original idea, concentrating mainly 
on installation and compatibility issues. It too would have an archive 
section split up into easily findable topics)
</BLOCKQUOTE>

<P> Tips already exists as a column.  If you're interested in becoming a 
maintainer for it that would probably be great.
 
<BLOCKQUOTE>
4. Programming for Newbies (programming is an -extremely- important part of 
Linux. It would not concentrate on more complex and specific issues. It 
would deal with more general and introductory topics and contain links to 
reference material.
</BLOCKQUOTE>
 
<P> This could easily become a longterm column of its own, the transformation
of one unfamiliar with programming into a script wizard and junior programmer.
Good idea.  

<BLOCKQUOTE>
5. Feature artical (each month it would contain a different feature e.g 
setting up Linux under windows etc....)
</BLOCKQUOTE>

<P> You're welcome to contribute ordinary articles to the Gazette during any
month whatsoever, and if you can encourage others to do so also, more power
to you.
 
<P> Didn't we used to have a "weekend mechanic" section?

<BLOCKQUOTE>
Of course, I would be happy to moderate and design this with a little help. 
It would not be a huge, certainly not the size of the magazine itself. If 
you want to encourage people to use Linux and get the most out of it, a 
section like this would be great. I know it is a lot more than I originally 
suggested, but I for one certainly believe it would be a good idea.
</BLOCKQUOTE>

<P> On the one hand I want to encourage the enthusiasm.  On the other, I'd like
to note, it's a lot of work merely to corrdinate the answerguy letters into
one column.  I think at one point it was about half the work in the whole
magazine, and that I took it over from Marjorie both made TAG look better,
and allowed Marjorie some breathing room to make the Gazette better.  I do
not honestly believe that one person can do all of this that you describe
without ramping up to it.  Though you claim it'd be smaller than the zine,
it sounds bigger than the early issues of it, and Marjorie had her hands
full every month back then too.  

<P> Take over the FAQs and Past Answers and mush them together nicely, or start
writing articles regularly.  Heck, if you can manage to do both of those
every month without going completely bonkers, maybe a "section for newbies" 
will be completely and utterly unnecessary, because they will tend to find 
what they are looking for.

 
<H2>Michael wrote:</H2>

<P> I would be happy to help out in any way that I 
can, just tell me what to do :-). Your comments were justified - it would 
involve a huge remake of the overall layout and a considerable ammount of 
work. Thanx for your time :) (No hard feelings by the way).


<H2>Your Editor, who rode his bike to work and enjoyed the sunshine, wrote:</H2>

Heather wrote:
<BLOCKQUOTE>
I think it is harmful rather than helpful to suggest that newbies should
somehow get shoved into a corner
</BLOCKQUOTE>

<P> I agree with Heather here.  Everybody is a veteran at some things and a
newbie at others.  

<P><FONT SIZE="+1"> <STRONG>
Here's a proposal:

<OL>
	<LI> Create a topic index covering both articles and tips
	<LI> Answer Guy -&gt; Answer Gang/Clueful Hoard
	<LI> All tech support questions/answers -&gt; Answer Gang/Clueful Hoard
	<LI> Have more articles and series like the Weekend Mechanic
</OL>
</STRONG></FONT>

<P> Now to elaborate.


<H4>#1 -- TOPIC INDEX</H4>

<P> This would help newbies (and veterans) find the articles/letters
relevant to their problem.  We'd have to decide on categories (e.g.,
Network/PPP, Hardware/Video Cards, XWindows).

<P> The back end for this is partially covered: each article and TAG answer
already has its own URL, and some tips (not in recent issues) have their
own anchor links as well.  Somebody just needs to categorize the items
and create the entry links in the index.  For tips without their own
anchor link (=all the recent issues), we'd just have to link to the
page.

<P> If we can build a framework that allows contributions from home, then
readers can submit, say, a text file containing all the index
entries for issue X (category, link title, URL), and a script can merge
these into the index.  I can categorize the articles for each current
issue, and the Answer Gang can do the same for the tips, and volunteers
can do the back issues gradually one by one.


<H4>#2 -- Answer Gang/Clueful Hoard</H4>

<P> We need to get more people working on this before we all get burned out.

<P> Heather, can you and Jim propose some logistics on how we could
coordinate keeping the Gang together and getting each question to the Hoard and
moderating the answers?  We first need to know what needs to be done, then we
can figure out who will do what.


<H4>#3 -- Moving the tech support letters/tips</H4>

<P> This will have to wait until the Answer Gang is ready to take it on.


<H4>#4 -- More articles/series</H4>

<P> This will take care of itself as potential authors propose things.
We can list in the Mailbag what series are missing and desired.


<BLOCKQUOTE>
This could easily become a longterm column of its own, the transformation
of one unfamiliar with programming into a script wizard and junior programmer.
Good idea.  
</BLOCKQUOTE>

We have two articles this issue on shell scripting.  If the authors
would like to put their heads together, perhaps they can come up with
some ideas and manpower for a series or two.  Programming of course 
covers several areas: shell, scripting languages (Python, Perl, etc.),
C-like languages, assembly/low-level stuff, and others.  One series
would be able to cover probably only one of those.  

<BLOCKQUOTE>
Didn't we used to have a "weekend mechanic" section?
</BLOCKQUOTE>

We did, but the author John Fisk is no longer available.  If somebody
wishes to revive it, that would be great.



<!-- *** BEGIN copyright *** -->
<P> <hr> <P> 
<H5 ALIGN=center>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.
Copyright &copy; 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->

<H4>"Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>
<HR>

<center>
<table cellpadding=7><tr><td>
<IMG SRC="../gx/bytes.gif" border=1  ALT="News Bytes">
</td><td>
<H3>Contents:</H3>
<ul>
<li><a HREF="#distro">Distro News</A>
<li><a HREF="#general">News in General</a>
<li><a HREF="#software">Software Announcements</a>
</ul>
</td></tr></table>
</center>



<P> <hr> <P> 
<!-- =================================================================== -->

<center><IMG ALT=" "   SRC="gx/cover73.jpg" WIDTH=200 HEIGHT=268></center>
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<font color="green">
May 2000 <I>Linux Journal</I>
</font>
</H3>
<P> 
The May issue of <A HREF="http://www.linuxjournal.com/"><I>Linux
Journal</I></A> is on the newsstands now.
This issue focuses on Programming and includes a 
<STRONG>Python supplement</STRONG>.

<P> <I>Linux Journal</I> has articles that appear "Strictly On-Line".
Check out the Table of Contents at
<A HREF="http://www.linuxjournal.com/issue73/index.html">
http://www.linuxjournal.com/issue73/index.html</A> for articles in 
this issue as well as links to the on-line articles. 
To subscribe to <I>Linux Journal</I>, go to <A
HREF="http://www.linuxjournal.com/subscribe/index.html">
http://www.linuxjournal.com/subscribe/index.html</A>.

<P> 
<font color="green">
For Subcribers Only</font>: <I>Linux Journal</I> archives are available 
on-line at 
<A HREF="http://interactive.linuxjournal.com">
http://interactive.linuxjournal.com/</A> 


<a name="distro"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">Distro News</font></H3></center>

<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">BlueCat
</FONT>
</H3> 

<P> SAN JOSE, Calif. - March 6, 2000 - Lynx Real-Time Systems, Inc., today
announced delivery of Hewlett-Packard Company's (HP) ChaiVM, embedded
virtual-machine technology on Lynx' BlueCat Linux operating system (OS).
BlueCat users can now field soft real-time Java applications in a wide
range of products using the Java-compliant embedded virtual machine from HP.
	 
<P> BlueCat offers a fast, interpretive byte code execution and a Java
native interface to bind Java threads to BlueCat pthreads for deterministic
scheduling. BlueCat features a reduced run-time footprint, as small as
600K, and concurrent, incremental garbage collection contributing to
predictable soft real-time performance.


<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Corel
</FONT>
</H3> 

<P> Following the launch of Corel LINUX OS in November 1999, Corel's U.S.
retail market share for Linux increased more than eight times to 19.3
per cent as of February 2000. Prior to the release of Corel LINUX OS,
the company held 2.3 per cent of the retail market share based on sales
of Corel WordPerfect 8 for Linux. Corel also released WordPerfect
Office 2000 for Linux in March.

<P>
The free Corel LINUX  OS Download is NOW available! Check it out at
<A HREF="http://linux.corel.com/">http://linux.corel.com/</A>



<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Debian
</FONT>
</H3> 


<P> Debian has recently added another machine to its computing resources. The
system is an UltraSPARC 60 with dual 360Mhz CPU's and 512Megs of RAM. It
was donated by Sun Microsystems <http://www.sun.com/>. To add to the system,
Sun also donated a Netra st A1000 Telecom Class storage array. The array
contains eight 9gig 10k RPM drives, for a total of 72gigs of raw capacity.
The storage unit, configured as a RAID 5 system, will serve as Debian's new
primary internal archive server.  IntraServer <http://www.intraserver.com/>
also assisted in getting this system operational by donating the PCI
Differential UltraWide SCSI Controller that the array is attached to.

<P> The system is currently running Debian's frozen SPARC GNU/Linux
distribution, potato (aka, Debian 2.2), utilizing a 2.2.15-pre11 SMP
kernel. The machine is being hosted at VisiNet <http://www.visi.net/>,
a Winstar owned ISP <http://www.winstar.com/>.

<P> Debian wishes to thank all of the contributors of the system and hosting 
site as well as the developers who invested time and effort into testing and 
configuring the system for Debian's network.  Thank you!





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Mandrake
</FONT>
</H3> 


<P> INDIANAPOLIS - March 27, 2000 - Macmillan USA, the Place for Linux,
(<A HREF="http://www.placeforlinux.com">www.placeforlinux.com</A>), announced
Secure Server 7.0 for professional server administrators.  Macmillan's new
product is a secure Linux web server built within the new Linux-Mandrake(tm)
7.0 operating system.  With Secure Server 7.0, managers of mid-level traffic
web sites will have a secure server solution.

<P> Secure Server 7.0 provides graphical tools for easy Linux installation
and disk partitioning.  The Apache-based web server utilizes RSA's
BSAFE SSL-C technology - the best technology available for encryption
and security.  Secure Server 7.0 is designed for the Linux professional
responsible for managing an e-commerce, intranet or any web site
requiring security.  Additional tools, utilities, and documentation
round out the product, providing more value and functionality.

<P> Secure Server 7.0 is available now at an MSRP of U.S. $149.95.


<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">SuSE
</FONT>
</H3> 

<P>   NUREMBERG, Germany -- March 13, 2000 -- SuSE Linux today announced that
  it has designated VA Linux Systems' SourceForge, the
  world's largest Open Source development center, as a primary mirror for
  ftp.suse.com, to help improve the availability of SuSE Linux via download.
  
<P>   SuSE Linux is available for download at
  <A HREF="ftp://download.sourceforge.net/pub/suse/">
  ftp://download.sourceforge.net/pub/suse/</A>, which carries the full FTP
  version of SuSE Linux, as well as ISO images of the evaluation version,
  updates and fixes.
  
<P>   Further, SuSE Linux is now offered as a platform on the SourceForge
  CompileFarm, a unique service that gives Open Source developers a
  convenient way to build and test applications on multiple versions of
  the Linux and BSD operating systems over the Internet.  The SourceForge
  CompileFarm enables Open Source developers to automatically create
  packages that can be installed on SuSE Linux using SuSE's YaST
  installation tool, without having to compile the programs manually.
  
<P> 
SuSE announced a deal with Fugitsu
Siemens Computers, Siemens Business Services and Siemens IT Service to
deliver SuSE Linux-based systems with complete customer and sales support.
With a global reach, the Fujitsu/Siemens and SuSE agreement allows the above
partners to deliver an encompassing enterprise Linux solution to thousands
of potential customers.

<P> SuSE will disperse a free distribution CD within the June 2000 issue of
MacTech Magazine.
This CD will be a fully working distribution of Linux on the 2.2.14 kernel,
with SuSE's powerful installation tool as well as other open-source
software. This CD does not expire and can be distributed freely.

<P> SAN MATEO, CA and HANNOVER, GERMANY - March 14, 2000 - SuSE will now budle
Enlighten Software Solutions, Inc.'s Linux System Monitoring and Reporting
technology with the SuSE Linux 6.4 for Intel distribution.  When enabled, the
Enlighten Linux Monitoring Agent will be able to monitor and report on critical
Linux system and operating conditions including processor, memory utilization,
changes in hardware and software configuration and increases in network errors.













<a name="general"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">News in General</font></H3></center>


<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Upcoming conferences &amp; events
</FONT>
</H3> 

	
<P>
<table cellpadding=10 border=3 width=100%>

<tr>
<td valign=top>
<b>Forum of Free Software</b><BR>
<td valign=top>
May 4-5, 2000<BR>
Porto Alegre, RS, Brazil<BR>
English: <A HREF="http://www.softwarelivre.rs.gov.br/welc_ing.html" target=_blank>
http://www.softwarelivre.rs.gov.br/welc_ing.html</A><BR>
Portuguese: <A HREF="http://www.softwarelivre.rs.gov.br/welc_port.html" target=_blank>
http://www.softwarelivre.rs.gov.br/welc_port.html</A><BR>
<P>
</td></tr>

<tr>
<td valign=top>
<b>HPC Linux 2000</b>: Workshop on High-Performance Computing with
Linux Platforms<BR>
<td valign=top>
May 14-17, 2000<BR>
Beijing, China<BR>
<A
HREF="http://www.csis.hku.hk/~clwang/HPCLinux2000.html" target=_blank>
www.csis.hku.hk/~clwang/HPCLinux2000.html</A>
<P>
(In conjunction with <A 
HREF="http://www.cs.wm.edu/hpcs/HPCAsia2000.html/" target=_blank>
HPC-ASIA 2000</A>:
The Fourth International Conference/Exhibition on
     High Performance Computing in Asia-Pacific Region)
<P>
</td></tr>
<tr>
<td valign=top>
<b>Linux Canada</b><BR>
<td valign=top>
May 15-18, 2000<BR>
Toronto, Canada<BR>
<A HREF="http://www.linuxcanadaexpo.com" target=_blank>www.linuxcanadaexpo.com</A>
<P>
</td></tr>

<tr>
<td valign=top>
<b>Converge 2000</b><BR>
<td valign=top>
May 17-18, 2000<BR>
Alberta, Canada<BR>
<A HREF="http://www.converge2000.com" target=_blank>www.converge2000.com</A>
<P>
</td></tr>

<tr>
<td valign=top>
<b>SANE 2000</b>: 2nd International SANE (System Administration and
Networking)
Conference<BR>
<td valign=top>
May 22-25, 2000<BR>
MECC, Maastricht, The Netherlands<BR>
<A HREF="http://www.nluug.nl/events/sane2000/index.html" target=_blank>
www.nluug.nl/events/sane2000/index.html</A>
<P>
</td></tr>

<tr>
<td valign=top>
<b>ISPCON</b><BR>
<td valign=top>
May 23-25, 2000<BR>
Orlando, FL<BR>
<A HREF="http://www.ispcon.internet.com" target=_blank>www.ispcon.internet.com</A>
<P>
</td></tr>

<tr>
<td valign=top>
<b>Strictly Business Expo</b><BR>
<td valign=top>
June 7-9, 2000<BR>
Minneapolis, MN<BR>
<A HREF="http://www.strictly-business.net" target=_blank>www.strictly-business.com</A>
<P>
</td></tr>

<tr>
<td valign=top>
<b>USENIX</b><BR>
<td valign=top>
June 19-23, 2000<BR>
San Diego, CA<BR>
<A HREF="http://www.usenix.org/events/usenix2000/" target=_blank>www.usenix.org/events/usenix2000/</A>
<P>
</td></tr>

<tr>
<td valign=top>
<b>LinuxFest</b><BR>
<td valign=top>
June 20-24, 2000<BR>
Kansas City, KS<BR>
<A HREF="http://www.linuxfest.com" target=_blank>www.linuxfest.com</A><BR>
<P>
</td></tr>

<tr>
<td valign=top>
<b>PC Expo</b><BR>
<td valign=top>
June 27-29, 2000<BR>
New York, NY<BR>
<A HREF="http://www.pcexpo.com" target=_blank>www.pcexpo.com</A><BR>
<P>
</td></tr>


<tr>
<td valign=top>
<b>LinuxConference</b><BR>
<td valign=top>
June 27-28, 2000<BR>
Z&uuml;rich, Switzerland<BR>
<A HREF="http://www.linux-conference.ch" target=_blank>www.linux-conference.ch</A><BR>
<P>
</td></tr>


<tr>
<td valign=top>
<b>"Libre" Software Meeting #1<BR> (Rencontres mondiales du logiciels
libre)</b>, sponsored by ABUL (Linux Users Bordeaux Association)<BR>
<td valign=top>
July 5-9, 2000<BR>
Bordeaux, France<BR>
French: <A HREF="http://www.abul.org/rmll1-fr.html" target=_blank>
www.abul.org/rmll1-fr.html</A><BR>
English: <A HREF="http://www.abul.org/rmll1-uk.html" target=_blank>
www.abul.org/rmll1-uk.html</A>
<P>
</td></tr>


<tr>
<td valign=top>
<b>Summer COMDEX</b><BR>
<td valign=top>
July 12-14, 2000<BR>
Toronto, Canada<BR>
<A HREF="http://www.zdevents.com/comdex/" target=_blank>www.zdevents.com/comdex</A><BR>
<P>
</td></tr>
           

<tr>
<td valign=top>
<b>O'Reilly/2000 Open Source Software Convention</b><BR>
<td valign=top>
July 17-20, 2000<BR>
Monterey, CA<BR>
<A
HREF="http://conferences.oreilly.com/convention2000.html" target=_blank>
conferences.oreilly.com/convention2000.html</A><BR>
<P>
</td></tr>
           
<tr>
<td valign=top>
<b>Atlanta Linux Showcase</b><BR>
<td valign=top>
October 10-14, 2000<BR>
Atlanta, GA<BR>
<A HREF="http://www.linuxshowcase.org" target=_blank>www.linuxshowcase.org</A><BR>
<P>
</td></tr> 


<tr>
<td valign=top>
<b>Web 2000</b><BR>
<td valign=top>
November 1-3, 2000<BR>
(Location unknown at present)<BR>
(URL unknown at present)<BR>
<P>
</td></tr> 

<tr>
<td valign=top>
<b>Fall COMDEX</b><BR>
<td valign=top>
November 13-17, 2000<BR>
Las Vegas, NV<BR>
<A HREF="http://www.comdex.com" target=_blank>www.zdevents.com/comdex</A>
<P>
</td></tr> 
<tr>
<td valign=top>
<b>USENIX Winter - LISA 2000</b><BR>
<td valign=top>
December 3-8, 2000<BR>
New Orleans, LA<BR>
<A HREF="http://www.usenix.org" target=_blank>www.usenix.org</A>
<P>
</td></tr> 

<tr>
<td valign=top>
<b>Linux Expo</b><BR>
<td valign=top>
(Dates unknown at present)<BR>
San Jose, CA<BR>
(URL unknown at present)<BR>
<P>
</td></tr>
            
<tr>
<td valign=top>
<b>ISPCON</b><BR>
<td valign=top>
(Dates unknown at present)<BR>
San Jose, CA<BR>
<A HREF="http://www.ispcon.internet.com" target=_blank>www.ispcon.internet.com</A><BR>
<P>
</td></tr>
            


</table>




<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Magic Software news
</FONT>
</H3> 

<BLOCKQUOTE> <EM>
[Magic Software sent in these beautiful penguin photos from Antarctica.  

<P>
<CENTER>
<IMG ALT="Diving Penguins" SRC="gx/bytes/magic/Diving_Penguins.jpg"
	WIDTH="418" HEIGHT="280">
<IMG ALT="Sea of Penguins" SRC="gx/bytes/magic/Sea_of_Penguins.jpg"
	WIDTH="418" HEIGHT="281">
</CENTER>

<P> The pictures were taken when Mike McMillin won the Magic for Linux Really
Cool Contest and embarked on his prize--an 18-day cruise around Antarctica and
its surrounding islands.

<P> Thanks, Magic! -Ed.]
</EM> </BLOCKQUOTE>

<P> Magic introduced eService, the Company's new Web-based, enterprise-level
customer service management system that allows companies to manage their
service departments as profit centers.  The new product, which marks the debut
of Magic's new customer relationship management (CRM) suite, streamlines
service workflow and provides companies a comprehensive picture of their
service departments in real time.

<P> In addition, Magic eService reduces costs by making it possible for
companies to employ cost-effective "virtual support centers," where service
agents can work from their own homes around the world.  Virtual support centers
also allow the organization to easily provide 24-hour, seven day a week support
through "follow-the-sun" service that utilizes the availability of the
Internet.

<P> Magic has also signed a deal to deliver  MiTAC Europe Ltd.  Powered by
Magic's eMerchant, the web site will provide consumers easy access to a wide
range of mall-type stores through a three-dimensional interface that helps
simulate a true store-to-store mall shopping experience for the visitor.  It is
a site that MiTAC expects will revolutionize the design and convenience of
online shopping sites.  eMerchant is available for Linux.

<P> 



<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">PileofPcs.Org: open-source Beowulf project
</FONT>
</H3> 

<P> (STOCKHOLM,SWEDEN) (April 17, 2000) In an effort to address some of the
barriers that are limiting the spread of Beowulf class cluster-based
supercomputer, 
<A HREF="http://www.Pileofpcs.Org">Pileofpcs.Org</A> has been created. It is
dedicated to the proliferation of cluster-based supercomputing (i.e. Beowulf
class computers) by creating, promoting and sponsoring the Open Source
development of distributions, applications and tools comparable to those sold
by traditional supercomputer vendors. All three of our initial projects are
being hosted at Sourceforge.net.
 
<P> "PileofPcs.Org hopes to hasten the day that clusters of cheap computers
become more useful. Our intention is to apply all the technology,
resources and volunteers we can to help the growth of cluster-based high
performance computing as fast as it possibly can. Furthermore, the
PileofPcs.Org is imbedded and wedded to the Open-Source Philosophy and
community," Dr. Terrence E. Brown, Founder/Executive Director. 
 
<P> We are doing this in a number of ways. First, we are creating a new Linux
distribution (and tools) that will allow anyone to easily create a general
purpose supercomputer - a Vanilla Beowulf without being a linux programming
expert. Second, given that a supercomputer is worthless unless it does
something; therefore, perhaps more importantly, we are also, sponsoring the
development of wide range of useful applications both parallel and
parametric. Additionally, one of the biggest problem with deploying
scalable production-class superclusters is the lack of mature and tested
management tools comparable to what the traditional supercomputer vendors
provide. PilesofPcs.Org aims to change this as well. 
 
<P> Current Projects
1. A new linux distribution that will allow those with limited technical
knowledge create a vanilla Beowulf class supercomputer. SuperClustor Linux
is hosted here. 
<A HREF="http://sourceforge.net/project/?group_id=4302">http://sourceforge.net/project/?group_id=4302</A>

<P> 2. An Open source version of an base application that would delivers the
high level of performance required for parametric executions by
distributing the jobs over a computer cluster and/or network. This
application will allow users of cluster systems to using already existing
programs with little of no rewriting. Commercial products that do similar
tasks include Clustor and EnFuzion. This would be an open source
alternative to them. OpenClustor is hosted here.
http://sourceforge.net/project/?group_idC03

<P> 3. An open source version of a base application that would enable users
with no particular knowledge in Linux, to setup, configure and manage a
linux cluster. With ease of use so that simple click is enough to add or
remove nodes, monitor processors loads and temperatures. Users will no
longer be required to anymore to allocate specific resources to build and
maintain their cluster supercomputer. A commercial product of this nature
include Alinka's Raisin. SuperCluster Manager is hosted here.
<A HREF="http://sourceforge.net/project/?group_id=4304">http://sourceforge.net/project/?group_id=4304</A>

<P> PileofPcs.Org is looking to support and encourage the development many
other application and/or tool projects including two special types: those
requiring parallelization and those supporting parametric execution. We
want to spur the development applications for all types of situations
including, but not limited to science, finance, multimedia, bioinformatics,
statistics, weather, data mining, design, neural networks, modelling, etc.

<P> 1. Parallelized applications - Although efficient parallelization is a
property of the specific beowulf computer, we believe that we can promote
the creation of pre-parallelized applications. While this will be a
challenge, creating a repository for pre-parallelized and parallelized code
with help speed the development of useable applications for all. 

<P> 2. Applications that support parametric execution - Parametric executions
require that the same application is executed numerous times. A single
application is run under a wide range of input conditions and the results
of these different runs are collected together. Parametric executions are
ideally suited to run on large computing clusters, since they produce a lot
of jobs, often exceeding thousands. These applications will allow users to
tap power of distributed computing.

<P> PileofPcs.Org is looking for Project leaders, developers, html designers,
and all others interested in the PileofPcs.Org and Open Source movement.
PileofPcs.Org is also looking for software and hardware sponsors to
facilitate the rapid development and deployment of our efforts. 
  
<P> Contact: Dr. Terrence E. Brown<BR>
<A HREF="mailto:drbrown@pileofpcs.org">drbrown@pileofpcs.org</A><BR>
<A HREF="http://www.PileofPcs.Org">www.PileofPcs.Org</A><BR>
+46 8 790 6174



<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Seagate Partners with cobalt Networks
</FONT>
</H3> 

<P> SCOTTS VALLEY, CA and MOUNTAIN VIEW, CA - April 3, 2000 - Seagate
Technology, Inc., announced
the first of a suite of Linux-based server appliances targeted at Internet
and Application Service Providers (ISPs and ASPs), through a strategic
partnership with Cobalt Networks, Inc. The first Seagate
Server Appliance Solution, scheduled to be available this summer, is an
easy-to-use, cost-effective solution that provides scablable storage and
reliable data protection for ISPs and ASPs. The Seagate Server Appliance
Solution enables ISPs and ASPs to generate incremental revenue through
"vending" storage and data protection applications to their small and
medium-sized customers. 

<P> 
<A HREF="http://www.seagate.com">http://www.seagate.com</A><BR>
<A HREF="http://www.cobalt.com">http://www.cobalt.com</A><BR>







<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Agate HotData Shuttle
</FONT>
</H3> 

<P> FREMONT, Calif., March 30 -- Agate Technologies, Inc.  today announced the
release of its popular HotData Shuttle(TM) hot swap IDE Plug &amp; Play
solution, designed to support the Linux operating system on Intel based
workstations and Internet Server Appliances. 

<P> IDE hot swap is an industry term used to describe technology, which allows
a component of a computer, such as a hard drive, to be attached or detached
physically and electrically without impeding the performance and state of the
computer. Agate provides this hot swap data-transfer capability by integrating
its proprietary ASCII HotChip(TM) with an interface Printed Circuit Board (PCB)
mounted in a generic device bay. The end result is the only true hot swap
solution available today. 

<P> Priced at $49.95 (U.S.), HotData Shuttle for Linux comes with Shuttle
bay/Tray, software driver, and mounting kit. HotData Shuttle(TM) for Linux will
be marketed and distributed through its fully owned subsidiary, ei Corporation. 






<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Penguin power credited for 100.000% network availability
</FONT>
</H3> 

<P> NORTH QUINCY, MASS: Wednesday, April 5, 2000: Jeff Morris, President of the
Xensei Corporation 
(<A HREF="http://www.xensei.com">http://www.xensei.com</A>), announced today
that they have reached a service level milestone that will allow them to begin
rolling out high-availability web hosting, an emerging service level that has
now become business-critical for eCommerce. High-availability hosting is
required by successful eCommerce sites to ensure that their site will be "up",
or open for business for a pre-determined percentage of time-often guaranteed
in a service-level agreement (SLA). 

<P> He commented that, "Our customers have certainly appreciated the increased
reliability of our hosting service as network availability has increased to
99.982% over the past year, and 100.000% over the last 90 days."

<P> There are multiple grades of high-availability hosting-they are named
according to the number of "nines" in the uptime percentage. 90% is one nine or
Class I, 99% is two nines or Class II, 99.9% is three nines or Class III, and
so on. Class V is 99.999% and means that the site is down only 5 minutes per
year as opposed to a Class 1 which means that your site is down for 876 hours
per year (or 73 hours per month). Most hosting providers are currently
providing Class I or lower hosting. Few offer the guarantee of an SLA.

<P> Class 1 hosting is most appropriate for companies interested in maintaining
an Internet presence that is informative in nature. Class II hosting is
recommended for companies who are outsourcing their e-mail system or doing
P.O.S. retailing over the Internet. Class IV hosting is required by companies
involved in Manufacturing, Utilities, Telecommunications Customer Service, or
whose business is strictly eCommerce. Class V hosting is business critical to
health systems, satellite navigation, reservation systems, banking (EFT and ATM
transactions) and financial securities trading. Class VI (99.9999%) hosting is
used by defense systems in launch readiness.







<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">LinuxMall news
</FONT>
</H3> 

<P> DENVER - The first Linux product orders from LinuxMall.com's 
<A HREF="http://www.linuxmall.com">web site</A> are
being filled through Frank Kasper &amp; Associates' Minneapolis, Minn.
warehouse.  The fulfillment operation is a key component of the recently
announced merger between LinuxMall.com and Frank Kasper &amp; Associates.

<P> LinuxMall sponsored all four Linux Business Expo Community Hubs. Linux
Community Hubs provide free booth space to non-profit organizations that make
significant contributions to the Linux and Open Source movement.


<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Tux and DustPuppy (Linux Mall)
</FONT>
</H3> 

<P>   DENVER - Tux the penguin and Dust Puppy, the hottest celebrities in the
IT technical community, have announced their partnership agreement. Geeks from
around the Internet are gathering to support the cuddly mascots in the joint
venture. 
The partnership between Tux, the Linux mascot and User Friendly's Dust
Puppy clears the way for a cross-marketing agreement between LinuxMall.com and
<A HREF="http://Userfriendly.org">Userfriendly.org</A>.

<P>   "I'm thrilled about the Little Guy and my new friends at User Friendly," said Tux in response to the agreement. "My favorite thing to do after eating a few gallons of raw herring, is to curl up with Dust Puppy and the cast of User Friendly. Now I'll get some laughs first-hand."

<P>   "Tux and the whole Linux community are way-cool," the Canadian Dust Puppy remarked. "I'm looking forward to some major appearances together in the future."






<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Linux Expo North America (review)
</FONT>
</H3> 

<P> Montreal, April 18, 2000  -  The first ever Linux Expo North America was a
marked success.  Close to 4,500 visitors made their way through the snow storm
to attend the Expo at Palais des Congrs.  The slight shortfall in the number of
visitors due to Mother Nature's whimsy was more than made up for in the
discernible quality of visitors.  The success of this first edition set the tone
for future shows in Toronto in October and in Montreal in April 2001.

<P> "The comments we've received from the majority of our 102 exhibitors confirm
that our choice of quality versus quantity of visitors, was indeed the best
strategy for positioning our event as one of the great shows in the Linux North
America circuit" declared Stphane Labrouche, V.P. and Director General of Sky
Events, show organizers.

<P> Linux Expo North America is already scheduled to take place in Montreal from
April 10 to 12, 2001.  In the meantime, the event will be held in Sao Paulo June
20 and 21, 2000 and at Toronto's Metro Convention Center October 30, 31 and
November 1, 2000.

<P> <A HREF="http://www.linuxexpocanada.com">www.linuxexpocanada.com</A>









<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Hewlett-Packard to bundle TapeWare Linux software its
tape drives
</FONT>
</H3> 

<P> FRESNO, CA., February 14 ( Yosemite Technologies, Inc. today announced an
agreement with Hewlett-Packard Company to bundle Yosemite's storage management
software, TapeWare, with the HP SureStore family of DAT, and DLT tape drives.

<P> HP gains a powerful, comprehensive, yet intuitive backup technology that
has been often rated superior to other industry leading backup applications and
the bundled solution will provide additional support for the innovative new HP
One-Button Disaster Recovery (OBDR) feature, for integrated full-system
restoration. HP's OBDR offers a fast, simple solution to return a server or
desktop system to its normal operational state following a crash.

<P> "Introducing TapeWare into HP SureStore products offers a complete backup
solution and One-Button Disaster Recovery for Windows NT and NetWare" says
Peter Doughty, marketing manager for HP Computer Peripherals Bristol.  "It also
provides HP SureStore customers with the ability to backup Linux servers and
workstations."

<P> <A HREF="http://www.tapeware.com">http://www.tapeware.com</A>






<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">NetWinder OfficeServer 1.5
</FONT>
</H3> 


<P> OTTAWA, Canada - April 5, 2000 - Rebel.com Inc. announced the availability
of an upgrade to its OfficeServer software - NetWinder OfficeServer 1.5.

<P> NetWinder OfficeServer 1.5 is an all-in-one Internet gateway server
appliance which provides small and medium-sized businesses with full
Internet and local area network support. Based on the Linux operating
system, NetWinder OfficeServer 1.5 is configured with a broad range of
network services such as firewall/VPN, Web site hosting, Web access, file
and printer sharing and e-mail.

<P> Features and enhancements to NetWinder OfficeServer 1.5 include:

<P> * PPPoE (PPP over Ethernet) support - PPPoE is a relatively new protocol that
specifies how a computer interacts with a broadband modem (ie. xDSL, cable,
wireless, etc.) to achieve access to the growing number of highspeed data
networks;

<P> * Third-party plug-in to allow developers to add applications independently 
to the OfficeServer;

<P> * Dynamic Host Configuration Protocol (DHCP) client has been upgraded to
support the @home cable modem service.

<P> The security features of the OfficeServer have been significantly enhanced
in order to keep pace with industry-standard security criteria. This
includes more secure default firewall rules and increased privacy protection
in the mail server. In addition, NetWinder OfficeServer 1.5 now allows users
to securely connect to their OfficeServer-protected LAN anywhere in the
world using the Virtual Private Network (VPN) software. The VPN software is
bundled with the OfficeServer at no additional charge and includes 3 free
client licenses.


<A HREF="http://shop.rebel.com/netwinder/officeserver.cfm">
http://shop.rebel.com/netwinder/officeserver.cfm</A>







<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Cobalt RaQ3i Systems and Phoenix Adaptive Firewall
</H3></H3> <!-- Netscape shouldn't need the extra </H3>, but for some
                reason it does. -->


<P> COLUMBUS, OH, (April 11, 2000) Progressive Systems, Inc., has implemented
its Phoenix Adaptive Firewall onto Cobalt Networks' platform.  Designed for the
many small and medium sized businesses (SMBs) that are implementing full-time
Internet access but have growing security concerns, the new firewall appliance
can be quickly installed and configured to provide very effective protection
that is transparent to the network.  This new implementation joins
Progressive's existing firewall appliance based on the Cobalt Qube and Cobalt
RaQ server appliances.

<P> The fully featured product will sell for $4495 for unlimited users.

<P> <A HREF="http://www.progressive-systems.com">
http://www.progressive-systems.com</A>





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Cobalt Networks Named As Worldwide Market Share Leader
</FONT>
</H3> 

<P> Mountain View, Calif., April 24, 2000- Cobalt Networks, Inc.
announced today that it was named as the worldwide leader in unit market
share for server appliances in the 1999 Server Appliance report published by
Dataquest on April 3, 2000. The Dataquest report names Cobalt as the unit
share leader for the total market, as well as for the entry-level and
midrange market segments. 

<P> Server appliances are application-specific devices. Cobalt's products are
affordable, easy to use, and designed to support one or a few applications
well. Cobalt's product line includes server appliances focused on Web and
e-commerce hosting, e-mail, firewall, caching, and many other Internet-based
applications. In addition, the Cobalt Developer's Network, launched in the
first quarter of 2000, has attracted over 600 application developers to the
Cobalt server appliance platform.

<P> <A HREF="http://www.cobalt.com">http://www.cobalt.com</A>





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">The World's First SANappliance hits the street
</FONT>
</H3> 

<P> SPRING INTERNET WORLD -- Apr. 5, 2000 -- DataDirect Networks, Inc., a
leader in SAN network infrastructure solutions, today is releasing the SAN
DataDirector, the world's first storage area network (SAN) appliance.  The SAN
DataDirector is an intelligent network infrastructure device incorporating the
functionality of next generation SANs into a single integrated, reliable, plug
and play appliance that makes it easier to build and manage a SAN.  

<P> The SAN DataDirector allows UNIX,
Linux, clustered Linux, Sun, SGI, AIX, Mac and Windows NT servers and
workstations to access shared storage resources, permitting workgroups and
clusters within a heterogeneous computing environment with incompatible
operating systems to simultaneously share storage resources.  The SAN
DataDirector easily plugs into existing servers and storage, increasing their
capabilities while providing investment protection.  This capability enables
data access between SAN and client-server users bridging the SAN and NAS
environments, while also upgrading legacy storage into intelligent storage
resources.

<P> <A HREF="http://www.datadirectnet.com">www.datadirectnet.com</A>




<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Technical Manager Wanted - NetJammer.com
</FONT>
</H3> 

<P> <A HREF="http://www.netjammer.com/">netjammer.com</A> 
is looking for a Linux-capable webmaster that could
handle the administrative / webmaster / maintenance side of the site.

<P> It's a very uncorporate "musician" and internet environment.

<P> The Technical Manager's desired skills include all aspects of server
administration and webmastering, HTML, Javascript, Perl, rich media
(audio/video) development and delivery, writing ad copy, tech support, etc.

<P> Pay is negotiable.
Company is located in Hollywood.

<P> PLEASE CONTACT:
Chapin Hemphill at <A HREF="mailto:jobs@netjammer.com">jobs@netjammer.com</A>





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Linux Links
</FONT>
</H3> 

<P> LinuxDevices.com articles re embedded systems:
<UL>
	<LI> <A HREF="http://linuxdevices.com/cgi-bin/article_view.cgi?artid=AT7901775675">
Linux and Windows square off over devices</A> and why Linux will win.
	<LI> <A HREF="http://www.linuxdevices.com/cgi-bin/news_view.cgi?newsid=NS8757266703">
Embedded Linux Consortium launched</A>
</UL>


<P> <A HREF="http://www.team-linux.com">TeamLinux</A> is a professional
services organization that provides customers completely integrated solutions
enabled by open source / Linux technology.  TeamLinux offers
consulting, design, integration, migration, training and support services
for many business applications, including:  e-commerce, Internet-enabled
business- to-business, Computer Aided Design (CAD), Electronic Design
Automation (EDA), embedded systems and Internet appliance applications.

<P> <A HREF="http://userlocal.com">http://userlocal.com</A> is a site with
information for new Linux users.  (from comp.os.linux.announce)

<P> <A HREF="http://www.linuxnetworx.com">Linux NetworX</A> offers a
reliable and cost-effective clustering alternative to the "super computer" for
organizations demanding high performance and extremely low failure rates.



<a name="software"></a>
<P> <hr> <P> 
<!-- =================================================================== -->
<center><H3><font color="green">Software Announcements</font></H3></center>



<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">OpenAL: a 3D audio library
</FONT>
</H3> 


<P> San Jose, CA. -- March 8, 2000 -- Loki Entertainment Software, the 
leading publisher of commercial games for the Linux operating system, 
announced a multi-company project to create and distribute OpenAL, 
an open-source, cross-platform 3D-Audio library.

<P> 3D-Audio greatly improves the immersive quality of a game. It allows 
games and other applications to take advantage of powerful spacialized 
sound effects, including distance and direction attenuation, panning and 
reverb. With these features, gamers can, for example, determine by sound 
the distance and direction of an explosion in a 3D-gaming environment.

<P> "OpenAL represents a milestone for Linux and for the game industry in 
general," said Scott Draeker, president, Loki Entertainment Software. 
"Until now, games running on Linux have not had access to the advanced 
3D-Audio features available on other platforms. OpenAL provides those 
advanced features with an open-source, nonproprietary implementation 
which is available not just for Linux, but for Windows and MacOS games as 
well. What SGI's OpenGL has done for 3D-Video, OpenAL will do for 
3D-Audio."

<P> Creative Technology, 
plans to release Linux drivers that will work with OpenAL, and which 
natively support the advanced 3D-Audio effects which OpenAL enables. In 
addition, Creative is evaluating MacOS and Windows implementations of the 
OpenAL standard

<P> Loki is already incorporating OpenAL into its growing product line of 
AAA Linux games. In March, Loki will release the Linux version of 
Activision's Heavy Gear II, the first Linux game to support 3D-Audio 
using OpenAL.

<P> The source code for OpenAL for Mac, Windows and Linux is freely available 
for download and is offered under the GNU Library Public License (LGPL). 
Visit <A HREF="http://www.openal.org">www.openal.org</A> for more information.





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Joydesk
</FONT>
</H3> 

<P> Seattle, Washington--March 3, 2000--
Virtualtek/<A HREF="http://Joydesk.com">Joydesk.com</A> announces the release
of the wireless version of the popular Joydesk software for March 15, 2000.
The software enables users to access all the functionality of their web-based
collaboration applications from the minibrowser of their Internet ready
cellular phone.  

<P> Joydesk is a fully featured information management suite of
applications with its own built-in mail server. Users can send or receive
e-mail, check their schedule, access contact information, manage tasks, share
information or receive urgent e-mail notification from the web at anytime, from
any location and through any browser, web-enabled PDA, and now, from any
Internet ready phone.  

<P> A free 30 day trial version is available for
download.




<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Rogue Wave C++ Toolkit
</FONT>
</H3> 

<P> BOULDER, CO - April 10, 2000 - Rogue Wave Software announced the release of
its comprehensive collection of C++ components for Linux. The C++ Toolkit for
Linux enables developers to easily create applications on the Linux platform.

<P> This special edition Linux-Only CD includes ports of Rogue Wave's most
popular cross-platform C++ products to the Linux platform, including
Standard C++ Library, Tools.h++, Threads.h++, Tools.h++ Professional,
DBTools.h++ and Money.h++. This new offering provides Linux developers with
basic data structures, threading classes, classes for accessing relational
databases and classes for business analysis and currency conversion.

<P> Pricing starts at $545 and includes a license and one year of Silver
Technical Support and product updates.

<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">TopPage
</FONT>
</H3> 



<P> IBM has recently developed a WYSIWYG HTML editor for
Linux (beta) TopPage is an award-winning
WYSIWYG HTML editor which allows you to create dazzling Web pages in minutes
without any HTML knowledge or programming skills. It is suitable for beginners
and experts. It includes all the tools necessary to create Web pages, including
a WebArt Designer which lets you create logos and buttons, and a Web Animator
which lets you create animation GIF files with just a few simple steps. The
program includes up-to-date technology -- such as Cascading Style Sheets, Java
applets and Dynamic HTML. TopPage gives you the capability to build lively pages
with state-of-the-art Web technology. TopPage brings together everything you
need to build pages and publish your site in one package. Now the Linux version
(beta) is available. You can download it free from
<A HREF="http://www.ibm.com/jp/toppage/">http://www.ibm.com/jp/toppage/</A> 
and use it until December 31, 2000.




<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">HancomLinux word processor spans Asian and European languages
</FONT>
</H3> 

<P> 
HancomLinux, Inc., a subsidiary of Haansoft which holds 
80% of Korea's word processor market, has completed development of a Linux 
version word processor targeted on overseas markets and will kick off on sales 
this month.

<P> The 
Chinese version "Wenjie" is still undergoing tests for supplying the program to 
significant Linux PC corporations and has yet to select distributors.  The
Chinese version is divided into two versions; version for users in mainland
China, and version for users in Hong Kong and Taiwan. The general users'
version will also include a Windows version. 

<P>
"HancomWord," which has its target on English-speaking 
regions, will begin sales immediately after beta testing is completed. 
HancomWord is reported to be particularly convenient in that the selection of 
various languages, not only English or French, but also languages such as 
German, Greek, Russian, Spanish, Japanese and many more is possible without the 
nuisance of extra procedures. The company currently hold the beta testing event 
by free downloading 
(<A HREF="http://www.hancom.com/english">http://www.hancom.com/english</A>) prior to official release. 
This new word processor is prospected to surface as a new contestant in the 
Linux Office market with its compatibility with HTML, text, and MS Word 
documents. 

<P>The 
Japanese version will be under the name "Are-A Hangul 2000" and will be 
exhibited at the Tokyo Linux Convention to be held next 
month.

<P>The 
successful porting of LinuxHangul from Windows Hangul, which has undergone 
continuous improvement for the past 10 years, was made possible by the 
successful application of the 'Wine' technology. Wine 
is a developing tool which facilitates the use of Windows application programs 
in a Linux environment. This project has been openly operated with Linux 
programmers from all over the world.

<P> HancomLinux has planned to seek overseas markets through cooperation with
local distributors and is reported to first finish development of programs
including spread sheet, graphics, presentation, etc. and then start seeking new
markets full scale with an competitive Office suite. 





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Artstream
</FONT>
</H3> 


<P> A new release of Artstream, version 2.0b11-3, has now been posted. This
version has several enhancements and fixes.
<P> All the patches needed for the Mesa library are now including in the
Mesa developer distribution of version 3.2 and later at
<A HREF="http://mesa3d.sourceforge.net/devel.html#branches">
http://mesa3d.sourceforge.net/devel.html#branches</A>. This version will
soon become the official release. If desired an rpm of this release is
still available from the Mediascape site.

<P> Both the new Artstream and the Mesa rpms are available at:
<A HREF="http://www.mediascape.com/linuxrpm.html">
http://www.mediascape.com/linuxrpm.html</A>

<P> Documentation remains at:
<A HREF="http://www.mediascape.com/mediaEscape/guide.html">
http://www.mediascape.com/mediaEscape/guide.html</A>

<P> In this release some text functionality is still omitted until we
complete our licensing of certain spelling and hyphenation dictionaries
for Linux. However all illustration tools should be intact.





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Corel news
</FONT>
</H3> 


<P> Ottawa, Canada - April 11, 2000 - CorelDRAW 9 for Linux will be available
in July, two months earlier than scheduled. In addition, Corel VENTURA
Publisher 8.5 for Linux and Windows will be available by the end of this year
and the free download of Corel PHOTO-PAINT 9 for Linux will be available in
June.

<P> The first beta of CorelDRAW 9 for Linux was sent to beta sites April 7.

<P> Ottawa, Ontario - March 10, 2000 - Corel Corporation  today announced it
will offer a free download of Corel PHOTO-PAINT 9 for Linux. The download
version of Corel PHOTO-PAINT 9 for Linux, Corel's photo-editing, image
composition and painting application, will be available in early summer.

<P> A retail version of CorelDRAW 9 Graphics Suite for Linux which includes
Corel PHOTO-PAINT 9 will ship late summer 2000 with comparable pricing
to the Windows version of this product.



<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Helix GNOME
</FONT>
</H3> 


<P> Cambridge, MA - March 6, 2000 - Helix Code, Inc. today unveiled a preview
version of its Helix GNOME desktop -- a collection of more than 80
industry-leading software applications designed to meet every need of the
Linux user.

<P> "As open source software, GNOME is a significant step forward
technologically; we have effectively leap-frogged the legacy problems which
are keeping software development in a state of little progress. Innovation
will finally be brought back to software.  And the Helix
GNOME desktop means that all of this is available to end-users with very
little effort," said Miguel de Icaza, co-founder of Helix Code, who recently
was named as one of the "50 Leaders of the New Millennium" by Time Magazine
and CNN.

<P> For more information about Helix GNOME, and to download the preview release
version of the Helix GNOME desktop, visit the Helix Code, Inc. website at
<A HREF="http://www.helixcode.com">www.helixcode.com</A>.

<P> Helix Code Inc. is an open source software company that produces
high-quality productivity applications under the terms of the GNU GPL.
Helix Code, Inc., is devoted to improving GNOME, the leading desktop
environment for Linux.

<BLOCKQUOTE> <EM>
[An <A HREF="correa1.html">interview with Miguel de Icaza</A> is in this
issue of <EM>Linux Gazette</EM>. -Ed.]
</EM> </BLOCKQUOTE>





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Exile III: Ruined World
</FONT>
</H3> 

<P> Spiderweb Software and Boutell.com proudly present Exile III: Ruined World!
Exile III: Ruined World is an epic fantasy role-playing game for Linux,
featuring a fascinating plot, detailed and enormous world, and an elegant
game system and interface.

<P> What makes Exile III exceptional? Well, it features ...

<UL>
	<LI> Involving, intricate plot, with 200000 words of story!
	<LI> An enormous, changing world. Do nothing, and things evolve around you.
Refugees move from town to town. Villages will be destroyed. Characters will
die. Monsters will gain territory.
	<LI> Detailed, open ended system. Don't want to go on adventures? Do odd jobs.
Save up and buy a house. Go on one of dozens of side missions. Explore an
enormous outdoors with well over a hundred dungeons and towns. Just go
through people's houses and rummage through their stuff!
	<LI> Pleasing, professionally done graphics and sound.
	<LI> Carefully designed interface, with comprehensive online help, adventure
journals, and design with an eye towards enabling you to do everything with
the minimum amount of fuss.
</UL>

<P> <A HREF="http://www.spiderwebsoftware.com/exile3/linuxexile3.html">
http://www.spiderwebsoftware.com/exile3/linuxexile3.html</A>


<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Tripp Lite's UPS gets Red Hat
</FONT>
</H3> 

<P> Chicago, IL (April 13, 2000)-Tripp Lite, a manufacturer of power
protection products, has established another milestone in its support for the
Linux development community. Tripp Lite's PowerAlert UPS Management Software
has been tested and approved by Red Hat, Inc. to install and run flawlessly
using the Red Hat Linux operating system.

<P> "Receiving Red Hat Ready certification capped a thorough testing process
which proved that both Red Hat and Tripp Lite are dedicated to providing Linux
users with the most comprehensive power protection solutions available," said
Mike DelGrosso, Tripp Lite's Director of Software Development. "Although other
UPS software has been tested by Red Hat, Tripp Lite is the only UPS
manufacturer that provides Red Hat's customers with a complete UPS software
source code. This allows developers to customize not only basic UPS shutdown
functions, but the full range of intelligent UPS control as well."


<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">JavaServer pages book (alternative to CGI)
</FONT>
</H3> 

<P> Greenwich, CT -- Web Development with JavaServer Pages, by Duane
K. Fields and Mark A. Kolb, is the the first book to
systematically cover everything a developer needs to know to
create effective web pages and web-based applications with JSP.

<P> Unlike older technologies such as ASP and CGI scripts, JSP
provides full access to all the Java APIs, enabling a web
developer to tap the power of one of the largest and most refined
libraries of reusable code in existence--and all within the
simple, familiar HTML format.  But until now, web developers had
few places to turn to learn how to take full advantage of this
new technology.

<P> Web Development with JavaServer Pages covers the entire JSP
development process from start to end, from an enterprise
perspective.

<P> 
<A HREF="http://www.manning.com/Fields/Contents.html">Contents</A><BR>
<A HREF="http://www.manning.com/Fields/Chapters.html">Chapters 1 and 6</A>
(PDF format)

<P> The book is also available electronically (14 MB PDF file), in color
and searchable, for $13.50 (70% less than the hard copy price).  The cost is
applicable to the on-line purchase of the printed book later.





<P> <hr> <P> 
<!-- =================================================================== -->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
<FONT COLOR="green">Other software
</FONT>
</H3> 

<P> <A HREF="http://www.software-carpentry.com/entries/index.html">
First-round entries in the Software Carpentry design competition</A>

<P> <A HREF="http://www.changingpages.com/">ChangingPages</A> 3.0 is a web
authoring tool released under the GNU Public License.  It requires Perl 5 and
MySQL. (Psand)

<P> <A HREF="http://www.comuno.com/linux/leafwa/screen/leafwa.phtml">Leafwa</A>
is a web-based administration program for Leafnode, a small nntp news server.

<P> <A HREF="http://www.easysw.com">Easy Software Products</A>'s ESP Print Pro
v4.0.4 is a complete printing solution for UNIX.  It prints PostScript, PDF,
GIF, TIFF, PNG, JPEG, SGI RGB, etc, to over 1600 printers via serial, parallel
and network.

<P> <A HREF="http://www.zend.com">Zend Optimizer for PHP 4.0</A> betas 1 and 2
are available for download.

<P> <A HREF="http://www.ihtmlmerchant.com">iHTML Merchant</A> e-commerce
transaction service "now offers more payment processors than any of their
competitors" according to their press release.  (Inline Internet Systems, Inc.)

<BLOCKQUOTE> <EM>
	[Note to Inline: Linux does not have a stock symbol!  "LNUX" refers
	to only <STRONG>one</STRONG> Linux-using company among many.. -Ed.]
</EM> </BLOCKQUOTE>

<P> <A HREF="http://www.elsop.com/">LinkScan</A> Enterprise &amp; Enhancements
7.0 is a scalable, industrial-strength tool for doing link checking, HTML
validation, web site management and creating site maps.  Three other 
mutually-comptatible LinkScan products are available for workstations and
servers.  (Electronic Software Publishing Corporation (Elsop))

<P> Axis Communications has open-sourced its Linux drivers for Bluetooth, a
technology for wireless communications between mobile phones and other portable
devices.  Axis also produces a Journaled Flash File System (JFFS) for
Flash-ROM's.  Axis has also released a Linux-based Axis 2100
Network Camera.  It does not require a PC; it connects directly to the 
network and is controlled from a web browser.
<A HREF="http://developer.axis.com">http://developer.axis.com</A>

<P> <A HREF="">iServer</A>is a platform-independent application/web server
written entirely in Java.  90-day free preview at 
<A HREF="http://www.servertec.com">http://www.servertec.com</A>.  (Servertec)

<P> Aladdin Expander beta uncompresses/decodes files from a variety of Unix,
Windows and Macintosh formats.  Linux/Intel version is available at
<A HREF="http://www.aladdinsys.com/expander/expander_linux_login.html">
http://www.aladdinsys.com/expander/expander_linux_login.html</A>.  
Linux/Macintosh version is expected soon.

<P> <A HREF="">Voodoo3 3D graphics-card drivers</A> are available from
<A HREF="http://www.xig.com">http://www.xig.com</A> for US$29.

<P> <A HREF="http://www.aestiva.com">Aestiva</A> 
1.8 is a web-based operating system now with
improved scalability, including the ability for dynamic sites to operate across
multiple servers (called "server-jumping").

<P> <a href="http://www.chilisoft.com">Chili!Soft Active Server
Pages</A> for Linux.  Also available preinstalled on Cobalt's RaQ 3 server
appliance.

<P> <A HREF="">NetLedger</A> is a web-based accounting solution for small
businesses.  Its new Data Center represents the largest deployment of Linux on
Oracle worldwide.

<P> <A HREF="http://www.ActiveState.com">Active Perl</A> 5.6 is a binary
distribution of Perl for Linux, Windows and Solaris that is faster to install,
includes a Perl Package Manager (PPM) for installing modules, and runs up to
48x quicker than the standard Perl.  (ActiveState)

<P> <A HREF="http://www.parasoft.com">Parasoft</A> has three programs that
run on Linux.  SiteRuler detects HTML files for bad links, spelling errors,
orphaned files, and non-standard HTML.  CodeWizard checks C/C++ programs for
coding-standard violations.  Insure++ is an automatic runtime error detection
tool for C/C++.

<P> <A HREF="http://www.micronetics.net">SecureNet PRO</A> 3.0 is an
enterprise-scalable network monitoring and intrusion detection platform.
(MimeStar, Inc.; MicroNetics, Inc.)

<P> <A HREF="http://www.omnis.net">Omnis Studio</A> 2.4 makes learning 4GL and
OO easier.  A demonstration copy can be downloaded from the web site.
(Omnis Software)

<P> <A HREF="http://www.enhydra.org">Enhydra</A>, an open-source Java/XML
application server has been selected to power <A
HREF="http://AnywhereYouGo.com">AnywhereYouGo.com</A>, a community site for
wireless Internet developers and IT managers.  (Lutris Technologies, Inc.)

<P> <A HREF="">Vividata, Inc.</A> has reduced the prices of its OCR Shop,
ScanShop and PostShop scanning and printing software for personal and 
non-profit users.



<!-- *** BEGIN copyright *** -->
<P> <hr> <P> 
<H5 ALIGN=center>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.
Copyright &copy; 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->

<H3>Contents:</H3>
<dl>
<!-- dt><a href="#tag/greeting"
	><img src="../gx/dennis/bbub.gif" alt="(!)" border="0" 
	align="middle"><strong>Greetings From Jim Dennis</strong></A>
<dd>plus <a href="#tag/hgreeting"
	><strong>&para;: Greetings From Heather Stern</strong></A></dl -->

<DL>
<!-- index_text begins -->
<dt><A HREF="#tag/1"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>Win4Lin and www.linuxdoc.org/LDP/LG/issue50/tag/26.html --or--
<dd><A HREF="#tag/1"
	><strong>Win4Lin eMERGEs</strong></a>

<dt><A HREF="#tag/2"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	><strong>Extracting a block of text from a file</strong></a>
<dt><A HREF="#tag/3"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>Please can you help ? --or--
<dd><A HREF="#tag/3"
	><strong>Zipping Across the LAN</strong></a>

<dt><A HREF="#tag/4"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>accessing windows files --or--
<dd><A HREF="#tag/4"
	><strong>Accessing Local MS-DOS/Windows '9x Drives/Disks from Linux</strong></a>

<dt><A HREF="#tag/5"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>co-processes --or--
<dd><A HREF="#tag/5"
	><strong>More on &gt;&gt; zsh Co-processes</strong></a>

<dt><A HREF="#tag/6"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>Linux - AMD? --or--
<dd><A HREF="#tag/6"
	><strong>Linux for AMD, Cyrix, etc</strong></a>

<dt><A HREF="#tag/7"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>rcp question --or--
<dd><A HREF="#tag/7"
	><strong>UNIX User Tries Linux 'rsh'</strong></a>

<dt><A HREF="#tag/8"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	><strong>Telnet</strong></a>
<dt><A HREF="#tag/9"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>unix system admin --or--
<dd><A HREF="#tag/9"
	><strong>Getting Familiar with a UNIX System</strong></a>

<dt><A HREF="#tag/10"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>NT OS/2 --or--
<dd><A HREF="#tag/10"
	><strong>Connecting NT and OS/2</strong></a>

<dt><A HREF="#tag/11"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>control another VT? --or--
<dd><A HREF="#tag/11"
	><strong>"Temporarily Controlling a VT"</strong></a>

<dt><A HREF="#tag/12"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>question regarding adding pty's to my sunos environment --or--
<dd><A HREF="#tag/12"
	><strong>Running out of Pseudo-tty's</strong></a>

<dt><A HREF="#tag/13"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>xdm wont start a session --or--
<dd><A HREF="#tag/13"
	><strong>XFree 4.0 and &quot;:0.0 refused by server&quot; Errors</strong></a>

<dt><A HREF="#tag/14"
	><img src="../gx/dennis/bbub.gif" height="28" width="50"
	  alt="(!)" border="0"
	><strong>FW: Linux</strong></a>
<dt><A HREF="#tag/15"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>Which filesystem? --or--
<dd><A HREF="#tag/15"
	><strong>Determining the Type of Each Filesystem</strong></a>

<dt><A HREF="#tag/16"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>4 questions --or--
<dd><A HREF="#tag/16"
	><strong>Four Questions</strong></a>

<dt><A HREF="#tag/17"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>Kermit protocol --or--
<dd><A HREF="#tag/17"
	><strong>G-Kermit: The GPL Kermit Transfer Package</strong></a>

<dt><A HREF="#tag/18"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>shell cannot see an existing file --or--
<dd><A HREF="#tag/18"
	><strong><TT>./script:</TT> No such file or directory</strong></a>

<dt><A HREF="#tag/19"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	><strong>hello</strong></a>
<dt><A HREF="#tag/20"
	><img src="../gx/dennis/bbub.gif" height="28" width="50"
	  alt="(!)" border="0"
	></a>Shutting Down the "ping Daemon" --or--
<dd><A HREF="#tag/20"
	><strong>Shutting Down the Ping Daemon: Revised</strong></a>

<dt><A HREF="#tag/21"
	><img src="../gx/dennis/qbub.gif" height="28" width="50"
	  alt="(?)" border="0"
	></a>run any remote X server at host box --or--
<dd><A HREF="#tag/21"
	><strong>Remotely Executing Graphic Apps</strong></a>

<!-- index_text ends -->
</DL>
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<!-- A NAME="tag/greeting"><HR WIDTH="75%" ALIGN="center"></A>
<H3 align="left"><img src="../gx/dennis/bbubble.gif" 
	height="50" width="60" alt="(!) " border="0"
	>Greetings from Jim Dennis</H3 -->
<!-- begin greeting -->
<!-- end greeting -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<!-- A NAME="tag/hgreeting"><HR WIDTH="40%" ALIGN="center"></A>
<H3 align="left"><img src="../gx/dennis/hbubble.gif" 
	height="50" width="60" alt="(&para;) " border="0"
	>Greetings from Heather Stern</H3 -->
<!-- begin hgreeting -->
<!-- end hgreeting -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/1"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 1 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Win4Lin eMERGEs</H3>


<p><strong>From J. David Peet on Thu, 30 Mar 2000  
</strong></p>
<!-- ::
Win4Lin eMERGEs
~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
I just ran across your article
</STRONG></P>
<P><STRONG>
www.linuxdoc.org/LDP/LG/issue50/tag/26.html
that talks a (tiny) bit about Win4Lin.
</STRONG></P>
<P><STRONG>
FYI, Win4Lin is now available.  And if you are interested,
the full documentation is on-line on the TreLOS web site.
www.trelos.com.  You can also order it via this web site.
</STRONG></P>
<P><STRONG>
In case you did not know, the Win4Lin technology has a long
history as "Merge" for SCO Unix.  SCO has been an OEM of
our Merge technology for years.
Win4Lin is the Linux version of the existing current technology.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I didn't know that.  I thought DOS/MERGE was from a
company called "Locus" or something like that.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
One minor point <TT>--</TT> Win4Lin is not a "clone" of VMWare as
such.  They both provide a virtual machine to run Windows in on
Linux, but there are significant differences.
Refer to the new "white-paper" document:
<A HREF="http://www.trelos.com/trelos/Trelos/Products/Win4Lin_Whitepaper.htm"
	>http://www.trelos.com/trelos/Trelos/Products/Win4Lin_Whitepaper.htm</A>
Near then end are two paragraphs that compare and contrast
Win4Lin <A HREF="http://www.winehq.com/">WINE</A> and VMWare.
</STRONG></P>
<P><STRONG>
-Thanks
<TT>-David</TT> Peet
<A HREF="mailto:david.peet@trelos.com"
	>david.peet@trelos.com</A>
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I probably shouldn't have used the word "clone" <TT>---</TT> though
it isn't all that precise.  Obviously, in light of Win4Lin's
heritage it might be more appropriate to say that VMWare is a
"clone" of Win4Lin's predecessor.  MERGE is the grandaddy of
MS-DOS emulators for UNIX.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, I'll let people make up their own mind based on their
own reading and experience.
</BLOCKQUOTE>
<BLOCKQUOTE>
I haven't actually used any DOS or MS Windows software in years
(only the occasional, blessedly brief trifle to help someone out
here or there).  So even if you were to send a copy to me for my
evaluation I can't promise that I'd ever get around to trying
it. (I think I have a VMWare CD around here somewhere <TT>--</TT> an eval
copy or some such).  Heather, my editor and wife,  still uses
MS-Windows occasionally.  I know she's installed <A HREF="http://www.dosemu.org/">DOSEMU</A>, and WINE
and used them a bit (DOSemu extensively).  I've installed and
played with DOSemu (helped someone with it at an installfest a
couple weeks ago, too).  However, I've never even tried WINE!
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, good luck on you're new release.
</BLOCKQUOTE>

<!-- sig -->


<!-- end 1 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 1 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif" 
	height="50" width="60" alt="(!) " border="0"
	>Win4Lin eMERGEs</H3>


<p><strong>Answered By J. David Peet on Thu, 30 Mar 2000  
</strong></p>
<BLOCKQUOTE>
Jim Dennis wrote:
</BLOCKQUOTE>
<!-- ::<BLOCKQuote>
Win4Lin eMERGEs
~~~~~~~~~~~~~~~
</BLOCKQuote>:: -->
<P><STRONG><FONT COLOR="#000066"><EM>
In case you did not know, the Win4Lin technology has a long
history as "Merge" for SCO Unix.  SCO has been an OEM of
our Merge technology for years.
Win4Lin is the Linux version of the existing current technology.
</EM></FONT></STRONG></P>
<P><STRONG>
I didn't know that.  I thought DOS/MERGE was from a
company called "Locus" or something like that.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Yes, I was there at Locus at the very start of Merge.
It's been a long path since then with some odd twists.
First Locus merged with Platinum, and Merge continued to
be developed, including the current SCO Merge 4 version
with win95 support.  Then right before CA digested Platinum,
a company in Santa Cruz, DASCOM, bought (rescued!) the Merge
technology out from Platinum and hired some of us old-time Merge
developers to form a company named "TreLOS" to take the technology
forward including porting it to Linux. (Insert danger music here.)
Then before TreLOS could be spun off as it's own company, IBM bought
DASCOM, for reasons having nothing at all to do with Merge/TreLOS.
Then in February IBM finished spinning TreLOS off as it's own company.
We are currently a (very small) privately held company with NO
affiliation with IBM and NO IBM technology.  (IBM for some reasons
wanted that to be clear.)  Once we escaped from IBM it took a
bit more than a month to set up the infrastructure to be able to
release the product.  It was getting caught up in the IBM acqusition
of DASCOM that prevented us from releasing the product last fall
as we had originally planned.
The Win4Lin 1.0 product has actually been ready for months now.
All that time was not completely wasted because IBM let us have an
extended semi-secret beta program so it's actually been in real use
for quite a while for a "1.0" version product.
</BLOCKQUOTE>
<BLOCKQUOTE>
So that's the history to this point.  Perhaps more than you
wanted to know.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
...
Anyway, good luck on your new release.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
-Thanks
-David
</BLOCKQUOTE>
<BLOCKQUOTE>
P.S. Now that we are launching Win4Lin 1.0, having reviews done is
a Good Thing.  So if you or Heather would like to do a review of it
that is extremely easy to arrange.
</BLOCKQUOTE>

<!-- end 1 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/2"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 2 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Extracting a block of text from a file</H3>


<p><strong>From Tim Moss on Thu, 30 Mar 2000  
</strong></p>
<P><STRONG>
I'm trying to extract a block of text from a file using just bash and
standard shell utilities (no perl, awk, sed, etc). I have a definitive
pattern that can denote the start and end or I can easily get the line
numbers that denote the start and end of the block of text I'm
interested in (which, by the way, I don't know ahead of time. I only
know where it is in the file). I can't find a utility or command that
will extract everything that falls between those points. Does such a
thing exist?
</STRONG></P>
<P><STRONG>
Thanks
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
awk and sed are considered to be "standard shell utilities."
(They are part of the POSIX specification).
</BLOCKQUOTE>
<BLOCKQUOTE>
The sed expression is simply:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
sed -n "$begin,${end}p"  ...
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... if begin and end are line numbers.
</BLOCKQUOTE>
<BLOCKQUOTE>
For patterns it's easier to use awk:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
awk "/$begin/,/$end/" ...
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... Note: begin and end are regexes and should be
chosen carefully!
</BLOCKQUOTE>
<BLOCKQUOTE>
However, since you don't want to do it the
easy way, here are some alternatives:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
<TT>------------------</TT> WARNING: very long <TT>-------------------------</TT>
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
If it is a text file and you just want some lines out of
it try something like:
</BLOCKQUOTE>

<blockquote><pre>	#!/bin/sh
	# shextract.sh
	#	extract part of a file between a
	#	pair of globbing patterns
	[ "$#" -eq "2" ] || {
		echo "Must supply begin and end patterns" &gt;&amp;2
		exit 1
		}
	begin=$1
	end=$2
	of="" ## output flag
	while read a; do
		case "$a" in
			"$begin") of="true";;
			"$end") of="";;
			esac
		[ -n "$of" ] &amp;&amp; echo $a
		done
	exit 0
</pre></blockquote>
<BLOCKQUOTE>
... this uses no external utilities except for the
test command ('[') and possibly the 'echo' command from
VERY old versions of Bourne sh.  It should be supported
under any Bourne shell derivative.  Under bash these
are builtin commands.
</BLOCKQUOTE>
<BLOCKQUOTE>
It takes two parameters.  These are "globbing" patterns
NOT regular expressions.  They should be quoted, especially
if they contain shell wildcards (?, *, and [...]
expressions).
</BLOCKQUOTE>
<BLOCKQUOTE>
Read any good shell programming reference (or even the
rather weak 'case...esac' section of the bash man page)
for details on the acceptable pattern syntax.  Note
because of the way I'm using this you could invoke
this program (let's call it shextract, for "shell
extraction") like so:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
shextract "[bB]egin|[Ss]tart" "[Ee]nd|[Ss]top"
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... to extract the lines between the any occurrence
of the term "begin" or "Begin" or "start" or "Start" and
the any subsequent occurence of "end" or "End" or "stop"
or "Stop."
</BLOCKQUOTE>
<BLOCKQUOTE>
Notice that I can use the (quoted) pipe symbol in this
context to show "alternation" (similar to the egrep use
of the same token).
</BLOCKQUOTE>
<BLOCKQUOTE>
This script could be easily modified to use regex's
instead of glob patterns (though we'd either have to
use 'grep' for that or rely on a much newer shell
such as ksh '93 or bash v. 2.x to do so).
</BLOCKQUOTE>
<BLOCKQUOTE>
This particular version will extract <EM>all</EM> regions
of the file that lie between our begin and end tokens.
</BLOCKQUOTE>
<BLOCKQUOTE>
To stop after the first we have to insert a "break"
statement into our "$end") ...;;; case.  To support
an "nth" occurence of the pattern we'd have to use
an additional argument.  To cope with degenerate
input (cases where the begin and end tokens might be
out of order, nested or overlapped) we'd have to
do considerably more work.
</BLOCKQUOTE>
<BLOCKQUOTE>
As written this example requires exactly two arguments.
It will only process input from stdin and only write
to stdout.  We could easily add code to handle
more arguments (first two are patterns, 'shift'ed out
rest are input file names) and some options switches
(for output file, only one extraction per file,
emit errors if end pattern is found before start
pattern, emit warnings if no begin or subsequent end
pattern is found on any input file, stop processing on
any error/warning, etc).
</BLOCKQUOTE>
<BLOCKQUOTE>
Note: my exit 0 may seem superfluous here.  However,
it does prevent the shell from noting that the
program "exited with non-zero return value" or
warnings to that effect.  That's due to my use of
test ('[') on my output flag in my loop.  In the
normal case that will have left a non-zero return value
since my of flag will be zero length for the part of
the file AFTER the end pattern was found.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note: this program is SLOW.  (That's what you get for
asking for it in sh).  Running it on my 38,000 line
<TT>/usr/share/games/hangman-words</TT> (this laptop doesn't
have <TT>/usr/dict/words</TT>) it takes about 30 seconds or
roughly only 1000 lines per second on a P166 with 16Mb
of RAM.  A binary can do better than that under MS-DOS
on a 4Mhz XT!
</BLOCKQUOTE>
<BLOCKQUOTE>
BUG:  If any lines begin with <TT>-</TT> (dashes) then your version
of echo <EM>might</EM> try to treat the beginnings of your lines
as arguments. This <EM>might</EM> cause the echo command to
parse the rest of the line for escape sequences.  If you
have printf(1) evailable (as a built-in to your shell or
as an external command)  then you might want to use that
instead of echo.
</BLOCKQUOTE>
<BLOCKQUOTE>
To do this based on line numbers rather than patterns
we could use something more like:
</BLOCKQUOTE>

<blockquote><pre>#!/bin/sh
# lnextract.sh
#       extract part of a file between a
#       line numbers $1 and $2

        function isnum () {
                case "$1" in
                *[^0-9]*)
                        return 1;;
                esac
                }

[ "$#" -gt "2" ] || {
                echo "Must supply begin and end line numbers" &gt;&amp;2
                exit 1
                }

isnum "$1" || {
                echo "first argument (first line) must be a whole number" &gt;&amp;2
                exit 1
                }

isnum "$2" || {
                echo "second argument (last line) must be a whole number" &gt;&amp;2
                exit 1
                }

begin=$1
end=$2

[ "$begin" -le "$end" ] || {
                echo "begin must be less than or equal to end" &gt;&amp;2
                exit 1
                }

shift 2
for i; do
	[ -r "$i" -a -f "$i" ] || {
			echo "$i should be an existing regular file" &gt;&amp;2
			continue
			}
	ln=0
	while read a ; do
		let ln+=1
		[ "$ln" -ge "$begin" ] &amp;&amp; echo $a
		[ "$ln" -lt "$end" ]   || break
		done &lt; "$i"
	done
exit 0
</pre></blockquote>
<BLOCKQUOTE>
This rather ugly little example does do quite a
bit more checking than my previous one.
</BLOCKQUOTE>
<BLOCKQUOTE>
It checks that its first two arguments are
numbers (your shell must support negated character
class globs for this, ksh '88 and later, bash 1.x and 2.x,
and zsh all qualify), and that the first is less than or
equal to the latter.  Then it shifts those out of
the way so it can iterate over the rest of the
arguments, extracting our interval of line from
each.  It checks that each file is "regular"
(not a directory, socket, or device node) and
readable before it tries to extract a portion of
it.  It will follow symlinks.
</BLOCKQUOTE>
<BLOCKQUOTE>
It has some of the same limitations we saw before.
</BLOCKQUOTE>
<BLOCKQUOTE>
In addition it won't accept it's input from stdin
(although we could add that by putting the main loop
into a shell function and invoking it one way if
our arg count was exactly two, and differently
(within our for loop) if $# is greater than two.
I don't feel like doing that here <TT>---</TT> as this message
is already way too long and that example is complicated
enough.
</BLOCKQUOTE>
<BLOCKQUOTE>
It's also possible to use a combination of 'head' and
'tail' to do this.  (That's a common exercise in
shell programming classes).  You just use something
like:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
head -$end $file | tail -$(( $end - $begin ))
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... note that the 'tail' command on many versions
of UNIX can't handle arbitrary offsets.  It can
only handle the lines that fit into a fixed block size.
GNU tail is somewhat more robust (and correspondingly
larger and more complicated).  A classic way to
work around limitations on tail was to use tac (cat
a file backwards, from last line to first) and
head (and tac again).  This might use prodigous
amounts of memory or disk space (might use temporary
files).
</BLOCKQUOTE>
<BLOCKQUOTE>
If you don't want line oriented output <TT>---</TT> and your
patterns are regular expressions, and you're willing
to use grep and dd then here's a different approach:
</BLOCKQUOTE>

<blockquote><pre>		start=$(grep -b "$begin" ... )
		stop=$(( $( grep -b "$end" ... ) - $begin ))
		dd if="$file" skip=$begin count=$stop bs=1b
</pre></blockquote>
<BLOCKQUOTE>
This is not a shell script, just an example.
Obviously you'd have to initialize $begin, $end, and $file
or use $1, $2, and $3 for them to make this into a
script.  Also you have to modify those grep <TT>-b</TT> commands
a little bit (note my ellipses).  This is because grep
will be giving us too much information.  It will be
giving a byte offset to the beginning of each pattern
match, and it will be printing the matching line, too.
</BLOCKQUOTE>
<BLOCKQUOTE>
We can fix this with a little work.  Let's assume that
we want the first occurrence of "$begin" and the last
occurence of "$end"  Here's the commands that will
just give us the raw numbers:
</BLOCKQUOTE>

<blockquote><pre>		grep -b "$begin" "$file" | head -1 {
			IFS=:
			read b x
			echo b
			}

		grep -b "$end" "$file" | tail -1 | {
			IFS=:
			read e x
			echo e
			}
</pre></blockquote>
<BLOCKQUOTE>
... notice I just grep through head or
tail to get the first or last matching line,
and I use IFS to change my field separator
to a ":" (which grep uses to separate the offset
value from the rest of the line).  I read the
line into two variables (separated by the
IFS character(s)), and throw away the extraneous
data by simply echoing the part I wanted
(the byte offset) back out of my subshell.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note:  whenever you use or see a pipe operator
in a shell command or script <TT>---</TT> you should
realize that you've created an implicit subshell
to handle that.
</BLOCKQUOTE>
<BLOCKQUOTE>
Incidentally, if your patterns <EM>might</EM> have a
leading <TT>-</TT> (dash) then you'll have problems
passing them to grep.  You can massage the
pattern a little bit by wrapping the first
character with square brackets. Thus "foo"
becomes "[f]oo" and "<TT>-bar</TT>" becomes "[-]bar".
(grep won't consider an argument starting
with [ to be a command line switch, but it
will try to parse <TT>-bar</TT> as one).
</BLOCKQUOTE>
<BLOCKQUOTE>
This is easily done with printf and sed:
</BLOCKQUOTE>

<blockquote><pre>		printf "%s" "$pattern" | sed -e 's/./[&amp;]/'
</pre></blockquote>
<BLOCKQUOTE>
... note my previous warning about 'echo' <TT>---</TT>
it's pretty permissive about arguments that
start with dashes that it doesn't recognize, it'll
just echo those without error.  But if your pattern
starts with "<TT>-e</TT> " or <TT>-n</TT> it can effect out the rest
of the string is represented.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note that GNU grep and echo DON'T seem to take the
<TT>--</TT> option that is included with some GNU utilities.
This would avoid the whole issue of leading dashes
since this conventionally marks the end of all
switch/option parsing for them.
</BLOCKQUOTE>
<BLOCKQUOTE>
Of course you said you didn't want to use sed,
so you've made the job harder.  Not impossible,
but harder.  With newer shells like ksh '93 and
bash 2.x we can use something like:
</BLOCKQUOTE>

<blockquote><pre>		[${pattern:0:1}]${pattern:1}
</pre></blockquote>
<BLOCKQUOTE>
(read any recent good book on shell programming
to learn about parameter expansion).
</BLOCKQUOTE>
<BLOCKQUOTE>
You can use the old 'cut' utility, or 'dd' to
get these substrings.  Of course those are just
as external to the shell as perl, awk, sed,
test, expr and printf.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you really wanted to do this last sort of
thing (getting a specific size substring from
a variable's value, starting from an offset
in the string, using only the bash 1.x parameter
expansion primitives) it could be done with a whole
lot of fussing.  I'd use ${#varname} to get the
size, a loop to build temporary strings of
? (question mark) characters to of the right
length and the ${foo#} and ${foo%} operators
(stripping patterns from the left and right of
variable's value respectively)
to isolate my substring.
</BLOCKQUOTE>
<BLOCKQUOTE>
Yuck!  That really is as ugly as it sounds.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway.  I think I've said enough on the subject
for now.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'm sure you can do what you need to. Alot of
it depends on which shell you're using (not just
csh vs. Bourne, but ksh '88 vs. '93 and bash  v1.14
vs. 2.x, etc) and just how rigit you are about that
constraint about "standard utilities"
</BLOCKQUOTE>
<BLOCKQUOTE>
All of the examples here (except for the ${foo:}
parameter expansion) are compatible with bash 1.14.
</BLOCKQUOTE>
<BLOCKQUOTE>
(BTW: now that I'm really learning C <TT>---</TT> y'all can
either rest easy that I'll be laying off the sh
syntax for awhile, or lay awake in fear of what I'll
be writing about next month).
</BLOCKQUOTE>
<BLOCKQUOTE>
Here's a short GNU C program to print a set of
lines between one number and another:
</BLOCKQUOTE>

<blockquote><pre>/* extract a portion of a file from some beginning line, to
 * some ending line
 * this functions as a filter --- it doesn't take a list
 * of file name arguments.
 */

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;errno.h&gt;

int
main (int argc, char * argv[] )
{
char * linestr;
long begin, end, current=0;
ssize_t * linelen;


linelen = 0;
linestr=NULL;

if ( argc &lt; 3 ) {
	fprintf(stderr, "Usage: %s begin end\n", argv[0]);
	exit(1);
	}

begin=atol(argv[1]);
if ( begin &lt; 1 ) {
	fprintf(stderr, "Argument error: %s should be a number "
			"greater than zero\n", argv[1]);
	exit(1);
	}

end=atol(argv[2]);
if ( end &lt; begin ) {
	fprintf(stderr, "Argument error: %s should be a number "
			"greater than arg[1]\n", argv[1]);
	exit(1);
	}

while ( getline(&amp;linestr, &amp;linelen, stdin ) &gt; -1
	  &amp;&amp; (++current &lt; end ) ) {
	if (current &gt;= begin) {
		printf("%s", linestr);
		}
	}

exit(0);
return 0;
}
</pre></blockquote>
<BLOCKQUOTE>
This is about the same length as my shell version.
It uses<TT> atol()</TT> rather than<TT> strtol()</TT> for the
argument to number conversion.<TT> atol()</TT>  (ASCII to long)
is simpler, but can't convey errors back to us.
However, I require values greater than zero, and GNU
glibc<TT> atol()</TT> returns 0 for strings that can't be
converted to longs.  I also use the GNU<TT> getline()</TT>
function <TT>---</TT> which is non-standard, but much more
convenient and robust than fussing with<TT> scanf()</TT>,
<TT>fgets()</TT> and<TT> sscanf()</TT>, and<TT> getc()</TT> stuff.
</BLOCKQUOTE>
<BLOCKQUOTE>
Tim, I've copied this my Linux Gazette editor, since
it's a pretty general question and a way detailed
answer.  Unless you have any objection it will
go into my column in the next issue.   The sender's
e-mail address and organizational affiliation are
always removed from answer guy articles unless
they request otherwise.
</BLOCKQUOTE>

<!-- end 2 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/3"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 3 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Zipping Across the LAN</H3>


<p><strong>From jashby on Sun, 02 Apr 2000  
</strong></p>
<!-- ::
Zipping Across the LAN
~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello ,
</STRONG></P>
<P><STRONG>
My name is Jason Ashby i work for a computer company and am really new
to Linux i have been given the task to make a zip drive visible accross
a network, it is loaded on a linux machine and i can get the AIX machine
to mount it but we can not copy files to or from the zip drive on AIX
could you see it within your power to tell me why .
</STRONG></P>
<P><STRONG>
Thanks
Jason Ashby
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Unfortunately your question is unclear.
You don't tell me which system is supposed to be the server, what
sorts systems are intended to be the clients, nor what type of
filesystems will be contained on the Zip media.
</BLOCKQUOTE>
<BLOCKQUOTE>
"make a zip drive visible accross [sic] a network"
</BLOCKQUOTE>
<BLOCKQUOTE>
... presumably you mean via NFS or Samba.  If the client systems
are UNIX or Linux you'd use NFS, if they are MS-Windows or OS/2
you'd use Samba.  (If they were Apple Macs running MacOS you'd
look at the netatalk or CAP packages, and if they were old MS-DOS
machines you might try installing Netware client drivers on those
and mars_nwe or a commercial copy of Netware on the Linux box).
</BLOCKQUOTE>
<BLOCKQUOTE>
Let's assume you mean to mount the Zip disks on your Linux box,
and "export" them (NFS terminology) to your AIX systems.  Then
you'd modify your <TT>/etc/fstab</TT> to contain an entry appropriate to
mount the Zip media into your file hierarchy.  Maybe you'd mount
it under <TT>/mnt/zip</TT> or under <TT>/zip.</TT>  (You might have multiple fstab
entries to support different filesystems that you might have
stored on your Zip media.  In most cases you'd use msdos, or one
of the other variants of Linux' MS-DOS filesystem: umsdos, vfat,
or uvfat).
</BLOCKQUOTE>
<BLOCKQUOTE>
Then you'd edit your <TT>/etc/exports</TT> file to export that to your
LAN (or to specific hosts or IP address/network patterns).
</BLOCKQUOTE>
<BLOCKQUOTE>
Try reading the man pages for <TT>/etc/fstab</TT> and <TT>/etc/exports</TT> and
perusing the following HOWTOs:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Zip Drive Mini-HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/mini/ZIP-Drive.html"
	>http://www.linuxdoc.org/HOWTO/mini/ZIP-Drive.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
NFS HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/NFS-HOWTO.html"
	>http://www.linuxdoc.org/HOWTO/NFS-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
And the excellent new:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Filesystems HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html"
	>http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
by Martin Hinner.
</BLOCKQUOTE>
<BLOCKQUOTE>
If that doesn't do the trick, try clarifying your question.  It
often helps to draw a little map (ASCII art is good!).
</BLOCKQUOTE>

<!-- end 3 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/4"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 4 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Accessing Local MS-DOS/Windows '9x Drives/Disks from Linux</H3>


<p><strong>From David Buckley on Wed, 05 Apr 2000  
</strong></p>
<!-- ::
Accessing Local MS-DOS/Windows '9x Drives/Disks from Linux
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
I am new to linux and am wondering if there is an easy way to access my
Win98 disk from within linux.  i have lots of files (mp3s, etc.) that i
would like to use in linux.  what is the easiest way to get them?
</STRONG></P>
<P><STRONG>
Thanks,
David Buckley
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I'm guessing you're talking about accessing files that are on
you local system (that you have a dual-boot installation).
</BLOCKQUOTE>
<BLOCKQUOTE>
In that case use the 'mount' command.  For example the first
partition on your first IDE drive is <TT>/dev/hda1</TT> (under Linux).  If
that's your C: drive under MS-DOS/Windows then you can use a
command like:
</BLOCKQUOTE>

<blockquote><pre>	mkdir /mnt/c &amp;&amp; mount -t vfat /dev/hda1 /mnt/c
</pre></blockquote>
<BLOCKQUOTE>
... (as the 'root' user) to make the C: directory tree appear
under <TT>/mnt/c.</TT>
</BLOCKQUOTE>
<BLOCKQUOTE>
Once you've done that you can use normal Linux commands and
programs to access those files.
</BLOCKQUOTE>
<BLOCKQUOTE>
That will only mount the filesystem for that duration of that
session (until your reboot or unmount it with the 'umount'
command). However, you can make this process automatic by adding
an entry to your <TT>/etc/fstab</TT> (filesystem table).
</BLOCKQUOTE>
<BLOCKQUOTE>
For more info on this read the appropriate sections of the Linux
Installation &amp; Getting Started Guide (*), the System
Administrator's  Guide (*) (both part of the <A HREF="http://www.linuxdoc.org/">LDP</A> at
<A HREF="http://www.linuxdoc.org"
	>http://www.linuxdoc.org</A>) and the mount(8), and fstab(5) man pages
with the following command:
</BLOCKQUOTE>

<blockquote><pre>       man 8 mount; man 5 fstab
</pre></blockquote>
<BLOCKQUOTE>
(Note, in the first case you do need to specify the
manual chapter/section number, 8, since there is a<TT> mount()</TT>
system call which is used by programmers, particularly for
writing programs like the 'mount' command itself).  When you
see references to keywords in this form foo(1), it's a hint
that foo is documented in that chapter of the man pages: 1
is user commands, 2 is system calls, 3 is library functions,
4 is for devices, 5 is for file formats, etc).
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
*(  LIGS: Chapter 4 System Administration
<DD><A HREF="http://www.linuxdoc.org/LDP/gs/node6.html#SECTION00640000000000000000"
	>http://www.linuxdoc.org/LDP/gs/node6.html#SECTION00640000000000000000</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
LSAG: Filesystems
<A HREF="http://www.linuxdoc.org/LDP/sag/x1038.html"
	>http://www.linuxdoc.org/LDP/sag/x1038.html</A> )
</BLOCKQUOTE>
<BLOCKQUOTE>
To access your MS-DOS formatted floppies it's often easier to use
the mtools commands.  Look at the mtools(1) man pages for details
on that.
</BLOCKQUOTE>
<BLOCKQUOTE>
Here are a couple of other HOWTOs to read through:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
From DOS/Windows to Linux HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/DOS-Win-to-Linux-HOWTO.html"
	>http://www.linuxdoc.org/HOWTO/DOS-Win-to-Linux-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Filesystems HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html"
	>http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
In general you want to look through these to find answer to
most common Linux questions.  As you might imagine, you've asked
a very common one here).  In fact it's number 4.2 in the FAQ
<A HREF="http://www.linuxdoc.org/FAQ/Linux-FAQ-4.html#ss4.2"
	>http://www.linuxdoc.org/FAQ/Linux-FAQ-4.html#ss4.2</A>
</BLOCKQUOTE>
<BLOCKQUOTE>
You can also search the Linux Gazette at:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Full search on archive Linux Gazette Search
<DD><A HREF="http://www.linuxgazette.com/search.html"
	>http://www.linuxgazette.com/search.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
Although I can see how you might not know what terms to search on
until you've covered some of the basics in the LDP guides, or any
good book on Linux.
</BLOCKQUOTE>
<BLOCKQUOTE>
There are also ways to access your Win '9x "shares" (network
accessible files, or "exported" directories) from Linux using
smbfs.
</BLOCKQUOTE>

<!-- end 4 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/5"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 5 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>More on &gt;&gt; zsh Co-processes</H3>


<p><strong>From Paul Ackersviller on Wed, 05 Apr 2000  
</strong></p>
<!-- ::
More on &gt;&gt; zsh Co-processes
~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Jim,
</STRONG></P>
<P><STRONG>
I believe I forgot to say thanks for having written the original answer as
it was.  I've programmed shells for ages, but have never had occasion to use
co-processes.  Seeing examples of how it's done are alway a good thing.
</STRONG></P>
<P><STRONG>
--
Paul Ackersviller
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
You're welcome.  I've never actually used them myself.
However, I was jazzed to learn how they actually work when
someone I was working with showed me an example.
</BLOCKQUOTE>
<BLOCKQUOTE>
Sometimes I take advantage of being "The Answer Guy" and
grab any pretense to show of some need trick that I've
discovered or been shown (I usually try to give credit
where credit is due <TT>---</TT> but sometimes that's pretty ambiguous and
doesn't fit into the flow of what I'm typing).
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, I'm a firm believer in having a full toolbox.  You
often won't know what tool <EM>would</EM> do the trick unless you've
seen a wide enough variety of tools to recognize a nail vs.
a screw and can associate one with a hammer and the other with
a screwdriver.
</BLOCKQUOTE>

<!-- sig -->


<!-- end 5 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/6"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 6 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Linux for AMD, Cyrix, etc</H3>


<p><strong>From Ranone7 on Wed, 05 Apr 2000  
</strong></p>
<!-- ::
Linux for AMD, Cyrix, etc
~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
At this web site <A HREF="http://www.linuxmall.com/product/01462.html"
	>http://www.linuxmall.com/product/01462.html</A> I see
the title "<A HREF="http://www.redhat.com/">Red Hat</A> Linux Deluxe for Intel" Is there a Linux for
AMD out there? or can I use the above linux version with an
AMD-Athlon.
</STRONG></P>
<P><STRONG>
Thank you
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
The packaging is suffering from a compromise.  It's trying
not to sound too technical.  Red Hat Linux <EM>for Intel</EM>
should work on any x86 and compatible CPUs.  Note that
Mandrake requires at least a Pentium (it won't work on
old 486 and 386 systems).
</BLOCKQUOTE>
<BLOCKQUOTE>
What Red Hat Inc was trying to do which this verbiage
is distiguish that box from the versions that they have
available for SPARC and Alpha based systems.  Eventually they'll
also probably have a PowerPC package available as well.
</BLOCKQUOTE>
<BLOCKQUOTE>
Many other distributions are similarly available on several
platforms.
</BLOCKQUOTE>

<!-- sig -->


<!-- end 6 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 6 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif" 
	height="50" width="60" alt="(!) " border="0"
	>Linux - AMD?</H3>


<p><strong>Answered By Martin Pool on Thu, 06 Apr 2000  
</strong></p>
<P><STRONG>
On Wed, 5 Apr 2000, Jim Dennis wrote:
</STRONG></P>
<P><STRONG><FONT COLOR="#000099"><EM><BLOCKQuote>
<BR>&gt;At this web site <A HREF="http://www.linuxmall.com/product/01462.html"
<BR>&gt;	>http://www.linuxmall.com/product/01462.html</A> I see
<BR>&gt;the title "<A HREF="http://www.redhat.com/">Red Hat</A> Linux Deluxe for Intel" Is there a Linux for
<BR>&gt;AMD out there? or can I use the above linux version with an
<BR>&gt;AMD-Athlon.
</BLOCKQuote></EM></FONT></STRONG></P>
<P><STRONG><FONT COLOR="#000099"><EM>
<BR>&gt;Thank you
</EM></FONT></STRONG></P>
<P><STRONG><FONT COLOR="#000066"><EM>
The packaging is suffering from a compromise.  It's trying
not to sound too technical.  Red Hat Linux <EM>for Intel</EM>
should work on any x86 and compatible CPUs.  Note that
Mandrake requires at least a Pentium (it won't work on
old 486 and 386 systems).
</EM></FONT></STRONG></P>
<P><STRONG>
Good explanation.  IIRC Athlons are only supported in 2.2.something, so
they'll also need a recent distribution.  I guess any RedHat version on
sale these days will be OK, but notably <A HREF="http://www.debian.org/">Debian</A> slink/stable will <EM>not</EM>
boot.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Thanks for that note [from one of the guys on the
<A HREF="http://www.linuxcare.com/">Linuxcare</A> list that now receives answerguy responses].
</BLOCKQUOTE>
<BLOCKQUOTE>
I remember hearing about Athlon problems, but I didn't ever get the
full story.  I was spoiled by the fact that most x86 compatible
chips really are <EM>x86 COMPATIBLE</EM>.  I still don't know what the
whole deal with that Athlon chip is.  I'll BCC someone on this
to see if he can clue me in.
</BLOCKQUOTE>

<!-- end 6 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 6 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif" 
	height="50" width="60" alt="(!) " border="0"
	>Linux - AMD?</H3>


<p><strong>Answered By David Benfell on Thu, 6 Apr 2000  
</strong></p>
<BLOCKQUOTE>
The story, as I was able to piece it together, is that the problem was
found and fixed in the 2.3.19 kernel.  The correction had to do with
Memory Type Range Register (MTRR) code.  This patch was backported to,
possibly the 2.2.12 kernel, and, almost certainly, the 2.2.13 kernel.
</BLOCKQUOTE>
<BLOCKQUOTE>
However, it still seems to have been an issue with the Mandrake 6.5
distribution, which had a 2.2.12 kernel.  On the other hand, my
neighbor just installed <A HREF="http://www.redhat.com/">Red Hat</A> 6.2, with, I think, a 2.2.12 kernel
(but the site won't tell), on an Athlon.  So I'm confused.
</BLOCKQUOTE>
<BLOCKQUOTE>
David Benfell
</BLOCKQUOTE>

<EM>[ <BLOCKQUOTE>
So, if you know more about the Athlon MTRR mystery, enlighten us please!
</BLOCKQUOTE><P>-- Heather. ]</P></EM>

<!-- end 6 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/7"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 7 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>UNIX User Tries Linux 'rsh'</H3>


<p><strong>From Le, Dong, ALNTK on Fri, 07 Apr 2000  
</strong></p>
<!-- ::
UNIX User Tries Linux 'rsh'
~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello "The Answer Guy",
</STRONG></P>
<P><STRONG>
My name is Dong Le. I'm quite new to Linux. Since I come from Unix world, I
try to use Unix concepts to apply on Linux. Some times it works, most of the
time does not.
</STRONG></P>
<P><STRONG>
Anyway, I have Redhat 6.1 installed on my 2 PC intel-based. I tried to use
rcp to remote copy files from one PC to another. I got the error:
"permission denied" from other PC. I have a file ".rhosts" setup to give
permission to other PC. I use "octet format" in all of files/commands so
DNS/NIS are not involved at all.
</STRONG></P>
<P><STRONG>
My questions are:
</STRONG></P>
<P><STRONG><BLOCKQuote>
<TT>-</TT> Why do I have this error?
</BLOCKQuote></STRONG></P>
<P><STRONG>
<TT>-</TT> Later on I found out that Linux is using PAM to do authentication. For
rcp, it is using <TT>/etc/pam.d/rsh.conf</TT> to authenticate. However, I can not
find any information about PAM modules (pam_rhosts_auth.so, for example)
regarding how it works. Do you know where I can obtain information about
particular PAM module?
</STRONG></P>
<P><STRONG>
Thanks a lot,
Dong Le,
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Short answer: Use ssh!
</BLOCKQUOTE>
<BLOCKQUOTE>
There are a few problems here.  First, I've seen versions of rshd
(the rsh daemon) that would not seem to accept octet addresses.
More importantly many Linux distributions are configured not to
respect your ~/.rhosts files.
</BLOCKQUOTE>
<BLOCKQUOTE>
You are correct that you have to co-ordinate your policy using the
PAM if your system has the "Pluggable Authentication Modules"
suite of programs installed.  The configuration file would be
<TT>/etc/pam.d/rsh.</TT> Here's the default that would be installed by
<A HREF="http://www.debian.org/">Debian</A>:
</BLOCKQUOTE>

<blockquote><pre>#%PAM-1.0
auth	required	pam_rhosts_auth.so
auth	required	pam_nologin.so
auth	required	pam_env.so
account	required	pam_unix_acct.so
session	required	pam_unix_session.so
</pre></blockquote>
<BLOCKQUOTE>
Yours would be pretty similar.
</BLOCKQUOTE>
<BLOCKQUOTE>
In addition you might find that you need to also modify the
arguments on the in.rshd line in your <TT>/etc/inetd.conf</TT> file.  For
example if there's a <TT>-l</TT> option it may be causing your copy of
in.rshd to ignore user ~/.rhosts files.  A <TT>-h</TT> option will force it
to ignore the contents of any <TT>/etc/hosts.equiv</TT> file.
</BLOCKQUOTE>
<BLOCKQUOTE>
(The new Debian rshd package ignores these additional options and
requires that you configure your policy through the <TT>/etc/pam.d/</TT>
files.  I don't know if <A HREF="http://www.redhat.com/">Red Hat</A> has modified it's packages in this
way for versions 6.1 or 6.2.  In 6.0 I'm pretty sure that I was
still able to use the command line arguments on the in.rshd entry
in the <TT>/etc/inet.conf</TT> file for this.)
</BLOCKQUOTE>
<BLOCKQUOTE>
Of course you can use ssh as a resplacement to rsh, and have
much better security as well.
</BLOCKQUOTE>

<!-- end 7 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/8"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 8 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Telnet</H3>


<p><strong>From Cleary, James R. on Fri, 07 Apr 2000  
</strong></p>
<P><STRONG>
Jim,
</STRONG></P>
<P><STRONG>
I just clean installed Redhat 6.0 on my box.  I can ping the
</STRONG></P>
<P><STRONG>
box from another machine, but I can't telnet to it, the default
configuration should provide for that, shouldn't it?  Any help
you'd have would be great.
</STRONG></P>
<P><STRONG>
Sincerely,
"J.C."
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
When you say "you can't telnet to it" what do you mean?
Does the telnet client seem to just sit there for a long time?  Do
you get an error message that says something like "connection
refused?"  Does that come back immediately, or does it take a
minute or two?  Are you trying to telnet to it by name, or by IP
address?  (That basically doesn't matter as long as you're using
the same form for your ping command).
</BLOCKQUOTE>
<BLOCKQUOTE>
I disagree with your assertion that the "default configuration
should provide for that?"  Linux appeals to a much broader range
of users than traditional, professionally managed UNIX systems.
It is not appropriate to assume that all of your users what to be
"telnet hosts" (servers or multi-user workstations).  In addtional
telnet is an old and basically depracated means of remote access.
</BLOCKQUOTE>
<BLOCKQUOTE>
(Well, it should be deprecated).
</BLOCKQUOTE>
<BLOCKQUOTE>
You should probably use ssh, STEL, ssltelnet, or install a
Kerberos or the <A HREF="http://www.xs4all.nl/~freeswan/">FreeS/WAN</A> IPSec infrastructure to provide you with
an encrypted, unspoofable, unsniffable connection between your
client and your server.
</BLOCKQUOTE>
<BLOCKQUOTE>
Please don't respond with "but I'm behind a firewall" or "this is
just my home system."  Those are "head in the sand" attitudes that
make for a brittle infrastructure (one little crack and the whole
wall collapses).
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, if you've termined that telnet is really what you need,
that it matches your requirements and enforces your policies to
your satisfaction, then here's some pointer to troubleshooting
common failures.  These also apply to ssh, STEL, etc.
</BLOCKQUOTE>
<BLOCKQUOTE>
You said that 'ping' is working.  Assuming that you are using the
commands from the same host and using the same form of
addressing/naming for your 'ping' and your 'telnet' commands here
are the most likely problems:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
* You're session might not actually be failing.  It might
just be taking a very long time.  Search the answer guy
back issues for the phrase "double;reverse;dns" and you'll
find a number of my previous explanations about a common
cause of this delay (and some pointer on what to do about it)
Here are a couple of them:
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 45: More "Can't Telnet Around My LAN" Problems
<DD><A HREF="http://www.linuxgazette.com/issue45/tag/11.html"
	>http://www.linuxgazette.com/issue45/tag/11.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 38: Telnetd and pausing
<DD><A HREF="http://www.linuxgazette.com/issue38/tag/32.html"
	>http://www.linuxgazette.com/issue38/tag/32.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 30: tv cards and dual monitor
<DD><A HREF="http://www.linuxgazette.com/issue30/tag_tvcard.html"
	>http://www.linuxgazette.com/issue30/tag_tvcard.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
* You might not have the telnet daemon package installed
</BLOCKQUOTE>
<BLOCKQUOTE>
on your target host.  It might be installed but not
properly configured in <TT>/etc/inetd.conf.</TT>  That should
contain a line that looks something like:
</BLOCKQUOTE>

<blockquote><pre>telnet		stream	tcp	nowait	telnetd.telnetd	/usr/sbin/tcpd	/usr/sbin/in.telnetd
</pre></blockquote>
<BLOCKQUOTE>
* You might not have inetd running.  (It's the daemon, service
</BLOCKQUOTE>
<BLOCKQUOTE>
program, that reads the <TT>/etc/inetd.conf</TT>, listens for
connections on those ports, and dispatches the various
service programs that handle those services).
</BLOCKQUOTE>
<BLOCKQUOTE>
(An obscure possibility is that you might have something
broken in your name services handling.  You system would
normally match service/protocol names to IP port numbers
and transport layer protocols (TCP, UDP, etc) using the
<TT>/etc/services</TT> file.  If that's corrupted, or if your
<TT>/etc/nsswitch.conf</TT> is pointing your NSS libraries to
query some really bogus and corrupted backend it would be
possible that inetd would end up listening to the wrong
ports for many services.  I've never seen anyone mess
that up <TT>--</TT> but I'm sure it's possible).
</BLOCKQUOTE>
<BLOCKQUOTE>
* There may be a firewall or packet filtering system between
</BLOCKQUOTE>
<BLOCKQUOTE>
your client and your target.  That might let ICMP ('ping'
traffic) through while blocking your TCP ('telnet' on port
23) traffic.
</BLOCKQUOTE>
<BLOCKQUOTE>
* It's possible that you're telnet client program, or one
</BLOCKQUOTE>
<BLOCKQUOTE>
of the client libraries is broken, or that you have some
degenerate values in your environment or even in your
own .telnetrc file.  The 'telnet' client exchanges a
number of key environment variables with the daemon
to which it connects.  This is to configure your terminal
type, set your username and your DISPLAY values, your
timezone, and some other stuff.   It's possibly (though
unlikely) that you could be tripping over something that
the 'in.telnetd' on your target really doesn't like).
</BLOCKQUOTE>
<BLOCKQUOTE>
Hopefully that will help.
</BLOCKQUOTE>
<BLOCKQUOTE>
When asking about these sorts of problems it's important to
be quite specific about the failure mode (the symptoms).  It is
VERY important to capture and quote any error messages that you
get and to explain exactly what command(s) you issued to elicit
those symptoms.
</BLOCKQUOTE>
<BLOCKQUOTE>
Unfortunately crafting a good question is sometimes harder than
answering them.  (In fact I have managed to come across answer
on many occasions while I was writing up the question I intended
to post.  The process or rigorously describing the problem has
often led me to my own answers.  Sometimes I post the message
with my solution anyway).
</BLOCKQUOTE>
<BLOCKQUOTE>
One tip for troubleshooting this.  Staring with 'ping' is a good
idea.  It basically eliminates a number of possible problems
from the low-level "is the network card configured and is a
cable plugged into it?" parts of your problem.  It's also good
to do a 'traceroute' to your target.  This might show that your
packets are being routed through some unexpected device that is
filtering some of your traffic.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you have console access to the target server (including a "carbon
proxy" <TT>---</TT> a person on the phone in front of it) then you can
run (or have your proxy) run the 'tcpdump' command.  This can
show you the headers of every packet that comes across a given
network interface.  'tcpdump' has a small language for describing
the exact sorts of traffic that you want to see and filtering out
all the other traffic that you don't want.  If you search the
LG AG archives on 'tcpdump' you should find a number of examples
of how to use it.  You might go for something like:
</BLOCKQUOTE>

<blockquote><pre>    tcpdump -i eth0 -n host $YOURCLIENT and port 23
</pre></blockquote>
<BLOCKQUOTE>
... for example. (TCP port 23 is the standard for telnet traffic).
</BLOCKQUOTE>
<BLOCKQUOTE>
If that doesn't work, you might consider temporarily replacing your
'in.telnetd' with an 'strace' wrapper script.  Basically
you just rename the in.telnetd file to in.telnetd.real and
create a shell script (see below) to monitor it:
</BLOCKQUOTE>

<blockquote><pre>#!/bin/sh
exec strace -o /root/testing/telnet.strace /usr/sbin/in.telnetd.real
</pre></blockquote>
<BLOCKQUOTE>
I've described this process before as well.  Here's a
link to one of those:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 20
<DD><A HREF="http://www.linuxgazette.com/issue20/lg_answer20.html"
	>http://www.linuxgazette.com/issue20/lg_answer20.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 17
<DD><A HREF="http://www.linuxgazette.com/issue17/answer.html"
	>http://www.linuxgazette.com/issue17/answer.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
(use your browswer's "search in page" <TT>--</TT> [Alt][F] in Netscape
and the <TT>/</TT> key in Lynx to search on 'strace' to find the
messages I'm talking about.  Those older issues were back before
Heather was doing my HTML for me, and splitting each message/thread
into separately HTML pages like I should have been doing all
along).
</BLOCKQUOTE>
<BLOCKQUOTE>
That 'strace' trick is surprising handy.  At <A HREF="http://www.linuxcare.com/">Linuxcare</A> we use
it all the time, and it often helps us find missing config files,
directories where files should be, files where directories should
be, mangled permissions, and all sorts of things.  There's another
tools called 'ltrace' which gives similar, though slightly higher
level information.
</BLOCKQUOTE>
<BLOCKQUOTE>
Using 'tcpdump' and 'strace' you can troubleshoot almost any
problem in Linux.  They are like the "X-Ray" machines and CAT/PET
scanners for Linux tech support people.  However, I don't recommend
them lightly.  Go through the list of common ailments that I listed
first, consider using ssh instead, and then see if you need
"surgical diagnostics."
</BLOCKQUOTE>

<!-- end 8 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/9"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 9 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Getting Familiar with a UNIX System</H3>


<p><strong>From Patricia Lonergan on Fri, 07 Apr 2000  
</strong></p>
<!-- ::
Getting Familiar with a UNIX System
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
How would I find the following on the version of Unix I am using:,A (B OS
type and release, node name, IP address, CPU type, CPU speed, amount of
RAM, disk storage space, number of users who have ids, number of hosts
known.,A (B Thanks Answer Guy
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
The comamnd:
</BLOCKQUOTE>

<blockquote><pre>     uname -a
</pre></blockquote>
<BLOCKQUOTE>
Should give you the UNIX name (Linux, SunOS, HP-UX, etc)
and the kernel version/release, architecture, and some other info.
(Might also include the kernel compilation date and host)
</BLOCKQUOTE>
<BLOCKQUOTE>
The command:
</BLOCKQUOTE>

<blockquote><pre>     ifconfig -a
</pre></blockquote>
<BLOCKQUOTE>
... should give the the IP address, netmask and broadcast address of
each interface in the system.
</BLOCKQUOTE>
<BLOCKQUOTE>
The command:
</BLOCKQUOTE>

<blockquote><pre>     hostname
</pre></blockquote>
<BLOCKQUOTE>
... should give you the the DNS hostname that this system
"thinks" it has.  Looking that up via reverse DNS using a
command like:
</BLOCKQUOTE>

<blockquote><pre>     dig -x
</pre></blockquote>
<BLOCKQUOTE>
... might be possible if you have the DNS utils package
installed.
</BLOCKQUOTE>
<BLOCKQUOTE>
From there things start to get pretty complicated depending
on which flavor of UNIX you're on, and how it's configured.
(In fact there are exceptional cases where the preceding
commands won't work):
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
I'll confine the rest of my answers to Linux.
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
You can get the CPU type and speed using the command:
</BLOCKQUOTE>

<blockquote><pre>     cat /proc/cpuinfo
</pre></blockquote>
<BLOCKQUOTE>
(assuming that your kernel is compiled with the <TT>/proc</TT> filesystem
enabled and that you have <TT>/proc</TT> mounted.  Those are the
common case).
</BLOCKQUOTE>
<BLOCKQUOTE>
Linux provides a 'free' command to report on your RAM and
swap availability and usage.  Many UNIX systems will have the
'top' command installed.  It can also provide that information
(though it defaults to interactive mode <TT>---</TT> and thus is less
useful in scripts).
</BLOCKQUOTE>
<BLOCKQUOTE>
Any UNIX system should provide the 'mount' and 'df' commands to
generate reports about what storage devices are attached and
in use (mounted) and about the amound of free space available on
each.  Note you should track not only your free space (data blocks)
but your free inodes (management data) so use both of the following
commands:
</BLOCKQUOTE>

<blockquote><pre>	df
	df -i
</pre></blockquote>
<BLOCKQUOTE>
The 'mount' command will also report the filesystem types and any
options (readonly, synchronous, etc) that are in effect on these.
You might have to use the 'fdisk <TT>-l</TT>' command to find any
unmounted filesystems (that might not be listed in your <TT>/etc/fstab</TT>
file) under Linux.  Solaris has a similar command called prvtoc
(print volume table of contents).
</BLOCKQUOTE>
<BLOCKQUOTE>
Asking about number of user accounts is straightforward on a
system that is just using local <TT>/etc/passwd</TT> and <TT>/etc/group</TT> files
(the default).  You can simply using the following:
</BLOCKQUOTE>

<blockquote><pre>      wc -l /etc/passwd
</pre></blockquote>
<BLOCKQUOTE>
... to get a number of local users.  Note that many of these
accounts are purely system accounts, used to managed the
ownership and permissions on files and system directories.
If you read though that file a little bit it should be obvious
which ones are which.   In general Linux distributions start
numbering "real" users (the ones added after the system was
installed) at 500 or 1000 so all of the names with a UID
above that number are "real" (or were added by the system
administrator).
</BLOCKQUOTE>
<BLOCKQUOTE>
However, it's possible (particularly in UNIX system that are
installed on corporate networks) that your system(s) are using
a networked account system such as NIS or NIS+.  You might be
able to get some idea of the number of users on such a network
using the 'ypcat' command like so:
</BLOCKQUOTE>

<blockquote><pre>       ypcat passwd | wc -l
</pre></blockquote>
<BLOCKQUOTE>
The questions of "number of hosts known" is actually a bit
silly.  "Known" in what sense?  Most system use DNS for
mapping host names to IP addresses.  Thus any Internet connected
system "knows" about millions of hosts.  It is possible for
a sysadmin to provide the system with a special list of hosts and
IP addresses using the <TT>/etc/hosts</TT> files, but this is pretty rare
these days.  (It's just too likely that you'll get those files
out of sync with your DNS).
</BLOCKQUOTE>
<BLOCKQUOTE>
I suppose you should also look for commands with the letters
"stat" in their name.  Read the man pages for 'vmstat', 'netstat'
'lpstat' etc.  Many versions of UNIX also include a 'sar' command
though that isn't common on Linux.  'rpcinfo' and 'route'
are other useful commands.
</BLOCKQUOTE>
<BLOCKQUOTE>
This whole set of questions has a "do my homework" tone to it.
(particularly since it's common from a .edu domain).  Keep
in mind that I've just barely scratched the surface of the
information that's available to a skilled sysadmin who needs to
become familiar with a new machine.  There are hundreds of
other things to know about such a system.
</BLOCKQUOTE>
<BLOCKQUOTE>
Most of the information you care about it under <TT>/etc.</TT>  On a
Linux system there is also quite a bit under <TT>/proc</TT> (most of
forms of UNIX that support <TT>/proc</TT> only but process information
thereunder, while the Linux kernel uses it as an abstraction to
provide for all sorts of dynamic kernel status information out to
user space).
</BLOCKQUOTE>

<!-- sig -->


<!-- end 9 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/10"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 10 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Connecting NT and OS/2</H3>


<p><strong>From Carlos Ferrer on Thu, 13 Apr 2000  
</strong></p>
<!-- ::
Connecting NT and OS/2
~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Do you know how to connect an NT box with an OS/2 box using null modem?
</STRONG></P>
<P><STRONG>
Thanks,
Carlos Ferrer
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Yes.  You plug one end of the null modem cable into a serial
port on one of the boxes, and the other into a serial port on the
other box.  Then you install some software on each, configure and
run it.
</BLOCKQUOTE>
<BLOCKQUOTE>
Before you ask:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
NO!  I don't know what NT or OS/2 native software you should use.
That's your problem.  I answer Linux questions.  I'm the Linux Gazette
Answer Guy.
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
So, why don't you ask the technical support from IBM and/or Microsoft.
They sold you the software.  They should provide the support.  The
Linux community gives us software, so I give away alot of support.
</BLOCKQUOTE>
<BLOCKQUOTE>
Meanwhile, you might have some luck with plain old MS-DOS Kermit.
NT and OS/2 are supposed to support running DOS programs, and they
should allow you to configure their DOS "boxes" (virtual machines,
whatever) to have access to their respective serial ports.  You can
also get Kermit '95 which should work on Win '9x, NT, and OS/2.
This is a commercial package.  It is not free.
</BLOCKQUOTE>
<BLOCKQUOTE>
The C-Kermit for UNIX and Linux is also not free; though it can be
freely downloaded and compiled.  You should read its license to
determine if you can use it freely or whether you are required to
buy the C-Kermit book.  (Of course you could support their project
by buying the books regardless).  There is also a G-Kermit which is
GPL'd.
</BLOCKQUOTE>
<BLOCKQUOTE>
You can learn about Kermit at:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Columbia University Kermit Project Home page
<DD><A HREF="http://www.columbia.edu/kermit"
	>http://www.columbia.edu/kermit</A>
</DL></BLOCKQUOTE>

<!-- sig -->


<!-- end 10 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/11"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 11 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>"Temporarily Controlling a VT"</H3>


<p><strong>From James Knight on Thu, 13 Apr 2000  
</strong></p>
<!-- ::
"Temporarily Controlling a VT"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
If I have an interactive program running on a VT, say tty1, can i
temporarily "control" that VT from another, say tty2, or better yet,
through a telnet connection (pts/n)?
</STRONG></P>
<P><STRONG>
For instance, i have naim running on tty1, I've been logging in via
telnet, and killing that process, and start it again so they don't
interfere with each other.  Can I just pretend I'm at the console somehow,
then when I logout, i'll still be connected to naim?
</STRONG></P>
<P><STRONG>
Thanks,
Jay Knight
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
The easiest way to do this is to run 'screen'
</BLOCKQUOTE>
<BLOCKQUOTE>
Instead of starting interactive programs directly from your VT
login shell, run 'screen' and start the program thereunder.  Now
you can "detach" the whole screen session (with up to 10 interactive
programs running under it) and re-attach from any other sort of
terminal login.
</BLOCKQUOTE>
<BLOCKQUOTE>
I do this routinely.  I'm doing it now.  Currently I'm working in
an xterm which is 99 characters wide and 35 lines tall.  Earlier
I had connected to my system via ssh, and I "yanked" my 'screen'
session over to that xterm (80 characters by 50 lines) using the
following command:
</BLOCKQUOTE>

<blockquote><pre>	   'screen -r -d -e^]]'
</pre></blockquote>
<BLOCKQUOTE>
... the <TT>-d</TT> option tells my new 'screen' command to look for another
'screen' session and detach it from wherever it is, the <TT>-r</TT> is to
re-attach it to my current terminal or psuedo-terminal, and the
<TT>-e</TT> option let's me set alternative "escape" and "quote" characters
(more on that in a moment).
</BLOCKQUOTE>
<BLOCKQUOTE>
I've described 'screen' in previous LG issues.  However, it is
hard to find.  For one thing the desired features are difficult to
describe and the keywords that do cover it are far too general.
For example, so far the keywords we've used are:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
You: temporarily control VT
Me:  attach re-attach detach screen session yank
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
... see?
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, here's the VERY short intro to 'screen':
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
First 'screen' just starts an extra shell.  So, if you just type 'screen'
(most distributions include 'screen') that's pretty much all you'll get.
(You might get some sort of copyright or other notice).  Now you can
run programs as usual.  The only big difference is that there is one key
([Ctrl]-[A] by default) which is not captured by 'screen'.  That one
"meta" key is your trigger to fire off all of 'screen&quot;s other features.
Here are a few of them (listed below as [Meta]+(key)):
</BLOCKQuote></BLOCKQUOTE>

<blockquote><pre>      [Meta] [a]     -- send a literal [Meta] to the current session
      [Meta] [c]     -- create an a additional shell session under
		        this 'screen'
      [Meta] [w]     -- display/list current sessions (windows)
      [Meta] [A]     -- (upper case 'A') set this session's (window's)
			title
      [Meta] [Esc]   -- go into "scrollback" and "copy" mode (keyboard
			cut &amp; paste)
      [Meta] [Space] -- cycle to the next session
      [Meta] [Meta]  -- switch to most recent session
      [Meta] []]     -- (right square bracket) paste copy of "cut" buffer
      [Meta] [?]     -- Quick help page of other keystrokes
      [Meta] [d]     -- Detach
      [Meta] [S]     -- (upper case 'S') split the screen/display
			(like 'splitvt')
      [Meta] [Q]     -- (upper case 'Q') unsplit the screen/display
      [Meta] (digit) -- switch directly to session number (digit)
</pre></blockquote>
<BLOCKQUOTE>
There are many others.  There are many features to 'screen.'   It is
the UNIX/Linux terminal power tool.  You also get the ability to
share your session(s) with another user  (like the old 'kibitz'
package).  That's very handy for doing online tutorial and tech
support.  You get a scrollback buffer and keyboard driven cut and
paste (with 'vi' inspired keybindings, you can even search back
through the current text and backscroll buffer).
</BLOCKQUOTE>
<BLOCKQUOTE>
Most of the URLs you see in the "Answer Guy" are pasted in from
a 'lynx' session using 'screen.'
</BLOCKQUOTE>
<BLOCKQUOTE>
If you forget to detach, you can use the <TT>-d</TT> option (shown above)
to remotely detach a session.  You can use other options to select
from multiple 'screen' sessions that you have detached.  You can
also run 'screen' commands to start up programs in their own
screen windows.
</BLOCKQUOTE>
<BLOCKQUOTE>
Oddly enough I've even found that I occasionally start or
re-attach to one 'screen' session on a remote system from within a
local 'screen' session. When I do this I use the <TT>-e</TT> option to
give that other (remote) screen session a different meta key.
(That's what I did in the sample command up there, with the
'<TT>-e^]]</TT>' setting it up so that the [Ctrl][Right Square Bracket]
was the meta key for that session.  I did that while I was at
work.  Before I left there I detached it.  When I got home I
re-attached it to this 'xterm' (where I'm typing right now).
At first I just re-attached it with '<TT>-r</TT>' <TT>---</TT> but then I realized
that it was using my other meta key.  So a detached again and
use '<TT>-r^aa</TT>' to reset those to the defaults (to which I'm more
accustomed).
</BLOCKQUOTE>
<BLOCKQUOTE>
Since I've introduced people at <A HREF="http://www.linuxcare.com/">Linuxcare</A> to this meme, I've
found that many of them have come to view their "sessions"
in a way that's similar to me.  We maintain our state for
weeks or months by detaching, logging out, going elsewhere
(into X, out of X, from work, from home, etc), and always
re-attaching to our ongoing sessions.  It's a whole different
way of using your computer.
</BLOCKQUOTE>
<BLOCKQUOTE>
So, try it.  See if it does the trick for you.
</BLOCKQUOTE>

<!-- sig -->


<!-- end 11 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/12"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 12 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Running out of Pseudo-tty's</H3>


<p><strong>From FRM on Fri, 14 Apr 2000  
</strong></p>
<!-- ::
Running out of Pseudo-tty's
~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
hi,
</STRONG></P>
<P><STRONG>
my sunos 4.1.4 kernel is already configed for the max 256 pty's
(pseudo devices), but my users complain about running out of them
often. do i need to add files to the <TT>/dev</TT> directory or recompile the
kernel again...or????
</STRONG></P>
<P><STRONG>
any help much appreciated,
</STRONG></P>
<P><STRONG>
Randy A
Compaq Computer Corp.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
SunOS 4.1.4???  Hmm.  Maybe you need an upgrade.
</BLOCKQUOTE>
<BLOCKQUOTE>
If 256 is the max for SunOS then I don't know what
you'd do to get around that.  Under Linux the max is about 2048.
I suppose you could try making a bunch of additonal device nodes and
re-writing/compiling a bunch of your apps to open the new group of
nodes rather than the old ones.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'd say that SunOS 4.1.4 is showing its age.  You might want to
consider switching to <A HREF="http://www.openbsd.org/">OpenBSD</A>, <A HREF="http://www.netbsd.org/">NetBSD</A>, or Linux.  (Note:
SunOS was a BSDish UNIX, so you might be more comfortable with
it than you would be with Linux.  I don't know about binary
compatability for your existing applications).
</BLOCKQUOTE>
<BLOCKQUOTE>
(Obviously I don't know much about SunOS.  I'm the <EM>LINUX</EM>
Gazette Answer Guy and my experience with other forms of UNIX
is too limited and crufty to help you more than that).
</BLOCKQUOTE>

<!-- sig -->


<!-- end 12 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/13"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 13 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>XFree 4.0 and &quot;:0.0 refused by server&quot; Errors</H3>


<p><strong>From Alain Toussaint on Sun, 16 Apr 2000  
</strong></p>
<!-- ::
XFree 4.0 and &quot;:0.0 refused by server&quot; Errors
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello Answerguy,
</STRONG></P>
<P><STRONG><CODE>
last week,i installed debian (a really base installation) on a factory
</CODE></STRONG></P>
<P><STRONG>
fresh disk and then set out to compile Xfree86 4.0 (i did not have X
previously),it did compile and work fine and i've been using it daily
with the startx command but wenesday this week,the hard disk on my
mother's computer died so i set out to build a linux boot disk
containing an X server so she could log in my system and continue to do
her work,i then tried xdm tonight (locally on my box first),xdm
loaded,took my credential but it did not open a session both as a user
(alain) and as root,i looked over in the .xession-errors file but i've
came to no conclusion,here's the content of the file:
</STRONG></P>

<pre><strong>&gt; /home/alain/.xinitrc: exec: xfwm: not found
&gt; /home/alain/.xinitrc: xscreensaver: command not found
&gt; Xlib: connection to ":0.0" refused by server
&gt; Xlib: Client is not authorized to connect to Server
&gt; xrdb: Can't open display ':0'
&gt; Xlib: connection to ":0.0" refused by server
&gt; Xlib: Client is not authorized to connect to Server
&gt; xrdb: Can't open display ':0'
&gt; Xlib: connection to ":0.0" refused by server
&gt; Xlib: Client is not authorized to connect to Server
&gt; xrdb: Can't open display ':0'
</strong></pre>
<P><STRONG>
the first 2 errors don't worry me much (i have xfce installed and for
xscreensaver,i don't want it,since i'll install kde soon,i'm not pressed
to fix the xfce script that much),but the Xlib errors worry me quite a
bit,i then downloaded debian's xdm package and uncompressed it in a
temporary directory to compare the content of both our <TT>/etc/X11/xdm</TT>
directory (mine as well as the debian one) but i didn't find the root of
the problem,could you please help me ??
</STRONG></P>
<P><STRONG>
Thanks a lot
Alain Toussaint
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Hmmm.  It sounds like a problem with your .Xauthority file.
You said you were using 'startx' before, and you're now trying to
use 'xdm'.   What happens if you go back and try 'startx' again?
</BLOCKQUOTE>
<BLOCKQUOTE>
'xdm' has a different way of handling the 'xauth' files (using
the 'GiveConsole' and 'TakeConsole' scripts).  Do a 'ps' listing
and see if you have a X server with arguments like:
</BLOCKQUOTE>

<blockquote><pre>     X :0 -auth /var/xdm/Xauthority
</pre></blockquote>
<BLOCKQUOTE>
There's supposed to be a "GiveConsole" script that does
something like:
</BLOCKQUOTE>

<blockquote><pre>    xauth -f /var/xdm/Xauthority extract - :0  | xauth -f ~$USER/.Xauthority merge -
</pre></blockquote>
<BLOCKQUOTE>
(Which extracts an MIT Magic Cookie or other access token from xdm's
Xauthority file and merges it into the "cookie jar" of your user.
This can, in principle, allow multiple accounts on a host or across a
network to access the same display server).
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, there are many other tricks that you can use to troubleshoot
similar problems.
</BLOCKQUOTE>
<BLOCKQUOTE>
I sometimes will start the X server directly
(bypassing 'xinit', 'startx', and 'xdm'); then switch back to one
of my text mode consoles (usually when I'm doing this I slap the old
&amp; on the end of the X server's command line, if I forget then I do the
old [Ctrl]+[Z], 'bg' key and command).  Next I 'export DISPLAY=:0'
(or :1, or whatever), and start an 'xterm &amp;'
</BLOCKQUOTE>
<BLOCKQUOTE>
At that point I switch back to the X virtual console, and use the
resulting 'xterm' to work more magic.  I may need to run my own
'xrdb' commands to merge in my own entries into the "X resources
database" (think of that as being your X server's "environment" <TT>---</TT>
a set of name/pattern and value pairs which are used by X client
programs to determine their default appearance, behaviour, etc).
</BLOCKQUOTE>
<BLOCKQUOTE>
I might also run a number of 'xset' commands to add to my
font path and play with other settings.
</BLOCKQUOTE>
<BLOCKQUOTE>
Doing this sort of "worm's eye" inching through the labyrinthine
X initialization process will usually isolate any problems that
you're having.  It's playing with X enough to realize that it's
going through all of these steps that's so difficult.
</BLOCKQUOTE>
<BLOCKQUOTE>
I presume that you already know some of that (since you've already
fetched your own XFree 4.0 sources and built them).  It's clear
that you're not a novice.  Anyway, trying looking for .Xauthority
files.  Allegedly if you simply delete them it opens the X server
wide open.  I don't know if that's still true in XFree 4.0 but
it seemed to work on XFree 3.x the one time I tried it.
</BLOCKQUOTE>
<BLOCKQUOTE>
Good luck on that new X server.  I haven't grabbed it to play with
it yet.  I may wait until someone has a first cut of a <A HREF="http://www.debian.org/">Debian</A>
binary posted to "woody" (the current development/experimental
branch of the Debian project).
</BLOCKQUOTE>

<!-- sig -->


<!-- end 13 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/14"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 14 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif" 
	height="50" width="60" alt="(!) " border="0"
	>FW: Linux</H3>


<p><strong>Answered By Carl Davis on Mon, 17 Apr 2000  
</strong></p>
<BLOCKQUOTE>
Thanks Jim, but I have solved the mystery................
</BLOCKQUOTE>
<BLOCKQUOTE>
The problem was that lilo does not like multiple "append" statements in
/etc/lilo.conf.
I fixed this by putting all the statements on the one append line,
separated by commas
and of cotatement2, statement3"
You may wish to add this snippet to the list of 2cent tips.
</BLOCKQUOTE>
<BLOCKQUOTE>
Regards
</BLOCKQUOTE>
<BLOCKQUOTE>
Carl Davis
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
<TT>-----Original</TT> Message-----
From:	Carl Davis
Sent:	Thursday, April 13, 2000 9:12 AM
To:	'<A HREF="mailto:linux-questions-only@ssc.com"
	>linux-questions-only@ssc.com</A>'
Subject:	Linux
</STRONG></P>
<P><STRONG>
Hi Jim,
</STRONG></P>
<P><STRONG>
My compliments on a great column.  I am running Linux (Mandrake 7)  on a
Celeron 466
with 128 Mb RAM.  My problem is I cannot persuade Linux to recognise more
than 64 Mb.
I have tried adding the following to lilo.conf:  append="mem=128M",   to
no avail.  It still
comes up with only 64 Mb.  Various flavours of Windoze  can see the full
128 Mb.  Any ideas
on what's going on here ?
</STRONG></P>
<P><STRONG>
Carl Davis
</STRONG></P>

<!-- end 14 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/15"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 15 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Determining the Type of Each Filesystem</H3>


<p><strong>From Scott on Mon, 17 Apr 2000  
</strong></p>
<!-- ::
Determining the Type of Each Filesystem
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello Answer guy,
</STRONG></P>
<P><STRONG>
The company I work for is going to start developing products for Linux soon.
Part of my preparation for this is to find out about Linux file systems.
One thing I haven't been able to find is how to find out what file system
each filesystem is using.  Is there a command line utility that shows this?
How do I accomplish this programatically?
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Here's a simple shell script that will parse the output from the
'mount' command and isolate the device name and type for each mounted
filesystem:
</BLOCKQUOTE>

<blockquote><pre>    mount | {
	IFS="      (,)";
	while read dev x mpoint x type opts; do
	   echo $dev $type;
	done
	}
</pre></blockquote>
<BLOCKQUOTE>
Notice at this is one of my common "data mill loops" <TT>---</TT> you
pipe the output of some command into a 'while read ...; do' loop
and do all your work in the subprocess.  (When I'm teaching shell
scripting one of the first points I emphasize about pipes is
that a subprocess is implicitly made on one side of your pipe
operator, or the other).
</BLOCKQUOTE>
<BLOCKQUOTE>
We also see that I'm using the variable "$x" to eat extra
fields (the words "on" and "type" from 'mount&quot;s output).  Finally,
I'm using the shell-special IFS (inter-field separator) shell variable
to add the characters "(,)" to the list of field separators.  This
means that each of the mount options <TT>---</TT> read-only vs read/write, nodev,
nosuid, etc <TT>---</TT> will be treated as a separate value.  I could then,
within my 'while' loop, nest a 'for' loop to process each option on
each filesystem.
</BLOCKQUOTE>
<BLOCKQUOTE>
Creative use of IFS and these 'while read ...; do' loops can allow
us to do quite a bit directly in shell without resorting to 'awk'
and/or 'sed' to do simple parsing.  Creative use of the 'case'
command (which uses glob patterns to match shell variable values)
is also useful and can replace many calls to 'grep'.
</BLOCKQUOTE>
<BLOCKQUOTE>
To get filesystem information from within a C program you'd
use the <TT>'statfs()</TT>' or <TT>'fstatfs()</TT>' system calls.  Read the
'statfs(2)' or 'fstatfs(2)' man pages for details.  Fetch
the util-linux sources and read the source code to the
'mount' and 'umount' commands for canonical examples of
the use of these and related sytem calls.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Any help is appreciated!
</STRONG></P>
<P><STRONG>
Scott C
</STRONG></P>

<!-- end 15 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 15 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Which filesystem?</H3>


<p><strong>From Andrew T. Scott on Mon, 17 Apr 2000  
</strong></p>
<BLOCKQUOTE>
Jim Dennis wrote:
.....
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
and do all your work in the subprocess.  (When I'm teaching shell
scripting ...
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Where can I sit in on this class?
</BLOCKQUOTE>
<BLOCKQUOTE>
-Andrew
</BLOCKQUOTE>

<EM>[ <BLOCKQUOTE>
Luckily for <A HREF="http://www.linuxcare.com/">Linuxcare</A>, its training department has a whole bunch of people
in it (wave hi, everybody!) because they've got Jim assigned to Do Cool Stuff
so he's not teaching right now.  To be fair, they are only one among many
training providers for Linux;  you can see a decent listing at
<A HREF="http://www.lintraining.com"
	>http://www.lintraining.com</A> which redirects to Linsight's directory by
location and news on the subject.
</BLOCKQUOTE><P>-- Heather. ]</P></EM>

<!-- end 15 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/16"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 16 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Four Questions</H3>


<p><strong>From vg24 on Tue, 18 Apr 2000  
</strong></p>
<!-- ::
Four Questions
~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi Answer Guy,
</STRONG></P>
<P><STRONG>
I had a few small questions about my <A HREF="http://www.slackware.org/">Slackware</A> Linux Box...
</STRONG></P>

<pre><strong>&gt; (1) How do I get applications (like xmms) to startup automatically when I
&gt; 	start FVWM95 with a 'startx' command? I'm hoping to achieve something
&gt; 	similar to the "StartUp" menu in Win98.
</strong></pre>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Normally the 'startx' command is a shell script which looks for a
~/.Xclients file.  That file is normally just another shell script.
It consists of a series of command that are started in the background
(using the trailing '&amp;' shell operator), and one command that is
'exec&quot;d (started in the foreground, and used to replace the shell
script's interpreter itself.
</BLOCKQUOTE>
<BLOCKQUOTE>
That foreground command is usually a window manager.  In any event it
becomes the "session manager" for the X server.  When the program exits,
the X server takes that as an indication that it should shutdown.
</BLOCKQUOTE>
<BLOCKQUOTE>
So, the answer to your question is to add the appropriate commands to
the .Xclients script in your home directory.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you are logging in via 'xdm' (a graphical login program) then it
may be that your system is looking for an ~/.Xsession script instead.
I usually just link to two names to one file.  However, you certainly
could have completely different configurations based on whether you
logged in via 'xdm' or used the 'startx' command.
</BLOCKQUOTE>
<BLOCKQUOTE>
Of course this is just a matter of convention and local policy.  As I
said, 'startx' itself is often a shell script.  At some sites you use
'xinit' instead of 'startx' <TT>---</TT> and others there are different ways
to launch the X server and completely different ways to start the various
clients that run under it and control it.
</BLOCKQUOTE>
<BLOCKQUOTE>
You mentioned fvwm95.  This is one of several variants of the fvwm
window manager.  That's a traditional window manager.  It just gives
you a set of menus (click on the "root window" which other windowing
systems call a "wallpaper" with each of your mouse buttons to see those),
and a set of window decorations (resizing bars, corners, and title bars
and buttons).
</BLOCKQUOTE>
<BLOCKQUOTE>
In recent years the open source community has created somewhat more
elaborate and "modern" graphical user environments like: <A HREF="http://www.kde.org/">KDE</A>, <A HREF="http://www.gnome.org/">GNOME</A>,
and GNUStep.  These are whole suites of programs which can be combined
to provide the sort of look, feel and facilities that people have
come to expect from MacOS, MSWindows, etc.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you really want something "Like the StartMenu" in Win'9x
then you may want to look at KDE or GNOME.  These have "panels" which
provide a much closer analogue to the environment that you are
used to.
</BLOCKQUOTE>
<BLOCKQUOTE>
(Note: It is also possible to make either of these environments
look completely different than MS Windows.  They both support
"themes" which are collections of settings, graphics, textures,
icons, even sounds, that customize the appearance and operation of
a Linux GUI.  For more information and some nice screen shots of
the possibilities, take a look at <A HREF="http://www.themes.org"
	>http://www.themes.org</A>).
</BLOCKQUOTE>

<blockquote><pre>&gt; (2) I recently upgraded my kernel and filesystem binaries from a 2.034 kernel
&gt; 	to a 2.2.13 kernel. I have XFree86 3.3.5 installed. I also upgraded
&gt; 	my motherboard from an Intel P75 to an AMD K6-450. I kept the 32 Megs
&gt; 	of RAM the same (a SIMM). However, now I notice that Netscape (and
&gt;         others?) grind my hard drive more when I attempt to open new
&gt;         browsers. I'm pretty sure I'm low on memory, but since I'm low in
&gt; 	cash, I'd rather not invest in a DIMM. I didn't have any swap space
&gt; 	set up, and don't now. I actually upgraded from netscape 4.1 to 4.6.
&gt; 	Could this be the problem?
</pre></blockquote>
<BLOCKQUOTE>
Hmmm.  Certainly it is likely that Netscape 4.6 is taking up more
memory than 4.1.  However I note an inconsistency here.  You say you
didn't have any swap space.  If that was true then your shortage of
memory should have caused failures when trying to launch programs
<TT>---</TT> rather than the increased disk thrashing.  I think it's likely
that you actually do have some swap space.  You can use the following
command to find out what swap partitions and files are active on your
system:
</BLOCKQUOTE>

<blockquote><pre>     cat /proc/swaps
</pre></blockquote>
<BLOCKQUOTE>
... which should provide a list of any swap space that is in use.
Of course the 'free' command will also summarize the available and
used swap space.  However, the <TT>/proc/swaps</TT> "psuedo-file" (node) will
actually tell you "where" the swap is located.
</BLOCKQUOTE>
<BLOCKQUOTE>
Get the extra memory.  It's not that expensive and it is the
best performance upgrade that you can make for your system.
</BLOCKQUOTE>

<blockquote><pre>&gt; (3)     I was running GNOME/enlightenment, but the
&gt; 	GNOME panel would never come up automatically. How can I get the
&gt; 	GNOME panel to initialize, along with the GNOME file manager, (so
&gt; 	I can have the cool desktop icons)?
</pre></blockquote>
<BLOCKQUOTE>
Hmmm.  I'm not much of a GNOME or KDE person.  Do you have the rest
of GNOME installed?  enlightenment is a window manager.  It was the
default window manager for GNOME <TT>---</TT> but they are separate projects.
So, do you have GNOME installed?  Are you starting 'gnome-session'
(running it from your .Xclients/.Xsession script as described above)?
</BLOCKQUOTE>
<BLOCKQUOTE>
Try that.  I think there are now a couple of window managers that
implement the GNOME hints and APIs <TT>---</TT> so you don't have to use
enlightenment.
</BLOCKQUOTE>

<blockquote><pre>&gt; (4)	Lastly, I wanted to trim my syslog and wtmp files. Is there any
&gt; 	way I can do this? Can I just tail -30 the last 30 lines into a
&gt; 	new file? I think the wtmp is binary, so any ideas?
</pre></blockquote>
<BLOCKQUOTE>
You are correct.  the wtmp and utmp files are binary. They cannot be
trimmed with simple shell scripts and text utilities.  The utmp file
shouldn't grow (by much), however the wtmp will grow without bound.
However, the usual way of dealing with wmtp is to simply rename the
current one, 'touch' a new one and forget about it.
</BLOCKQUOTE>
<BLOCKQUOTE>
That's fine for wtmp.
</BLOCKQUOTE>
<BLOCKQUOTE>
However, DON'T try that with the <TT>/var/log/messages</TT> or other
syslog files.  Those are held up.  If you rename them or
delete them, they continue to grow.
</BLOCKQUOTE>
<BLOCKQUOTE>
Yes!  You read that correctly, if you remove a file while some
process has it open, then you haven't freed up any disk space!
That's because the 'rm' command just does an <TT>'unlink()</TT>' system call.
When the last link to a file is removed, AND THE FILE IS NOT OPEN,
then the filesystem drivers perform some housekeeping to mark the
associated inode(s) as available, and to add all the associated data
blocks to the filesystem's "free list."  If the file is still open
then that housekeeping is deferred until it is closed.
</BLOCKQUOTE>
<BLOCKQUOTE>
So the usual way to trim syslog files (since syslog stays
running all the time, and keeps it's files open under normal
circumstances) is to to 'cp <TT>/dev/null</TT>' or 'echo "" &gt; ' to
truncate them.  Another common practice is to remove the
files and use the 'kill <TT>-HUP</TT> $(cat <TT>/var/run/syslog.pid</TT>)' command
to force the syslogd to re-read its configuration file,
close all its files, and re-open them.
</BLOCKQUOTE>
<BLOCKQUOTE>
However, none of that should be necessary.  Every other
general purpose distribution has some sort of log rotation
scripts that are run out of 'cron.'   I'm pretty sure that
Patrick (Volkerding, principle architect of Slackware) didn't
neglect that.
</BLOCKQUOTE>
<BLOCKQUOTE>
(I should point out that I haven't used Slackware in several
years.  Nothing against it.  I just have too few machines and
too little time).
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Thanks for any help you can provide!
Vikas Gupta
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Well, I think this should nudge you in the right directions.
</BLOCKQUOTE>

<!-- sig -->


<!-- end 16 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/17"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 17 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>G-Kermit: The GPL Kermit Transfer Package</H3>


<p><strong>From Deepu Chandy Thomas on Tue, 18 Apr 2000  
</strong></p>
<!-- ::
G-Kermit: The GPL Kermit Transfer Package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Sir,
</STRONG></P>
<P><STRONG>
I wanted to use the kermit protocol with minicom. I use rz sz for
zmodem. Where do I get the files for kermit?
</STRONG></P>
<P><STRONG>
Regards,
Deepu
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Look at <A HREF="http://www.columbia.edu/kermit"
	>http://www.columbia.edu/kermit</A> for canonical information
about all the official Kermit packages, and at:
<A HREF="http://www.columbia.edu/kermit/gkermit.html"
	>http://www.columbia.edu/kermit/gkermit.html</A> for information
specifically about the GPL kermit package (which implements
the file transfer protocol without the scripting, dialing and
other features of C-Kermit).
</BLOCKQUOTE>
<BLOCKQUOTE>
(Note: C-Kermit can also be used as a 'telnet' or 'rsh' client
with a scripting language, and many other useful features.  It
is a full featured communications package.  Recent versions have
even added Kerberos support!)
</BLOCKQUOTE>

<!-- sig -->


<!-- end 17 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/18"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 18 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	><TT>./script:</TT> No such file or directory</H3>


<p><strong>From Alex Brak on Fri, 14 Apr 2000  
</strong></p>
<!-- ::
<TT>./script:</TT> No such file or directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
I'm having a problem with my linux box, and can't for the life of me
figure out what's wrong. Here are the symptoms:
</STRONG></P>

<pre><strong>&gt; server:~/scripts$ whoami
&gt; alex
&gt; server:~/scripts$ ls -al ./script
&gt; - -rwxr-----   1 alex  home        43747 Apr 10 22:31 ./script*
&gt; server:~/scripts$ ./script
&gt; bash: ./script: No such file or directory
</strong></pre>
<P><STRONG>
(note: the '*' at the tail end of the file listing is merely a symbol
specifying that its an executable file. this is not part of the
filename)
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Technically that "file type marker" is the result of using the
<TT>-F</TT> option to 'ls'
</BLOCKQUOTE>
<BLOCKQUOTE>
The most likely cause of this problem is the #! (shebang) line
that should be at the beginning of your script.  If that is
incorrect then it is common to get this error, your shell is
telling you that it can't find the script's interpreter.
</BLOCKQUOTE>
<BLOCKQUOTE>
If '<TT>./script</TT>' was a binary executable thenI'd also suggest looking
for missing shared libraries.  In fact, it's possible that your
shebang line is pointing to some interpreter (<TT>/usr/local/ksh</TT> or
something) which is present, and executable, but is missing some
shared library.  It is even possible that a shared library depends
on another, and that this is what is missing.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
As you can see from the above, I'm the owner of the file in question,
and have execute permission on it. The file exists. Yet bash claims
the file is not there. I've tried with shells other than bash (every
other shell available on my system, including csh, tcsh, ash, and
zsh). I've even tried executing the command
as root, to no avail.
</STRONG></P>
<P><STRONG>
This exact same problem has arisen before with another script I
wrote. I couldn't fix it then, either.
</STRONG></P>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
Check your shebang line.  It should read something like:
</CODE></BLOCKQUOTE></BLOCKQUOTE>

<blockquote><pre>#!/bin/sh
</pre></blockquote>
<BLOCKQUOTE>
Note: there are NO SPACES in this line.  Do NOT put a space
between the #! and the interpreter's name.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I'd like to also note that this problem arises intermittently: just
after finishing ~/scripts/script I created another script named
"test", did chmod u+x on it and it executed just fine.
~scripts/script still refuses to execute, though :( Please note that I've
tried renaming the file. I've also tried moving it to another location on
the directory tree. None of these have helped.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
A text file without any shebang line, which is marked as executable
will be executed through some magic that is dependent on the shell
wfrom which it is being invoked.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'll probaby get this wrong in the details but the process works
something like this:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
You issue a command.  The shell tries to simply<TT> exec()</TT> it (after
performing the command line parsing necessary to expand any file
"globs" and replace any shell variables, command substitution
operators, parameter expansion, etc).  If that execution fails the
shell may attempt to call it with $SHELL <TT>-c</TT> (or it might do something
a bit different: that seems to be shell dependent).
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
Notice that the behaviour in the first case is well-defined.  Linux
has a binfmt_script module (usually compiled/linked statically into
your kernel) which handles a properly formatted shebang line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I have not experienced any other problems with my system that I'm
aware of. Does anyone know what could be causing this, or how to fix
the problem?
</STRONG></P>
<P><STRONG>
I'm running linux 2.2.14 on my Pentium 120, with a <A HREF="http://www.slackware.org/">Slackware</A>
distribution. The file in question exists on the root partition, in
an ext2 file system, which the kernel supports. If there's any other
relevant information I have provided, please don't hesitate to ask.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
If you were getting "operation not permitted" I'd suggest checking your
mount options to see if the filesystem was mounted 'noexec' (which
would be a very badd idea for your root fs).  If you were getting
a message like "cannot execute binary" then I'd think that maybe
you had an old a.out binary and a kernel without the a.out binfmt
support.
</BLOCKQUOTE>
<BLOCKQUOTE>
But I'm pretty sure that you're having a problem with your shebang
line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Thanks,
Alex
</STRONG></P>

<!-- sig -->


<!-- end 18 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 18 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	><TT>./script:</TT> No such file or directory</H3>


<p><strong>From Alex Brak on Sun, 16 Apr 2000  
</strong></p>
<BLOCKQUOTE>
Sport on. Many thanks.
</BLOCKQUOTE>
<BLOCKQUOTE>
Alex
</BLOCKQUOTE>
<BLOCKQUOTE>
<TT>-----Original</TT> Message-----
From: Jim Dennis [mailto:<A HREF="mailto:jimd@starshine.org"
	>jimd@starshine.org</A>]
Sent: Saturday, 15 April 2000 9:07 AM
To: Alex Brak
Cc: <A HREF="mailto:star@starshine.org"
	>star@starshine.org</A>; <A HREF="mailto:jdennis@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com"
	>jdennis@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com</A>; <A HREF="mailto:tdavey@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com"
	>tdavey@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com</A>;
<A HREF="mailto:bneely@linuxcare.com"
	>bneely@linuxcare.com</A>; <A HREF="mailto:sg@linuxcare.com"
	>sg@linuxcare.com</A>
Subject: Re: shell cannot see an existing file
</BLOCKQUOTE>
<!-- ::
<TT>./script:</TT> No such file or directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
I'm having a problem with my linux box, and can't for the life of me
figure out what's wrong. Here are the symptoms:
</STRONG></P>

<pre><strong>&gt; server:~/scripts$ whoami
&gt; alex
&gt; server:~/scripts$ ls -al ./script
&gt; - -rwxr-----   1 alex  home        43747 Apr 10 22:31 ./script*
&gt; server:~/scripts$ ./script
&gt; bash: ./script: No such file or directory
</strong></pre>
<P><STRONG>
(note: the '*' at the tail end of the file listing is merely a symbol
specifying that its an executable file. this is not part of the
filename)
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Technically that "file type marker" is the result of using the
<TT>-F</TT> option to 'ls'
</BLOCKQUOTE>
<BLOCKQUOTE>
The most likely cause of this problem is the #! (shebang) line
that should be at the beginning of your script.  If that is
incorrect then it is common to get this error, your shell is
telling you that it can't find the script's interpreter.
</BLOCKQUOTE>
<BLOCKQUOTE>
If '<TT>./script</TT>' was a binary executable thenI'd also suggest looking
for missing shared libraries.  In fact, it's possible that your
shebang line is pointing to some interpreter (<TT>/usr/local/ksh</TT> or
something) which is present, and executable, but is missing some
shared library.  It is even possible that a shared library depends
on another, and that this is what is missing.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
As you can see from the above, I'm the owner of the file in question,
and have execute permission on it. The file exists. Yet bash claims
the file is not there. I've tried with shells other than bash (every
other shell available on my system, including csh, tcsh, ash, and
zsh). I've even tried executing the command
as root, to no avail.
</STRONG></P>
<P><STRONG>
This exact same problem has arisen before with another script I
wrote. I couldn't fix it then, either.
</STRONG></P>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
Check your shebang line.  It should read something like:
</CODE></BLOCKQUOTE></BLOCKQUOTE>

<blockquote><pre>#!/bin/sh
</pre></blockquote>
<BLOCKQUOTE>
Note: there are NO SPACES in this line.  Do NOT put a space
between the #! and the interpreter's name.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I'd like to also note that this problem arises intermittently: just
after finishing ~/scripts/script I created another script named
"test", did chmod u+x on it and it executed just fine.
~scripts/script still refuses to execute, though :( Please note that I've
tried renaming the file. I've also tried moving it to another location on
the directory tree. None of these have helped.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
A text file without any shebang line, which is marked as executable
will be executed through some magic that is dependent on the shell
wfrom which it is being invoked.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'll probaby get this wrong in the details but the process works
something like this:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
You issue a command.  The shell tries to simply<TT> exec()</TT> it (after
performing the command line parsing necessary to expand any file
"globs" and replace any shell variables, command substitution
operators, parameter expansion, etc).  If that execution fails the
shell may attempt to call it with $SHELL <TT>-c</TT> (or it might do something
a bit different: that seems to be shell dependent).
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
Notice that the behaviour in the first case is well-defined.  Linux
has a binfmt_script module (usually compiled/linked statically into
your kernel) which handles a properly formatted shebang line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I have not experienced any other problems with my system that I'm
aware of. Does anyone know what could be causing this, or how to fix
the problem?
</STRONG></P>
<P><STRONG>
I'm running linux 2.2.14 on my Pentium 120, with a <A HREF="http://www.slackware.org/">Slackware</A>
distribution. The file in question exists on the root partition, in
an ext2 file system, which the kernel supports. If there's any other
relevant information I have provided, please don't hesitate to ask.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
If you were getting "operation not permitted" I'd suggest checking your
mount options to see if the filesystem was mounted 'noexec' (which
would be a very badd idea for your root fs).  If you were getting
a message like "cannot execute binary" then I'd think that maybe
you had an old a.out binary and a kernel without the a.out binfmt
support.
</BLOCKQUOTE>
<BLOCKQUOTE>
But I'm pretty sure that you're having a problem with your shebang
line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Thanks,
Alex
</STRONG></P>

<!-- sig -->


<!-- end 18 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/19"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 19 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>hello</H3>


<p><strong>From Credit Future Commercial MACAU Company on Wed, 5 Apr 2000  
</strong></p>
<BLOCKQUOTE>
Hello sir
</BLOCKQUOTE>
<BLOCKQUOTE>
I installed red hat 6.1 on my system but it does not display more =
</BLOCKQUOTE>
<BLOCKQUOTE>
then 256 colours although my vga card is a 16 MB vodoo why is that  can =
you help me out here ???I have tried startx <TT>-bpp16</TT> but still my pics =
"jpegs , bmp " qualities isnt fine !!! &amp; are displayed in dots same pic =
in windows look good .
</BLOCKQUOTE>
<BLOCKQUOTE>
thanksfaisal
</BLOCKQUOTE>

<!-- end 19 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 19 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>hello</H3>


<p><strong>From Heather on Wed, 5 Apr 2000  
</strong></p>
<P><STRONG>
Hello sir
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Heather isn't a masculine name in the U.S.  I'll assume this is intended
for the Answer Guy column, and give a first shot at answering it.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I installed red hat 6.1 on my system but it does not display more then
</STRONG></P>
<P><STRONG>
256 colours although my vga card is a 16 MB vodoo why is that  can you help
me out here ???I have tried startx <TT>-bpp16</TT> but still my pics "jpegs , bmp "
qualities isnt fine !!! &amp; are displayed in dots same pic in windows look
good .
thanksfaisal
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
You have not specified what resolution under MSwin had the qualities you seek.
Under X, you must run the correct video server to match your card if you want
best performance, but you can nearly always get the screen <EM>working</EM> with a
lesser server.
</BLOCKQUOTE>
<BLOCKQUOTE>
The VGA16 server only provides 256 color service.  If this is what you are
stuck at, you might be using this.  Or, your <TT>/etc/X11/XF86Config</TT> file may
be telling it to default to this level <TT>-</TT> the command to change the default
is
startx <TT>--</TT> <TT>-bpp</TT> 16
</BLOCKQUOTE>
<BLOCKQUOTE>
with the space.  Also, startx is a shell script, and launches a particular
server... usually <TT>/usr/X11R6/bin/X</TT> which itself is a link to the real one...
and so, you may be running a server you didn't intend.
</BLOCKQUOTE>
<BLOCKQUOTE>
Good luck with your JPEGs.
</BLOCKQUOTE>

<!-- end 19 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 19 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif" 
	height="50" width="60" alt="(!) " border="0"
	>hello again</H3>


<p><strong>From fai, Answered By Heather Stern on Fri, 7 Apr 2000  
</strong></p>
<P><STRONG>
Thanks for the help it worked Finally !!!!
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Glad to hear it worked for you.  Sorry I wasn't able to reply in
email in a timely fashion <TT>-</TT> publishing deadlines, you know.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Can you help me a bit more while telling me that i want to start this
command by default startx <TT>--</TT> <TT>-bpp</TT> 32 how can i do this ????
</STRONG></P>
<P><STRONG>
thanks
Faisal
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
One way would be to creat .xserverrc in your own home directory;
you'd have to specify your X server, but then you could pass it
parameters too:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
<TT>/usr/X11R6/bin/XF86_SVGA</TT> <TT>-bpp</TT> 32
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
Assuming that's the right server for you, of course.  If startx
is just plain "getting it right" except for that itty bitty detail
of colordepth, you could instead create a bash alias or put a one-liner
shell script in your path.  I like to keep such personal scripts
in ~/bin (that's bin under my home directory).  name it something
much shorter like myX and save some typing too.
</BLOCKQUOTE>

<EM>[ <BLOCKQUOTE>
So where was Jim on this one?  Well, he liked my answer, and was
busy with other questions and stuff to do.
</BLOCKQUOTE><P>-- Heather. ]</P></EM>

<!-- end 19 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/20"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 20 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif" 
	height="50" width="60" alt="(!) " border="0"
	>Shutting Down the Ping Daemon: Revised</H3>


<p><strong>Answered By Nadeem Hasan on Mon, 03 Apr 2000  
</strong></p>
<!-- ::
Shutting Down the Ping Daemon: Revised
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
This is in reference to above question in "The answer Guy"
and its answer. The use of ipchains/ipfwadm is a bit of an
overkill to achieve this. The better way is to simply use
the following as root:
</STRONG></P>
<P><STRONG><CODE>
echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all
</CODE></STRONG></P>
<P><STRONG>
This should cause the kernel to ignore all the ping ICMP
requests.
</STRONG></P>
<P><STRONG>
Cheers,
--
Nadeem
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Just when you think you know everything.
</BLOCKQUOTE>

<!-- end 20 -->
<!--              . . . . . . . . . . . . . . . . . . .              -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 20 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Revisionist Requests</H3>


<p><strong>From Nadeem Hasan on Tue, 11 Apr 2000  
</strong></p>
<!-- ::
Revisionist Requests
~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
The Gazette still has the old description about disabling
ping echo responses. Does that mean its better than what
I suggested?
</STRONG></P>
<P><STRONG>
Nadeem 
<IMG SRC="../gx/dennis/smily.gif" ALT=":)" 
		height="24" width="20" align="middle">
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
I don't have the power to change what I've published in previous
months.  Your (better) suggestion on how to disable the Linux
kernel's ICMP echo responses (to 'ping' requests) should appear in
next month's issue.
</BLOCKQUOTE>
<BLOCKQUOTE>
Now, what was that magic <TT>/proc</TT> node again?
</BLOCKQUOTE>
<BLOCKQUOTE>
Ahh, here it is:
</BLOCKQUOTE>

<blockquote><pre>	 echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all
</pre></blockquote>
<BLOCKQUOTE>
... I'd never remember that, but the node is there and I'd
recognize the meaining from the name. (So it's in my passive
rather than active vocabulary).
</BLOCKQUOTE>
<BLOCKQUOTE>
There are some other interesting nodes there <TT>---</TT> and I think
the one about "icmp_echo_ignore_broadcasts" looks useful.
</BLOCKQUOTE>
<BLOCKQUOTE>
It would be neat if someone wanted to write up a HOWTO on
"Useful <TT>/proc</TT> Tips and Tricks" (hint, hint).  I've done some
performance tuning by tweaking and playing with some of the
entries under <TT>/proc/sys/vm</TT> (the virtual memory sysctl's), and
I know others have even done better than I could (back at
<A HREF="http://www.linuxcare.com/">Linuxcare</A>, I had to call on our <EM>real</EM> experts to help me out
awhile back for one gig).
</BLOCKQUOTE>
<BLOCKQUOTE>
I guess the tips would fall into two or three general categories:
robustness, security, and performance.  For example the
<TT>/proc/sys/kernel/cap-bound</TT> (bounding capabilities set) can be
modified to secure some facilities even from a subverted 'root'
process (like the BSD securelevel features), and I guess that
<TT>/proc/sys/vm/overcommit_memory</TT> might allow one to prevent the
system from overcommit (providing for more robust operation
at the expense of reducing our capacity to run multiple
concurrent "memory hogs" that ask for more core than they actually
need).
</BLOCKQUOTE>
<BLOCKQUOTE>
A good HOWTO would be organized by objective/situation
(Increasing File Server Performance, Limiting Damage by
Subverted and Rogue Processes (Crackers), etc) and would include
notes on the tradeoffs that each setting entails.  For example
one might disable ICMP response (for security?) but one should
be aware that anyone who has a legimate reason to access ANY
other service on your system might want to 'ping' it first to
ensure that it is reachable before they (or their programs) will
attempt to access any other service on it. (In other words it
makes no sense to disable ICMP responses on a web, mail, DNS,
FTP or other public server).
</BLOCKQUOTE>
<BLOCKQUOTE>
Unfortunately I don't have the time, nor nearly enough expertise
to write this.  There are already some notes in the Linux kernel
source trees under <TT>/usr/src/linux/Documentation/sysctl/</TT> and I
remember that someone is working on a tool to automate some of
this PowerTweak/Linux (<A HREF="http://linux.powertweak.com/news.html"
	>http://linux.powertweak.com/news.html</A>)
comes to mind.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, enough on that.
</BLOCKQUOTE>

<!-- end 20 -->
<!--     .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.     -->
<A NAME="tag/21"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 21 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif" 
	height="50" width="60" alt="(?) " border="0"
	>Remotely Executing Graphic Apps</H3>


<p><strong>From Apichai T. on Mon, 03 Apr 2000  
</strong></p>
<!-- ::
Remotely Executing Graphic Apps
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Dear sir,
</STRONG></P>
<P><STRONG>
May I ask for your advice , the steps to set up linux box to be
possible to remotely execute graphical applications.
</STRONG></P>
<P><STRONG>
Thanks and Best regards,
Jing
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
	HEIGHT="28" WIDTH="50" BORDER="0"
	>
Here's a couple of HOWTO and mini-HOWTO links:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Remote X Apps mini-HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html"
	>http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
(I've copied it's author, Vincent Zweije, on this reply).
</BLOCKQUOTE>
<BLOCKQUOTE>
I don't recommend using his example shell script from section 6.2:
</BLOCKQUOTE>

<blockquote><pre>!/bin/sh
cookie=`mcookie`
xauth add :0 . $cookie
xauth add "$HOST:0" . $cookie
exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"
</pre></blockquote>
<BLOCKQUOTE>
The problem here is that the cookie variable is exposed on these
command lines (which is world readable via <TT>/proc</TT> and the 'ps'
command).  It may also be exposed if it is exported to the
environment.  Safe handling must be done through pipes or files
(or file descriptors).  Note that the window of exposure is small
<TT>---</TT> but unnecessary.  Read the 'xauth' man page for more details.
</BLOCKQUOTE>
<BLOCKQUOTE>
Better yet: Use ssh!  (Read Vincent's HOWTO for more on that).
</BLOCKQUOTE>
<BLOCKQUOTE>
I also notice that Vincent doesn't distinguish between the session
manager and the window manager.  In practice they are almost
always the same program.  However here's the difference:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
The session manager is the one program that is started in the
foreground during the startx or xinit process.  The X server
tracks this one process ID.  When it dies, the X server takes
that as a signal to shutdown.  Any program (an 'xterm', a copy
of 'xclock' or whatever) can be the session manager.
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
The window manager is the program that receives events for the
"root window" (the X Windows System term for what other
windowing systems call the "wall paper" or "desktop" or
"backdrop").  There's also quite a bit more to what the window
manager does.  You can only run one window manager on any X
server at any time.  Window managers (can?) implement a number
of APIs that are unique to them <TT>---</TT> so you can just use "any"
X program as your window manager.
</BLOCKQUOTE>
<BLOCKQUOTE>
It's a subtle distinction since almost everybody uses their window
manager as their session manager.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note:  If you're troubleshooting X connections keep in mind that
the client must be able to connect to the server via the
appropriate socket.  For example, to connect to the server on :0
(localhost/unix:0) the program must be able to access the UNIX
domain socket (usually in sockets that are located in <TT>/tmp/.X11-unix/</TT>)
Obviously<TT> chroot()</TT> jails could interfere with that (though
localhost:0, which is the same as localhost/tcp:0 should still
work).
</BLOCKQUOTE>
<BLOCKQUOTE>
A subtle and rare problem might be if someone were to try running
X after building a kernel without support for UNIX domain sockets.
It's possible to build a Linux kernel with full support for TCP/IP
and yet leave out the support for UNIX domain sockets.
</BLOCKQUOTE>
<BLOCKQUOTE>
Obviously when looking at Internet domain sockets (TCP/IP) any of
the usual routing, addressing, and packet filtering issues can
interfere with your clients attempts to connect to port 6000
(or 6001, 6002, etc) on the X server host.
</BLOCKQUOTE>
<BLOCKQUOTE>
For a little more on remote access to X server look at VNC
(Virtual Network Computing from AT&amp;T Laboratories Cambridge:
<A HREF="http://www.uk.research.att.com/vnc"
	>http://www.uk.research.att.com/vnc</A>)  (VNC was originally
developed at the Olivetti Research Laboratory, which was later
acquired by AT&amp;T).
</BLOCKQUOTE>
<BLOCKQUOTE>
You don't need this to just run X clients on your X server.
However, it's useful to learn about VNC in case you need some of
the special features that it provides.
</BLOCKQUOTE>
<BLOCKQUOTE>
Another good site for finding links to lots of information about
X is at Kenton Lee's "X Sites" (<A HREF="http://www.rahul.net/kenton/xsites.html"
	>http://www.rahul.net/kenton/xsites.html</A>)
There are about 700 links located there!
</BLOCKQUOTE>
<BLOCKQUOTE>
Note that while X is currently the dominant windowing system for
Linux there are other efforts out there including "Berlin"
(<A HREF="http://www.berlin-consortium.org"
	>http://www.berlin-consortium.org</A>) and the "Y Window System"
(<A HREF="http://www.hungry.com/products/Ywindows"
	>http://www.hungry.com/products/Ywindows</A>).  I don't know how
these projects are going.  I see that the Berlin home pages have
been updated recently while the Y Window System pages seem to
have been stale since March of 1998.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, good luck.
</BLOCKQUOTE>

<!-- sig -->


<!-- end 21 -->
<H4>"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <hr> <P> 

<!-- QUICK TIPS SECTION ==================================================  -->
<center>
<H1><A NAME="tips"><IMG ALIGN=MIDDLE ALT="" SRC="../gx/twocent.gif">
More 2&#162; Tips!</A></H1> <BR>
Send Linux Tips and Tricks to <A HREF="mailto:gazette@ssc.com">
gazette@ssc.com
</A></center>

<!-- BEGIN tips -->

<P> <hr> <P> 
<!--================================================================-->
<a name="wheel"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">mouse wheel and netscape
</FONT> </H3>
Mon, 03 Apr 2000 14:03:18 -0500
<BR>From: Greg Walker &lt;<A HREF="mailto:greg.walker@vanderbilt.edu">greg.walker@vanderbilt.edu</A>&gt;

<P> This configuration may not be immediately obvious to the unseasoned
Linux user, therefore, I thought it would make a good two cent tip.
Furthermore, the information does not seem readily available (at
least I had trouble finding it).

<P> To enable the mouse wheel, place the following line in XF86Config
under the pointer section

<PRE>
ZAxisMapping 4 5
</PRE>

<P> This will allow emacs, xterm, ... to receive mouse wheel events. For
netscape, also add the following lines to .Xdefaults (be sure there
is only a newline after the "\" that ends a line.

<PRE>
Netscape*globalTranslations: #override \
   &lt;Btn5Up&gt;: LineDown() \n\
   &lt;Btn4Up&gt;:   LineUp() \n
</PRE>


 

<P> <hr> <P> 
<!--================================================================-->
<a name="allfilesys"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">2cent tip
</FONT> </H3>
Thu, 13 Apr 2000 01:17:07 +0200
<BR>From: David Pravec &lt;<A HREF="mailto:dave@anapol.cz">dave@anapol.cz</A>&gt;


<P> Hello,
For those who are changing HDDs very often, here is small ugly
 but working utility which I wrote.
It detects filesystem types of all accessible partitions and
checks/mounts them in folders named after device (hda7,hdb1,hdb3,sd1,...).

<P> So you will never have to write sequences of fdisk,fsck,mount,df...

<P> <A HREF="misc/tips/allfilesys.sh.txt">allfilesys</A> 





<P> <hr> <P> 
<!--================================================================-->
<a name="traceroute"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Traceroute Resources
</FONT> </H3>
Thu, 20 Apr 2000 22:00:27 +0300
<BR>From: Rafael Stekolshchik &lt;<A HREF="mailto:klivlend@internet-zahav.net">klivlend@internet-zahav.net</A>&gt;

<P>    Hello,

<P>    You maybe interested in checking the site
   "Tracerote Lists by States. Backbone Maps List"
<A HREF="http://cities.lk.net/trlist.html">http://cities.lk.net/trlist.html</A>

<P>    You can find there many links to the traceroute resources
   sorted by the next items:
<UL>
	<LI> Traceroute List by States
	<LI> Traceroute against Spam
	<LI> Other Traceroute Lists
	<LI> Traceroute and other tools
	<LI> Traceroute Analysis
</UL>

<P>    Other thing is the List of Backbone Maps, sorted by Geographical
   Location, also some other info about backbones.







<!-- END tips -->

<P> <hr> <P> 
<!--================================================================-->
<H4><font color="maroon">
Tips in the following section are answers to questions printed in the Mail
Bag column of previous issues.
</font></H4> 

<!-- BEGIN tips.answers -->

<P> <hr> <P> 
<!--================================================================-->
<a name="linux_from_nt"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">About Linux
</FONT> </H3>
Tue, 4 Apr 2000 10:42:08 +0300 (EET DST)
<BR>From: Marius ANDREIANA &lt;<A HREF="mailto:rocky@ss.pub.ro">rocky@ss.pub.ro</A>&gt;

<P> Hi

<BLOCKQUOTE>
	<P> I would really like to see case studies on switching to Linux form other platforms.
</BLOCKQUOTE>
Recently there was an article in LG, about a big polish hotel which
did that and pretty happy about it. Check it out.

<BLOCKQUOTE>
	<P> We currently use Windows NT Terminal Server Edition. How hard would it be to go to Linux?
</BLOCKQUOTE>
You'll have to learn a little. On NT you click several times, use some
wizards, reboot from time to time and everyhitng it's fine. If
it isn't, reinstall and it will be.
Using Linux means you also know what you are doing. You'll click
more times, even use the keyboard :), ask on irc/mail list/news about
something which you can't figure out etc. But you'll have a 
strong, performant, secure platform. 

<BLOCKQUOTE>
	<P> - We have two TSE servers with approximately 30 users each logged in on average. In total, we have about 130 users but
	it is a manufacturing plant and many people share terminals. 
</BLOCKQUOTE>
sounds to me like a perfect case for Linux :)

<BLOCKQUOTE>
	<P> - We use Citrix Metaframe, for Load Balancing and failover. Is there a product for Linux that offers this option? 
</BLOCKQUOTE>
Ah ! The Windows world, with lots of _great_ products, which improve
performance of your system, maintain it etc etc.

<P> You don't need these on Linux, because it does it by itself.
With under 200 users, I don't think you'll need more than one server.
Sure, that server won't be a Pentium PC. I'm not into hardware,
can't say too much here, but there are many options.

<BLOCKQUOTE>
	<P> - Dependability. I have to reboot my TSE servers once a week. Last week a new HP printer driver caused about 40 blue
	screens of death before we figured out what was going on. 
</BLOCKQUOTE>
I've heard that on Windows 2000 presentation by Bill Gates, he outlined
that there were machines running for even 90 days without a reset.
WOW ! ( not to mention the _new_ micro$oft _invention_, the
symbolic link )

<BLOCKQUOTE>
	<P> Will Linux be better? 
</BLOCKQUOTE>
You bet. See more articles about introduction to Linux etc.
Once you start using it, you'll love it. Try and see ;)

<P> Recently we installed ( at <A HREF="http://www.lug.ro">www.lug.ro</A> ) php, postgresql, configured
the web server (apache) without rebooting and remotely. 
And no wizards, just the shell, from an old university
text terminal. It took about 15 minutes untill I had it running. 
I'd say that's cool, isn't it ?

<P> About the uptime, here's the output of the uptime command on a
sever here in ROmania :

<PRE>
avva:~$ uptime
 10:22am up 435 days, 17:27, 7 users, load average: 1.16, 1.10, 1.02
avva:~$
</PRE>

<P> That ain't much, check 
<A HREF="http://www.uptimes.net">www.uptimes.net</A> for better results

<BLOCKQUOTE>
	<P> - Office productivity software. If we are used to MS Office, what will it be like going to something like star-office? 
</BLOCKQUOTE>
Better :) I use it from time to time to make some charts, short
paper works etc. If you're really into publishing, LaTeX is the
answer. And don't forget about the free great database engine,
PostgreSQL. (you don't keep data in an Excel sheet, don't you ?)
How about a web/desktop interface for it ? No problem !

<BLOCKQUOTE>
	<P> - Anti-virus programs? Is there an antivirus program to scan mail stores (sendmail POP server)? 
</BLOCKQUOTE>
If you use Linux and no windows at all, you won't need that. 
Besides being harder to infect a Linux system because of file perimisions
and ownership, there's a problem with anti-viruses. The viruses must
appear first, and _later_ the anti-viruses. I can't afford to wait
that delta t, both at home and at work, so I use Tripwire, an 'utility'
which scans your filesystem and based on the rules you define, makes
a database of their CRCs or something like that. If a file get's modified
you are notified acording to the rules. There's a free version of it and
a better commercial one. (see their website for more info). I use it as
an antivirus, but it's for network security.

<BLOCKQUOTE>
	<P> -Security. How good is Linux at keeping users honest? With TSE you can delete or overwrite files in the system
	directories as a user. Can't delete a system file? 
</BLOCKQUOTE>
Linux is Unix-like, which was designed from ground up for network, multi-user,
multitasking etc. So it's extremly good at it. On my PC at home, I made
more accounts for my relatives (they didn't know how to use a computer
initially), and I can happily leave them alone. Besides the graphical
interface being in my native language (and I'm proud I contribute to that)
in the worst case they can delete their personal files. They don't have the
rights for the rest :), not even each other's.
You can also make groups for different departments. Each user will have
his/her own account, which could be part of one/more departments.

<P> As I said, once you get to know Linux better, you'll delete even your
windows backups :)
You can always find help in the Linux community (but make sure you
Read Those Fine Manuals first), or even pay for commercial support.

<P> See ya around !

<P> Marius

<P> --<BR>
Your mouse has moved. In order for the change to take effect, <BR>
Windows must be restarted. Reboot now ? [OK]<BR>
<A HREF="http://www.linuxstart.com/~marius">http://www.linuxstart.com/~marius</A><BR>





<P> <hr> <P> 
<!--================================================================-->
<a name="calc_speed"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: Pentium-II Xeon and calculation speed
</FONT> </H3>
Sat, 8 Apr 2000 19:00:52 -0600 (MDT)
<BR>From: Gordon Haverland &lt;<A HREF="mailto:ghaverla@freenet.edmonton.ab.ca">ghaverla@freenet.edmonton.ab.ca</A>&gt;

<P> Another place to look for speed improvements is
custom math libraries.  A lot of FORTRAN is concerned
with linear algebra, and for  speeding up things like
LAPACK the place to start is probably getting some kind
of BLAS.  There does exist a couple of had tuned
BLAS for some Intel-386 family processors running
Linux, but what looks like the best place to get
going is something called ATLAS.  This is a package
which tries to calculate an optimal BLAS Level 1, 2
and 3 library for your machine.  It comes pretty
close to hand tuned BLAS in assembler, and can work
from C or FORTRAN calling.

<P> Gord





<P> <hr> <P> 
<!--================================================================-->
<a name="mem"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Memory greater than 64MB
</FONT> </H3>
Mon, 10 Apr 2000 17:43:53 -0500
<BR>From: bjones &lt;<A HREF="mailto:wljones@hex.net">wljones@hex.net</A>&gt;

<P> I used the "free" command on both of my computers, and found that they
were using only 64 MB of memory in Linux.  I had to use the "append"
addition in LILO to get Linux to see all of it.  It appears to be a bios
problem, and I like this simple solution.  As an aside, I never noticed
a shortage of available memory problem before the fix.  Linux worked
quite well with 64 MB and a 64 MB swap partition.  The swap partition
was never used, to my knowledge, but the manuals threatened death, doom,
and destruction if I omitted it.

<P> A quick note:  The memory used by the on-board video with the AMD K6-2
processor cannot be used by Linux.  I have 160 MB of memory on that
computer.  Attempting to use all of it caused a kernel panic at boot
time.  I use 8 MB for graphics.  Changing the append statement to use
152 MB worked.  I am sure happy about saving that boot floppy.

<H2>Your Editor wrote:</H2>

<P> I used to have to use the 'append "mem=8M"' statement, but now I don't
have to.  Which kernel are you using?  It may have been something that
changed in the 2.2 kernels.

<H2>William replied:</H2>

<P> Two computers in use:
 (1) 300 MHz K6-2, 160MB memory, S.u.S.E. 6.1, upgraded to 6.3 with a
giveaway CD-ROM, 1999 Bios that switches to an Adaptec 1520 Bios during
boot. 
(2) 100MHZ Pentium, 96 MB memory, Sam's version of Red Hat 6.0, 1996
Bios that switches to an Adaptec 2940 bios during boot.

<P> I like my computers, and am not concerned about needing an extra tweak
to reach all the memory.  Both machines are Lilo dual boot to Linux and
M$.  They are (ab)used frequently, inside and out.  Additional operating
systems that are now on a bookshelf include OS/2, MS-DOS since 1.0, and
Coherent 2 through 4.  I will probably upgrade Someday Soon, and look
forward to having "free" see all of my memory without an "append" line
in Lilo.



<H2>Your patient Editor asked:</H2>
	
<P> Which kernel is it though?  "uname -a" will tell you.


<H2>William responded:</H2>

<P> 1. K62, 2.2.13 #1 kernel ( remember, this updates S.u.S.E. 6.1, with a
lower 2.2 kernel)

<P> 2. 586, 2.2.5-13 kernel




<H2>Rick Smith &lt;<A HREF="mailto:rsmith13@tampabay.rr.com">rsmith13@tampabay.rr.com</A>&gt; confessed:</H2>

<P> Sir,

<P> After chastising Linux Gazette about not needing to put an: append "mem=xxM" statement in lilo.conf, it had to happen! I have been using
socket seven motherboards for several years and all currently have
128meg. They all run various versions of Linux: Redhat 5.2, Mandrake 6.1
and Suse 6.3.  I have not had to put an append statement in lilo.conf or
use a mem= at the Lilo prompt to get all 128meg recognized.  

<P> That is until now! I just bought a FIC SD-11 motherboard, Athlon 700 and
a new case. I took all the components: memory, drives, nic, video card,
from one of my socket seven systems and installed them in my new Athlon
system. (Please note: same drive with Suse 6.3 already installed.)
Everything seem fine until I ran: free and discovered I only had 64meg
of memory! So now, I had to put an append statement in lilo.conf to get
all 128meg recognized.  It's definitely a "bios thing".

<P> BTW:  When I upgrade a motherboard, I NEVER need to reinstall Linux but
almost always need to reinstall Win 9x.



<P> <hr> <P> 
<!--================================================================-->
<a name="free_isp"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: Free ISPs for Linux
</FONT> </H3>
Thu, 13 Apr 2000 11:53:31 -0400
<BR>From: John Ruschmeyer &lt;<A HREF="mailto:jruschmeyer@unixpros.com">jruschmeyer@unixpros.com</A>&gt;

<BLOCKQUOTE>
	<P> This isn't exactly a burning question but I'd be interested in 
	knowing if anyone in the Gazette readership knows of a free ISP 
	that supports Linux. All of the ones I've checked out so far 
	require Windows and/or Internet Explorer. 

</BLOCKQUOTE>
<P> Check out FreeWWWeb 
(<A HREF="http://www.freewwweb.com">http://www.freewwweb.com</A>). They are the only free
ISP I'm aware of which uses a stock PPP dialup and has no specific
browser requirement.

<P> Although they have a link for downloading software, you want the link
for signing up if you already have a browser.

<H2>Paul Garvey &lt;<A HREF="mailto:paul@csn.ul.ie">paul@csn.ul.ie</A>&gt; writes:</H2>

<P> Try the following link:
<A HREF="http://www.linux.ie/misc/oceanfree.html">
http://www.linux.ie/misc/oceanfree.html</A>



<P> <hr> <P> 
<!--================================================================-->
<a name="palm"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: Palm databases and TSVs
</FONT> </H3>
Tue, 25 Apr 2000 12:14:38 -0600 (MDT)
<BR>From: Michael J. Hammel &lt;<A HREF="mailto:mjhammel@graphics-muse.org">mjhammel@graphics-muse.org</A>&gt;

<P> Thus spoke Nick Bailey &lt;<A HREF="mailto:N.J.Bailey@leeds.ac.uk">N.J.Bailey@leeds.ac.uk</A>&gt;:
<BLOCKQUOTE>
	I have a question about connectivity with/via Linux.  I need to pull a
	load of stuff of the Psion, and this is done by getting the files
	converted to tab-separated values by some utilities I've got.  I have
	read and (I think) understood how to access a palm database from a
	program running on it, but there's not a lot of stuff on how to get a
	file full of TSVs onto the Palm.  I've read the connectivity howto, and
	I also understand how to upload a palm database, but its the format
	conversion between plain text and palm database which looks hard to me.
	There's no obvious tool to do it, and I can't see how in the docs or
	this book I bought.  Maybe it will become obvious when I unpack the dev
	tools?

</BLOCKQUOTE>
<P> Nah, this is a traditional DB/Spreadsheet conversion issue.  You need to go
from TSV's to CSV's (comma seperated values).  The pilot-link software can
upload some items as long as they are in CSV's.  Getting from TSV's to
CSV's is the hard part.  If you're moderately good at regular expression
handling, you could probably whip up a perl script to do it.  The CSV's
have commas between fields and any fields that have embedded commas are
enclosed in double quotes.  I think you can actually get away with using
double quotes around all fields, but I'm not sure about that.  I only did
enough work with them to get xnotes working properly (and I use the term
"properly" very loosely here).

<BLOCKQUOTE>
	<P> I'm intending to use gcc to make port over a psion app, Vorg
	http://www.polonius.demon.co.uk/Nick/Psion/software.html  (this page
	disappears soon when I change ISP).  I'm also wanting to put a CD
	database on the Palm Pilot which has a strange and complex structure, so
	I'll be writing a application to support that.  I've already bagged the
	gcc port and XCoPilot; I was wondering what else you would recommend?

</BLOCKQUOTE>
<P> To be honest, I don't write apps for the Pilot.  It was something I wanted
to do, but there just wasn't enough time in the day to get seriously
involved in it.  One has to pick certain specialties in todays world - mine
turned out to be graphics.  Ah well.  Maybe someday.

<BLOCKQUOTE>
	<P> Thanks a lot for your help, however short.  Even "look at the xnotesplus
	source here" would be a help.

</BLOCKQUOTE>
<P> Ick - the xnotes source probably wouldn't help much.  It's just an ugly
wrapper around pilot-link tools (yep, a bunch of execv's and the like).
But I think if you can write your parser to go from TSV's to CSV's you'll
be on your way.




<P> <hr> <P> 
<!--================================================================-->
<a name="pilot"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: help setting up pilot-link
</FONT> </H3>
Tue, 25 Apr 2000 12:24:00 -0600 (MDT)
<BR>From: Michael J. Hammel &lt;<A HREF="mailto:mjhammel@graphics-muse.org">mjhammel@graphics-muse.org</A>&gt;

<P> Thus spoke Jon D. Slater &lt;<A HREF="mailto:JSlater@qualcomm.com">JSlater@qualcomm.com</A>&gt;


<BLOCKQUOTE>
	I've successfully downloaded and install pilot-link-0.9.0-8.
	I didn't find much documentation.  I'm having trouble communicating w/
	my palm.
	
	I have both a serial cradle and a USB cradle, and I can't get either one
	to work.
	
	I'm using RedHat 6.1 on a P-II/333 machine.
	
	Do you know of a good resource for connecting to my PC?

</BLOCKQUOTE>
<P> There is a fair amount online.  I know I wrote an article for Linux Journal
a year or two back about how to connect use the pilot-link software with
your Pilot's serial cradle.  Search the Linux Journal site
(www.linuxjournal.com) - I know it's online there somewhere.  I think they
had another article on the same subject earlier this year or maybe late
last year.

<P> I can't speak for the USB cradle, since I've never tried one of those, but
the serial cable is pretty straight forward.  First make sure you know
which serial port you're connecting to.  Then set a couple of environment
variables from the command line:

<PRE>
% export PILOTPORT=/dev/ttyS0
% export PILOTRATEW600
</PRE>

<P> The first one tells the pilot-link software what serial port to use.  The
second tells it what speed to transfer data at.  I think you can set this
to a higher baud rate.  I just happen to use this one because I know it
works for me.

<P> Now you can just run the pilot link commands:

<PRE>
% pilot-xfer -b /tmp/pilot-backup
</PRE>

<P> That would backup your pilot to a directory called "/tmp/pilot-backup".  I
can't remember if it will create the directory for you, so you're better off
making the directory yourself before hand.




<P> <hr> <P> 
<!--================================================================-->
<a name="pilot"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Other markup languages (troff)
</FONT> </H3>
Wed, 26 Apr 2000 22:57:31 +1000 (EST)
<BR>From: Murray Adelman &lt;<A HREF="mailto:murray@ics.mq.edu.au">murray@ics.mq.edu.au</A>&gt;

Thanks Matej.

Here are two troff sites.  The first is where to get the original Bell
documents.  The second is a new one and I haven't looked into it much.

<UL>
        <LI> <A HREF="http://plan9.bell-labs.com/7thEdMan/vol2/tbl">
http://plan9.bell-labs.com/7thEdMan/vol2/tbl</A>

        <LI> <A HREF="http://groff.ffii.org/">http://groff.ffii.org/</A>
</UL>

You might also want to look in on the newsgroups comp.text and
gnu.groff.bug .

in which troff problems are discussed.  The second is devoted to
problems with groff; but a lot of the discussion applies to any *roff.


<P> <hr> <P> 
<!--================================================================-->
<a name="pilot"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">KPPP: Users required to enter root-password?
</FONT> </H3>
Fri, 28 Apr 2000 21:44:20 +1000
<BR>From: "Steve &amp; Dee McInerney" &lt;<A HREF="mailto:stedee@bigpond.com">stedee@bigpond.com</A>&gt;

<BLOCKQUOTE>
I have just installed version 6.1 and set up my modem to dial out to my ISP.
However, when I log on as a user and press KDE&gt;Internet&gt;kppp a pop-up box
opens up and wants me to enter the root-password! This does not seem right.
is there a way to avoid having to enter the root pass word when logged on as
a non-root user?
</BLOCKQUOTE>

The way I've solved this one was to modify the /etc/pam.d/kppp file to
include the line at the beginning of the file:
<PRE>
auth       sufficient   /lib/security/pam_console.so
</PRE>




<!-- END tips.answers -->



<!-- *** BEGIN copyright *** -->
<P> <hr> <P> 
<H5 ALIGN=center>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.
Copyright &copy; 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Graphical Programs</font></H1>
<H4>By <a href="mailto:baptista@linuxsolutions.com.br">Paulo Henrique Baptista de Oliveira</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




<BLOCKQUOTE> <EM>
	[This survey of 3D graphics programs is taken from a series by Paulo
	Baptista of OLinux.  You will see that some of the raytraced images are
	breathtaking.  To preserve the integrity of the article, I have left
	it in its original format.  Please disregard the "Part II" and the
        citations of other articles: we will have more articles by Mr Baptista,
        but not necessarily in the same order as the original series.
	
	<P> More articles can be found on the OLinux site,
	<A HREF="http://www.olinux.com.br">http://www.olinux.com.br</A> 
	(Portuguese), which also has many other resources for Linux users.  
	Work is underway on an English-language site; the Interviews
	section 
	(<A HREF="http://www.olinux.com.br/interviews">http://www.olinux.com.br/interviews</A>)
	is already operational.  -Ed.]
</EM> </BLOCKQUOTE>

<CENTER><FONT SIZE="+1">
<A HREF="gx/baptista/index.html">Read the article now</A>
</FONT></CENTER>




<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Paulo Henrique Baptista de Oliveira<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Introduction to UNIX Assembly Programming</font></H1>
<H4>By <a href="mailto:konst@linuxassembly.org">Konstantin Boldyshev</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->





<P>
<EM>This document is intended to be a tutorial, showing how to write
a simple assembly program in
several UNIX operating systems on IA32 (i386) platform.
Included material may or may not be applicable
to other hardware and/or software platforms.
Document explains program layout, system call convention,
and build process.
It accompanies Linux Assembly HOWTO, which may be of your interest as well,
though is more Linux specific.</EM>
<P>
v0.3, April 09, 2000
<HR>

<H2><A NAME="s1">1. Introduction</A></H2>

<H2><A NAME="ss1.1">1.1 Legal blurb</A>
</H2>

<P>Copyright &copy; 1999-2000 Konstantin Boldyshev.
Permission is granted to copy, distribute and/or modify
this document under the terms of the GNU
<A HREF="http://www.gnu.org/copyleft/fdl.html">Free Documentation License</A>,
Version 1.1 or any later version published by the Free Software Foundation.
<P>
<H2><A NAME="ss1.2">1.2 Obtatining this document</A>
</H2>

<P>The latest version of this document is available from
<A HREF="http://linuxassembly.org/intro.html">http://linuxassembly.org/intro.html</A>.
If you are reading a few-months-old copy,
please check the url above for a new version.
<P>
<H2><A NAME="ss1.3">1.3 Tools you need</A>
</H2>

<P>You will need several tools to play with programs included in this tutorial.
<P>First of all you need assembler (compiler).
As a rule modern UNIX distribution includes <CODE>gas</CODE> (GNU Assembler),
but all examples specified here use another assembler -- <CODE>nasm</CODE> (Netwide Assembler).
You can download it from the 
<A HREF="http://www.cryogen.com/Nasm/">nasm page</A>,
it comes with full source code.
Compile it, or try to find precompiled binary for your OS;
note that several distributions (at least Linux ones)
already have <CODE>nasm</CODE>, check first.
<P>Second, you need linker -- <CODE>ld</CODE>, since <CODE>nasm</CODE> produces only object code.
Any distribution should embrace <CODE>ld</CODE>.
<P>If you're going to dig in, you should also install include files for your OS,
and if possible, kernel source.
<P>Now you should be ready to start, welcome.. 
<P>
<HR>
<H2><A NAME="s2">2. Hello, world!</A></H2>

<P>
<P>Now we will write our program, classical &quot;Hello, world&quot; (hello.asm). 
You can download its sources and binaries 
<A HREF="http://linuxassembly.org/intro/hello.tgz">here</A>.
But before let me explain several basics.
<P>
<H2><A NAME="ss2.1">2.1 System call</A>
</H2>

<P>Unless program is just implementing some math algorithms in assembly,
it will deal with such things as getting input, producing output,
and exiting. Here comes a need to call some OS service.
In fact, programming in assembly language is quite the same in different OSes,
unless OS services are touched.
<P>There are two common ways of performing a system call in UNIX OS:
trough the C library (libc) wrapper, or directly.
<P>Using or not using libc in assembly programming is more a question
of taste/belief than something practical.
Libc wrappers are made to protect program from possible system call convention change,
and to provide POSIX compatible interface, if kernel lacks it for some call.
However usually UNIX kernel is more or less POSIX compliant,
this means that syntax of most libc &quot;system calls&quot; exactly
matches syntax of real kernel system calls (and vice versa).
But main drawback of throwing libc away is that are loosing several functions
that are not just syscall wrappers, like printf(), malloc() and similar.
<P>This tutorial will show how to use <B>direct</B> kernel calls,
since this is the fastest way to call kernel service;
our code is not linked to any library,
it communicates with kernel directly.
<P>Things that differ in different UNIX kernels
are set of system calls and system call convention
(however as they strive for POSIX compliance, there's a lot of common between them).
<P><EM>Note for (former) DOS programmers: so, what is that system call?
Better to explain it in such a way:
if you ever wrote a DOS assembly program (and most IA32 assembly programmers did),
you remember DOS services <CODE>int 0x21, int 0x25, int 0x26</CODE> etc..
This is what can be designated as system call.
However the actual implementation is absolutely different,
and this doesn't mean that system calls necessary are done via some interrupt.
Also, quite often DOS programmers mix OS services with BIOS services
like <CODE>int 0x10</CODE> or <CODE>int 0x16</CODE>, and are very surprised when they fail
to perform them in UNIX, since these are not OS services).</EM>
<P>
<H2><A NAME="ss2.2">2.2 Program layout</A>
</H2>

<P>As a rule, modern IA32 UNIXes are 32bit (*grin*), run in protected mode,
have flat memory model, and use ELF format for binaries.
<P>Program can be divided into sections (or segments):
<CODE>.text</CODE> for your code (read-only),
<CODE>.data</CODE> for your data (read-write),
<CODE>.bss</CODE> for uninitialized data (read-write);
actually there can be few other, as well as user-defined sections,
but there's rare need to use them and they are out of our interest here.
Program must have at least <CODE>.text</CODE> section.
<P>Ok, now we'll dive into OS specific details.
<P>
<H2><A NAME="ss2.3">2.3 Linux</A>
</H2>

<P>System calls in Linux are done through int 0x80.
(actually there's a kernel patch allowing system calls to be done
via <EM>syscall (sysenter)</EM> instruction on newer CPUs, but this
thing is still experimental).
<P>Linux differs from usual UNIX calling convention,
and features &quot;fastcall&quot; convention
for system calls (it resembles DOS).
System function number is passed in <CODE>eax</CODE>,
and arguments are passed through registers, not the stack.
There can be up to five arguments in <CODE>ebx, ecx, edx, esi, edi</CODE> consequently.
If there's more than five arguments, they are simply passed though the
structure as first argument.
Result is returned in <CODE>eax</CODE>, stack is not touched at all.
<P>System call function numbers are in sys/syscall.h,
but actually in asm/unistd.h,
some documentation is in the 2nd section of manual
(f.e. to find info on <CODE>write</CODE> system call, issue <CODE>man 2 write</CODE>).
<P>There are several attempts to made up-to-date documentation of Linux system calls,
examine URLs in the 
<A HREF="#references">references</A>.
<P>So, our Linux program will look like:
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
section .text
    global _start                       ;must be declared for linker (ld)

msg     db      'Hello, world!',0xa     ;our dear string
len     equ     $ - msg                 ;length of our dear string

_start:                 ;we tell linker where is entry point

        mov     edx,len ;message length
        mov     ecx,msg ;message to write
        mov     ebx,1   ;file descriptor (stdout)
        mov     eax,4   ;system call number (sys_write)
        int     0x80    ;call kernel

        mov     eax,1   ;system call number (sys_exit)
        int     0x80    ;call kernel
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>As you will see futther, Linux syscall convention is the most compact one.
<P>Kernel source references: 
<UL>
<LI>arch/i386/kernel/entry.S</LI>
<LI>include/asm-i386/unistd.h</LI>
<LI>include/linux/sys.h</LI>
</UL>
<P>
<P>
<H2><A NAME="ss2.4">2.4 FreeBSD</A>
</H2>

<P>FreeBSD has &quot;usual&quot; calling convention,
when syscall number is in eax, and parameters are on the stack
(the first argument is pushed the last).
System call is to be performed through the <B>function call</B> to a
function containing <CODE>int 0x80</CODE> and <CODE>ret</CODE>, not just <CODE>int 0x80</CODE> itself
(return address MUST be on the stack before <CODE>int 0x80</CODE> is issued!).
Caller must clean up the stack after call.
Result is returned as usual in <CODE>eax</CODE>.
<P>Also there's an alternate way of using <CODE>call 7:0</CODE> gate instead of <CODE>int 0x80</CODE>.
End-result is the same, not counting increase of program size,
since you will also need to <CODE>push eax</CODE> before,
and these two instructions occupy more bytes.
<P>System call function numbers are in sys/syscall.h,
documentation is in the 2nd section of man.
<P>Ok, I think the source will explain this better:
<P><EM>Note: Included code may run on other *BSD as well, I think.</EM>
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
section .text
    global _start                       ;must be declared for linker (ld)

msg     db      "Hello, world!",0xa     ;our dear string
len     equ     $ - msg                 ;length of our dear string

_syscall:               
        int     0x80            ;system call
        ret

_start:                         ;tell linker entry point

        push    dword len       ;message length
        push    dword msg       ;message to write
        push    dword 1         ;file descriptor (stdout)
        mov     eax,0x4         ;system call number (sys_write)
        call    _syscall        ;call kernel

                                ;actually there's an alternate
                                ;way to call kernel:
                                ;push   eax
                                ;call   7:0

        add     esp,12          ;clean stack (3 arguments * 4)

        push    dword 0         ;exit code
        mov     eax,0x1         ;system call number (sys_exit)
        call    _syscall        ;call kernel

                                ;we do not return from sys_exit,
                                ;there's no need to clean stack
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>Kernel source references:
<UL>
<LI>i386/i386/exception.s</LI>
<LI>i386/i386/trap.c</LI>
<LI>sys/syscall.h</LI>
</UL>
<P>
<H2><A NAME="ss2.5">2.5 BeOS</A>
</H2>

<P>BeOS kernel is using &quot;usual&quot; UNIX calling convention too.
The difference from FreeBSD example is that you call <CODE>int 0x25</CODE>.
<P>On information where to find system call function numbers and other
interesting details, examine 
<A HREF="#references">asmutils</A>,
especially os_beos.inc file.
<P><EM>Note: to make <CODE>nasm</CODE> compile correctly on BeOS you need
to insert <CODE>#include &quot;nasm.h&quot;</CODE> into <CODE>float.h</CODE>,
and <CODE>#include &lt;stdio.h&gt;</CODE> into <CODE>nasm.h</CODE>.</EM>
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
section .text
    global _start                       ;must be declared for linker (ld)

msg     db      "Hello, world!",0xa     ;our dear string
len     equ     $ - msg                 ;length of our dear string

_syscall:                       ;system call
        int     0x25
        ret

_start:                         ;tell linker entry point

        push    dword len       ;message length
        push    dword msg       ;message to write
        push    dword 1         ;file descriptor (stdout)
        mov     eax,0x3         ;system call number (sys_write)
        call    _syscall        ;call kernel
        add     esp,12          ;clean stack (3 * 4)

        push    dword 0         ;exit code
        mov     eax,0x3f        ;system call number (sys_exit)
        call    _syscall        ;call kernel
                                ;no need to clean stack
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss2.6">2.6 Building binary</A>
</H2>

<P>
<P>Building binary is usual two-step process of compiling and linking.
To make binary from our hello.asm we must do the following:
<P>
<HR>
<PRE>
$ nasm -f elf hello.asm         # this will produce hello.o object file
$ ld -s -o hello hello.o        # this will produce hello executable
</PRE>
<HR>
<P>That's it. Simple.
Now you can launch hello program by entering <CODE>./hello</CODE>, it should work.
Look at the binary size -- surprised?
<P>
<HR>
<H2><A NAME="references"></A> <A NAME="s3">3. References</A></H2>

<P>I hope you enjoyed the journey. If you get interested in assembly
programming for UNIX, I strongly encourage you to visit
<A HREF="http://linuxassembly.org">Linux Assembly</A>
for more information, and download
<A HREF="http://linuxassembly.org/asmutils.html">asmutils</A> package,
it contains a lot of sample code.
For comprehensive overview of Linux/UNIX assembly programming refer to the 
<A HREF="http://linuxassembly.org/howto.html">Linux Assembly HOWTO</A>.
<P>Thank you for your interest!





<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Konstantin Boldyshev<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">HelpDex</font></H1>
<H4>By <a href="mailto:shane_collinge@yahoo.com">Shane Collinge</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




Carol's new colleague Violet--Vi for short:
<IMG ALT="names.jpg" SRC="gx/collinge/names.jpg" 
	WIDTH="750" HEIGHT="302">
<BR CLEAR="all">

<IMG ALT="parallel.jpg" SRC="gx/collinge/parallel.jpg" 
	WIDTH="750" HEIGHT="305">
<BR CLEAR="all">

<IMG ALT="oreilly.jpg" SRC="gx/collinge/oreilly.jpg" 
	WIDTH="750" HEIGHT="299">
<BR CLEAR="all">

<IMG ALT="stay.jpg" SRC="gx/collinge/stay.jpg" 
	WIDTH="750" HEIGHT="299">
<BR CLEAR="all">

<IMG ALT="zero.jpg" SRC="gx/collinge/zero.jpg" 
	WIDTH="750" HEIGHT="299">
<BR CLEAR="all">

<P> More <EM>HelpDex</EM> cartoons are on Shane's web site,
<A HREF="http://mrbanana.hypermart.net/Linux.htm">
http://mrbanana.hypermart.net/Linux.htm</A>.




<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Shane Collinge<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Miguel de Icaza on Gnome and His New Company HelixCode</font></H1>
<H4>By <a href="mailto:frc@linuxsolutions.com.br">Fernando Ribeiro Corr&ecirc;a</a></H4>
<H4><EM>Originally published at <A HREF="http://www.olinux.com.br/interviews/11/en">
www.olinux.com.br/interviews/11/en</A><BR>
A Portuguese version is at <A HREF="http://www.olinux.com.br/entrevistas/11">
http://www.olinux.com.br/entrevistas/11</A></EM></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




<P> <EM>A few years ago, Miguel Icaza has started Gnome  inspired by GNU and its
Public License. Now, Gnome has grow to be a Project with hundreds of volunteers
around the world. Recently, he started HelixCode, a company dedicated to
provide the latest "features, improvements, and enhancements" of Helix Gnome
distribuiton.</EM>

<P> <b>OLinux: Where were you born? How old are you? Where did you study and
graduate from college?</b>

<P> <b>Miguel de Icaza</b>: I was born in Mexico City, and I am 27 years old
this year.

<P> I did study at The National and Autonomous University of Mexico (UNAM), I
did enroll for the Math major degree, but I dropped out of college half-way
trough the degree.

<P> <b>OLinux: How did you come with the idea of Gnome Project? Was it a sort of insight?</b>

<P> <b>Miguel de Icaza</b>: There were various things that played a role on this.  

<P> A few weeks before the GNOME project had been launched, I had visited
Microsoft, and got a chance to learn about their component architectu
(COM and Active-X) and how it worked.

<P> The idea of a component system fascinated me, and Federico and I
started working on specing out this project, we got the name (GNOME)
and did some work on it, but it was not finished, as I was working on
the Linux/SGI port with Ralf and Federico was back then the GIMP
maintainer. 

<P> Then KDE appeared on the scene, and we were all very excited with the
project, and although the license was known to have a few problems, we
did not pay attention initially.  Later, when talking to Richard
Stallman and Erik Troan, we realized how bad the license for Qt (the
underlying library for KDE was).

<P> Also, Gtk+ was the GUI toolkit for the GIMP, one of the most
successful Free Software/Open Source projects ever done, and many
contributors were joining the Gtk+ effort.

<P> <b>OLinux: What is the main purpose of Gnome and how far is it to achieve its goals? </b>

<P> <b>Miguel de Icaza</b>: GNOME is trying to bring new and missing technologies to free systems,
in particular GNU/Linux, but GNOME works on pretty much every Unix out
there. 

<P> We have gone a long distance.  GNOME currently provides:

<P> 1. A user friendly desktop, with the common abstractions that  people expect from a desktop.

 <P> 2. A number of tools to get work done on a computer by regular users (non hacker, non-sysadmin kind of users).

 <P> 3. Productivity applications (The drawing program Gimp, the Diagram program Dia, the Gnumeric spreadsheet, the Vector drawing program SodiPodi, the Gnome Calendar)

 <P> 4. Development tools: GNOME ships with various development  tools for rapid application development (Glade, a GUI  designer), memprof (for profiling, detecting memory leaks and improving memory allocation patterns in applications)

<P> 5. Development libraries: we provide libraries for various tasks: GUI application creation (the Gtk+ library); An application framework (The GNOME libraries); XML parsing;  uniform access to resources; asyncronous IO; a unified  printing architecture; a CORBA implementation; unified  image loading and manipulation and various more


 <P> 6. The Bonobo component architecture: a system for creating reusable components.  The component architecure is built on top of CORBA, and it enables people to create compound
 documents.  

<P> This is probably one of the most exciting projects in GNOME  right now, as it will help us create more complex applications that are easier to use, easier to maintain, easier to grow and will enable more people to join the project.

<P> Bonobo is what GNOME was originally thought to be.

<P> 7. A team of contributors devoted to making better software. 
           
<P> <b>OLinux: Gnome has grown to be a big Project with hundreds of people involved and programs being develped, how do you manage to control all of that? How many coordenators are directly involed with Gnome daily activities? How many people are involved, adding developeers and volunteers? Give those numbers for the past few years. Are there companies or organizations that sponsor and support Gnome?</b>

<P> <b>Miguel de Icaza</b>: The GNOME project consists of many various "subprojects".  Each
subproject is managed by a different person, and the structure is
pretty much the same as the one used in the Linux kernel: people
submit patches to the upstream maintainer, where the changes are
reviewed and installed into the system if they are considered to be
good. 

<P> There are about 400 people with access to the CVS repository these
days.  Contributors range from documenters, to translators to
programmers, and system administrators. 

<P> There are a few companies shipping GNOME with their operating system
distributions (Turbo Linux, Red Hat, SuSE) and they do fund some of
the work that goes into GNOME.

<P> On the other hand there is now a growing GNOME industry.  First of all
my company Helix Code has been working in providing support services
for GNOME, as well as developing high-end and high-quality
productivity applications.  We are currently developing and improving
the Evolution groupware suite and the Gnumeric spreadsheet.

<P> Evolution is a pretty ambitious project for providing a uniform, and
powerful interface to the information a user has to handle.  The idea
is to provide ways for users to find, and keep track of all their
information sources: mail, contacts, chats, instant messaging, paging
services and more.  With a pluggable architecture based on Bonobo, the
system can be extended to handle all sorts of information that needs
to be managed.

<P> Evolution is also intended to be a client for Lotus Notes and
Microsoft Exchange servers to enable easy corporate deployment of
free-software desktop systems. 

<P> Gnumeric is the other project we are developing: a Spreadsheet that is
intended to be a replacement for the proprietary offerings that
provides all the features people expect from these sort of tool. 

<P> Eazel is another company working on GNOME, they are working on the new
file manager for GNOME.

<P> And there are a few other GNOME-based startups that are filling the
various needs of the free software community, but I will let them
announce themselves. 

<P> <b>OLinux: How is Gnome integrated with the rest of Linux communities, other development projects, alliances, partnerships? Give us some names and the activities exchanged between thoe groups.</b>

<P> <b>Miguel de Icaza</b>: GNOME is part of the GNU project.  We try to work with any other free
software projects, as in the end our objective is for GNU to be a full
solution to the user needs. 

<P> <b>OLinux: You have started a HelixCode, right? What is the focus of your business? How many cds of Helixcode have been sold you downloaded from the site? Are you planning an IPO?</b>

<P> <b>Miguel de Icaza</b>: Helix Code is a company focused on making sure free software is viable
in today's world.  So we are developing free software productivity
applications under the GPL, and we are also providing consulting
services and support for other companies. 

<P> The Helix GNOME distribution is just a service to the GNOME community:
we know that it is sometimes hard to keep up with the latest advances
in the rapidly evolving GNOME project.

<P> Helix GNOME is managed by Jacob Berkman and Joe Shaw.  They are the
magicians behind providing a real-time GNOME environment for people to
use.  Now users have a chance of running the latest version of GNOME
without having to know any system administration, nor being experts.

<P> The latest GNOME with the latest features, improvements, and
enhancements is only a few clicks away from your desktop.

<P> It is hard to tell how many people have installed Helix GNOME, as
there are many mirrors of the master site.  

<P> We are planning on growing to meet the needs of the free software
market in terms of technology and usability.  

<P> Best wishes, Miguel.

<P> <b>OLinux: All OLinux user's thank you too.</b>




<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Fernando Ribeiro Corr&ecirc;a<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">KDE2 is Just Around the Corner. Are You Curious?</font></H1>
<H4>By <a href="mailto:frc@linuxsolutions.com.br">Fernando Ribeiro Corr&ecirc;a</a></H4>
<H4><EM>Originally published at <A HREF="http://www.olinux.com.br/interviews/11/en">
www.olinux.com.br/interviews/11/en</A></EM></H4>
</center>
<P> <HR> <P>  

<!-- END header -->



<P><EM>Mosfet is a key developer in KDE Project and ahead a great reponsability as the world waits for KDE2 and KOffice suite releases. Mosfet told OLinux about the details related to KDE2, its current development stage and how "KDE2 intends to compete with Windows head-on in all features".</EM>

<P> <b>OLinux: Tell us about our career: college, jobs, personal life (age, birth place)</b>

<P> <b>Mosfet</b>: Well, I'm 25 years old and was born in Chicago Il, USA. When I was a child we moved to Austin, Texas and I'm currently living in Indiana. As
far as a personal life, that is mostly just something that exists in
theory for me ;-)

<P> I went to school at Purdue University in Indiana and started doing Unix
admin professionally when I was 19. I started with Unix when I was
around 15 yrs old with a bootlegged copy of Xenix because I wanted to do
32bit graphics programming. Previously I was making DOS calls in
assembler to the extended memory manager, throwing myself in protected
mode to do calculations, then going back to real mode. Unix was pure joy
compared to that :)

<P> Once I got older my career has been pretty much swinging back and forth
between work and education. For most of the time work involving Unix has
focused on both administration of Oracle and either Digital Unix (now
Tru64) or HP/UX database clusters and custom application development for
database interface applications. Recently, with the advent of Linux and
user interfaces such as KDE, I have been involved with that and am now paid by Linux Mandrake to work on KDE2 full time.

<P> <b>Olinux: What are your responsibilities at KDE? Do you have any other jobs?</b>

<P> <b>Mosfet</b>: KDE2 is my sole focus at this point. I am responsible for widget and
window manager style engines (dynamic look and feels written in C++),
widget and window manager theme code, the plugin mechanism for the
window manager, a lot of the new panel's code is mine (although recently
Matthias Elter is working a lot on this), some of the KDE graphical
effects engine, and a new extensive image management system called
"Pixie".

<P> Of course, being free software people can pretty much choose what they
want to work on and when. The best place to see what myself and others
are currently working on is my KDE2 development webpage at
http://www.mosfet.org.

<P> <b>OLinux: How is KDE organized? Try to give us an idea  of how KDE works? How the work is coordinated and managed (servers, directories, contribution, staff payment)? ow many people are involved? What are the main problems?</b>

<P> <b>Mosfet</b>: KDE core development is based on contribution from a large group of free
software developers. KDE's core system gets several thousand commits
(developers doing stuff and making improvements) a month - you can get
exact numbers for a given month at http://lists.kde.org. This is
excluding the hundreds of applications not maintained in the KDE CVS and
part the KDE project itself. As far as the exact number of individual
authors I don't know off hand but there are a few hundred developers
registered with our source management system (CVS).

<P> If you write code and it rocks it gets into KDE. Anyone can contribute
to KDE, although each project has it's own maintainer and if you want to
do extensive work it's best to contact that person first. Once that is
done you can work either in our CVS or via patches.

<P> There is a difference between software included in the KDE core packages
(such as kdebase, kdegraphics, etc...), and those maintained by
individual authors. The core packages are largely a collaborative effort
and gets the attention of a large group of developers. Individual
packages are usually the efforts of either individuals or small groups
of people. As an application developer, the approach you take is largely
a matter of style. Do you want a potentially huge group of people fixing
things and adding features to your code or do you want to maintain
strict control over the development of your app? This largely mandates
if your going to be a core developer or maintain a separate app outside
of the core of KDE.

<P> <b>OLinux: Does any private company supports KDE? Everyone is volunteer?</b>

<P> <b>Mosfet</b>: Many companies support KDE development. Most notably Linux Mandrake, Suse, Caldera, Corel, Red Hat, and Troll Tech all have developers
dedicated to KDE - and that's just what comes to mind. There are also
several non-Linux distribution companies I know of that are acquiring
KDE developers for free software development.

<P> The difference between KDE and competing projects is KDE developer
funding seems to be spread over a wider group of Linux companies. You
don't have one or two interests controlling an important group of KDE
developers. You have a couple people working on KDE in many different
companies and collaborating with each other. A vast number of different
interests both by volunteer developers and those working on distributing
free software are represented.

<P> KDE also seems to be the choice being made by commercial application
developers coming from Windows such as Inprise/Corel. Many of these
people can't imagine doing application development in a primarly C API
as a step above what they had in Windows, even if there are bindings,
etc... The KDE/Qt API is the only one which makes sense to these people.
Combining the power of Linux/Unix systems and the powerful C++ API of
KDE is a dream compared to what they had on other platforms and what
they could get with other toolkits and bindings. This is extremely
important considering Linux's growth. If Linux continues growing at it's
current rate most of the developers will be coming from non-Unix
platforms, where C++ application development has been the standard for
compiled GUI applications for almost a decade.

<P> Of course, despite all of the above, KDE core development is maintained
and controlled by volunteers. People do it for fun, make applications
because they want to, submit patches because they like to fix things,
etc... If they are good coders and want a job developing free software,
more likely than not they could get it with KDE.

<P> <b>OLinux: What are the main differences between KDE1 and the next release KDE2?</b>

<P> <b>Mosfet</b>: Pretty much everything ;-) The libraries have been rewritten to be more
extendable, most of the UI is configurable with XML integrated into the
core system, there is a new internet transparent I/O subsystem, a new
browser, new HTML capabilites with support for things like CSS,
bidirectional text, unicode, and soon Netscape plugins, a new window
manager, help system, configuration system, panel, a whole slew of new
widgets and classes, widget styles and themes... The list goes on and
on.

<P> The main difference is now KDE2 is heavily component based, focusing on
the browser. All of the KOffice applications (KWord, KPresenter,
KIllustrator, KSpread, KImageShop, KIllustrator, KChart, and KFormula)
as well as many other KDE applications such as the PS/PDF viewer, mpeg
and image viewers, and DVI viewers are all components now - internet
transparent and embeddable in the browser. You can even embed the
terminal application in the browser and change directories using the
arrow buttons ;-) Pretty cool. KDE easily boasts the most extensive and
complete component model support for Unix desktops.

<P> <b>OLinux: Do you consider Corba technology as a advance for KDE in matters of a
better functionality? Do you see a lot of programmers using it? Give us some advantages.</b>

<P> <b>Mosfet</b>: Well, actually we found it wasn't an advance for us ;-) The problem with
Corba is the API is not ideal and it's very difficult for new
programmers to learn. We rely on components more extensively than any
other free desktop project has attempted thus far, and the requirement
to learn Corba in order to do even trivial KDE development was a huge
restriction. AFAIK Gnome got around this by both using components less
and providing easier function specific bindings where non-Corba experts
are likely to be doing development (such as control panel applets).

<P> This did not seem reasonable or clean to us. Even though we were using
Corba for a long time (well before KDE2 development started), and had
hundreds of thousands of lines of code based on it with both KOffice and
KDE2, people started looking at other standard Unix technologies that
accomplish the same thing. Orbit (the Corba Object Request Broker used
by Gnome) was considered and was faster than the ORB we were using but
still didn't solve the problems mentioned above - which are inherent in
Corba. We then came up with the current KParts technology we are using
for components. It is all based on standard Unix libraries such as
libICE, and allows people to learn how to do fully functional components
in less than a half hour. Using KDE you get the most component features
such as browser embedding and internet transparency that are extremely
fast and require the least amount of effort. No need to purchase 1,000+
page Corba tomes at your local bookstore, you can learn it over lunch :)
Once this transition was made the development of KDE2 increased
significantly over what was occuring before (an increase of over a
thousand commits a month now usually compared to our Corba days). This
shows that we made the right choice for developers. As far as
interoperability, under the hood all the technology we use is in C and
accessible through that, XML bindings are available, and Corba
middleware is in the works. AFAIK a Java interface is also being looked
into. The interoperability argument for Corba is largely misleading
anyways, you need to do custom programming to interface legacy code with
the desktop's API's no matter what mechanism you use - it doesn't just
happen magically. Both Linux desktops introduce new component API's you
need to port to, but using KDE this is extremely easy to do without any
prior experience.

<P> You can learn more about KParts and check out the "Learn KParts in 1/2
hour" tutorial at 
<A HREF="http://developer.kde.org">http://developer.kde.org</A>. You can read a small
overview I wrote of why we chose the mechanism we did when the decision
was made a few months ago at 
<A HREF="http://www.kde.org/technology.html">
http://www.kde.org/technology.html</A>.

<P> <b>OLinux: About Qt without X, do you think it will run in all Unix's machines and influence some special feature of KDE?</b>

<P> <b>Mosfet</b>: This is an interesting new development. Troll Tech has written a version
of Qt (the base toolkit used by KDE), that can run solely off the Linux
framebuffer and doesn't require X11. Originally intended for embedded
systems, combined with virtual windowed framebuffer windows it can
potentially end up as a very low overhead KDE desktop framework. It
already offers many advanced features directly influenced by direct
framebuffer access such as anti-aliased (smoothed) fonts and alpha
channel support.

<P> As far as what varients of Unix it will run on, I currently know it
supports Linux although any Unix system with a framebuffer (such as
Solaris) shouldn't be that difficult.

<P> Nonetheless, KDE will remain supporting X11. There is no reason not to,
one of the reasons for using high level toolkits like Qt is you don't
have to deal with the lower level stuff like if your running on a
framebuffer or an X server. Also, KDE/Qt is leading the way with this
technology and we are the first people to support it with a toolkit used
by a desktop. Some users will want access to legacy and non-KDE apps and
games, and X11 is essential as a common platform where you can run
applications developed under many different toolkits. As far as people
who only use KDE applications, they may very well get a quite cool low
overhead desktop...

<P> <b>OLinux: KDE1 use to be a heavy application, now that KDE2, adding all this new technology to KDE2, do you think that a new and potent hardware will be required for users to have a good system performance?</b>

<P> <b>Mosfet</b>: Hopefully not ;-) The component model of KDE helps a lot here. When you
start KDE1 a lot of things happen like the file manager and browser are
loaded, etc... Now KDE is designed to start the absolute minimum until
you actually use something - then dynamically load what you need. A lot
still happens, but now it is mostly low level stuff like initalizing the
client server I/O system and not things like loading HTML widgets.

<P> KDE2 is still alpha and there are issues getting in the way of making
this really giving users a gain yet, but it's being worked on. KDE2 will
certainly not require any more resources than KDE1, and hopefully will
require even less.

<P> <b>OLinux: What are the better features KDE will bring to users that Windows doesn't have? Can KDE already compete with Windows2000 in terms of GUI?</b>

<P> <b>Mosfet</b>: Absolutely! KDE2 intends to compete with Windows head-on in all features
- no excuses made. We got the components, the transparent access to the
web, the modern C++ API, developer support, and the applications needed
to seriously contend for user's desktops. As far as the GUI, that is a
matter I specifically deal with and I believe ours is becoming far
superior. Although as a fan of Mac and BeOS interfaces, I feel most UI's
are superior... what will be the default look and feel of KDE2 is
drastically improved from KDE1.

<P> <b>OLinux: When KDE expect to release KOffice1.0?</b>

<P> <b>Mosfet</b>: Alongside the release of KDE2.0, which is now in a library freeze
preparing for the second alpha release. I'm not sure if there will be a
third or if after that we will go straight to betas. KDE does have a
long beta cycle though, we will not release an official version until we
are sure it works well for the majority of people. We feel that is our
responsibility to the users of KDE, who have come to expect a stable
system.

<P> <b>OLinux: How do you see the Digital Society and future of Intenet five years from now? Say something about ecommerce, wireless internet, hand held appliances briefly.</b>

<P> <b>Mosfet</b>: Eeek, a long stream of buzzwords! Hell, I don't know. We will all
probably be out of shape and unable to tolerate sunlight because of too
much time on the internet ;-) That's about all I know...

<P> <b>OLinux: Send a message to programers in Brazil that work in Free Software/Opensource projects and to OLinux user's?</b>

<P> <b>Mosfet</b>: Brazil rocks! I lost my credit rating there last year...


<BLOCKQUOTE> <EM>
	[By the way, I really like the animated image of the turning gears in
	the bottom left of the <A HREF="http://www.kde.org">KDE web site</A>.
	-Ed.]
</EM> </BLOCKQUOTE>



<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Fernando Ribeiro Corr&ecirc;a<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Linux in France: Guess MandrakeSoft's Next Move</font></H1>
<H4>By <a href="mailto:frc@linuxsolutions.com.br">Fernando Ribeiro Corr&ecirc;a</a></H4>
<H4><EM>Originally published at <A HREF="http://www.olinux.com.br/interviews/11/en">
www.olinux.com.br/interviews/10/en</A><BR>
A Portuguese version is at <A HREF="http://www.olinux.com.br/entrevistas/11">
http://www.olinux.com.br/entrevistas/10</A></EM></H4>
</center>
<P> <HR> <P>  

<!-- END header -->



<P> <EM>Linux in France: ideas and plans of a MandrakeSoft company and its
comercial operation. Mandrakes  co-founder and Vice-President Gael Duval
describes talks to OLinux about how he managed to make an international and top
seller company as the world number two Linux distribuiton in boxes sold in 1999
in less than two years and also Mandrake plans for an IPO. Will you
invest?</EM>

<P> <b>OLinux: Say something about your professional and personal background? Where
did you graduated? Brief us about your Linux career?</b>

<P> <b>Gael Duval</b>: I'm 26 years old. So no need to tell you that I didn't do much before!
I just studied computer sciences for 5 years at University in France.
In my last year I specialized in Networking &amp; Electronic Documents.
After having used UNIX a lot (Solaris/SunOS) I discovered Linux in
1995. My first Linux distribution was taking 50 diskettes!

<P> <b>OLinux: As founder of Mandrake, how the idea of a distribution came to your
mind? Were you inspired by other distributions success?</b>

<P> <b>Gael Duval</b>: This is quite easy. In 1997 I had a need of a Linux distribution which
would be easy to install and very easy to use. Red Hat was quite easy
to install, but not easy to use. So I put KDE in Red Hat, added a few
things for simplifying the users life and I released. This wouldn't
have been possible in the proprietary software world! Since that,
Mandrake has evolved on its own way and it's good that we can invent
many new concepts.

<P> <b>OLinux: When Mandrake was created officially as a company?</b>

<P> <b>Gael Duval</b>: MandrakeSoft was founded in the end of 1998.

<P> <b>OLinux: What is Mandrakes mission and strategy?</b>

<P> <b>Gael Duval</b>: We want to provide Linux to the biggest number of users. Personal
users as well as corporates. The strategy is quite clear: we want to
improve as much as possible, release the best quality possible, and
offer the largest possible variety of products on as many plateforms
as possible. That's why we will soon have an offer for the
enterprises, and that we don't limit to x86 architecture. The force of
Linux is that it runs in x86, SPARC, Alpha, PPC, Mips, 68k... That's
not the case for any other proprietary OS!

<P> <b>OLinux: Is Mandrake an internacional company? How many affiliates, distributors
and resellers Mandrake works with? By this moment, international
revenues are already significant?</b>

<P> <b>Gael Duval</b>: MandrakeSoft has been an international company from the beginning
because before it was founded, I already had many contacts all around
the world, in Europe, America, Asia, Russia... We have two main
offices: one in Europe (Paris), one in the USA (Los Angeles). We have
many online resellers (about 50 for south+north America) and two major
distributors: MacMillan Software Publishing (we have a 5 years
agreement with them), and Kasper. Of course our international revenues
are significant, especially from America.

<P> <b>OLinux: What it's your position and responsibilities at Mandrake today?</b>

<P> <b>Gael Duval</b>: Well... My official title is "Vice-President & Co-Founder - Open
Source Development".

<P> <b>OLinux: How much Mandrake has grow since then? How much revenues have grown and
what is the projection for 2000? How many Mandrake's boxes were sold
last year and will be sold in 2000? Where is located Mandrake HeadQuarters?</b>

<P> <b>Gael Duval</b>:We had a fantastic growth! In the end of 1998 we were 3 people in
MandrakeSoft. In the end of 1999 we were 40, and right now we are 70.
The first Mandrake officially shipped by MandrakeSoft was 5.3. It's
been sold at around 3000 items. Then we sold more than 200,000 6.0 +
6.1 packs. The revenues have grown consequently.

<P> <b>Gael Duval</b>: MandrakeSoft headquarters are located in Paris, France.

<P> <b>OLinux: Can you give us an idea, how hard the work is ahead of a Linux company?</b>

<P> <b>Gael Duval</b>: 16 hours a day, from Monday to Sunday. Several hundreds emails fall in
my mailbox everyday!

<P> <b>OLinux: How profitable is Linux business in France, German and Europe?</b>

<P> It's ok but not very reactive. The big Linux hype is just starting
here. Not any Linux company is on a public market in Europe yet.

<P> <b>OLinux: Give us a panorama of Linux effective and potential growth in these locations?</b>

<P> <b>Gael Duval</b>: It's quite hard to say: we do 70% of revenues in the USA. It seems
that it's just beginning in fact.

<P> <b>OLinux:Is Mandrake planning an IPO for his year?</b>

<P> <b>Gael Duval</b>: Yes.

<P> <b>OLinux: Do you have examples of companies that have deployed Linux in a large scale?</b>

<P> <b>Gael Duval</b>: Do you mean in Europe? Do you mean Mandrake Linux? If it's Mandrake
Linux, we have official contacts with 180 companies that are already
using Mandrake.

<P> <b>OLinux: Give us cases of study about Mandrake usage inside important companies.</b>

<P> <b>Gael Duval</b>: There are several listed on our website. There is for example a
manufacturing aerospace company with 400 employees which uses Mandrake
for most its intranet servers. Of this big hotel in Poland with 450
employees which uses Mandrake for its internal servers databases...

<P> But the biggest userbase of Mandrake users are individual users
because we don't have a real offer yet for enterprises (that will come
in two months).

<P> <b>OLinux: How Mandrakes supports OpenSource/Free Software organizations
around the world?</b>

<P> <b>Gael Duval</b>: Firstly we give back all our code to the community: everything is
published under the General Public License. Secondly, we often sponsor
some events (such as a big Gnome meeting recently), we give web server
space on demand, we pay some people for working on free-software (for
example, we pay a KDE developpers and a KOffice developper) etc.

<P> <b>OLinux: Nowadays, companies as Oracle are saying future of business is ecommerce
through the Internet. Do you see it this way? is Linux Mandrake
developing any products or have any plans for ecommerce? What the main
bets and guidelines?</b>

<P> <b>Gael Duval</b>: Ecommerce is effectively a big thing. We already provide many tools
that can be used to build some ecommerce services (Postgres, MySQL,
Apache, PHP...). Furthermore, a complete solution for ecommerce has
been envisaged.

<P> <b>OLinux: What Linux hasn't achieved yet in your opinion?</b>

<P> <b>Gael Duval</b>: Large recognition. This leads to a lack of end-users applications. It
will change.

<P> <b>OLinux: What is the relation between Mandrake and Redhat?</b>

<P> <b>Gael Duval</b>: Do you mean official contacts or the relation between the two products?In the very beginning, Mandrake was based in RedHat work?</b>

<P> <b>Gael Duval</b>: Yes. Mandrake 5.1 was basically RH+updates+KDE+several improvements. Nowdays, RedHat uses Mandrake many new features?</b>

<P> RH has taken several ideas from Mandrake. The biggest one is certainly
the remote update tool (which permits to update packages that have
security holes etc.) but they have rewritten it. However in 6.2, they
directly put one of our package ("rpmlint" which can make some checks
on RPM packages). Maybe one day they'll adopt our installation
procedure which is the best installation procedure recognized in the
Linux world.

<P> <b>OLinux:  How do you see this crossing relation?</b>

<P> <b>Gael Duval</b>: Great. It's not competition it's co-petition! Moreover, some of our
developers have personal contacts with RH and they work together on
improving RPM for example. Greets, Gael







<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Fernando Ribeiro Corr&ecirc;a<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Functions and aliases in bash</font></H1>
<H4>By <a href="mailto:pate@gnu.org">Pat Eyler</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




Many tutorials and introductions to bash talk about using aliases.
Unfortunately most of them don't cover functions.  This is a real
loss, because functions offer many values that aliases don't.

<h3>Aliases</h3>
<p>Aliases are simple string substitutions.  The shell looks at the first
word of a command and compares it against it's current list of
aliases.  Further, if the last character of an alias is a space, it
looks at the next word as well.  For example:
<blockquote><code>
<br>$ alias 1='echo '
<br>$ alias 2='this is an alias'
<br>$ 1 2
<br>this is an alias
<br>$
</code></blockquote>
<p>Aliases don't allow for control-flow, command line arguments, or
additional trickery that makes the command line so useful.
Additionally, the rules surrounding alias expansion are a bit tricky,
enough so that the bash(1) manpage recommends "[t]o be safe, always
put alias definitions on a separate line,  and  do  not  use alias in
compound commands".

<h3>An Intro to Functions</h3>
<p>Functions are really scripts run in the current context of the shell.
(This bit of techspeak means that a second shell is not forked to run
the function, it is run within the current shell.)  Functions really
are full scripts in and of themselves, and allow all the flexibility
and capability that entails.  

<p>You can create a functions a couple of different ways.  You can just
enter it into a file and source the file with the '.' command (either
from the command line or in your start-up scripts).  You can also just
enter the function into at the command line.  A function is only
available in a session where it has been made available through one of
these methods (or has inherited it from its parent shell).

<p>To create a function from the command line you would do something
like this:

<blockquote><code><pre>
$ gla() {
&gt; ls -la | grep $1
&gt; }
</blockquote></code></pre>

<p>This is a pretty simple function, and could be implemented as an
alias as well.  (There are reasons you might not want to do this,
we'll get to those later.)  As written, it does a long listing of the
local directory and greps for any matches for the first argument.  You
could make it more interesting by punching it through awk to find any
matching files that are larger than 1024 bytes.  This would look like:

<blockquote><code><pre>
$ gla() {
&gt; ls -la | grep $1 | awk ' { if ( $5 &gt; 1024 ) print $0 } '
&gt; }
</blockquote></code></pre>

<p>You can't do this as an alias, you're no longer just replacing gla
with the 'ls -la | grep'.  Since its written as a function, there is
no problem using the $1 (referring to the first argument to gla)
anywhere in the body of your commands.

<p>For a larger example (well, okay it's a fair amount larger),
suppose you are working on two projects with two different CVS
repositories.  You might want to be able to write a function that
allows you to set appropriate CVSROOT and CVS_ROOT variables, or clear
any values from these variables if the argument unset is given.  It
would also be nice if it would run 'cvs update' for you if given the
argument 'update'.  With aliases, you could approximate this, but only
by running multiple aliases from the command line.  Using functions,
you could create a text file containing the following:
&nbsp;&nbsp;(<A HREF="misc/eyler/setcvs.sh.txt">text version</A>)

<blockquote><code><pre>
setcvs() {
    export done="no"
    if  [ "$1" = "unset" ]  
    # we want to clear all of the variables
	then
	echo -n "Clearing cvs related variables:  "
	export CVSROOT=""
	export CVS_RSH=""
	export done="yes"
	echo "done"
    fi
    if ( pwd | grep projects/reporting &gt; /dev/null &amp;&amp; \ 
       [ "$done" != "yes" ] )
    # if we're in the reporting area, and we're not already done   
	then 
	echo -n "Setting up cvs for reporting project:  "
	export CVSROOT="issdata:/usr/local/cvs/"
	export CVS_RSH="ssh"
	export done="yes"
	echo "done"
    fi
    if ( pwd | grep projects/nightly  &gt; /dev/null &amp;&amp; \ 
       [ "$done" != "yes" ] )
    # if we're in the nightly area, and we're not already done
	then
	echo -n "Setting up cvs for nightly project:  "
	export CVSROOT="/home/cvs/"
	export done="yes"
	echo "done"
    fi
    if  [ "$1" = "update" ]
    # we want to update the current tree from the cvs server after
    # setting up the right variables 
	then       
	    if [ -z "$CVSROOT" ]
	    # if there is a zero length $CVSROOT (it has already been
	    # cleared or was never set) throw an error and do nothing 
      		then
		echo "no cvs variables set ... check your cwd and try again"
	    elif [ -n "$CVSROOT" ]
	    # if there is a $CVSROOT try and do the update
		then
		echo "updating local tree"
		cvs -q update
		echo "done"
	    fi
    fi
}
</pre></code></blockquote>
<p>Then you could enable the function and use it like this:
<blockquote><code>
<br>$ . ~/scripts/setcvs
<br>$ cd
<br>$ pwd
<br>/home/a257455
<br>$ setcvs unset
<br>Clearing cvs related variables:  done
<br>$ echo $CVSROOT
<br>
<br>$ echo $CVS_RSH
<br>
<br>$ cd projects/reporting/htdocs/
<br>$ setcvs
<br>Setting up cvs for reporting project:  done
<br>$ echo $CVSROOT
<br>issdata:/usr/local/cvs/
<br>$ echo $CVS_RSH
<br>ssh
<br>$ cd ../../nightly/
<br>$ setcvs
<br>Setting up cvs for nightly project:  done
<br>$ setcvs update
<br>Setting up cvs for nightly project:  done
<br>updating local tree
<br>done
<br>$ cd 
<br>$ setcvs unset
<br>Clearing cvs related variables:  done
<br>$ setcvs update
<br>no cvs variables set ... check your cwd and try again
<br>$ 
</code></blockquote> 

<p>Functions can do a lot more than aliases, the function above shows a
little bit of flow control, some error handling, and the ability to
use variables.  Certainly it could be improved, but it shows the
point.  Another big win is that functions can be re-used in scripts,
while aliases can't.  For example, because the function above is saved in
a file called '~/scripts/setcvs' you can write a script like:
<blockquote><code><pre>
#!/bin/bash

# a sample script

# first source the functions
. ~/scripts/setcvs

# now go to the project directories and update them from cvs
cd ~/projects/reporting/htdocs
setcvs update
cd -
cd ~/projects/nightly
setcvs update

# now go back to where you were and unset any cvs variables.
cd -
setcvs unset
</pre></code></blockquote>

<h3>A Final Warning</h3>
<p>Aliases are very useful little things, but I hope that after this
introduction, you find functions at least as interesting (and probably
even more useful).  A final caveat to both aliases and functions is
that you should never replace a standard command with an alias or a
function.  It is too easy to really hurt yourself by trying to execute
your alias when it doesn't exist.  Imagine the difference between:
<blockquote><code><pre>
$ alias rm='rm -i'
$ cd ~/scratch
$ rm *   # here the rm alias catches you and interactively
         # deletes the contents of your current directory
</pre></code></blockquote>
<br>and then later in the same session doing:
<blockquote><code><pre>
$ su -
# cd /tmp
# rm # here the rm alias no longer exists, and you whack
     # a bunch of stuff out of /tmp
</pre></code></blockquote>

<p>Happy hacking!<BR>
-pate



<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Pat Eyler<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Linux Site O' The Month: SourceForge</font></H1>
<H4>By <a href="mailto:slambo@linuxstart.com">Sean Lamb</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




<h2 ALIGN="center">
SourceForge (<a href="http://sourceforge.net">http://sourceforge.net</a>)<BR>
"Breaking down the barriers to Open Source development"</h2>

<H2>What's This?</H2>

<P> This article is the the current installment in an ongoing series of site
reviews for the Linux community.  Each month, I will highlight a Linux-related
site and tell you all about it.  The intent of these articles is to let you
know about sites that you might not have been to before, but they will all have
to do with some aspect of Linux. Now, on with the story... 

<H2>So you wanna be a developer...</h2>
Now that you've got your Linux box up and running the way you like it, it's
time to start building that killer app.  But where do you start?  You've got
an idea, and you've already written some code but you're not giving back to the
community until you've released your code for the world to see.
<P>
To get your project out, and to get the feedback that is so essential to help
find bugs and get feature suggestions, you need to first create a project
website.  It would be nice to build this site with php and mySQL so you can
add news items through a web form rather than rewriting the page everytime
you wanted to post a little tidbit.  You'd also like your project site to
have a short and simple URL, rather than stretching to Timbuktu and back,
peppered with tildes.  Your project site needs to link to a download location
where users can get a copy of your code, and you'll need a place to put the
app for the users to download.  Next, you need to create mailing lists for
your users and, if you're getting some coding help, your co-developers.  Some
of those web forums would be nice too.  Then you remember the old adage
"release early and often" and you wonder how you can get your code out to the
masses quicker after you've made changes. 
<P>
Whew!  That's a pretty tall order for some of the smaller projects.  How do
all these developers find the time, servers and money to do all this?  One
answer that is becoming more popular is SourceForge.

<h2>Project administration for the masses</h2>
SourceForge brings all of these plus more features together into one location,
and then gives away these services for free to Open Source projects.  Projects
hosted at SourceForge receive:
<ul>
<li>100Mb of web space on a server that features php, perl and cgi support.
<LI>mySQL database support.
<LI>a short default URL, http://<i>yourproject</i>.sourceforge.net, and hosting
for any properly registered domain name.
<LI>multiple mailing list administration and hosting.
<LI>working CVS repository; not just a branch in a public CVS tree, but your
own CVSROOT.
<LI>anonymous FTP space for package releases.
<LI>web-based project administration.
<LI>public and private bug trackers.
<LI>public and private discussion forums.
<LI>daily backups with offsite rotation.
</ul>
You may be thinking that you don't need everything that's included to host
your project.  Perhaps all you need for your little script is a website. 
Well, then just use the website portion of the service.  Projects are not
required to use all of the services available at all times.  They can use only
the services that they need and let the rest sit until they are needed.
<P>
The great unwashed masses need only a web browser and an internet connection
to get to your project site at SourceForge.  The portions that you make public
in your project hosting are available to everyone.  The people you designate
as developers connect to your project account with ssh1 (note, ssh2 is not yet
supported at the time this was written), so security is less of a problem.

<h2>Who's doing this and why?</h2>
SourceForge is sponsored by VA Linux Systems.  VA is paying for the whole
shebang, so project admins don't need to add a ton of ad banners to their
sites to help support the servers (only a small SourceForge logo is required
on project pages.  The site's About page answers the why question:
<blockquote>
"As open source developers ourselves, we have run into the kinds of obstacles
that still plague many would-be developers. It was our intent to remove many
of those obstacles and let developers focus on software development. (An odd
concept, but easier to get used to than you'd think.)  A suite of tools isn't
enough, though. In the end, you need the hardware power for the whole setup."
</blockquote>
The list of projects already hosted at SourceForge is impressive.  The current
categories include:
<ul>
<LI>Communications (126 projects)
<LI>Database (48 projects)
<LI>Desktop Environment (59 projects)
<LI>Education (34 projects)
<LI>Emulators (5 projects)
<LI>Games/Entertainment (160 projects)
<LI>Internet (169 projects)
<LI>Multimedia (163 projects)
<LI>Office/Business (29 projects)
<LI>Other/Nonlisted Topic (34 projects)
<LI>Printing (12 projects)
<LI>Religion (6 projects)
<LI>Scientific (86 projects)
<LI>Security (22 projects)
<LI>Software Development (174 projects)
<LI>System (166 projects)
<LI>Terminals (12 projects)
<LI>Text Editors (30 projects)
</ul>

<h2>So sign up already!</h2>
With all of these features and services in one place, and to get them all for
free for open source projects, it's easy to see why so many projects have
already signed up.  In case you're wondering, the first project to be hosted
at SourceForge is <a
href="http://sourceforge.net/project/?group_id=1">SourceForge</a>.




<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Sean Lamb<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Introduction to Shell Scripting</font></H1>
<H4>By <a href="mailto:ben-fuzzybear@yahoo.com">Ben Okopnik</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




Last month, we took a look at some basics of creating a shell script,
as well as a few of the underlying mechanisms that make it all work. This
time around, we'll see how loops and conditional execution let us direct
program flow in scripts, as well as looking at a few good shell-writing
practices.
<br>&nbsp;
<p>CONVENTIONS
<p>The only thing to note in this article are ellipses (...) - I use them
to indicate that the code shown is only a fragment, and not an entire script
all by itself. If it helps, think of each ellipse as one or more lines
of code that is not actually written out.
<br>&nbsp;
<p>LOOPS AND CONDITIONAL EXECUTION
<p>"FOR;DO;DONE"
<p>Often, scripts are written to automate some repetitive task; as a random
example, if you have to&nbsp; repeatedly edit a series of files in a specific
directory, you might have a script that looks like this:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for n in ~/weekly/*.txt</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; ae $n</font>
<br><font face="Courier New,Courier">done</font>
<p><font face="Courier New,Courier">echo "Done."</font>
<br>
<hr WIDTH="100%">
<p>or like this:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for n in ~/weekly/*.txt; do ae $n;
done; echo "Done."</font>
<br>
<hr WIDTH="100%">
<p>The code in both does exactly the same thing - but the first version
is much more readable, especially if you're building large scripts with
several levels. As good general practice in writing code, you should indent
each level (the commands inside the loops); it makes troubleshooting and
following your code much easier.
<p>The above control structure is called a 'for' loop - it tests for items
remaining in a list (i.e., 'are there any more files, beyond the ones we
have already read, that fit the "~/weekly/*.txt" template?'). If the test
result is true, it assigns the name of the current item in the list to
the loop variable ("n" in this case) and executes the loop body (the part
between "do" and "done"), then checks again. Whenever the list runs out,
'for' stops looping and passes control to the line following the 'done'
keyword - in our example, the "echo" statement.
<p>A little trick I'd like to mention here. If you want to make the "for"
loop 'spin' a certain number of times, the shell syntax can be somewhat
tiresome:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for i in 1 2 3 4 5 6 7 8 9 10 11 12
13 14 15</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo $i</font>
<br><font face="Courier New,Courier">done</font>
<br>
<hr WIDTH="100%">
<p>What a pain! If you wanted it to iterate, say, 250 times, you'd have
to type all of that out! Fortunately, there's a 'shortcut' - the "seq"
command, which prints a sequence of numbers from 1 to the given maximum,
e.g.,
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for i in $(seq 15)</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo $i</font>
<br><font face="Courier New,Courier">done</font>
<br>
<hr WIDTH="100%">
<p>This is functionally the same as the previous script. "seq" is part
of the GNU "shellutils" package and is probably already installed on your
system. There's also the option of doing this sort of iteration by using
a "while" loop, but it's a bit more tricky.
<br>&nbsp;
<p>"WHILE;DO;DONE"
<p>Often, we need a control mechanism that acts based on a specified condition
rather than iterating through a list. The 'while' loop fills this requirement:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">pppd call provider &amp;</font>
<p><font face="Courier New,Courier">while [ -n "$(ping -c 1 192.168.0.1|grep
100%)" ]</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "Connecting..."</font>
<br><font face="Courier New,Courier">done</font>
<p><font face="Courier New,Courier">echo "Connection established."</font>
<br>
<hr WIDTH="100%">
<p>The general flow of this script is: we invoke "pppd", the PPP paenguin...
I mean, daemon :), then keep looping until an actual connection is established
(if you want to use this script, replace 192.168.0.1 with your ISPs IP
address). Here are the details:
<p>1) The "ping -c 1 xxx.xxx.xxx.xxx" command sends a single ping to the
supplied IP address; note that it has to be an IP address and not a URL
- "ping" will fail immediately due to lack of DNS otherwise. If there's
no response within 10 seconds, it will print something like
<br>&nbsp;
<p><font face="Courier New,Courier">PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx):
56 data bytes</font>
<br><font face="Courier New,Courier">ping: sendto: Network is unreachable</font>
<br><font face="Courier New,Courier">ping: wrote xxx.xxx.xxx.xxx 64 chars,
ret=-1</font>
<p><font face="Courier New,Courier">--- xxx.xxx.xxx.xxx ping statistics
---</font>
<br><font face="Courier New,Courier">1 packets transmitted, 0 packets received,
100% packet loss</font>
<br>&nbsp;
<p>2) The only line we're interested in is the one that gives us the packet
loss percentage; with a single&nbsp; packet, it can only be 0% (i.e., a
successful ping) or 100%. By piping the output of "ping" through the "grep
100%" command, we narrow it down to that line, if the loss is indeed 100%;
a 0% loss will not produce any output. Note that the "100%" string isn't
anything special: we could have used "ret=-1", "unreachable", or anything
else that's unique to a failure response.
<p>3) The square brackets that contain the statement are a synonym for
the 'test' command, which returns '0' or '1' (true or false) based on the
evaluation of whatever's inside the brackets. The '-n' operator returns
'true' if the length of a given string is greater than 0. Since the string
is assumed to be contiguous (no spaces), and the line we're checking for
is not, we need to surround the output in double quotes - this is a technique
that you will use again and again in script writing. Do note that the square
brackets require spaces around them - i.e., <font face="Courier New,Courier">[-n
$STRING]</font> won't work; <font face="Courier New,Courier">[ -n $STRING
]</font> is correct. For more info&nbsp; on the operators used with 'test',
type "help test"; a number of very useful ones are available.
<p>4) As long as the above test returns "true" (i.e., as long as the "ping"
fails), the 'while' loop will continue&nbsp; to execute - by printing the
"Connecting..." string every ten seconds. As soon as a single ping is successful
(i.e., the test returns "false"), the 'while' loop will break and pass
control to the statement after "done".
<br>&nbsp;
<p>"UNTIL;DO;DONE"
<p>The 'until' loop is the reverse of the 'while' - it continues to loop
as long as the test is false, and fails when it becomes true. I've never
had the occasion to use it; the 'while' loop and the flexibility of the
available tests have sufficed for everything I've needed so far.
<br>&nbsp;
<p>"IF;THEN;[ELSE];FI"
<p>There are many times when we just need to check for the existence of
a condition and branch the execution based on the result. For those times,
we have the 'if' statement:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">...</font>
<p><font face="Courier New,Courier">if [ $BOSS="jerk" ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo 'Take this
job and shove it!'</font>
<br><font face="Courier New,Courier">else</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo 'Stick around;
the money is good.'</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">...</font>
<br>
<hr WIDTH="100%">
<p>&lt;grin&gt; I guess it's not quite that easy... but the logic makes sense.
Anyway, if a variable called BOSS has been defined as "jerk" (C programmers
take note: '=' and '==' are equivalent in a test statement - no assignment
occurs), then the first 'echo' statement will be executed. In all other
cases, the second 'echo' statement will run (if $BOSS="idiot", you'll still
be working there. Sorry about that. :). Note that the 'else' statement
is optional, as in this script fragment:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">...</font>
<p><font face="Courier New,Courier">if [ -n $ERROR ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo 'Detected
an error; exiting.'</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; exit</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">...</font>
<br>
<hr WIDTH="100%">
<p>This routine will obviously exit if the ERROR variable is anything other
than empty - but it will not affect the program flow otherwise.
<br>&nbsp;
<p>"CASE;IN;;ESAC"
<p>The remaining tool that we can use for conditional branching is basically
a multiple 'if' statement, based on the evaluation of a test. If, for example,
we know that the only possible outputs from an imaginary program called
'intel_cpu_test' are 4, 8, 16, 32, or 64, then we can write the following:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">case $(intel_cpu_test) in</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; 4) echo "You're
running Linux on a calculator??";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; 8) echo "That 8088
is past retirement age...";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; 16) echo "A 286
kinda guy, are you?";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; 32) echo "One of
them new-fangled gadgets!";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; 64) echo "Oooh...
serious CPU envy!";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp; *) echo "What
the heck are you running, anyway?";;</font>
<br><font face="Courier New,Courier">esac</font>
<br>
<hr WIDTH="100%">
<p>(Before all you folks flood me with mail about running Linux on a 286
or an 8088... you can't run it on a calculator either. :)
<p>Obviously, the "*"&nbsp;at the end is a catch-all:&nbsp;if someone at
the Intel Secret Lab runs this on their new CPU&nbsp;(code name "UltraSuperHyperWhizBang"),
we want the script to come back with a controlled response rather than
a failure. Note the double semicolons - they 'close' each of the "pattern/command"
sets and are (for some reason) a common error in "case/esac" constructs.
Pay extra attention to yours!
<br>&nbsp;
<p>BREAK and CONTINUE
<p>These statements interrupt the program flow in specific ways. The
"break", once executed, immediately exits the enclosing loop; the
"continue" statement skips the current loop iteration. This is useful in a
number of situations, particularly in long loops where the existence of a
given condition makes all further tests unnecessary. Here's a long (but
hopefully understandable) pseudo-example:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">...</font>
<p><font face="Courier New,Courier">while [ hosting_party ]</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; case $FOOD_STATUS</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; in</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
potato_chips_gone) replace_potato_chips;;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
peanuts_finished) refill_peanut_bowl;;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pretzels_gone) open_new_pretzel_bag;;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
...</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
...</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; esac</font>
<br>&nbsp;
<p><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; if [ police_on_scene
]</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; then</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
talk_to_nice_officers</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
continue</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; fi</font>
<p><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; case $LIQUOR_STATUS</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; in</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
vodka_gone) open_new_vodka_bottle;;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
rum_gone) open_new_rum_bottle;;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
...</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
...</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; esac</font>
<p><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; case $ANALYZE_GUEST_BEHAVIOR</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; in</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
lampshade_on_head)&nbsp;&nbsp;&nbsp;&nbsp; echo "He's been drinking";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
talking_to_plants)&nbsp;&nbsp;&nbsp;&nbsp; echo "She's been smoking";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
talking_to_martians)&nbsp;&nbsp; echo "They're doing LSD";;</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
levitating_objects)&nbsp;&nbsp;&nbsp; echo "Who spiked my lemonade??";;</font>
<p><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; ...</font>
<p><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; ...</font>
<p><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; ...</font>
<p><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; esac</font><font face="Courier New,Courier"></font>
<p><font face="Courier New,Courier">done</font>
<p><font face="Courier New,Courier">echo "Dude... what day is it?"</font>
<br>
<hr WIDTH="100%">
<p>A couple of key points: note that in checking the status of various
party supplies, you might be better off writing multiple "if" statements
- both potato chips <b>and</b> pretzels may run out at the same time (i.e.,
they are not mutually exclusive).&nbsp; The way it is now, the chips have
top priority; if two items do run out simultaneously, it will take two
loops to replace them.
<p>We can keep checking the food status while trying to convince the cops
that we're actually holding a stamp-collectors' meeting (in fact, maintaining
the doughnut supply is a crucial factor at this point), but we'll skip
right past the liquor status - as it was, we got Joe down off the chandelier
just in time...
<p>The "continue" statement skips the last part of the "while" loop as
long as the "police_on_scene" function returns 'true'; essentially, the
loop body is truncated at that point. Note that even though it is actually
inside the "if" construct, it affects the loop&nbsp; that surrounds it:
both "continue" and "break" apply only to loops, i.e., "for", "while",
and "until" constructs.
<br>&nbsp;
<br>&nbsp;
<p>BACK TO THE FUTURE
<p>Here is the script we created last month:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<br><font face="Courier New,Courier"># "bkup" - copies specified files
to the user's ~/Backup</font>
<br><font face="Courier New,Courier"># directory after checking for name
conflicts.</font>
<p><font face="Courier New,Courier">a=$(date +%T-%d_%m_%Y)</font>
<br><font face="Courier New,Courier">cp -i $1 ~/Backup/$1.$a</font>
<br>
<hr WIDTH="100%">
<p>Interestingly enough, shortly after finishing last month's article,
I was cranking out a bit of C code on a machine that didn't have 'rcs'
(the GNU Revision Control System) installed - and this script came in very
handy as a 'micro-rcs'; I used it to take "snapshots" of the project status.
Simple, generalized scripts of this sort become very useful at odd times...
<br>&nbsp;
<p>ERROR CHECKING
<p>The above is a workable script - for you, or anyone who cares to read
and understand it. Let's face it, though: what we want from a program or
a script is to type the name and have it work, right? That, or tell us
exactly why it didn't work. In this case, though, what we get is a somewhat
cryptic message:
<p><font face="Courier New,Courier">cp: missing destination file Try `cp
--help' for more information.</font>
<p>For everyone else, and for ourselves down the road when we forget exactly
how to use this tremendously complex script with innumerable options :),
we need to put in error checking - specifically, syntax/usage&nbsp; information.
Let's see how what we've just learned might apply:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">if [ -z $1 ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; clear</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "'bkup' -
copies the specified file to the user's"</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "~/Backup
directory after checking for name conflicts."</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "Usage: bkup
filename"</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; exit</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">a=$(date +%T-%d_%m_%Y)</font>
<br><font face="Courier New,Courier">cp -i $1 ~/Backup/$1.$a</font>
<p>
<hr WIDTH="100%">
<p>The '-z' operator of 'test' returns '0' (true) for a zero-length string;
what we're testing for is 'bkup' being run without a filename. The very
beginning is, in my opinion, the best place to put help/usage information
in a script - if you forget what the options are, just run the script without
any, and you'll get an instant 'refresher course' in using it. You don't
even have to put in the original comments, now - note that we've basically
incorporated our earlier comments into the usage info. It's still a good
idea to put in comments at any non-obvious or tricky places in the script
- that brilliant trick you've managed to pull off may cause you to cuss
and scratch your head next year, if you don't...
<p>Before we wrap up playing with this script, let's give it a few more
capabilities. What if you wanted to be able to send different types of
files into different directories? Let's give that a shot, using what we've
learned:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">if [ -z $1 ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; clear</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "'bkup' -
copies the specified file to the user's ~/Backup"</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "directory
tree after checking for name conflicts."</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "Usage: bkup
filename [bkup_dir]"</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo "bkup_dir
Optional subdirectory in '~/Backup' where the file"</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo " will be
stored."</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; echo</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; exit</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">if [ -n $2 ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; if [ -d ~/Backup/$2
]</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; then</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
subdir=$2/</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; else</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
mkdir -p ~/Backup/$2</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
subdir=$2/</font>
<br><font face="Courier New,Courier">&nbsp;&nbsp;&nbsp; fi</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">a=$(date +%T-%d_%m_%Y)</font>
<br><font face="Courier New,Courier">cp -i $1 ~/Backup/$subdir$1.$a</font>
<p>
<hr WIDTH="100%">
<p>Here is the summary of changes:
<p>1) The comment section of the help now reads "...directory tree" rather
than just "directory", indicating the change we've made.
<p>2) The "Usage:" line has been expanded to show the optional (as shown
by the square brackets)&nbsp; argument; we've also added an explanation
of how to use that argument, since it might not be obvious to someone else.
<p>3) An added "if" construct that checks to see if $2 (a second argument
to 'bkup') exists; if so, it checks for a directory with the given name
under "~/Backup", and creates one if it does not exist (the "-d" tests
if the file exists and is a directory).
<p>4) The 'cp' command now has a 'subdir' variable tucked in between "Backup/"
and "$1".
<p>Now, you can type things like
<p><font face="Courier New,Courier">bkup my_new_program.c c</font>
<br><font face="Courier New,Courier">bkup filter.awk awk</font>
<br><font face="Courier New,Courier">bkup filter.awk filters</font>
<br><font face="Courier New,Courier">bkup Letter_to_Mom.txt docs</font>
<p>etc., and sort everything into whatever categories you like. Plus, the
old behavior of "bkup" is still available -
<p><font face="Courier New,Courier">bkup file.xyz</font>
<p>will send a backup of "file.xyz" to the "~/Backup" directory itself;
useful for files that fall outside of your sorting criteria.
<br>&nbsp;
<p>By the way: why are we appending a "/" to $2 in the "if" statement instead
of right in the "cp" line? Well, if $2 <u>doesn't</u> exist, then then
we want 'bkup' to act as it did originally, i.e., send the file to the
"Backup" directory. If we write something like
<p><font face="Courier New,Courier">cp -i $1 ~/Backup/$subdir/$1.$a</font>
<p>(note the extra "/" between $subdir and $1), and $2 isn't specified,
then $subdir becomes blank, and the line above becomes
<p><font face="Courier New,Courier">cp -i $1 ~/Backup//$1.$a</font>
<p>- not a particularly desirable result, since we want to stick with standard
shell syntactic practice wherever possible.
<p>In fact, it's a really good idea to consider all the possibilities whenever
you're building variables into a string; a classic mistake of that sort
can be seen in the following script -
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">DO NOT USE THIS SCRIPT!</font>
<p><font face="Courier New,Courier">#!/bin/bash</font>
<br><font face="Courier New,Courier"># Written by Larry, Moe, and Shemp
- the Deleshun PoWeR TeaM!!!</font>
<br><font face="Courier New,Courier"># Checked by Curly: "Why, soitainly
it woiks! Nyuk-nyuk-nyuk!"</font>
<p><font face="Courier New,Courier"># All you've gotta do is enter the
name of this file followed by</font>
<br><font face="Courier New,Courier"># whatever you want to delete - directories,
dot files, multiple</font>
<br><font face="Courier New,Courier"># files, anything is OK!</font>
<p><font face="Courier New,Courier">rm -rf $1*</font>
<p><font face="Courier New,Courier">DO NOT USE THIS SCRIPT!</font>
<br>
<hr WIDTH="100%">
<p>&lt;Sigh> At least they commented it. :)
<p>What happens if somebody does run "<font face="Courier New,Courier">three_stooges</font>",
and <u>doesn't enter a parameter</u>? The active line in the script becomes
<p><font face="Courier New,Courier">rm -rf *</font>
<p>Assuming that you're Joe User in your home directory, the result is
pretty horrible - it'll wipe out all of your personal files. It becomes
a catastrophe if you're the root user in the root directory - <b>the entire
system goes away</b>!!
<p>Viruses seem like such friendly, harmless things about now... &lt;grin&gt;
<p>Be careful with your script writing. As you have just seen, you have
the power to destroy your entire system in a blink.
<p>
<hr SIZE=4 WIDTH="100%">
<br><font face="Courier New,Courier">Unix was never designed to keep people
from doing stupid things,</font>
<br><font face="Courier New,Courier">because that policy would also keep
them from doing clever things.</font>
<br><font face="Courier New,Courier">-- Doug Gwyn</font>
<p><font face="Courier New,Courier">Unix gives you just enough rope to
hang yourself -- and then a</font>
<br><font face="Courier New,Courier">couple more feet, just to be sure.</font>
<br><font face="Courier New,Courier">-- Eric Allman</font>
<br>
<hr SIZE=4 WIDTH="100%">
<p>The philosophy makes sense: unlimited power in the tools, restriction
by permissions - but it imposes a responsibility: you must take appropriate
care. As a corollary, whenever you're logged in as root, do not run any
shell scripts that are not provably harmless (note the Very Large assumptions
hanging off that phrase - "<u>provably harmless</u>"...)
<br>&nbsp;
<p>WRAPPING IT UP
<p>Loops and conditional execution are a very important part of most scripts.
As we analyze other shell scripts in future articles, you'll see some of
the myriad ways in which they can be used - a script of even average complexity
cannot exist without them.
<p>Next month, we'll take a look at some tools that are commonly used in
shell scripts - tools that may be very familiar to you as command-line
utilities - and explore how they may be connected together to produce desired
results. We'll also dissect a couple of scripts - mine, if no one else
is brave enough to send in the results of their keyboard concoctions. (<font color="#FF0000">Be
Afraid. Be Very Afraid.</font>) :)
<br>&nbsp;
<p>I welcome all comments and corrections in regard to this series of articles,
as well as any interesting scripts that you may send in. All flames will
be sent to <font face="Courier New,Courier">/dev/null</font> (Oh no, it's
full...)
<br>&nbsp;
<p>Until next month -
<p>Happy Linuxing!
<br>&nbsp;
<p>
<hr WIDTH="100%">
<br>"SCRIPT QUOTE" OF THE MONTH:
<p><font face="Courier New,Courier">``What's this script do?</font>
<p><font face="Courier New,Courier">'unzip; touch; finger; mount; gasp;
yes; umount; sleep'</font>
<p><font face="Courier New,Courier">Hint for the answer: not everything
is computer-oriented. Sometimes you're in a sleeping bag, camping out with
your girlfriend.''</font>
<br><font face="Courier New,Courier">&nbsp;-- Frans van der Zande</font>
<br>
<hr WIDTH="100%">
<p>REFERENCES
<p><font face="Courier New,Courier">The "man" pages for 'bash', 'seq',
'ping', 'grep'</font>
<br><font face="Courier New,Courier">The "help" command for 'for', 'while',
'until', 'if', 'case', 'test',</font>
<br><font face="Courier New,Courier">'break', 'continue'</font>
<br><font face="Courier New,Courier">"Introduction to Shell Scripting -
The Basics" by Ben Okopnik, LG #53</font>





<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Ben Okopnik<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Setting Up International Keyboards</font></H1>
<H4>By <a href="mailto:xvudpapc@savba.sk">Juraj Sipos</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->








<p><font face="Courier New,Courier"><font size=-1>This xmodmap and kimap
solutions will work for you in setting up any international keyboard for
(Debian, RedHat, Mandrake, Corel Linux) Linux, FreeBSD, OpenBSD, NetBSD
and possibly every Unix that uses Xfree86 and KDE. The advantage of this
package is that it is not architecture specific and will work on SPARK,
MIPS and all other systems. I don't want to say that other packages are
architecture independent, but I don't like writing garbage in the bash_profile
and XF86Config or possibly somewhere else. This was written by Juraj Sipos
(c) on 4/22/2000, <a href="mailto:xvudpapc@savba.sk">xvudpapc@savba.sk</a></font></font>
<p><font face="Courier New,Courier"><font size=-1>INTRODUCTION</font></font>
<p><font face="Courier New,Courier"><font size=-1>Imagine you use Linux
or a BSD OS and want to write a business letter to a person that has a
foreign name with a slash or idiaresis. Danish language uses signs like
&oslash; and Portuguese like &ntilde;. With this information you can make
your own international keyboard layout without installing any additional
packages. The following information will help you set up German, Spanish,
Italian, Slovak, Czech, Polish, Slovenian, Croatian, Danish, Dutch, French,
Finnish, Norwegian, Estonian, Latvian, Swedish and other keyboards without
additional installing of national packages and without writing garbage
to bash_profile and XF86Config files. You can also alternatively look at
my homage at <a href="http://www.home.sk/www/man/bsd1.htm">http://www.home.sk/www/man/bsd1.htm</a></font></font>
<br><font face="Courier New,Courier"><font size=-1>to see pictures of various
keyboards. In case you want to install Greek, Hebrew or Russian language,
follow my information and apply changes pertinent to these languages (e.g.,
to install Greek fonts, etc.).</font></font>
<p><font face="Courier New,Courier"><font size=-1>The biggest problem with
kikbd or international keyboard under KDE in X Windows is that it doesn't
work in Xfree86 that easily (you have to install some national packages
and write garbage with complicated syntax to the above-mentioned files).
A user expects a simple way for configuring his or her keyboard for international
settings. A simple way is to start KDE, change the international keyboard
settings and immediately write in the language we chose (this will work
for German and other languages, but in Eastern European keyboards some
letters don't function). According to the KDE documentation it should work,
but it doesn't. After exploring many KDE resources on the net, I didn't
find a solution (except for the one that forces you to install some national
package). I know that some locale settings should be included in my bash_profile
or csh logic scripts, but after applying these settings I couldn't change
(and install) keyboards in FreeBSD and it appeared like going through a
darker forest compared to the information I already had regarding localization
of KDE and X Windows under Xfree86.</font></font>
<p><font face="Courier New,Courier"><font size=-1>Here are some solutions
for installing international keyboard layouts.&nbsp; The following information
will help you set up any European keyboard layout. The solution works for
Xfree86 in 3.1 RELEASE in FreeBSD (.Xmodmap solution), Corel Linux, Debian
Linux, RedHat and FreeBSD 3.3 RELEASE and 4.0 RELEASE (KDE *.kimap solution).
I tested it on those systems. Note: .Xmodmap solution works well with other
windows managers. Some Unixes override .Xmodmap setting when used with
KDE. If .Xmodmap doesn't work, change must be made to the KDE kimap files
in .../kikbd directory.</font></font>
<p><font face="Courier New,Courier"><font size=-1>If .Xmodmap solution
doesn't work in KDE, copy skz.kimap (at the end of this article) to /usr/local/share/apps/kikbd,
which is your KDE keyboard directory. The problem with KDE is that after
installing another keyboard, you have no chance to use it as KDE documentation
doesn't clearly state how to define your locale settings in a bash_profile.
After I installed Slovak keyboard in KDE, I couldn't write in Slovak or
Czech, so I made few changes to skz.kimap file, which are explained later
in this file. After applying these changes, no other changes are necessary
- you don't need to write any special commands to your bash_profile or
XF86Config. BUT WHEN YOU INSTALL ANOTHER KEYBOARD in START/SETTINGS/INPUT
DEVICES/INTERNATIONAL KEYBOARDS from your KDE menu, CHECK AUTOSTART. Then
everything will work fine.&nbsp; The difference between skz.kimap and sky.kimap
(and csz.kimap and csy.kimap) is that y,Y and z,Z are swapped, so with
skz.kimap or csz.kimap you will have z,Z instead of y,Y, but with sky.kimap
or csy.kimap, y,Y doesn't change its position on the IBM English keyboard
layout.</font></font>
<p><font face="Courier New,Courier"><font size=-1>How it all works:</font></font>
<p><font face="Courier New,Courier"><font size=-1>a) Copy the "Compose"
file from /usr/X11R6/lib/X11/locale/iso8859-2 to:</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp; /usr/X11R6/lib/X11/locale/iso8859-1&nbsp;
directory (yes, iso8859-1, not iso8859-2). Back up</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp; the original
"Compose" file if you want (alternatively, copy other iso885*** Compose</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp; file to
iso8859-1 directory).</font></font>
<br><font face="Courier New,Courier"><font size=-1>b) Put the included
.Xmodmap file to your root directory (Slovak language, or make your own</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp; .Xmodmap
file) (or possibly put your own *.kimap file to the kikbd directory if
Xmodmap</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp; will not
work)</font></font>
<br><font face="Courier New,Courier"><font size=-1>c) Install ISO8859-2
fonts (or other pertinent fonts).</font></font>
<br><font face="Courier New,Courier"><font size=-1>d) Disable every "Scroll
lock" uncommented line in your XF86Config, because our .Xmodmap</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp; uses scroll
lock to switch between keyboards.</font></font>
<br><font face="Courier New,Courier"><font size=-1>e) Put the appropriate
fontpath for your newly installed fonts in your XF86Config file, if</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp; necessary.</font></font>
<p><font face="Courier New,Courier"><font size=-1>The .Xmodmap solution
may be applied to all&nbsp; X keyboards except Hebrew, I suppose (I'm joking).
The .Xmodmap file overrides all settings of keyboard layouts as defined
in /usr/X11R6/lib/X11/xkb/symbols/, where are symbols for many international
keyboards. The .Xmodmap solution will give you an enhanced Slovak typewriter
keyboard layout.</font></font>
<p><font face="Courier New,Courier"><font size=-1>First, I must say that
in my solution, different mapping is used for .Xmodmap file (and kimap
file) for some ISO definitions. This means that the ISO definitions will
either give you what they say they are (aacute [&aacute;], eacute [&eacute;],
etc.), or they will not give you what they say they are (putting "threequarters"
in your .Xmodmap file will give not give you "3/4" but "z" with a caron
above it). For example, "mu" will give lcaron, "oslash" rcaron, etc. (Obviously,
in other case you need to install some national packages to use "lcaron"
definition instead of "mu"). Normally, you can not put "lcaron" to the
.Xmodmap file, because it will not give you lcaron; you must write "mu"
instead, or "guillemotright" for tcaron. I also tried hexadecimal numbers
and they work. However, other&nbsp; key definitions, for example, adieresis
(a with two dots above it), uacute (u with slash above it), as well as
dead_diaeresis do not require a substitution of other definitions and work
pretty well as they're defined everywhere (dead key is a key&nbsp; you
press, you hold it and nothing happens, but after pressing another key
you will get a special letter). The original "Compose" file in .../iso8859-1
directory can be fully utilized for Slovak or Czech keyboard layouts (Polish,
Hungarian, Slovenian, Croatian), but there is only one problem with the
Slovak or Czech keyboard (and other languages too) layout - dead_caron
doesn't work. That's why you have to copy the "Compose" file from the iso8859-2
directory to iso8859-1 directory, or alternatively, you can edit the "Compose"
file in iso8859-1 directory and put all references about "dead_caron" from
iso8859-2/Compose to iso8859-1/Compose file.</font></font>
<p><font face="Courier New,Courier"><font size=-1>You can leave the Keyboard
section in your XF86Config without much change. Put (if it's not already
there) the following in the "Keyboard" section:</font></font>
<p><font face="Courier New,Courier"><font size=-1>Section "Keyboard"</font></font>
<br><font face="Courier New,Courier"><font size=-1>Protocol "Standard"</font></font>
<br><font face="Courier New,Courier"><font size=-1>XkbRules "xfree86"</font></font>
<br><font face="Courier New,Courier"><font size=-1>XkbModel "pc101"</font></font>
<br><font face="Courier New,Courier"><font size=-1>XkbLayout "us"</font></font>
<p><font face="Courier New,Courier"><font size=-1>Some X Windows managers
and/or environments override .Xmodmap settings, so if you use KDE and .Xmodmap
doesn't work, use kikbd keymap instead of .Xmodmap. (A sample kikbd kimap
for the Slovak language is included at the bottom of this file). The Slovak/Czech/English
keyboard layout&nbsp; is switched to by scroll lock with .Xmodmap. You
may use languages only with the applications that have access to your ISO-8859-2
(or other fonts) fonts (this may not work with StarOffice or with other
applications that have their own built-in fonts). StarOffice has its own
fonts directory - afm fonts in ../xp3/fontmetrics/afm, and ps fonts in
../xp3/pssoftfonts, so you must add the ISO8859-2 fonts directory to these
directories (to tell StarOffice to use these fonts too) and edit fonts.dir
file and add the symlinked fonts there. I can easily use any language in
StarOffice.</font></font>
<p><font face="Courier New,Courier"><font size=-1>Important note: If you
want to exchange documents between StarOffice or WordPerfect and MS Word,
you must include the information about windows 1250 encoding to the file
you write (win1250 is similar to iso8859-2, but it's a little bit different).
There's a solution: use a converter from iso8859-2 to win1250 (you can
find one at my home page at <a href="http://www.home.sk/www/man/bsd1.htm">http://www.home.sk/www/man/bsd1.htm</a>).</font></font>
<p><font face="Courier New,Courier"><font size=-1>If you want to edit and
make your own .Xmodmap keyboard layout definitions, I'll explain one line
of the .Xmodmap file to make clear what you should do. This explanation
can be used for all keycodes.</font></font>
<p><font face="Courier New,Courier"><font size=-1>For example, the line:</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x11 = 8 asterisk
aacute 8</font></font>
<p><font face="Courier New,Courier"><font size=-1>(note: keycode 0x11 is
derived from xkeycaps utility)</font></font>
<br><font face="Courier New,Courier"><font size=-1>says that the first
pair, the default one, (number "8" and "asterisk") will display number
"8" when you press keycode 0x11 ("8"), will display asterisk when a "shift"
key is pressed. After pressing the scroll lock, there's another definition:
ISO_NEXT_GROUP, which means that when you press the default "8" key, no
"8" will be displayed, but aacute ("&aacute;"), when you press the "shift"
key, number "8" will be displayed. So if you change "aacute" and "8", anything
you put instead of "aacute" and "8" will be displayed, for example:</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x11 = 8 asterisk
semicolon colon</font></font>
<p><font face="Courier New,Courier"><font size=-1>will give you "semicolon"
and "colon" in your 0x11 keycode after pressing the scroll lock. If you
delete the ISO_NEXT_GROUP (the next pair of definitions on the right),
you will have only one group of keyboard definitions ("8" and "asterisk").
Be careful when editing the .Xmodmap file. You mustn't delete definitions
that enable utilization of the scroll lock unless you know what you are
doing. These are the lines such as:</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x4e = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>add mod5 = ISO_Next_Group</font></font>
<p><font face="Courier New,Courier"><font size=-1>etc. You must also keep
in mind that Unixes are case sensitive.</font></font>
<p><font face="Courier New,Courier"><font size=-1>If you want to find out
more about keycodes, install a package "xkeycaps".</font></font>
<p><font face="Courier New,Courier"><font size=-1>________________cut_here__________________________________________________</font></font><font face="Courier New,Courier"><font size=-1></font></font>
<p><font face="Courier New,Courier"><font size=-1>! This is an `xmodmap'
input file for PC 101 key #2 (FreeBSD/XFree86; US)</font></font>
<br><font face="Courier New,Courier"><font size=-1>! keyboards created
by XKeyCaps, modified by Juraj Sipos on 8/17/1999.</font></font>
<br><font face="Courier New,Courier"><font size=-1>! XKeyCaps 2.38 is Copyright
(c) 1997 Jamie Zawinski &lt;jwz@netscape.com.</font></font>
<br><font face="Courier New,Courier"><font size=-1>! http://people.netscape.com/jwz/xkeycaps/
This is an .Xmodmap solution for</font></font>
<br><font face="Courier New,Courier"><font size=-1>! Slovak keyboard. You
must have ISO-8859-2 fonts installed with a</font></font>
<br><font face="Courier New,Courier"><font size=-1>! pointer in /etc/XF86Config</font></font>
<br><font face="Courier New,Courier"><font size=-1>! <b>NOTE: "!" is a
comment. Some information follows but I deleted</b></font></font>
<br><font face="Courier New,Courier"><font size=-1>!<b> it as it is commented
and not important.</b></font></font>
<br><font face="Courier New,Courier"><font size=-1>! If you want to know
what I deleted, start xkeycaps utility and generate your</font></font>
<br><font face="Courier New,Courier"><font size=-1>! own Xmodmap file.</font></font>
<br><font face="Courier New,Courier"><font size=-1>! The "0 Ins" key generates
KP_Insert and KP_0</font></font>
<br><font face="Courier New,Courier"><font size=-1>! The ". Del" key generates
KP_Delete and KP_Decimal</font></font>
<p><font face="Courier New,Courier"><font size=-1>!#define XK_dead_semivoiced_sound
0xFE5F</font></font>
<p><font face="Courier New,Courier"><font size=-1>!dead_iota, dead_voiced_sound,
dead_belowdot, dead_tilde, dead_macron</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x09 = Escape</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x43 = F1 F11
F1 Multi_key</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x44 = F2 F12
F2 F12</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x45 = F3 F13
F3 F13 idiaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x46 = F4 F14
F4 F14 mu yen</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x47 = F5 F15
F5 F15 guillemotright guillemotleft</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x48 = F6 F16
F6 F16 ograve</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x49 = F7 F17
F7 dead_abovedot oacute</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4A = F8 F18
F8 dead_breve acute</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4B = F9 F19
F9 dead_cedilla ugrave</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4C = F10 F20
F10 dead_ogonek</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x5F = F11 F21
dead_acute dead_caron</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x60 = F12 F22
dead_abovering dead_diaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>!keycode 0x6F = Print
Execute dead_doubleacute dead_circumflex</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6F = Print
Execute dead_iota</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4E = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6E = Pause</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x31 = grave
asciitilde semicolon dead_diaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0A = 1 exclam
plus 1</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0B = 2 at
mu 2</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0C = 3 numbersign
onesuperior 3</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0D = 4 dollar
egrave 4</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0E = 5 percent
0x0bb 5</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0F = 6 asciicircum
threequarters 6</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x10 = 7 ampersand
yacute 7</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x11 = 8 asterisk
aacute 8</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x12 = 9 parenleft
iacute 9</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x13 = 0 parenright
eacute 0</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x14 = minus
underscore equal percent</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x15 = equal
plus dead_acute dead_caron</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x33 = backslash
bar ograve parenright</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x16 = BackSpace</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6A = Insert</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x61 = Home</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x63 = Prior</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4D = Num_Lock
Pointer_EnableKeys</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x70 = KP_Divide
slash</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3F = KP_Multiply
asterisk</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x52 = KP_Subtract
minus</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x17 = Tab ISO_Left_Tab</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x18 = q Q</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x19 = w W</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1A = e E</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1B = r R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1C = t T</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1D = y Y z
Z</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1E = u U</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1F = i I</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x20 = o O</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x21 = p P</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x22 = bracketleft
braceleft acute slash</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x23 = bracketright
braceright diaeresis parenleft</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x24 = Return</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6B = Delete</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x67 = End</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x69 = Next</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4F = KP_Home
7 KP_Home</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x50 = KP_Up
8</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x51 = KP_Prior
9</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x56 = KP_Add
plus</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x42 = Caps_Lock</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x26 = a A</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x27 = s S</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x28 = d D</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x29 = f F</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2A = g G</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2B = h H</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2C = j J</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2D = k K</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2E = l L</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2F = semicolon
colon ocircumflex quotedbl</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x30 = apostrophe
quotedbl section exclam</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x53 = KP_Left
4</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x54 = KP_Begin
5</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x55 = KP_Right
6</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x32 = Shift_L
ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x34 = z Z y
Y</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x35 = x X</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x36 = c C</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x37 = v V</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x38 = b B</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x39 = n N</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3A = m M</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3B = comma
less comma question</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3C = period
greater period colon</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3D = slash
question minus underscore</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3E = Shift_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x62 = Up</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x57 = KP_End
1</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x58 = KP_Down
2</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x59 = KP_Next
3</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6C = KP_Enter
Return</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x25 = Control_L
ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>!keycode 0x40 = Alt_L
Meta_L</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x40 = Meta_L
Alt_L</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x41 = space</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x71 = Alt_R
Meta_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6D = Control_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x64 = Left</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x68 = Down</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x66 = Right</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x5A = KP_Insert
0</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x5B = KP_Delete
period</font></font>
<p><font face="Courier New,Courier"><font size=-1>!keysym Alt_L = Meta_L</font></font>
<br><font face="Courier New,Courier"><font size=-1>!keysym F12 = Multi_key</font></font>
<p><font face="Courier New,Courier"><font size=-1>clear Shift</font></font>
<br><font face="Courier New,Courier"><font size=-1>!clear Lock</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Control</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod1</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod2</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod3</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod4</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod5</font></font>
<p><font face="Courier New,Courier"><font size=-1>add Shift = Shift_L Shift_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Control = Control_L
Control_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>!add Mod1 = Alt_L Alt_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Mod1 = Meta_L Alt_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Mod2 = Num_Lock</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Mod5 = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>!add Mod1 =</font></font>
<br><font face="Courier New,Courier"><font size=-1>!add Mod2 = Alt_R Alt_L
Mode_switch</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x73 = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x74 = dead_acute
dead_diaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x75 = dead_caron
dead_abovering</font></font>
<p><font face="Courier New,Courier"><font size=-1>_____________cut_here__________________________________________________________</font></font>
<p><font face="Courier New,Courier"><font size=-1># KDE skz.kimap Config
File, modified by Juraj Sipos</font></font>
<br><font face="Courier New,Courier"><font size=-1># name this file as
skz.kimap and copy it to KDE .../kikbd directory</font></font>
<p><font face="Courier New,Courier"><font size=-1>[International Keyboard]</font></font>
<br><font face="Courier New,Courier"><font size=-1>Label=Skz</font></font>
<br><font face="Courier New,Courier"><font size=-1>Locale=sk</font></font>
<p><font face="Courier New,Courier"><font size=-1># *** here was some info
I deleted.</font></font>
<p><font face="Courier New,Courier"><font size=-1>[KeyboardMap]</font></font>
<br><font face="Courier New,Courier"><font size=-1>CapsSymbols=q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym0=1,plus,1,exclam,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym1=2,mu,2,at,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym2=3,onesuperior,3,numbersign,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym3=4,egrave,4,dollar,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym4=5,0x0bb,5,percent,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym5=6,threequarters,6,asciicircum,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym6=7,yacute,7,ampersand,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym7=8,aacute,8,asterisk,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym8=9,iacute,9,parenleft,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym9=0,eacute,0,parenright,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym10=minus,equal,percent,minus,underscore,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym11=grave,dead_diaeresis,dead_circumflex,grave,asciitilde,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym12=equal,dead_acute,dead_caron,equal,plus,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym13=bracketleft,uacute,slash,bracketleft,braceleft,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym14=bracketright,adiaeresis,parenleft,bracketright,braceright,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym15=semicolon,ocircumflex,quotedbl,semicolon,colon,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym21=y,z,Z,,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym22=z,y,Y,,,</font></font>
<br><b><font face="Courier New,Courier"><font size=-1># I changed some
keysyms above (as "mu" instead of "lcaron") and added the following lines</font></font></b>
<br><font face="Courier New,Courier"><font size=-1>keycode43=51,ograve,parenright,backslash,bar,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode40=48,section,exclam,apostrophe,quotedbl,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode51=59,comma,question,less,comma,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode52=60,period,colon,period,greater,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode53=61,minus,underscore,slash,question,</font></font>
<br><font face="Courier New,Courier"><font size=-1>____cut_here___________________________________________________________________________</font></font>
<p><font face="Courier New,Courier"><font size=-1>(The numbers of keycodes
are derived from the "xkeycaps" utility)</font></font>
<p><font face="Courier New,Courier"><font size=-1>The purpose of the following
info is to help you build any .Xmodmap keyboard layout with iso8859-2 or
other character sets.&nbsp; If you're going to use other languages than
the Central European ones, find a pertinent table for your ISO*** character
set on Internet. The gdkkeysyms.h file is in (RedHat) /usr/include/gdk/gdkkeysyms.h
and it contains all the special names we're using here (it also contains
names of Greek characters).</font></font>
<p><b><font face="Courier New,Courier"><font size=-1>UNIX</font></font></b>
<p><b><font face="Courier New,Courier"><font size=-1>ISO-8859-2 (ISO Latin2)
character set</font></font></b>
<p><b><font face="Courier New,Courier"><font size=-1>octal hex (you can
use it for other languages too)</font></font></b>
<p><font face="Courier New,Courier"><font size=-1>----------------------------------------------------------------------</font></font>
<br><font face="Courier New,Courier"><font size=-1>First, try to see if
definitions will give you (after installing pertinent fonts and keyboard
in X) what they say they are. If they will not give you what they say they
are (some keycodes will be unfunctional), then you must make a substitution.
Definitions which will not give you what they say they are can be traced
by their visual shape in Western Latin 1 encoding. For example, if you
load a Slovak website, do not use ISO8859-2 character set encoding for
viewing, but Western ISO8859-1 encoding for viewing. Thus you will see
bad fonts with letters like &frac34; and so on. You will see what you must
substitute. But if you don't know what "&frac34;" is called in ISO terminology,
find and download an appropriate character set table for ISO-8859-1. It
must be somewhere on the net. The symbols on your right (for example, mu
[micro], which is &micro;, will give you lcaron instead of &micro;) will
give you what's on their left. NOTE: vowel *acute signs require no substitution,
therefore I omitted iacute (&iacute;), aacute (&aacute;), etc.&nbsp;</font></font>
<p><font face="Courier New,Courier"><font size=-1>0243 0xa3 /Lslash &pound;&nbsp;&nbsp;&nbsp;&nbsp;
(Explanation: writing the name of &pound; ["pound" in our case]</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
to Xmodmap or kimap file will give you Lslash. But Lslash can be</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
obtained by a dead_caron - you press a dead_caron and L). The sign</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
on the right, if put in Xmodmap or kimap files, will</font></font>
<br><font face="Courier New,Courier"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
print you the character which is on its left</font></font>
<br><font face="Courier New,Courier"><font size=-1>0245 0xa5 /Lcaron &yen;&nbsp;&nbsp;&nbsp;&nbsp;
Thus, writing "yen" to kimap or Xmodmap file will give us Lcaron</font></font>
<br><font face="Courier New,Courier"><font size=-1>0251 0xa9 /Scaron &copy;&nbsp;&nbsp;&nbsp;&nbsp;
copyright (will give us Scaron)</font></font>
<br><font face="Courier New,Courier"><font size=-1>0253 0xab /Tcaron &laquo;&nbsp;&nbsp;&nbsp;&nbsp;
guillemotleft (will give us Tcaron)</font></font>
<br><font face="Courier New,Courier"><font size=-1>0256 0xae /Zcaron &reg;&nbsp;&nbsp;&nbsp;&nbsp;
registered</font></font>
<br><font face="Courier New,Courier"><font size=-1>0265 0xb5 /lcaron &micro;&nbsp;&nbsp;&nbsp;&nbsp;
mu</font></font>
<br><font face="Courier New,Courier"><font size=-1>0271 0xb9 /scaron &sup1;&nbsp;&nbsp;&nbsp;&nbsp;
onesuperior</font></font>
<br><font face="Courier New,Courier"><font size=-1>0273 0xbb /tcaron &raquo;&nbsp;&nbsp;&nbsp;&nbsp;
guillemotright</font></font>
<br><font face="Courier New,Courier"><font size=-1>0276 0xbe /zcaron &frac34;&nbsp;&nbsp;&nbsp;&nbsp;
threequarters</font></font>
<br><font face="Courier New,Courier"><font size=-1>0306 0xc6 /Cacute &AElig;&nbsp;&nbsp;&nbsp;&nbsp;
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0312 0xca /Eogonek &Ecirc;&nbsp;&nbsp;&nbsp;
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0313 0xcb /Edieresis
&Euml;&nbsp; Edieresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>0314 0xcc /Ecaron &Igrave;&nbsp;&nbsp;&nbsp;&nbsp;
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0317 0xcf /Dcaron &Iuml;&nbsp;&nbsp;&nbsp;&nbsp;
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0321 0xd1 /Nacute &Ntilde;&nbsp;&nbsp;&nbsp;&nbsp;
Ograve</font></font>
<br><font face="Courier New,Courier"><font size=-1>0322 0xd2 /Ncaron &Ograve;&nbsp;&nbsp;&nbsp;&nbsp;
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0324 0xd4 /Ocircumflex
&Ocirc; Ocircumflex</font></font>
<br><font face="Courier New,Courier"><font size=-1>0325 0xd5 /Ohungarumlaut
&Otilde; find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0330 0xd8 /Rcaron &Oslash;&nbsp;&nbsp;&nbsp;&nbsp;
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0331 0xd9 /Uring &Ugrave;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0333 0xdb /Uhungarumlaut
&Ucirc;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0336 0xde /Tcedilla
&THORN;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0343 0xe3 /abreve &atilde;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0345 0xe5 /lacute &aring;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0346 0xe6 /cacute &aelig;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0350 0xe8 /ccaron &egrave;&nbsp;&nbsp;&nbsp;
egrave</font></font>
<br><font face="Courier New,Courier"><font size=-1>0352 0xea /eogonek &ecirc;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0354 0xec /ecaron &igrave;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0357 0xef /dcaron &iuml;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0361 0xf1 /nacute &ntilde;&nbsp;&nbsp;&nbsp;
ntilde</font></font>
<br><font face="Courier New,Courier"><font size=-1>0362 0xf2 /ncaron &ograve;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0365 0xf5 /ohungarumlaut
&otilde;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0370 0xf8 /rcaron &oslash;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0371 0xf9 /uring &ugrave;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0373 0xfb /uhungarumlaut
&ucirc;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0376 0xfe /tcedilla
&thorn;</font></font>
<br><font face="Courier New,Courier"><font size=-1>0377 0xff /dotaccent
&yuml;</font></font>
<p><font face="Courier New,Courier"><font size=-1>You may experiment to
find out which definitions will give you which characters, it shouldn't
be difficult. This is just a hint on how to start. I didn't go on to investigate
further definitions because I have my Slovak and Czech keyboards and I'm
not, for now, interested to use other keyboards.&nbsp; Look at my homage
and build your own keyboard.</font></font>
<br>&nbsp;
<p><font face="Courier New,Courier"><font size=-1>Enjoy.</font></font>
<br><font face="Courier New,Courier"><font size=-1>Juraj Sips</font></font>




<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Juraj Sipos<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->

<!--startcut ==========================================================-->
<!-- P --> <HR> <!-- P -->
<!-- A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/sipos.html">
<FONT SIZE="+2"><EM>Talkback:</EM> Discuss this article with peers</FONT></A -->
<P>
<!-- *** BEGIN navbar *** -->
<A HREF="okopnik.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<IMG ALT="" 
	SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom" >
<A HREF="index.html"><IMG ALT="[ Table of Contents ]" 
	SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<A HREF="../index.html"><IMG ALT="[ Front Page ]" 
	SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="../faq/index.html"><IMG ALT="[ FAQ ]" 
	SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/sipos.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom"  ></A>
<IMG ALT="" 
	SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom" >
<A HREF="stagner.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom"  ></A>
<!-- *** END navbar *** -->
</BODY></HTML>
<!--endcut ============================================================-->
<!--startcut  ==============================================-->
<!-- *** BEGIN HTML header *** -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><HEAD>
<title>Connecting to Your Home Computer LG #53</title>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
ALINK="#FF0000">
<!-- *** END HTML header *** -->

<A HREF="http://www.linuxgazette.com/">
<H1><IMG ALT="LINUX GAZETTE" SRC="../gx/lglogo.jpg" 
	WIDTH="600" HEIGHT="124" border="0"></H1></A> 


<!-- *** BEGIN navbar *** -->
<A HREF="sipos.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<IMG ALT="" 
	SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom" >
<A HREF="index.html"><IMG ALT="[ Table of Contents ]" 
	SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<A HREF="../index.html"><IMG ALT="[ Front Page ]" 
	SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="../faq/index.html"><IMG ALT="[ FAQ ]" 
	SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom"  ></A>
<IMG ALT="" 
	SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom" >
<A HREF="ward.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom"  ></A>
<!-- *** END navbar *** -->
<P>
<!-- A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html">
<FONT SIZE="+2"><EM>Talkback:</EM> Discuss this article with peers</FONT></A -->

<!--endcut ============================================================-->

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Connecting to Your Home Computer</font></H1>
<H4>By <a href="mailto:restagner@netscape.net">Robert Stagner</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




A couple of weeks back, I was at work typing away on my NT box (please,
no flames on this, I have no other choice : -), when I suddenly realized that
a Perl script that I had been updating on my home machine (a Linux box running 
Red Hat 6.0), needed to be transferred to my computer at work. Since I do not 
have a 24/7 connection to the Internet for my Linux box, I was out of luck. I 
could not just FTP to my home machine and download the script. Or could I?
<P>
I suppose I could set up a DSL or cable modem connection, but I personally 
find that a 56K PPP connection is a lot less financially burdensome -- at least
for the time being.  Anyhow, I thought about how I might somehow get the Linux 
box on the Internet while unattended (i.e. just after I left for work each 
morning). My solution, although involving several scripts and a cronjob, can 
be set up for a PPP connection rather quickly. Once tested and configured 
properly, the end result will provide you with a means of automatically 
connecting to the Internet and then sending an e-mail off to your work address 
containing the dynamically generated IP Address assigned to your home computer 
by your ISP. The only assumptions to get this up and running are the following:
<UL>
<LI>you have root permissions (usually the case, if your running this from home).

<LI>you have copies of <A HREF="misc/stagner/ppp-on.txt">ppp-on</A>, <A HREF="misc/stagner/ppp-off.txt">ppp-off</A>, and <A HREF="misc/stagner/ppp-on-dialer.txt">ppp-on-dialer</A> shell scripts. These can
usually be found in the /usr/doc/ppp-2.3.7/scripts/ directory.

<LI>you have successfully connected and disconnected to the Internet using the 
ppp-on and ppp-off scripts.

<LI>your ISP has provided you with access to a local telephone number (I suppose
this is not really required, but who wants to pay phone charges).
</UL>

<P>Other than these assumptions, configuring your system to automatically dial-up
your ISP are pretty straight forward. The first step to get this up and running is to copy over (as root) the ppp-on and ppp-off shell scripts to the
/usr/sbin/ directory.  Make sure the permissions are set to 0755 for each file. 
Then, copy over ppp-on-dialer to the /etc/ppp/ directory.  The &quot;dialer&quot; script 
is the second part of a two tier step in establishing a connection to your 
ISP. The first, is the ppp-on script.

<P>Next, edit the ppp-on script by assigning the appropriate telephone number, 
account and password information. Also, remember to assign the appropriate 
device and speed of your modem. Mine read /dev/ttyS3 and 115200. It should 
resemble the following once your done:
<BR>
<BR>

<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
#!/bin/sh
#
# These are the parameters. Change as needed.
TELEPHONE=<FONT COLOR="red"><B>your phonenum </B></FONT># The telephone number for the connection
ACCOUNT=<FONT COLOR="red"><B>your account </B></FONT>   # The account name for logon (as in 'George Burns')
PASSWORD=<FONT COLOR="red"><B>your password </B></FONT> # The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0        # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0       # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0   # The proper netmask if needed 

# Export them so that they will be available at 'ppp-on-dialer' time.
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in.  Please use the absolute file name as the $PATH variable is not
# used on the connect option.  (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection

exec /usr/sbin/pppd debug lock modem crtscts <FONT COLOR="red"><B>/dev/ttyS3 115200</B></FONT> \
	asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
	noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT 
</CODE>
</PRE>
</TD>
</TR>
<TR>
<TD BGCOLOR="#FFFFFF">
	<FONT COLOR="red"><B>Red Text</B></FONT> - code that needs to be altered to meet your needs.
</TD>
</TR>
</TABLE>
</CENTER>

<P>Now that you have all the shell scripts in the appropriate places, it's time 
to look at a little Perl script I wrote that calls the connection or disconnection process, as well as send off an e-mail with the IP Address of my
Linux box to my NT box at work.  Place a copy (as root) of this 
<a href="misc/stagner/sendMeIP.pl.txt">script</a> in your  /usr/local/bin directory with a 
permissions setting of 0755. The purpose of this script is to:
<UL>
<LI>Provide a connection/disconnection to the Internet via a 
shell program (/usr/sbin/ppp-on, or ppp-off). 

<LI>Capture the dynamically generated IP address from the ISP service.

<LI>Send the returned IP Address to a predefined e-mail address so that
a remote connection can be made to your home computer.
</UL>

<P>The Perl script begins with the following lines:
<BR>
<BR>


<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
# Counter used to provide a delay while the ppp connection is established
$COUNT = 1;

# Check for the existence of options
if (!$ARGV[0] || $ARGV[0] !~ m/(connect|disconnect)/i) {
        print &quot;Usage: sendMeIP.pl &lt;connect | disconnect&gt;\n&quot;;
	exit -1;
}

# Call and execute connection/disconnection to the Internet
&amp;pppConnection($ARGV[0]);

# Caputre the dynamically created remote IP Address
$assignedIPAddress = &amp;captureIPAddress;

# Send the IP Address via e-mail
&amp;sendMail($assignedIPAddress);
</CODE>
</PRE>
</TD>
</TR>
</TABLE>
</CENTER>

<BR>
<BR>

<P>Essentially, all this does is first set a counter, then check to see if the 
necessary arguments have been passed to the program. If so, establish a
connection (or, disconnection -- &amp;pppConnection) to the Internet.  Capture 
the IP Address (&amp;captureIPAddress) by searching the output of a call to 
/sbin/ifconfig and finally send off the e-mail (&amp;sendMail). The call to execute
ifconfig actually happens in the &amp;captureIPAddress subroutine. Let us have a
look at this code:
<BR>
<BR>


<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
sub captureIPAddress {
        my $captureIFCONFIG;
        $captureIFCONFIG = qx#/sbin/ifconfig#;

        if ($captureIFCONFIG =~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/) {
                my $assignedIPAddress = &quot;$1&quot;;
                print &quot;IP Address capture successful: $assignedIPAddress.\n&quot;;
                return ($assignedIPAddress);
        }
        elsif (($captureIFCONFIG !~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/)
	&amp;&amp; ($COUNT &lt; 60)) {
                $COUNT++;
                sleep 1;
                &amp;captureIPAddress;
        }
        else {
	   print &quot;Houston, we have a problem in capturing the IP Address.\n&quot;;
       	   exit -2;         
	}
}


...  [code removed for clarity]


sub sendMail {
        my $assignedIPAddress = shift;
        my $mailService = <FONT COLOR="red"><B>location of your mail program: mine is "/usr/sbin/sendmail"</B></FONT>;
        my $from = <FONT COLOR="red"><B>"Your Name &lt;yourLocalEmail\@host.com&gt;"</B></FONT>;
        my $to = <FONT COLOR="red"><B>"Your Name &lt;yourWorkEmail\@host.com&gt;"</B></FONT>;

        die "Trouble sending mail: $!" unless (-e $mailService);

        open(SENDMAIL, "|$mailService -oi -t") or die "Trouble sending mail:
$!";

        print SENDMAIL &lt;&lt;"EOMAIL";
From: $from
To: $to
Subject: An Important Message About <FONT COLOR="red"><B>your.computer</B></FONT>

Use the following IP Address to establish a connection with <FONT COLOR="red">
<B>your.computer</B></FONT> : $assignedIPAddress

EOMAIL
        close(SENDMAIL);
        print "The e-mail message has been sent.\n";
}
</CODE>
</PRE>
</TD>
</TR>
<TR>
<TD BGCOLOR="#FFFFFF">
	<FONT COLOR="red"><B>Red Text</B></FONT> - code that needs to be altered to meet your needs.
</TD>
</TR>
</TABLE>
</CENTER>
<BR>
<BR>

<P>First, the /sbin/ifconfig command is executed using Perl's equivalence of a
backtick (qx function).  The output of this command is captured in the 
$captureIFCONFIG variable.  We then attempt to look for a pattern that 
contains &quot;inet addr:&quot; followed by an IP Address and then followed by &quot;P-t-P&quot;. 
Since it's the address we're concerned with, we store this in
$assignedIPAddress.  However, if we have not matched the IP Address and the 
count is less than 60, then we add one to the count variable and put the 
program to sleep for one second.  At this point, we call the same subroutine 
again and again until we have a pattern match or we've exceeded the count.  
This gives the /sbin/ifconfig command a chance to write out the appropriate 
interface information for a PPP connection. Actually, we give the program about
60 seconds to find the IP Address. If we can't find an IP Address, we print out
an error message and exit the program.

<P>Finally, you'll need to configure the Perl script to point to your email 
program, as well as set up the &quot;From&quot; and &quot;To&quot; e-mail addresses contained in 
the &amp;sendMail subroutine.  Simply reassign the $mailService, $from, and $to 
variables to match your case.

<P>Now we've come to the final step -- setting up your system to automatically 
execute the Perl script.  We will accomplish this through the use of the 
crontab command.  As root, execute the crontab command with the -e option. The
-e option puts you in the edit mode.  From here add the following two lines
and save the file:
<BR>
<BR>
<PRE>
<CODE>
00 8 * * 1,2,3,4,5 perl /usr/local/bin/sendMeIP.pl connect
15 12 * * 1,2,3,4,5 perl /usr/local/bin/sendMeIP.pl disconnect
</CODE>
</PRE>

<P>The first of these two lines calls the Perl script at 8:00am, Monday thru 
Friday. The second line calls the Perl script to disconnect from the 
Internet at 12:15pm, Monday thru Friday. You can check your work in crontab by
executing the crontab command again, but this time passing it the -l option.
For further information on crontab, check out the man pages.

<P>Once you have received the e-mail message at work, you should now be able to connect to your machine via telnet and ftp by using the given IP Address.




<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Robert Stagner<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1><font color="maroon">Some issues on floating-point precision under Linux</font></H1>
<H4>By <a href="mailto:award@mypic.ad">Alan Ward</a></H4>
</center>
<P> <HR> <P>  

<!-- END header -->




<p><b>Abstract</b></p>

<p>In this article I propose a practical exploration of how Linux behaves when performing 
single or double-precision calculations. I use a chaotic function to show how the calculation 
results of a same program can vary quite a lot under Linux or a Microsoft operating system.</p>
<p>It is intended for math and physics students and teachers, though the equations
involved are quite accessible to just about everybody.</p>
<p>I use Pascal, C and Java as they are the main programming languages in use today.</p>
<p>This discussion focusses on the Intel architecture. Basic concepts are the same for other 
types of processor, though the details can vary somewhat.</p> 

<p><b>May functions</b></p>

<p>These functions build up a series of terms with the form: </p>

<p align=center>x<sub>0</sub> is given in [0;1]<br>
x<sub>k+1</sub> = mu.x<sub>k</sub>.(1 - x<sub>k</sub>)    where mu is a parameter</p>

<p>They were introduced by Robert May in 1976, to study the evolution of a closed insect 
population. It can be shown that:</p>

<p><ul>
<li>for 0 &lt;= mu &lt; 3, the behaviour of the series is <u>deterministic</u></li>
<li>for 3 &lt;= mu &lt;= 4, behaviour is <u>chaotic</u></li>
</ul></p>

<p>Simplifying things somewhat, the difference between a chaotic and a deterministic system is 
their sensibility to initial conditions. A chaotic system is very sensible: a small 
variation of the initial value of x<sub>0</sub> will lead to increasing differences 
in subsequent terms. Thus any error that creeps into the calculations -- such as
lack of precision -- will eventually give very different final results.</p>

<p>Other examples of chaotic systems are satellite orbitals and weather prediction.</p>

<p>On the other hand, a deterministic system is not so sensible. A small error in 
x<sub>0</sub> will make us calculate terms that, while differing from their exact 
value, will be "close enough" aproximations (whatever that means).</p>

<p>An example of a deterministic system is the trajectory of a ping-pong ball.</p>

<p>So chaotic functions are useful to test the precision of calculations on different 
systems and with various compilers.</p>

<p><b>Our example</b></p>
 
<p>In this example, I propose to use the following values:</p>

<p align=center>mu = 3.8<br>
x<sub>0</sub> = 0.5</p>

<p>A precise calculation with a special 1000-digit precision packet gives the following 
results:</p>

<pre>
          k              x(k)
         -----          ---------
           10            0.18509
           20            0.23963
           30            0.90200
           40            0.82492
           50            0.53713
           60            0.66878
           70            0.53202
           80            0.93275
           90            0.79885
          100            0.23161
</pre> 

<p>As you see, the series fluctuates merrily up and down the scale between 0 and 1.</p>

<p><b>Programming in Turbo-Pascal</b></p>

<p>A program to calculate this function is easily written in Turbo Pascal for MS-DOS:
&nbsp;&nbsp;(<A HREF="misc/ward/caos.pas.txt">text version</A>)

<pre>
program caos;

{$n+}       { you need to activate hardware floating-point calculation 
              in order to use the extended type }

uses
   crt;

var
   s : single;    { 32-bit real }
   r : real;      { 48-bit real }
   d : double;    { 64-bit real }
   e : extended;  { 80-bit real }

   i : integer;  

begin
   clrscr;

   s := 0.5;
   r := 0.5;
   d := 0.5;
   e := 0.5;

   for i := 1 to 100 do begin
      s := 3.8 * s * (1 - s);
      r := 3.8 * r * (1 - r);
      d := 3.8 * d * (1 - d);
      e := 3.8 * e * (1 - e);

      if (i/10 = int(i/10)) then begin
         writeln (i:10, s:16:5, r:16:5, d:16:5, e:16:5);
      end;
   end;

   readln;
end.
</pre>

<p>As you can see, Turbo Pascal has quite a number of floating-point types, each on 
a different number of bits. In each case, specific bits are set aside for: </p>

<p><ul>
<li>the sign: one bit indicates a positive or negative number</li>
<li>the magnitude (or mantissa): the number itself coded as binary</li>
<li>the exponent: the power of 2 to multiply the magnitude by to obtain 
the real value of the number. Note that it may be negative.</li>
</ul></p>

<p>For example, on a 386, an 80-bit floating-point is coded as:</p>

<p><ul>
<li>bits 0 to 55: magnitude</li>
<li>bits 56 to 78: exponent</li>
<li>bit 79: sign</li>
</ul></p>

<p>Naturally, hardware FP coding is determined by the processor manufacturer. However, 
the compiler designer can specify different codings for internal calculations. If 
FP-math emulation is not used, the compiler must then provide means to translate 
compiler codings to hardware. This is the case for Turbo Pascal.</p> 

<p>The results of the above program are:</p>

<pre>

     k       single        real         double     extended 
    ----    ---------    ---------    ---------   ----------
     10      0.18510      0.18510      0.18510      0.18510
     20      0.23951      0.23963      0.23963      0.23963
     30      0.88423      0.90200      0.90200      0.90200
     40      0.23013      0.82492      0.82493      0.82493
     50      0.76654      0.53751      0.53714      0.53714
     60      0.42039      0.64771      0.66878      0.66879
     70      0.93075      0.57290      0.53190      0.53203
     80      0.28754      0.72695      0.93557      0.93275
     90      0.82584      0.39954      0.69203      0.79884
    100      0.38775      0.48231      0.41983      0.23138
</pre>

<p>The first terms are rather close in all cases, as heavy calculation 
precision losses (from truncation) have not yet occurred. Then the least precise 
(single) format already loses touch with reality around x<sub>30</sub>, while 
the real format goes out around x<sub>60</sub> and the double around 
x<sub>90</sub>. These are all compiler FP codings.</p>

<p>The extended format -- which is the native hardware FP coding -- retains 
sufficient precision right up to x<sub>100</sub>. As an educated guess, it 
would probably go out around x<sub>110</sub>.</p>

<p><b>p2c under Linux</b></p>

<p>The above program can be compiled with almost no changes with the p2c translating 
program under Linux:</p>

<p><table align=center width=450>
<tr><td>p2c caos.pas</td><td><i>translate caos.pas to caos.c</i></td></tr>
<tr><td>cc caos.c -lp2c -o caos</td><td><i>compile caos.c + p2c library using gcc</i></td></tr>
</table></p>
  
<p>Results are then:</p>

<pre>

     k       single        real         double     extended 
    ----    ---------    ---------    ---------   ----------
     10      0.18510      0.18510      0.18510      0.18510
     20      0.23951      0.23963      0.23963      0.23963
     30      0.88423      0.90200      0.90200      0.90200
     40      0.23013      0.82493      0.82493      0.82493
     50      0.76654      0.53714      0.53714      0.53714
     60      0.42039      0.66878      0.66878      0.66878
     70      0.93075      0.53190      0.53190      0.53190
     80      0.28754      0.93558      0.93558      0.93558
     90      0.82584      0.69174      0.69174      0.69174
    100      0.38775      0.49565      0.49565      0.49565

</pre>

<p>It is interesting to note that the p2c translator converts Pascal single 
precision FP to C single, while the real, double and extended types 
all convert to C double. This is a format that keeps precision up to 
around x<sub>80</sub>.</p>

<p>I have no data to substantiate the following, but my impression is that 
C double FP coding is also on 64 bits, but with a different magnitude vs. 
exponent distribution than for Turbo Pascal.</p>

<p><b>gcc under Linux</b></p>

<p>The above program, rewritten in C and compiled with gcc, naturally gives the very same 
results as with p2c:
&nbsp;&nbsp;(<A HREF="misc/ward/caos.c.txt">text version</A>)

<pre>
#include &lt;stdio.h&gt;

int main() {

  float f;
  double d;

  int i;

  f = 0.5;
  d = 0.5;

  for (i = 1; i &lt;= 100; i++) {
    f = 3.8 * f * (1 - f);
    d = 3.8 * d * (1 - d);

    if (i % 10 == 0) 
      printf ("%10d  %20.5f %20.5f\n", i, f, d);
  }
}

</pre>

<p><b>Java</b></p>

<p>The Java programming language is another case altogether, as 
from the start it was designed to work on many different platforms.</p>

<p>A Java .class file contains the source program compiled in a Virtual Machine 
Language format. This "executable" file is then interpreted on a client 
box by whatever java interpreter is available.</p>

<p>However, the Java specification took FP precision very much into account. Any 
java interpreter <strong>should</strong> perform single and double precision FP 
calculations with precisely the same results.

<p>This means that one same program will:</p>
<p><ul>
<li>be executed with the same precision on different architectures (e.g. Intel, Motorola, Alpha, ...)</li>
<li>be executed with the same precision on a same architecture, even though the java language interpreter 
is different.</li>
</ul></p>
 
<p>The reader can easily experiment these facts. The following applet calculates 
the May series we have been talking about. Compare its results on your own setup, viewed 
with Netscape, HotJava, appletviewer, etc. You could also compare with the same 
browsers, or others, under Windoze. Just open this page with each browser:</p>

<BLOCKQUOTE> <EM>
	[The applet has been removed from the TWDT version to prevent possible
	problems with browsers that don't do Java properly.
	To view the standalone article with the applet, click 
	<A HREF="ward.html">here</A>. -Ed.]
</EM> </BLOCKQUOTE>


<p>I have, so far, only found one single exception to this rule. Guess who? 
Microsoft Explorer 3.0!</p>

<p>Finally, the java source file was:
&nbsp;&nbsp;(<A HREF="misc/ward/caos.java.txt">text version</A>)

<pre>

import java.applet.Applet;
import java.lang.String;
import java.awt.*;

public class caos extends Applet {

    public void paint (Graphics g) {

	float f;
	double d;
	String s;
	
	int i, y;
	
	f = (float)0.5;
	d = 0.5;
	
	g.setColor (Color.black);
	g.drawString ("k", 10, 10);
	g.drawString ("float", 50, 10);
	g.drawString ("double", 150, 10);
	g.setColor (Color.red);
	y = 20;

	for (i = 1; i <= 100; i++) {
	    f = (float)3.8* f * ((float)1.0 - f);
	    d = 3.8 * d * (1.0 - d);
	    
	    if (i % 10 == 0) { 
		y += 12;
		g.drawString (java.lang.String.valueOf(i), 10, y);
		g.drawString (java.lang.String.valueOf(f), 50, y);
		g.drawString (java.lang.String.valueOf(d), 150, y);
	    }
	}
    }

}

</pre> 


<hr>

<p><b>Further reading</b></p>

<p><i>An introduction to Chaotic Dynamical Systems</i>, 
R.L. Devaney</p>
<p><i>Jurassic Park I and II</i>, Michael Crichton (the books, not the films!)</p>
<p><i>The Intel 386-SX microprocessor data sheet</i>, Intel Corp. (available at http://developer.intel.com)</p>




<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P --> 
<H5 ALIGN=center>

Copyright &copy; 2000, Alan Ward<BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->

<center><H2>
<A HREF="http://www.linuxgazette.com/">
<IMG SRC="../gx/newlogo.jpg" width=600 height=256 border=0
ALT="Linux Gazette... making Linux just a little more fun!"></a>
</H2>
<H4>Published by <A HREF="http://www.linuxjournal.com/"><I>Linux Journal</I></A></H4>
</center>

<P> <hr> <P> 

<H1><font color="maroon">The Back Page</font></H1>
<ul>
<li><a HREF="#authors">About This Month's Authors</a>
<li><a HREF="#notlinux">Not Linux</a>
</ul>

<a name="authors"></a>
<P> <HR> <P> 
<!--======================================================================-->

<center><H3><font color="maroon">About This Month's Authors</font></H3></center>

<P> <HR> <P> 
<!--======================================================================-->

<!-- BEGIN bio -->

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Paulo Henrique Baptista de Oliveira</H4>
I am 23 years old.  I have been using computers since age 15, from MSX Hotbit
to Linux GNU/Debian 2.2. I currently work at Linux Solutions at Brazil. We
mantain a site OLinux 
(<A HREF="http://www.olinux.com.br">www.olinux.com.br</A>) with a Introduction,
Programming, Programs, Games, Security and Interviews sections and news about
Linux everyday of the week. We have gotten a lot of positive feedback from
Brazilian Linux users. We have already published more than 100 articles and 500
news items in about 4 months.


<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Konstantin Boldyshev</H4>
Konstantin Boldyshev is software engineer, his primary work areas are
assembly and C system programming, networking & and internet, embedded
systems. Mostly known to community as Assembly HOWTO maintainer,
asmutils author, and linux assembly hacker.
He is maintainer of the <A HREF="http://linuxassembly.org">"Linux Assembly"</A>,
Linux/UNIX assembly programing portal.


<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Shane Collinge</H4>
Part computer programmer, part cartoonist, part Mars Bar. At night, he runs
around in a pair of colorful tights fighting criminals. During the day... well,
he just runs around.  He eats when he's hungry and sleeps when he's sleepy.                                           

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Fernando Correa</H4>
Fernando is a computer analyst just about to finish his 
graduation at Federal University of Rio de Janeiro. Now, he has built
with his staff the best 
<A HREF="http://www.olinux.com.br">Linux portal</A> in Brazil and have further 
plans to improve services and content for their Internet users.



<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Pat Eyler</H4>
"Pate" is a linux/unix/networking geek who enjoys playing on the
command line.  When he's not puttering with or writing about computers
and networks he likes to play with his kids, cook, and read.  Talk to
him at <a href=mailto:pate@gnu.org>pate@gnu.org</a>.

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Sean Lamb</H4>
I'm currently working on completing my BS degree in Computer Science at Lakeland
College (begun earlier at the University of California, Riverside). I've been
involved in computer support for the past 6 years, via phone, fax, and email,
and I have created documentation for use by end users (some articles in the
Microsoft Knowledge Base) and other support staff (published in-house as either
individual documents or on the support intranet), and I contributed some
chapters to "Special Edition Using KDE" from Que publishing (now in print). I
have done some application development on MS-DOS platforms and have begun
developing a pair of applications for my Linux box. I am currently employed as
a software developer working in C++ with Informix on a mix of Linux and AIX
servers. When I'm not playing with or writing about Linux, I can usually be
found working on my model railroad.



<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Ben Okopnik</H4>
A cyberjack-of-all-trades, Ben wanders the world in his 38' sailboat, building
networks and hacking on hardware and software whenever he runs out of cruising
money. He's been playing and working with computers since the Elder Days
(anybody remember the Elf II?), and isn't about to stop any time soon.



<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Juraj Sipos</H4>
I live and work in Bratislava, Slovakia as a library
information worker, translator and research reader at the Institute for
Child Psychology.  I published some of my poetry here and in USA, I
translated some books from English (e.g., Zen Flesh, Zen Bones by Paul
Reps). You can see some of my stories and poetry at
<A HREF="http://www.crosswinds.net/~aproximetri/index.htm">
http://www.crosswinds.net/~aproximetri/index.htm</A>.
Computers are my hobby.



<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Robert Stagner</H4>
Robert has been programming in Perl on the Win32 and Mac
platforms for the past three years. He's been using Linux for the last year,
and simply loves it.  When he is not programming in Perl or creating shell
scripts, he spends time with his lovely wife.


<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Alan Ward</H4>
Alan teaches CS in Andorra at highschool and university levels. He's
back to Unix this year after an 8-year forced interlude since he
graduated -- it makes networking so much easier. His hobbies include
science photography (both digital and traditional), trekking, rock and
processor collecting.



<!-- END bio -->

<a name="notlinux"></a>
<P> <hr> <P> 
<!--====================================================================-->

<center><H3><font color="maroon">Not Linux</font></H3></center>

<P> <HR> <P> 
<!--======================================================================-->
<P>

<!-- *** BEGIN Not Linux *** --->

<P> Last month I said <EM>Linux Gazette</EM> would have a new Editor.
The announcement turned out to be premature, so I am remaining the Editor
for the time being.

<P> Thanks to SOFCOM for offering the <EM>Gazette's</EM> first
<A HREF="http://www.sfcom.com/"><STRONG>Japanese translation</STRONG></A>.
You've been added to the <A HREF="../mirrors.html">mirrors page</A>.
I'll have to take our readers' word for it that the site is displaying
correctly, since my browser doesn't do Japanese characters.

<P> This issue features four articles from the OLinux site in Brazil (<A
HREF="http://www.olinux.com.br">http://www.olinux.com.br</A> -- Portuguese).
Fernando Correa and Paulo Baptista have been very cooperative with 
<EM>LG</EM>, translating their interviews with Linux personalities for us
and the like.  We at <EM>Linux Gazette</EM> like to see the growth of Linux in
non-English- speaking countries, and we're happy for the work OLinux is doing
with their Brazilian portal.  Latin America has experienced tremendous growth
in Linux use over the past year, as Mexican schools have adopted it as a
low-cost alternative to Windows, and Conectiva has released native Spanish and
Portuguese Linux distributions.  We'd like to cover more such endeavors in
other parts of the world, if readers would be willing to send in reports from
their country or translate some of their articles into English for us.

<P> This issue marks the debut of a new <EM>Linux Gazette</EM> logo and
navigation buttons.  As you know, some readers have said it's time for 
something new, so we're giving it to them.  The blue-silver chrome color was
chosen for its "industrial" look, to represent that <EM>Linux Gazette</EM> is
about putting Linux to work, getting it to do what you need.  Of course, it's
still about making Linux just a little more fun, too!  

<P> After all, if your work is chosen carefully, so that it furthers your
personal goals (whatever they are), then the work will be fun.  For instance, I
enjoy Python and Zope, so I'm happy that my work gives me the chance to learn
stuff I'd want to learn anyway.

<P> Michael Orr<br>
Editor, <A HREF="http://www.linuxgazette.com/"><i>Linux Gazette</i></A>, <A
HREF="mailto:gazette@ssc.com">gazette@ssc.com</a>
<BR CLEAR="all">

<!-- *** END Not Linux *** --->

<!-- *** BEGIN copyright *** -->
<P> <hr> <P> 
<H5 ALIGN=center>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.<BR>
Copyright &copy; 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR> 
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->


</BODY></HTML>