File: ckc193.upd

package info (click to toggle)
ckermit 193-3
  • links: PTS
  • area: non-free
  • in suites: slink
  • size: 6,180 kB
  • ctags: 8,803
  • sloc: ansic: 118,504; makefile: 2,474; sh: 52
file content (5157 lines) | stat: -rw-r--r-- 251,706 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
C-KERMIT 6.1 CHANGE LOG (Changes since 6.0.192 of 6 September 1996)

Last update: Fri May 15 17:53:43 1998

SET TCP UCX-PORT-BUG command added, November 1996.

sdata() windowing loop to send packets could go too far if ACKs had
arrived out of order.  Fixed in nxtpkt().  9 Dec 96.

SET SEND DOUBLE-CHAR and SET RECEIVE IGNORE-CHAR added, for transferring
files with Honeywell DPS-6, and/or thru an Arpanet TAC.  10 Dec 96.

ADD SEND-LIST followed by MOVE did not delete original files.  Fixed in
ckuusr.c, 11 Dec 96.

When C-K is in local mode, and sending a file using Kermit protocol, and
sending an auto-upload string in advance, make it pause for 1.5 seconds to
give the remote Kermit time to start up; otherwise, since all the ioctls at
startup time result in clearing the input buffer, the first packet is lost and
we have to wait a long time for the timeout to kick off the transfer.  1.5 sec
vs 8 sec.  On the other hand, if the remote Kermit is already started, this
is a needless delay.  OK, so make it 400 msec.  This doesn't fix the problem
in the default case (unless the remote system is really fast), but at least
now there is a command-level workaround for the user: "set proto kermit
{kermit -YQqr} {kermit -YQqr}", to make the remote Kermit start up faster;
0.4 sec should be enough time to enter packet mode.  ckcpro.w, 15 Dec 96.

Added EDIT, SET EDITOR, SHOW EDITOR.  This required adding a new parsing
function, cmiofi(), to parse either the name of an existing file or the name
of a new file to be created.  SET EDITOR can not be executed by APC unless APC
is UNCHECKED, otherwise "edit foo" might become "delete foo".  If the EDIT
command is given without a filespec, then if a previous filespec had been
given to an EDIT command, it is used; if not, the editor is started without a
file.  If a filespec is given, the editor is started on that file, and the
filespec is remembered for subsequent EDIT commands.  ckuusr.h, ckuus[r235].c,
ckucmd.[ch], 15 Dec 96.

Changed \v(filespec) to contain fully qualified filenames rather than relative
ones.  This allows \v(filespec) to actually find the file just downloaded, in
case it went to a download directory, etc.  This makes NETEDIT easy to do.
ckuus[r6].c, 15 Dec 96.

New CKVKER.COM and CKVOLD.COM from Lucas Hart fixes errors with GCC builds.
25 Dec 96.

Added -DNONAWS to AT&T 3Bx entries.  16 Jan 97.

Added and modified SCO Xenix entries from Fred Smith. 26 Jan 97.

Added and modified HP-UX entries from Peter Eichhorn. 26 Jan 97.

Added -DNOINADDRX to all DG/UX 5.40 makefile entries.  1 Feb 97.

Added an entry for SINIX-Z (Intel) 5.42.  1 Feb 97.

Added "generic-high-speed" and Meghertz X-Jack modem types, 5 Feb 97.

Fix to VMS isdir() (free() being called prior to using the item that was
freed), causing CD not to work on Alphas with VMS 6.2.  ckvfio.c, 17 Feb 97.

Fixed \feval(m%n) not to dump core if n == 0, ckuus5.c, date unk.

References to S82 in newer-model Hayes modems causes ERROR.  Removed.
ckudia.c, date.unk.

Added STRATUS #ifdefs to ckusig.c, from Kernie Brashier.  7 Mar 97.

Added Greek file and terminal charset translation: ISO 8859-7, CP869, and
ELOT 927.  ck[cu]xla.[ch], ckuus[23457].c.  5 Apr 97.

Made Stratus getchar/putchar changes to ckcdeb.h, ckudia.c, ckuus[457].c
and uploaded to test area so Kernie B can make new builds.  6 Apr 97.

Added IF OPEN ...  ckuusr.h, ckuus[26].c.  6 Apr 97.

Added \v(pid), UNIX only for now.  ckcdeb.h, ckuusr.h, ckuus4.c.  6 Apr 97.

Jeff's changes to sdata() (after sending each packet) and input() (when we
get a timeout) to detect carrier loss.  ckcfn[s2].c, 7 Apr 97.

Added within #ifdef PIPESEND...  CSEND, CRECEIVE, and SET XFER PIPES governing
interpretation of incoming filenames that start with "!", and also
command-line -s "!command", for UNIX.  ckcdeb.h, ckcfn[s3].c, ckcpro.w,
ckucmd.c, ckuusr.h, ckuus[r2345y].c, 9-13 Apr 97.  Jeff also made them work
for Windows 95/NT and OS/2.

Removed spurious and redundant code from ckcmai.c to read the application
file a second time (which is never executed because the application file name
was zeroed out), and then removed the code to zero out the name, so the file
can be deleted later if "set startup-file discard".  17 Apr 97.

Added code to enforce that pipe transfers can be done only with Kermit
protocol.  ckcfns.c, ckuusr.c, ckuusy.c, 17 Apr 97.  NOTE: Actually, it is
perfectly possible to receive to a pipe using XYZMODEM in K95, but since it is
not possible to send from one (because these protocols use fseek to recover
from errors and you can't fseek into a pipe), we just say "use Kermit".

Added SET SEND FILTER and got it working -- needs a LOT of testing.
ckuusr.h, ckuus3.c, etc etc, 17 Apr 97.

Added \fcommand() and \frawcommand(); ckuusr.h, ckuus4.c, 18 Apr 97.

Added \v(filename) -- current filename while sending and receiving -- and
\v(filenumber) -- the current file number.  19 Apr 97.

Overhauled the as-name code to provide for filename templates using
\v(filename), \v(filenumber), etc, as well as \function()s...  19 Apr 97.

Added \v(pexitstat) -- exit status of most recent process started by zxcmd,
zshcmd, or ttruncmd().  ckuusr.h, ckuus4.c, ckufio.c, ckutio.c.  20 apr 97.

Overhauled process-oriented routines in ckufio.c to give a proper return code
and to set the pexitstat value.  In particular, zclosf() now fails if the
closed process did not return an exit code of 0.  20 apr 97.

In working on the previous item, discovered that I could use wait() rather
than waitpid() in ttruncmd(), and since wait() is totally portable, I enabled
REDIRECT for all UNIX implementations as well as OS/2 & Windows.  ckutio.c,
ckcdeb.h.  20 Apr 97.

Added tests to the protocol module to see whether closing the input file fails,
which is what happens if we are using a pipe and or filter, and the process's
return code indicates failure.  In this case we set the "cxseen" flag which
forces a failure condition on a per-file basis (in case of wildcard transfers
with send-filter), which is reflected in BOTH Kermits.  ckcpro.w, 20 Apr 97.

Added invisible CQ command for all but OS2 & Win32 as an abbreviation for
CONNECT /QUIETLY.  ckuusr.[ch], 20 Apr 97.

Changed SET { SEND, RECEIVE } FILTER to use the same syntax as as-names --
\v(filename), string functions, etc, permitted -- rather than "%s".
 ckuus7.c, ckcfns.c, 20 Apr 97.

Added \fstripx(), \fstripn(), \flop() string functions.  ckuusr.h, ckuus4.c,
21 Apr 97.

Added file-protection/permission attributes within #ifdef CK_PERM..#endif.
Enabled for UNIX only.  Sender puts system-dependent and system-independent
versions into the A packet.  The system-dependent permission string for UNIX
is a 3-digit octal string, the low-order 12 bits of the st_mode member of the
stat struct; we deliberately chop off the "file format" bits because they are
probably not portable, nor do we convey the setuid/setgid bits, lock bit,
sticky bit, etc; just the permissions.  The file receiver checks to see if the
sender has the same system ID; if so, it tries to decode the system-dependent
permissions, if any; if not, it uses the generic ones and applies them to the
owner field.  The main purpose is to not have to "chmod +x" an executable file
after transfer between two UNIXes.  ckcdeb.h, ckcmai.c, ckufio.c, ckcfn3.c,
and (for SET, REMOTE SET, and SHOW ATTRIBUTES) ckuus5.c, ckuus7.c.  22 Apr 97.

Added three more variables:
  \v(p_ctl)   Control prefix char
  \v(p_8bit)  8-bit prefix char (if parity not none)
  \v(p_rpt)   Repeat prefix char (if repeat compression enabled)
ckuusr.h, ckuus4.c.  22 Apr 97.

Merged Jeff's changes into ckuusr.h, 24 Apr 97.

Merged Jeff's changes into ckcker.h, ckcmai.c, 3 May 97.

Merged Jeff's changes into ckuusr.c; noticed that much of the PIPESEND code
was missing from Jeff's version.  3 May 97.

Merged Jeff's changes into ckuus*.[ch] and other modules, 3 May 97.

Merged Jeff's changes into ckudia.c, except the ones involving makestr(),
which should be entirely unnecessary -- or if they are, then makestr() should
be fixed.  3 May 97.

Made sure remaining modules were all in sync.  3 May 97.

Added CK_ENVIRONMENT for UNIX/Aegis/Plan9: ckcnet.h, ckutio.c, 4 May 97.

Added SET TELNET ENVIRONMENT { OFF, ON }.  This is needed so scripts can
behave predictably, etc.  Made OFF the default for UNIX, ON for OS/2 & friends
so as not to change existing default behavior.  Added this to SHOW NET.  Also
fixed a bug in Telnet NEW-ENVIRON negotiation.  ckuusr.h, ckuus[234].c,
ckcnet.c, 4 May 97.

Added TELNET SEND_LOCATION negotiation, since a potential customer needed it
desperately and asked about it just as I was working on the NEW-ENVIRON stuff.
Untested, though, since I can't find a host that uses it.  ckcnet.c, 4 May 97.

Added SOLARIS25 symbol and makefile entry for Solaris 2.5.  Added support for
134.5 and 1800 bps.  Enabled 134.5, 1800, 57600, 76800, 115200, 230400 for
Solaris 2.5.  makefile, ckcdeb.h, ckutio.c, 4 May 97.

Added casts to various function args (char vs uchar) to shut up picky
compilers.  ckcfn[s23].c, 4 May 97.

Added a fix for ATT 7300 UNIX PC to allow use by root when C-Kermit installed
setuid (e.g. to uucp), since System V R0 does not save original uid, from
Randolph J Herber <rjh@yclept.chi.il.us>.  ckutio.c, 4 May 97.

Added a new makefile entry for AT&T UNIX 3.51m, which added hardware flow
control for the AT&T 7300, resulting in a file-transfer performance boost of
about 30%.  Randolph J Herber, ckutio.c, 4 May 97.

Added regular POSIX-style high speeds for Linux 1.2 and later, from Ted Ts'o
<tytso@mit.edu>.  This involved reconciling several different and conflicting
patches from the PATCHES file.  Linux C-Kermit now supports serial speeds up
to 460800bps.  ckcdeb.h, ckuus3.c, ckutio.c, 4 May 97.  Also, added a new
makefile entry, "linux", for Linux 1.2 and later.  The old entry was kept
under the name "linux10", 4 May 97.

Added support, makefile entry, and designer herald for OpenBSD, from
Todd Miller <Todd.Mill@courtesan.com>, ckuver.h, makefile, 4 May 97.

All patches from the PATCHES file are now installed.

Fixes from Jeff to my fixes.  ckudia.c, ckcmai.c, ckcker.h, 6 May 97.

Redid Telnet Location after a closer reading of RFC779, added SET TELNET
LOCATION, added location to SHOW NET.  ckcnet.c, ckuus3.c, ckuus4.c, ckuusr.h,
6 May 97.  The "send location" business works like this:

 . All code related to this feature is in #ifdef CK_SNDLOC, which is defined
   by default for all platforms (in ckcnet.h).

 . When Kermit starts, sysinit() does makestr(tn_loc,getenv("LOCATION")),
   so this needs to be added to all the non-UNIX sysinit()'s, perhaps using
   other more appropriate environment variable names, if any exist.

 . If tn_loc is not NULL, then tn_ini() sends WILL SEND-LOCATION.  If the
   server says DO SEND-LOCATION, Kermit sends the string in an SB.

 . The C-Kermit user can change the location with SET TELNET LOCATION, and
   can defeat this feature by setting the location to the empty string.

 . If sysinit() does not fill in the initial value, the user can still use
   this feature by giving a SET TELNET LOCATION string prior to making the
   connection.

Added SHOW TELNET since I keep typing it all the time anyway, and updated help
text, ckuusr.h, ckuus[245].c, 6 May 97.

Also made numerous corrections to help text, some of which involved moving
feature-selection features (CK_ENVIRONMENT and CK_SNDLOC) from ckcnet.h to
ckcdeb.h.  6 May 97.

Fix typos in yesterday's changes.  ckcdeb.h, ckcnet.c, 7 May 97.

Removed date-dependent dial-number hacks for France and Finland, since the
dates are long past.  ckuus6.c, 7 May 97.

Finished SET DIAL { LC-PREFIX, LC-SUFFIX }.  Changed this from LOCAL-PREFIX,
LOCAL-SUFFIX because LOCAL is too long to type all the time and we already had
a SET DIAL LOCAL-AREA-CODE (albeit invisible).  The original names are still
there but invisible.  7 May 97.

Added SET DIAL LC-AREA-CODES [ <list> ] and display of it in SHOW DIAL.
ckuusr.h, ckuus[234].c, 8 May 97.

Filled in callisld() to return codes differentiating among (0) regular local
calls, (1) long-distance calls, and (2) local calls that still must dial the
area code, and changed dncvt() to use these codes for both well-formed
portable phone numbers and free-form portable numbers.  Also added code for
local prefix and suffix for free-form portable numbers.  ckuus6.c, 8 May 97.

Add SET DIAL FORCE-LONG-DISTANCE { ON, OFF }.  8 May 97.  ckuusr.h,
ckuus[246].c.

Automatically set the above to ON for SET DIAL COUNTRY-CODE 33 (France).
ckuus3.c, 8 May 97.

Fixed typo in #ifdef for "set speed 19200".  ckuus3.c, 11 May 97.

Added commands for modem speaker control, 11 May 97:

  Defined symbols in ckuusr.h.
  Variables defined in ckudia.c:
    int mdmspk       (speaker on off)
    int mdmvol       (modem volume) 
    char * dialspon  (speaker on command)
    char * dialspoff (speaker off command)
    char * dialvol1  (volume low command)
    char * dialvol2  (volume medium command)
    char * dialvol3  (volume high command)
  Added keyword parsing to ckuus3.c:
    SET MODEM SPEAKER { ON, OFF }
    SET MODEM VOLUME { HIGH, MEDIUM, LOW }
  Added modem command parsing, ckuus3.c:
    SET MODEM COMMAND { SPEAKER-ON, SPEAKER-OFF } <string>
    SET MODEM COMMAND { VOLUME-HIGH, VOLUME-MEDIUM, VOLUME-LOW } <string>
  Added these fields to all MDMINF structs in ckcker.h and ckudia.c.
  Changed name of dial_str[] keyword table to mdmcmd[] because the original
  was in conflict with a MDMINF struct name, ckuus3.c.
  Filled in SHOW MODEM to show all these values, adjusted pagination, ckuus3.c.
  Filled in HELP SET MODEM, ckuus2.c.
  Added semantics to ckudia.c.

Fixed errors in yesterday's work.  ckuus3.c, ckudia.c, 12 May 97.

Added GENERIC-HIGH-SPEED to MINIDIAL selection.  Also, USER-DEFINED was
supposed to be there too, but that was only halfway done.  ckudia.c, 12 May 97.

Change SET MODEM CAPABILITIES to set or unset SPEED-MATCHING automatically
based on whether SB was included among the capabilities.  ckuus3.c, 12 May 97.

Added support for the following new built-in modem types:
 . QuickComm Spirit II
 . Motorola Montana
 . Compaq Data+Fax (e.g. in Presario)
 . Fujitsu Fax/Modem Adpater
 . Megahertz AT&T V.34
 . SupraSonic V288+
 . Best Data
ckudia.c, 12 May 1997.

Changed speaker and volume commands to use multiple keywords, not dashes,
like for EC and DC.  ckuusr.h, ckuus3.c, 13 May 97.

Added SET TERMINAL KEYBOARD-MODE { NORMAL, EMACS, HEBREW, RUSSIAN }.
ckuusr.h, ckuus[27].c.

Fixed HELP text for SET MODEM { SPEAKER, VOLUME }.  ckuus2.c, 13 May 97.

Added support for more new modem types:
 . AT&T Secure Data STU-III Model 1900 (untested)
 . AT&T Secure Data STU-III Model 1910 (untested)
These are scrambling modems used at high-security places, which only talk
to each other.  Also, rearranged SET MODEM TYPE keywords that were out of
alphabetical order.  ckudia.c, 13 May 97.

Added E1V1 to all Hayes-like modem init strings for OS/2 and Windows, to
make sure we parse word result codes -- this eliminates lots of confusion
caused by incompatible digit result codes.  I didn't do this for UNIX, VMS,
etc, because it is bad to reconfigure shared modems.  ckudia.c, 14 May 97.

Added DIA_TAPI (= 34), "TAPI reported failure - reason unknown", to DIAL
failure codes and messages, and changed TAPI dialing failure code to set this
reason.  ckcker.h, ckudia.c, 14 May 97.

Added missing cases 15, 16, 17, 19, 25, 45, 107 for USR digit result codes.
ckudia.c, 14 May 97.

Fix for SCRIPT command from Gerhard Rueckle <rueckle@dr.fbe.fh-darmstadt.de>
at FH Darmstadt, to filter out NULs from session log (otherwise whole lines
were getting lost due to use of str*() functions).  ckuscr.c, 15 May 97.

Discovered that S_I[RWX]OTH stat.h symbols for file permissions could not be
depended upon, and so added more #ifdefs to account for this in zsattr().
Also, realized it's silly to use the "world" permissions field for the
"generic" permission (even though that's what the book says); changed it to
use the "user" (self) field.  ckufio.c, 16 May 97.

After spending 2 hours on the phone with a user, revised the AT&T STU III
modem commands by trial and error until they worked.  The manuals and other
info from AT&T were wrong.  ckudia.c, 17 May 97.

Added \%* variable, used only in macros, replaced by all the args that the
current macro was called with (1..argc).  ckuus4.c, 18 May 97.

Added "IF <=" and "IF >=".  ckuusr.h, ckuus6.c, 18 May 97.

Changed DIRECTORY, general case (mostly UNIX), to use cmtxt() rather than
cmdir(), to allow free-form directory commands, inclusion of switches for
system directory command, redirectors, etc.  ckuus6.c, 18 May 97.

Added SET FILE EOF { CTRL-Z, LENGTH }.  Applies only to text-mode transfers.
When set to CTRL-Z, this makes the file sender treat the first Ctrl-Z in the
input file as the end of file (EOF) (NOTE: this never worked before), and it
makes the file receiver tack a Ctrl-Z onto the end of the output file if it
does not already end with Ctrl-Z.  This feature is included for any platform
for which CK_CTRLZ is defined during compilation; by default it is defined
only for OS2.  Added to SHOW FILE, reformatted SHOW FILE.  ckcdeb.h, ckcker.h,
ckuus[2347].c, ckcfns.c, ckufio.c, 18 May 97.

Changed CALL macro to not SET MODEM TYPE if given type is the same as the
current type, thus avoiding overwriting customizations.  Also, don't SET SPEED
or LINE if given values are the same as current ones.  ckermit.ini, 18 May 97.

Examined the problem in which we DIAL a modem, disconnect, then SET HOST or
TELNET, then HANGUP, and Kermit sends +++ATHO.  There is no good way to avoid
this, because this case can't reliably be distinguished from the case in which
the user does SET HOST <terminal-server>, SET MODEM TYPE <name>, DIAL.  In
both cases we have a valid modem type selected and we have a network
connection.  If the user wants to DIAL and then later make a regular network
connection, she will have to SET MODEM TYPE NONE or SET MODEM HANGUP RS232
to avoid this phenomenon.

Fixed IF EXIST and IF DIRECTORY to properly strip braces from around their
arguments, so "if directory {C:\Program Files}", etc, would work as expected.
However, this means that if the file or directory name is actually enclosed
in braces, the braces must be doubled.  ckuus6.c, 18 May 97.

Fixed problem that occurred if "set host nonexistent-host" followed by certain
commands like SEND; the original modem type was not restored and ttopen()
thought that it still had a network hostname.  ckuus7.c, 18 May 97.

Fixed HELP SET RECEIVE PATHNAMES to show default is OFF, not ON.  ckuus2.c,
18 May 97.

Fixed SET EDITOR and SET BROWSER to use PATH in UNIX.  ckuus3.c, 18 May 97.

Fixed cmifip() to make its own safe copy of the PATH string, so the caller
does not have do this every time, and simplified calls to cmifip(),
consolidating OS/2 and UNIX calls.  ckucmd.c, ckuus3.c, 18 May 97.

Got rid of the old cmdir() function, replaced it by a new one that is just a
wrapper for cmifi() that makes cmifi() parse only directory names and handle
completion and ?-file-lists.  This affects the CD, SET SERVER GET-PATH, SET
TEMP-DIRECTORY, SET FILE DOWNLOAD-DIR, and SPACE commands.  ckucmd.h,
ckucmd.c, 19 May 97.

Fix definition of TRMBUFL (termcap buffer length), and use it when allocating
the termcap buffer, trmbuf.  ckcdeb.h, ckuusx.c, 19 May 97.

Don't print "Warning: terminal type unknown, Fullscreen file transfer display
disabled" if C-Kermit is in remote mode.  ckuusx.c, 19 May 97.

Allow GET and RECEIVE as-names to override RECEIVE PATHNAMES setting.
rcvfil(), ckcfns.c, 19 May 97.

The READ command was being overly picky about "last line lacks terminator".
I changed it to allow the last or only line to lack a terminator.  This is a
sneaky way of allowing even binary files to be read into a variable (all at
once) if the READ buffer is set large enough (and the file does not contain
NUL characters).  doask(), ckuus6.c, 19 May 97.

The braces problem: Since braces are used in function calls to indicate
grouping, there is no way to pass literal braces to the function itself.
Solution: Define a variable containing the string that has braces.  Example:

  define \%a ab{cd
  echo \fsubstring(\%a)
  ab{cd  

If the string is to start with a leading brace and end with a closing brace,
then double braces must appear around the string (which itself is enclosed in
braces):

  define \%a {{{foo}}}
  echo \fsubstring(\%a)
  {foo}

This also works for any other kind of string:

  define \%a {{ab{cd}}
  echo \fsubstring(\%a)
  ab{cd  

No changes here -- this is how it has always worked, but was not documented
before.

Lots of users try to write scripts for Telnet logins, but use "telnet"
rather than "set host"... eventually they log out or close the connection,
and then when the INPUT command executes, it says "?Can't condition line
for INPUT", which is singularly uninformative.  I made INPUT issue a better
message when it knows the connection is not open (CK_TTYFD is defined and
ttyfd == -1).  doinput(), ckuus4.c, 19 May 97.

Added SET INPUT AUTODOWNLOAD { ON, OFF } (to control autodownload during INPUT
separately from during CONNECT) and SHOW INPUT.  ckuusr.h, ckuus[r2457].c,
19 May 97.

Changed CD to use CDPATH, like ksh.  If the CDPATH environment variable is
defined, then it is used: if a CD command is given for a relative directory,
then if it is not found in the current directory, the CD path is searched for
a directory that contains a directory of the given name.  ckucmd.c, ckuus5.c,
20 May 97.

Rearranged #ifdefs in ckcdeb.h so CK_ENVIRONMENT would take effect for UNIX.
20 May 97.

Added CGET command (GET to pipe).  ckuusr.h, ckuusr.c.  21 May 97.

Added SET EOF as invisible synonym for SET FILE EOF.  ckuusr.h, ckuus[37].c,
21 May 97.

Fixed UNIX version of CD, when following CDPATH, to treat an empty member as
the current directory, rather than root (by definition of CDPATH).  ckucmd.c,
22 May 97.

Changed netopen() to supply "23" as the default service, rather than "telnet",
to sidestep all the problems we have been having with getservbyname()
returning the service number with its bytes swapped.  ckcnet.c, 23 May 97.

Installed patches for CMUIP from Wolfgang Moeller <moeller@decus.decus.de>.
ckutio.c, 23 May 97.

Some fixes for Wollongong Pathway from Ray Hunter.  ckcnet.c, ckvtio.c,
23 May 97.

Some new #ifdefs for UCX / DECC from Martin Zinser.  ckcnet.c, 23 May 97.

Added CHECK NETWORK before trying to SET NETWORK DIRECTORY.  ckermit.ini,
23 May 97.

Added support for AT&T KeepinTouch modem card.  Moved modem-type definitions
to ckuusr.h.  ckuusr.h, ckudia.c, 27 May 97.

Fixed SET EDITOR and SET BROWSER to convert filename to a full pathname
in case it wasn't already.  Removed SET BROWSER from all implementations
except OS/2 and Windows.  ckuusr.c, ckuus3.c, 28 May 97.

SET EXIT WARNING didn't work properly when connection was opened with
-l, -j, or -J on command line.  Fixed in ckuusy.c, 29 May 97.

Fixed SET EDITOR to use EDITOR environment variable as default.

Fixed SET PROTOCOL not to parse external command fields if protocol is Kermit
(it never should have); Kermit isn't an external protocol.  ckuus3.c, 1 Jun 97.

Added "autoserver" command, 1 Jun 97:
 . It is not part of ptab[], since is specific to Kermit protocol.
 . Initialize char * srvstring to "kermit -x" in initproto(), ckcmai.c.
 . Added new 3rd field to SET PROTOCOL KERMIT for server string, ckuus3.c.
 . Updated SHOW PROTOCOL to display the server string, ckuus4.c.
 . Added code to send server string when GET or REMOTE are given, ckcpro.w.
 . Updated help message for SET PROTOCOL, ckuus2.c.

Added -O command-line option: "be a server, but execute Only One command".
ckuusy.c, 1 Jun 97. 

Added a new keyword flag, CM_HLP, which (when combined with CM_INV), means
that the keyword, which is normally invisible, becomes visible in a HELP
command.  Adjusted calling conventions and prototypes for various command
parsing functions accordingly.  ckucmd.h, ckucmd.c, 2 Jun 97.

Added new keywords to top-level cmdtab[]: FUNCTIONS and KVERBS with CM_HLP
flag, visible only from HELP.  ckuusr.c, 2 Jun 97.

Filled in help text for each function (61 of them), and fixed some mistakes in
the function keyword table, fnctab[].  Adds about 8K. ckuus[24].c, 2 Jun 97.

Added reference to HELP FUNCTION to SHOW FUNCTION.  ckuus5.c, 2 Jun 97.

Added \v(regname), \v(regorg), \v(regnum), invisible variables for
registration info; they just call get_reg_blah() from ckoetc.c.  ckuusr.h,
ckuus4.c, 2 Jun 97.

Added \v(xprogram), the specific program name: "K-95", "K/2", or "C-Kermit".
ckuusr.h, ckuus4.c, 3 Jun 97.

From Jeff, 5 Jun 97:
 . \v(line) changed to return Kermit form of TAPI device name (no blanks etc).
 . Fix for internal coding error with IF EQUAL s1 s2.

Added IF TAPI.  ckuusr.h, ckuus6.c, 5 Jun 97.

Seemingly minor problems with cmdir() directory parsing fixed, 5 Jun 97:

 1. "cd /" would tend to fail because "too many directories match"; fixed in
    cmdir() by not calling zxpand if we are parsing a directory name and it
    does not contain any wildcard characters.

 2. "cd xxx<ESC>" would not supply the trailing directory separator when
    completion was successful.  Fixed in ckucmd.c.

 3. "cd xxx?" could produce unbalanced columns, etc.

 4. "cd xxx<ESC>" would fail even if only one directory started with "xxx",
    if a regular file also started with "xxx".

Problems 3 and 4 resulted from the fact that "x = zxpand(string);" returned
the number of *all* matching files, not just the number of directories that
matched.  But since it's far too late to change the API to add a new function
to return a list of directories, or to add an argument to zxpand(), I used a
horrible hack: cmdir() sets a global variable, dironly, if a list of only
directories is desired.  If dironly == 0, zxpand() behaves as before.  This
was implemented in the UNIX version of zxpand() in ckufio.c, but nowhere else,
although it is easy enough to add (but not to test!) in OS-9, etc.  If dironly
is to be set prior to calling to zxpand(), but MUST be restored immediately
after so as not to disrupt other legitimate callers throughout the code.
Thus, this usage is strictly confined to cmdir() (really cmifi2()) and not
documented in the API.

 5. "cd xxx<ESC>" left a space at the end when completion was successful.

It has to, in case there is a subsequent field.  Peter Eichhorn asked that it
stop at the "/" in case there are subdirectories, but how would we know (a)
that there *are* subdirectories without descending through the entire
directory tree, which could take hours, and (b) that even if there were
subdirectories, that this was not the directory the user wanted to CD to?
So no action here.  BTW, note that "if directory blah" does not use cmdir();
if it did, and "blah" was not a directory, we'd get a parse error.

Added SET BPRINTER (bidirectional printer port) for K95 only; Jeff will fill
in details; ckuusr.[ch], ckuus3.c, 6 Jun 97.  Full syntax is:
SET BPRINTER [ port speed [ parity [ flow ] ] ].

Fixed help text for PRINT and SET PRINTER.  Put BPRINTER code in #ifdef
BPRINT.  7 Jun 97.

Added options to SET EDITOR and SET BROWSER.  ckuus[r35].c, 8 Jun 97.

Added \v(editor), \v(editopts), \v(editfile), \v(browser), \v(browsopts),
\v(browsurl).  ckuusr.h, ckuus4.c, 8 Jun 97.

Added BROWSE command for UNIX & K95.  ckcdeb.h, ckuusr.h, ckuusr.c, 8 Jun 97.

Changed ^W to delete back to nonalphanum rather than back to space.
ckucmd.c, 8 Jun 97.

Updated help text for today's changes.  ckuus2.c, 8 Jun 97.

Fix GETOK -- it had garbage for the default prompt.  ckuus6.c, 17 Jun 97.

Added STATISTICS /BRIEF for Peter Eichhorn.  ckuusr.[ch], ckuus[24].c,
18 Jun 97.

Fixed Telnet SEND LOCATION negotiation to send WONT, rather than WILL,
if we don't have a location, in response to DO LOCATION.  ckcnet.c, 18 Jun 97.

Fixed EDIT and BROWSE to handle %1 (OS/2 & Windows only) and %s in the options
string as a filename placeholder.  ckuusr.c, 18 Jun 97.

Added array initializers, e.g. "declare \&a[3] {value1} {value2} {value3}".
Initializers are (a) optional, (b) start with element 1, (c) can only be given
up to the size of the array, (d) must be enclosed in braces if they contain
spaces, (e) are stored literally and not evaluated.  ckuusr.c, 18 Jun 97.

Added OS-9 support for incoming TCP/IP connections, from Steve Rance
<stever@ozemail.com.au>.  OS-9 has no select() call, so he made a dummy one.
ckcnet.c, 19 Jun 97.

Defined BIGBUFOK for AIX on RISC.  ckcdeb.h, 20 Jun 97.

---1.1.13---

Installed MINIX 2.0 changes from Terry McConnel, Math Dept, Syracuse U,
trmcconn@syr.edu, plus a new makefile target.  cku[tf]io.c, ckuus6.c,
ckucmd.c, makefile, 28 Jun 97.

Added zfnqfp() (the unspellable function) for AOS/VS.  Also zmkdir() and
isdir(), plus the changes for the new cmdir() support.  ckcdeb.h, ckuus3.c,
ckuus6.c, ckdfio.c, 29 Jun 97.

Removed spurious "extern int delay" from ckcfn2.c.  29 Jun 97.

Filled in MKDIR and RMDIR commands for AOS/VS.  But rmdir() doesn't work for
some unknown reason; "perror" always says "30 End of File".  The AOS/VS C
programming docs do not list any way to delete a directory.  So I changed it
to system("delete blah"), where blah is the directory name.  It works, but it
doesn't return a status code, and it also removes regular files.  Meanwhile,
AOS/VS stat() sometimes crashes.  There's nothing I can do about it, and no
pattern I can find as to what conditions make it happen.  ckuusr.c, 30 Jun 97.

Changed sfile() not to send filename as FILE001, etc, if an as-name is defined
as a variable that has no value.  This was a bug introduced in the template
code.  "send \%1 \%2" would cause this to happen (as in the BSEND macro).
ckcfns.c, ckermit2.upd, 30 Jun 97.

Fixed DG isdir() to not call stat(), to prevent crashing -- now it does the
appropriate VS syscall directly.  Also fixed DG iswild() not to return false
positives because of ^, which is like .. in UNIX.  ckdfio.c, 1 Jul 97.

Fixed cmdir() for DG to not append : to directory name during completion,
because chdir() does not work if you do that.  ckucmd.c, 1 Jul 97.

END from inside SWITCH did not work right -- SWITCH, although implemented
as a macro internally, should not count as a macro level to END.  This was
already handled correctly for FOR, WHILE, and XIF.  Added SWITCH to the list.
ckuusr.c, 3 Jul 97.

Added cmswi(), which is just like cmkey(), but for switches (optional keywords
that begin with "/").  If the CM_ARG bit is set in the keyword table, then the
switch takes an argument, separated by ":" or "=", e.g. /PROTOCOL:KERMIT.
Otherwise, it doesn't, e.g. /BINARY.  ckucmd.[ch], with some testing material
(under the TYPE command) in ckuusr.[ch], 4 Jul 97.

Added chained parse fields.  New function cmfdb(), takes the address of an FDB
struct (containing parse function code plus inputs for the function -- help
message text, default, etc), as an arg, which may contain a pointer to another
one, and so on, until the "next-FDB" pointer is null.  If user's input is not
parsed successfully by the first, then the second is tried, and so on to the
end of the chain, at which point a parse error is returned.  ESC and ? work.
ckucmd.[ch], 4 Jul 97.  (What does FDB stand for?  I don't remember; that's
what they were called in TOPS-20... Function Descriptor Block?)

Removed testing material from the TYPE command.  Added experimental XSEND
command, which is like SEND, but takes all sorts of switches: /BINARY,
/AS-NAME:xxx, etc.  It replaces the old SEND, plus CSEND and PSEND, as well as
MOVE and the BSEND and TSEND macros.  Filled in the actions for all switches.
XSEND is implemented entirely in doxsend().  ckuusr.[ch], 5 Jul 97.

Finished testing & debugging XSEND command.  Verified that when given no
switches, it behaves exactly like the SEND command, and so repaced the SEND
command with doxsend(), leaving the old code still there for CSEND, PSEND,
etc, so they can still be used.  The new arrangement allows more and more
variations on SEND to be accomplished without adding top-level commands.  It
also allows combinations that were not possible before, such as /PRINT or
/MAIL with a SEND-LIST, SEND /PRINT /DELETE or SEND /COMMAND /MAIL:address.
Changed MOVE, CSEND, MAIL, and RESEND to use doxsend(), since they have the
same format as SEND.  Left MSEND, MMOVE separate.  Added description of
switches to ckermit2.upd, section 1.5, and new section 4.7 on SEND command.
Changed HELP SEND text.  6 Jul 97.

Same treatment for RECEIVE / CRECEIVE; GET / REGET / CGET / RETRIEVE.
ckuus[r6].c, ckermit2.upd, 7 Jul 97.

Updated help text for RECEIVE and GET.  ckuus2.c, 8 Jul 97.

Updated section 4.2 of ckermit2.upd to show new forms.  8 Jul 97.

Added switches to MSEND and MMOVE, combined code into doxsend().
Made many of the stupider command names (CGET, RETRIEVE, etc) invisible;
now top-level ?-help looks a lot better.  ckuusr.c, 8 Jul 97.

Corrections and refinements to switch code.  Fix MSEND/MMOVE when used with
ZMODEM, when used with /MAIL, etc.  Eliminate ambiguity about what happens
when a switch that must take an arg is followed by a space.  The rule is:
if a switch name ends in : or =, then if the next character is a space, that
means an empty value has been given, and the next field is parsed.  ckuusr.c,
ckucmd.c, 9 Jul 97.

#ifdef adjustments for HP-UX 10.x and Digital UNIX 3.2/4.0 from Jonathan
Kamens <jik@cam.ov.com>.  ckcdeb.h, ckufio.c, ckutio.c, 12 Jul 97.

Fixes (or stabs in the dark at fixes) for recently reported VMS problems; see
notes in ckvtio.c for edit 091.  12 Jul 97.

Added some missing #ifdefs for protocol switching and pipesend to the recent
switch-parsing code.  ckuus[r6].c, 12 Jul 97.

Added some missing prototypes for recently added command-parsing functions.
ckuusr.h, ckucmd.h, 12 Jul 97.

--Alpha.01--

Added APC check to MOVE/MMOVE -- we don't want APC strings stealing files
from people...  ckuusr.c, 13 Jul 97.

Now that we have all the pipesend / receive filter stuff in place, it turned
out to be easy to rearrange the mail-receiving code to pipe the incoming
material directly into the mail program (in UNIX).  This has the advantages of
(a) not requiring a temp file, and (b) allowing a normal subject in place of
the filename.  Temp files were bad not only because they required (a) space,
and (b) writeability of the current directory, but also because using them
could result in wiping out an existing file.  So now:

  send /mail:whoever@xyz.com /as:{Hi there} oofa.txt

when sent to C-K results in whoever@xyz.com receiving oofa.txt as email
with subject "Hi there".  ckcpro.w, ckcfns.c, 13 Jul 97.

Added /SUBJECT: as a synonym for /AS-NAME:, and fixed a couple minor glitches
related to mail.  ckuusr.c, 13 Jul 97.

Changed reception of print files (from REMOTE PRINT or SEND /PRINT) to use
pipes also.  UNIX only.  ckcpro.w, ckcfns.c, 13 Jul 97.

In response to people *still* complaining about exit warning when they swear
the modem is not asserting CD...  In hupok(), ttgmdm() returns an error.  This
can happen if we used to have carrier but now we don't and the device driver
won't let us look at the device any more (e.g. Solaris 2.5).  Previously, we
always set needwarn to 1 here to be safe, but really, if CARRIER-WATCH is OFF,
we already decided not to warn, so CARRIER-WATCH must be ON or AUTO, which
*probably* means that we had CD on this connection before, and so if ttgmdm()
fails now, it means we don't have it any more.  So now let's try NOT warning
when ttgmdm() returns an error.  ckuus3.c, 13 Jul 97.

Speaking of modems, in response to increasing requests for an option to ignore
dialtone, added SET DIAL IGNORE-DIALTONE { ON, OFF } and SET MODEM COMMAND
IGNORE-DIALTONE <command>, and a new ignoredt member to struct MDMINF, etc
etc.  Untested, except that SET, SHOW, and HELP work OK.  ckcker.h, ckuusr.h,
ckuus[234].c, ckudia.c, 13 Jul 97.

Back to VMS...  Noticed that zxpand() would malloc() its array of filenames
every time it was called, but nobody would ever free them.  Fixed in ckvfio.c,
14 Jul 97.

An off-by-one error in the switch parser caused the placeholder for highest-
numbered switch value (SND_LBL) to go uninitialized, thereby making VMS
C-Kermit send in labeled mode (depending what was in the uninitialized
memory).  Fixed in doxsend(), ckuusr.c, 14 Jul 97.

Lots of changes to isdir() and cmdir() for VMS.  The idea is to make directory
parsing work as in UNIX, Windows, AOS/VS, etc, but it's much harder in VMS
because a directory can be represented in many ways: a logical or device name,
or [FOO.BAR], or DEV:[FOO.BAR], or [FOO]BAR.DIR;1, etc.  This was about two
days' work, with some help on isdir() from Mark Berryman.  ckucmd.c, ckvfio.c,
15 Jul 97.

Removed gratuitous message showing new directory from docd().  ckuus5.c,
15 Jul 97.

Fixed UNIX "cd ~name" to work again -- I must have broken it recently.
ckucmd.c, 15 Jul 97.

Changed ckindex() to accept -1 as a "starting position" argument, meaning
"length of string 2".  ckcmai.c, 15 Jul 97.  (NOTE: fix \frindex() to take
advantage of this...)

Amplifed, reorganized, and numbered ckuins.doc.  16 Jul 97.

Attempted to add support for 57600, 76899, and 115200 bps for IRIX 6.2 (the
first release of IRIX that supports these speeds).  A previous attempt at
doing this by adding -DPOSIX to the make was a disaster.  This time I tried
defining POSIX for IRIX62 within ckutio.c only around ttsspd() and ttgspd(),
and also defined the BPS_xxx symbols for IRIX62 in ckcdeb.h.  16 Jul 97.

Mike Freeman reported that login scripts didn't work in VMS.  Evidently this
was because a new check was added for ttyfd == -1, but VMS doesn't use file
descriptors, and so ttyfd is always -1 there.  Fixed doinput() in ckuus4.c to
skip this test for VMS.  16 Jul 97.

Found a few places where the protocol module was not setting the exit status
code; hopefully caught them all.  ckcfn2.c, 16 Jul 97.  Nope, that wasn't it.
The real problem was that the "what" variable was set to W_NOTHING until a
protocol transfer actually had begun.  So if we timed out on the first packet,
ORing "what" into the exit status had no effect.  Fixed in ckcpro.w by
initializing what to 1 rather than W_NOTHING.  16 Jul 97.

Changed "CD" (by itself) in VMS to simply chdir("SYS$LOGIN:").  ckvfio.c,
16 Jul 97.

Fixed IF ALARM to make sure both time comparands are left-padded with "0"s
so they compare correctly with strcmp().  ckuus6.c, 18 Jul 97.

Previously MGET and GET were synonyms.  But now the new GET syntax prevents
the (little-known) feature in which you could GET a list of files, like "get
oofa.txt *.ps /etc/motd".  So now MGET has become a separate command that does
allow this syntax (but no as-names).  This also fixes a problem with "get xxx
yyy" (i.e. as-name is yyy), resulting in "?Write permission denied - yyy".
It also fixes a bug with "get {xxx yyy zzz}", in which the first "{" was not
removed prior to sending the R packet.  ckuusr.[ch], ckuus[26].c, 19 Jul 97.

Added a note to top-level help about macro names.  Changed built-in predefined
names _forx, _whilex, etc, to be invisible so they don't show up in "do ?".
ckuus5.c, 19 Jul 97.

Corrections & updates to ckermit2.upd, 19 Jul 97.

Fixed ANOTHER off-by-one error in the declarations of switch tables for SEND
and GET (this was a bad one, causing core dumps).  ckuus[r6], 19 Jul 97.

---Alpha.02---

James Cameron verifies the VMS problem with closing DECwindow on C-K is fixed.
20 Jul 97.

Added cmdate() to parse a date and/or time.  ckucmd.[ch], 20 Jul 97.

Dale Dellutri says problem with hanging after "Communications disconnect" is
fixed, but NO CARRIER message never shows up (as it always did in 5A(190)).
Asked him for a debug log.  21 Jul 97.

Added /BEFORE: and /AFTER: switches to SEND, using cmdate().  Also added
/LARGER-THAN: and /SMALLER-THAN:.  ckcfns.c now has a nice fileselect()
routine that decides whether to send the file based on these switches.
ckuusr.c, ckcfns.c, ckuus2.c, ckermit2.upd, 21 Jul 97.

Added a crude pattern matcher, ckmatch(pattern,string), supporting only * and
? as metacharacters.  ckcmai.c, 21 Jul 97.

To test it, added IF MATCH <string> <pattern>.  ckuusr.h, ckuus6.c, 21 Jul 97.

Added /EXCEPT:<pattern> to SEND.  ckuus[r2].c, ckermit2.upd, 21 Jul 97.

Fix #ifdefs so that CK_ENVIRONMENT is not defined unless TCPSOCKET is defined,
to prevent unresolved externals at link time in non-TCP/IP UNIX builds.
ckcdeb.h, 21 Jul 97.

Add new updates for wait() argument (is it "int" or is it "union wait"?).
ckutio.c, 21 Jul 97.

Rearrange some lines in ckcnet.c so ucx_port_bug does not turn up undefined
if we are using DECC, 21 Jul 97.

Built on Digital UNIX 4.0 (where there is a warning about wait() that I can't
seem to shut up) and 3.2 (no problem there).  21 Jul 97.

Fixed numerous #ifdef errors regarding feature selection, many modules.
21 Jul 97.

Shuffled some more #ifdefs and variable declarations to allow for NOICP build.
Minor help text cleanups.  Don't allow SEND /STARTING-AT:n for file groups.
Many modules, 22 Jul 97.

Fixed another (off-by-one) bug with transfer mode in VMS (it always insisted
on receiving in labeled mode).  ckuus6.c, 22 Jul 97.

VMS C-Kermit would crash if given invalid command-line args detected in
prescan() because fatal(), called to print the error message, could not print
it because sysinit() had not yet been called to obtain the console channel.
This mess really needs cleaning up.  Meanwhile, I worked around it by having
all the console i/o routines in VMS check first to make sure they have an open
channel, and also to have main set a global flag "initflg" after return from
sysinit() to indicate that sysinit has been done.  If it hasn't, then fatal
calls sysinit() first before trying to print any messages or exit.  This is
also important elsewhere in case (e.g.) we try to restore some systemish
things that we haven't saved yet, e.g. tty modes or somesuch.  ckcmai.c,
ckuusx.c, ckvtio.c, 22 Jul 97.

Fixed cmini() to not assume that buffers had already been malloc'd.
ckucmd.c, 22 Jul 97.

Got tired of having to remember to update version numbers, dates, etc, in so
many places, so broke all these strings up into their component parts so that
each one only has to be changed in one place, pretty much, and then added a
routine, makever(), to put the various strings and numbers in the places where
all the other routines expect to find them.  ckcmai.c, 24 Jul 97.

Added \v(test) == "0" if this is not a test version of Kermit, or else the
test version, e.g. "Alpha.03".  ckuusr.h, ckuus4.c, 24 Jul 97.

Added optional pattern for SHOW VARIABLES, e.g. "show var *ver*".  Also, "show
var x" shows all variables whose names start with x, etc.  ckuus5.c, 24 Jul 97.

Fixed a bug in the parsing of the LOCAL command.  ckuus5.c, 24 Jul 97.

The test for DELETE success/failure was wrong in the non-K95 case.
Fixed in dodel(), ckuus6.c, 25 Jul 97.

Added \fn2hex() and \fn2oct() to convert numbers to hex and octal.  \fhexify()
converts *strings* to hex, which is quite different.  E.g. \fhex(16) = 3130,
whereas \fn2hex(16) = 10.  ckuusr.h, ckuus[24].c, 26 Jul 97.

Changed default maximum packet buffer size to 290K if BIGBUFOK and DYNAMIC are
both defined at compile time.  This doesn't change the size of the executable,
and the memory is allocated only if requested.  ckcker.h, 26 Jul 97.

Missing file display on RESEND after SEND, and SEND after RESEND behaved like
RESEND.  Fixed misplaced #ifdefs in doxsend.  ckuusr.c, 26 Jul 97.

Scenario: my current directory has a file that I can delete, but the directory
itself lacks write permission.  I try to receive a file into this directory
that has the same name as an existing file, with FILE COLLISION set to BACKUP.
The transfer fails, not because I can't overwrite the original file, but
because I can't create the backup file.  But when in local mode, the
appropriate message does not make it to the file-transfer display.  This took
quite a bit of reworking how E packets work and where their messages are
saved, but it seems OK now.  If the user sees the new message ("Can't create
backup file"), she can switch to SET FILE COLLISION OVERWRITE or APPEND,
which work.  ckcpro.w, ckcfn*.c, ckermit.bwr, 26 Jul 97.

Things I should have thought of long ago dept, cont'd...  Added a new internal
variable, xferstat, that remembers the status of the most recent file
transfer: -1 = no transfer yet, 1 = failure, 0 = success.  Added this info,
plus the text of the error packet that terminated an unsuccessful transfer,
to the STATISTICS display.  Also added variables for these: \v(xferstat)
and \v(xfermsg).  ckuusr.h, ckuus4.c, ckermit2.upd, 26 Jul 97.

Cleaned up a bunch of internal messiness involving file-transfer failures.
For example, clsof and clsif should not do all of their usual stuff if the
file they are trying to close was never opened.  In particular, they should
not call fstats(), which writes messages to the transaction log and
accumulates statistics.  ckcpro.w, ckcfn[s23].c, ckuusx.c, 26 Jul 97.

Simplified & corrected parsing of RETURN and added brace-stripping for the
return value.  ckuusr.c, 26 Jul 97.

Added a BACK command, which means to "CD to my previous current directory".
Very simple, not a stack -- so successive BACK commands just switch between
two directories.  ckuusr.[ch], ckuus[52].c, ckermit2.upd, 26 Jul 97.

Added an optional switch, /RAW-SOCKET, to end of SET HOST / TELNET command.
It can be given only if you first give a host and a port.  When this switch is
given, ttnproto is set to the new value, NP_TCPRAW.  See ckermit2.upd 2.3.5.
ckuus7.c, ckcnet.[ch], 26 Jul 97.

Fixes to /raw-socket code from yesterday to make it actually work, and add
display of this to SHOW NET.  ckcnet.[ch], ckutio.c, ckuus4.c, 27 Jul 97.

Fixes to epktmsg-related code from yesterday -- in some cases the pointer was
not initialized, causing core dumps, etc.  Many modules, 27 Jul 97.

Added zgperm() to ckufio.c, UNIX only for now (protected by CK_PERMS), to get
file modes/permissions.  ckufio.c, ckcplm.doc, 27 Jul 97.

Used zgperm() in rcvfil() in the file collision section.  If the incoming file
has the same name as an existing file, and we are going to create a new copy
or overwrite the existing file, we get its permissions first and stuff them
into the attribute structure when initializing it (in initattr()).  If the
sender puts its own (local-format) permissions in the A-packet, these will
override.  But if it doesn't, then the new file inherits the permissions of
the old one.  If there is no A-packet, the new file inherits the old file's
permissions, but the new file gets the current date and time.  If there is
no file collision, there is no inheritance.  ckcfn[s3].c, 27 Jul 97.

Adjustments to ckcnet.h for DECC 5.5-002 (remove bzero/bcopy prototypes).
27 Jul 97.

---Alpha.03---

Fixed some bad buffer & pointer declarations in ckcmai.c when DYNAMIC not
defined.  28 Jul 97.

Changed SEND /EXCEPT: to allow a list of patterns, rather than just one.
ckuus[r5].c, ckcfns.c, 29 Jul 97.

Added SEND /NOT-AFTER: and /NOT-BEFORE: to get the {greater,less}-than-or-equal
effect.  ckuusr.[ch], ckuus2.c, 31 Jul 97.

Added SET FLAG { ON, OFF } and IF FLAG.  It's just a user-settable flag that's
easy to test in scripts.  ckuusr.[ch], ckuus[23].c, 1 Aug 97.

Added { SEND, RECEIVE, GET, etc } /FILTER.  ckuus[r26].c, 1 Aug 97.

Fix from Jeff for reconnecting to a raw TCP socket without having the protocol
switch to Telnet.  ckcnet.c, 2 Aug 97.

Changed dial module to echo commands if DIAL DISPLAY is ON but modem is not
echoing them.  ckudia.c, 2 Aug 97.

Added a new member to struct MDMINF -- ini2, the last-minute init string, to
be sent just prior to dialing.  For compatibility with TAPI.  ckcker.h,
ckudia.c, 2 Aug 97.

Added SET MODEM COMMAND PREDIAL-INIT <string> to set the last-minute init
string.  ckuusr.h, ckuus[23].c, 2 Aug 97.

Reported problem with PPI seems to be lost chars on output -- commands are OK.

Added \v(sendlist) = number of entries in send-list.  ckuusr.h, ckuus4.c,
2 Aug 97.

Updated the TAP script to be more robust, etc.  ckepage.ksc, 2 Aug 97.

Added /PATHNAMES:{ON,OFF} and /FILENAMES:{CONVERTED,LITERAL} to SEND commands.
SEND /PATHNAMES:ON also temporarily SETs FILE NAMES LITERAL.

Noticed that more-prompting in the STATISTICS command was messed up.  It
turned out that the cmd_rows variable got set to 0 after a failed file
transfer (and who knows what else!).  Why?  When an E packet is received, we
have some new code to copy the error message to a "failure reason" buffer
using strncpy.  Well, the target buffer was being accessed thru a string
pointer that was mistakenly declared as an array (it originally was an array,
but later was changed to a pointer, and evidently the change didn't propogate
thru all the modules).  This one was great fun to track down.  ckcfn[s23].c,
ckuus4.c, 2 Aug 97.

Some testers of Alpha.03 noticed that REMOTE DIRECTORY didn't work.  It was
actually worse than that.  I had broken this when adding the code to avoid
closing a file when it wasn't open.  First, the o_isopen flag was not always
being set, and second reof() did not give a proper return code.  Now fixed.
ckcfn[s3].c, 2 Aug 97.

But sending of remote commands to pipes was also broken in Alpha.03.  This
required adding a system-independent front-end to zxcmd(), openc(), that sets
the o_isopen flag.  ckcfn3.c, ckcpro.w, 3 Aug 97.

Integrated Jeff's changes from the past week.  Many modules, 10 Aug 97.

Replaced all HP-UX makefile entries with new ones from Peter Eichhorn.
makefile, 10 Aug 97.

Added high serial speeds for SCO OSR5.0.2, along with a new symbol,
POSIX_SPEEDS, used to select POSIX speed setting/getting separately from POSIX
for everything else, and predefined this for OSR5.0.2 and IRIX 6.2, along with
POSIX itself and BSD44.  Added new makefile entries for SCO OSR5.0.2.
ckcdeb.h, ckutio.c, ckuver.h, makefile, 10 Aug 97.  But this doesn't work at
all -- REVISIT THIS MONDAY...

Fixed spurious error message issued by VMS C-K when doing a GET command.
ckuus6.c, 10 Aug 97.

More futzing with SCO OpenServer R5.0.2.  To get the new high speeds, I have
to convert completely to POSIX, but this proves to be an adventure because of
the situation with hardware flow control, which is outside the scope of POSIX.
Got it, after much header-file shuffling.  This also involved some minor but
perhaps significant changes to the general POSIX code.  ckcdeb.h, 11 Aug 97.

Fixed a truly horrible bug, in which the modem types above 55, namely
SupraSonic, Best Data, ATT 19x0, and ATT KeepInTouch, were indexed
incorrectly, off by one, because the pointer to SupraSonic was left out of the
modemp[] array.  This goes back to May, and nobody ever noticed.  ckudia.c,
12 Aug 97.

NOTE: THERE IS STILL MORE CONFUSION LURKING because of 1-based modem numbers
versus 0-based modemp indexes!

More fixes for POSIX serial i/o in SCO OSR5.0.2, and presumably elsewhere too.
ckutio.c, 12 Aug 97.

Spent the morning determining there was no way to read modem signals in SCO
OSR5.0.4 (in termio.h, TIOCMGET is defined only if _SVID3 is defined *and*
_POSIX_SOURCE is *not* defined, but we need _POSIX_SOURCE defined so we can
get the high serial speeds).  Anyway the underlying ioctl() probably is a just
no-op.  13 Aug 97.

Noticed and fixed a typo in the Telebit init string: S61=1 should be S61=0
(BREAK action should be "do what S63 says" rather than "return to command
mode").  ckudia.c, 13 Aug 97.

Fixed hardware flow control in SCO OSR5.0.4 -- more #ifdef juggling.
makefile, ckcdeb.h, ckutio.c, 13 Aug 97.

Changed references to modemp[n_TAPI] to modemp[n_TAPI - 1] because the
modemp[] array is 0 based even though the modem type numbers are 1-based.
Confusing but true.  ckudia.c, 13 Aug 97.

Another day spent with SCO 5.0.4.  Evidently the new stuff (high serial speeds
etc) only works in 5.0.4, even though it might be in the header files for
5.0.2, so I changed the symbols, makefile entry names, etc, accordingly.
Experimentation with flow control revealed:

 . The <sys/termiox.h> material (RTSXOFF/CTSXON) compiles OK but doesn't work
   (the ioctls return -1).
 . The RTSFLOW/CTSFLOW material does not show up in a POSIX compilation.
 . Forcing RTSFLOW/CTSFLOW definitions (yuk) seems to do the trick.

But forcing TIOCMGET does not get us working modem signals -- the ioctls just
say "invalid argument".  But I left it in anyway, because some third-party
drivers, like Digiboard, might implement it.  ckcdeb.h, ckutio.c, ckuus5.c,
makefile, ckuins.doc, 14 Aug 97.

Straightened out the aforementioned mess with the modemp[] array.  Now that
wasn't so hard, was it?  ckudia.c, ckuus[34].c, ckuusr.h, 14 Aug 97.

Changed mainline binary variable when switching automatically from text to
binary mode in VMS C-Kermit -- cosmetic only; should only affect the
file-transfer display.  ckvfio.c, 14 Aug 97.

Changed SET EDITOR and SET BROWSER in VMS to parse text strings rather than
filenames.  It turns out that zshcmd() (in VMS, a front end for LIB$SPAWN())
can not run programs when given a filespec; it runs DCL commands, period --
always has -- did I know that?  ckuus3.c, ckermit2.upd, 14 Aug 97.

Added support for USR XJ1560 X2 56K modem.  ckuusr.h, ckudia.c, 14 Aug 97.

Changed keyword parser to skip over CM_INV keywords when completing an
abbreviation.  ckucmd.c, 14 Aug 97.

Fixed some typos from yesterday's SCO work.  ckutio.c, 15 Aug 97.

Discovered that "remote host xxx" followed by "get" did not work.  This was
yet another case of the i_isopen flag not being set (this time in syscmd()).
I'm wondering now what the original idea was behind these stupid flags -- oh
yeah, I remember -- calling fstats() would have the side effect of writing a
misleading transaction log entry if the file had never been opened.  Anyway,
all fixed now.  ckcfn[s3].c, 16 Aug 97.

Fix from Jeff for tn_ini() -- make sure *all* Telnet protocol flags are
reset.  ckcnet.c, 17 Aug 97.

Miscellaneous minor corrections from compiling on many platforms.
ckuusr.c, ..., 17 Aug 97.

---Alpha.04---

Changed USR X2 max speed to 115200.  ckudia.c, 18 Aug 97.

Some tentative changes for Apollo SR10.  ckuusx.c, ckuver.h, 18 Aug 97.

Some of the cmfld()-parsing SEND (etc) switches were not stripping braces.
ckuusr.c, ckuus6.c, 19 Aug 97.

Console modes were not being twiddled in the EDIT and BROWSE commands, which
affected VMS (some editors would not echo when started).  ckuusr.c, 19 aug 97.

Fixed a problem in which REMOTE HELP failed, caused by a rearrangement of the
code in opent() which, if it succeeded, it did not set a return value, so its
return value was random (i.e. system-dependent).  Now why didn't all those
strict ANSI compilers notice?  ckcfn3.c, 19 Aug 97.

The client end of REMOTE RENAME and REMOTE COPY have been broken since 6.0
came out -- nobody noticed till just now.  The code that was added to parse
redirectors wiped out the second field.  ckuus7.c, 20 Aug 97.

Fixed broken RECEIVE XXX for XMODEM transfers and assorted other parsing
problems in doxget().  ckuus6.c, 23 Aug 97.

Added CONNECT command switches:

 /QUIETLY              All but K95    (n/a)
 /IDLE-LIMIT:int       K95 only       int    tt_idlesnd_tmo;
 /IDLE-STRING:string   K95 only       char * tt_idlesnd_str;
 /TIME-LIMIT:int       K95 only       int    tt_timelimit;
 /TRIGGER:string       K95 only       char * tt_trigger_str;

Like file-transfer switches, these are local to the specific CONNECT command,
overriding, but saving and restoring, the global session-limit and other
corresponding settings.  /QUIETLY was already there, and it's still the only
one that non-K95 users will see; session limits, etc, are implemented only
in K95.  ckuusr.[ch], 23 Aug 97.

Added partial completion of keywords.  ckuusr.h, ckucmd.c, ckcmai.c,
23 Aug 97.

Corrected a couple minor problems with partial completion and CONNECT
switch parsing.  ckuusr.c, ckucmd.c, 24 Aug 97.

Discovered that if you typed Esc when entering a field parsed by chained
fdb's, nothing happened if the field had no default value -- in fact it should
have beeped.  Fixed in ckucmd.c, 24 Aug 97.

Changed VMS zhome() to use SYS$LOGIN rather than HOME.  This is to avoid the
problem that occurred when using getenv(HOME) as a default for CD, and that
directory was defined as a search path -- e.g. SYS$SYSROOT:[SYSMGR] on a
cluster, where SYS$SYSROOT: was a list of disks, namely that you can't SET
DEFAULT to a search list.  Reportedly using SYS$LOGIN: avoids this problem
and seems to work OK otherwise.  ckuus5.c, 24 Aug 97.

Spent a few hours trying to get the IRIX 6.2 version to compile with POSIX
defined (same deal as for SCO 5.0.4), but could not find a way to make it
execute the definitions & declarations for struct timeval and the select()
related ones.  I finally gave up when I discovered that the IRIX 6.2 system
I was using for this didn't have the high serial speeds defined in any of its
header files anyway.  25 Aug 97.

Added /TRIGGER:string to UNIX CONNECT module.  ckucon.c, 26 Aug 97.

Added SET TERMINAL TRIGGER to set global trigger, which can be overridden by
local switch.  ckuus[s7].c, ckuusr.h, 26 Aug 97.

Expanded trigger feature to allow up to 8 triggers, using the same notation as
SEND /EXCEPT.  Changed makexcept() into makelist(), so it can be used to parse
any {{s1}{s2}...{sn}} string into a list of pointers to s1, s2, ..., sn.
Moved autoexitchk() to ckuusx.c, since it is portable and can be shared by all
CONNECT modules.  Added \v(trigger) to give the value of the trigger that was
selected.  Added SHOW TRIGGER to display current SET TERM TRIGGER values.
ckcdeb.h, ckuusr.[ch], ckuus[2457x].c, ckucon.c, ckermit2.upd, 27 Aug 97.

Changed CONNECT to always reset triggerval (i.e. \v(trigger)) before going
online, so that \v(trigger) refers only to the most recent CONNECT command.
ckuusr.c, ckermit2.upd, 28 Aug 97.

Added trigger support to VMS version.  Plus one last attempt at making VMS
version not lose "NO CARRIER" message.  ckvcon.c, 1 Sep 97.

Added trigger support to AOS/VS version.  ckdcon.c, 1 Sep 97.

Renamed warn variable to ckwarn to avoid conflict in BSDI 3.0.  Also added
support for high serial speeds in BSDI 2.0 and later (including a new makefile
entry).  Many modules, 1 Sep 97.  

---Alpha.05---

Changed VMS zhome() (again), this time from getenv("SYS$LOGIN") to
simply "SYS$LOGIN:".  ckvfio.c, 2 Sep 97.

Still doesn't work -- now we try it without the colon (but only as the default
for "cd", since we need the colon in other contexts).  ckuus5.c, 4 Sep 97.

Previous, cont'd...  Turns out Alpha VMS 6.2 chdir() doesn't work.  Got code
from William Bader to use sys$setddir() instead.  Works OK, but (OF COURSE
there's a BUT) it applies to the whole job and not to just the Kermit process,
so when Kermit exits, the user's default directory has changed to whatever
Kermit last CD'd to.

Rework sending of A-packets so that multiple A-packets can be sent in case all
the attributes won't fit into a single packet:
 . Added an initialize flag parameter to sattr().
 . Changed sattr() to return a positive number if it sent an A packet,
   0 if it didn't have anything to send, or -1 on error.
 . Added a new util routine, maxdata(), to return size of data field, shared
   by sattr() and getpkt().
 . Recoded sattr() to fill data field with as many attributes as will
   fit, marking each one as done, and returning when it can't fit any more,
   or there are no more left, or no more that can fit even by themselves, and
   to send the "end of attributes" attribute only after all attributes that
   could possibly have been sent, were sent, provided at least one was sent.
 . Changed the protocol engine to keep calling sattr() until it says it has
   nothing left to send.
ckcker.h, ckcpro.w, ckcfn3.c, 6 Sep 97.

Changed rpar() to not send I or S packets (or their ACKs) that are longer than
what the other Kermit asked for, again calling the new maxdata() function to
find out the length.  The parts that are chopped off from the end have their
corresponding settings defaulted automatically, overriding whatever the user
might have asked for.  ckcfns.c, 6 Sep 97.

What about F packets in this context? -- if a filename is too long, it is
simply truncated (in both the F/X packet and its ACK); there is no way in the
protocol to have continued file headers.  We could conceivably strip any
path info, but that would not always solve the problem, and anyway the user
can control this with a command.

Added a new system-dependent routine to ckutio.c: ttspdlist().  It returns a
list of speeds (as long ints) that are supported on the platform where
C-Kermit is being compiled.  Then in cmdini() we call this routine and build
our "set speed" keyword table on the fly when the program starts.  This
eliminates (just for UNIX at first) the prebuilt speed keyword table with all
the #ifdefs, and problems keeping the BPS_xxxx symbol definitions in sync with
the tt[sg]speed() routines in all the ck?tio.c modules.  ckcdeb.h, ckutio.c,
ckuus3.c, ckuus5.c, ckcplm.doc, ckccfg.doc, 7 Sep 97.

Added ttspdlist() for VMS.  ckvtio.c, ckcdeb.h, 7 Sep 97.

Added modem table entries for Rolm 244PC and 600 series.  ckuusr.h, ckudia.c,
10 Sep 97.

Added SET PRINTER PRINT command switches: /BIDIRECTIONAL, /DOS-DEVICE,
/FLOW-CONTROL, /OUTPUT-ONLY, /PARITY, /SEPARATOR, /SPEED, /TERMINATOR,
/TIMEOUT, /WINDOWS-QUEUE.  Only for K95 for now.
ckuusr.h, ckuus3.c, 10 Sep 97.

Made SHOW PRINTER show all these things.  ckuus5.c, 10 Sep 97.

Added SET PRINTER /PIPE:xxx.  ckuusr.h, ckuus3.c, 11 Sep 97.

Updated HELP SET PRINTER, ckuus2.c, 11 Sep 97.

Made another attempt at straightening out the CD mess in VMS.
ckv[ft]io.c, 12 Sep 97.

Added \v(startup) to UNIX and VMS, ckuus4.c, ckufio.c, 12 Sep 97.

Debugged VMS changes from 12 Sep.  ckvfio.c, 16 Sep 97.

Added a reference to SET EXIT to HELP EXIT.  ckuus2.c, 16 Sep 97.

Corrected various #ifdefs for building with various features deselected.
ckcpro.w, ckuus6.c, etc, 16 Sep 97.

---Alpha.06---

Put SET TERM { AUTOSCROLL, AUTOPAGE } in #ifdef OS2.  ckuus7.c, 17 Sep 97.

Put checks for and against modem signals, especially versus hardware flow
control, into the DIAL command, and also turned off hwfc during dialing
automatically for AT&T 19x0 modems.  ckuus6.c, 18 Sep 97.

IF condition keyword was completely out of alphabetical order.  ckuus6.c,
18 Sep 97.

"set host" to numeric IP address should not call gethostbyname() on any
platform; previously it did this except in Windows.  ckcnet.c, 20 Sep 97.

Fixes from Jeff to my fixes for RTS/CTS vs dialing from 2 days ago, ckcdeb.h,
ckudia.c, ckuus6.c, 20 Sep 97.  NOTE: The right way to do this is to add a new
sys-dependent ttdial() routine, to condition the device for dialing, which
does not overload the flow parameter; we'll do that later since it must
involve changing all the ck?tio.c modules.

Fixes from Jeff to NEW SET PRINTER code for when they give a Windows printer
name as the final word of the command, rather than as a switch value.
ckuus3.c, 20 Sep 97.

Save and restore default or user-requested block check around protocol.
ckcmai.c, ckcpro.w, 20 Sep 97.

Change SET WINDOW parsing to give error message for X and Ymodem[-g], and
changed for ZMODEM to require that window size be a maximum of 64K, and not
a multiple of 64.  ckuus3.c, 20 Sep 97.

Changed SET RECEIVE PACKET-LENGTH to be usable only for Kermit protocol.
In XYZMODEM, if you can change them at all, you have to do it to the sender.
ckuus7.c, 20 Sep 97.

Supplied missing error message for junk typed after "CONNECT" and then
completion was attempted (e.g. "connect xxx<ESC>").  Chained FDB parsing can
be a bit tricky...  ckuusr.c, 20 Sep 97.

Make SET SPEED 134.5 and SHOW SPEED for 134.5 work right.  ckuus[34].c,
20 Sep 97.

Fixed UNIX ttspdlist[] not to return two copies of "57600" if _B115200 was
defined, oops (HPUX only).  ckutio.c, 20 Sep 97.

Updated UNIX, VMS, etc, BWR and UPD files about lots of stuff.  20 Sep 97.

VMS CMU/IP fixes from John Santos.  ckvtio.c, ckvker.com, 20 Sep 97.

New makefile entries for all HP-UX versions from Peter Eichhorn.  20 Sep 97.

Lots of #ifdef adjusting for building on many platforms with & without various
features, assorted modules.  Builds OK on SunOS with various feature sets,
HP-UX 10.20, AIX 4.1, SINIX 5.42, Linux, VMS 5.5, and passes basic runtime
tests.  20 Sep 97.

A couple corrections to yesterday's work from Jeff.  ckuus[37].c, 21 Sep 97.

Changed minor version number from 0 to 1: 6.1.193.  ckcmai.c, 21 Sep 97.

SET TERM AUTODOWNLOAD wasn't working right in UNIX -- the first packet is
missed, so we had to wait forever for a timeout before it kicked in.  Not sure
why it stopped working, but to fix it I changed the hokey mechanism that was
being used (i.e. throw the packet away and send a NAK) to what I should have
done in the first place -- put the packet in a global buffer, caching it for
rpack(), and then actually using the one that kstart() recognized.  Of course
this wasn't easy in UNIX with the forks and all (no matter wht you want to do,
the *other* fork is always only place to do it)...  But now it works again,
and it's much faster.  ckuus4.c, ckucon.c, ckcfn2.c, 21 Sep 97.

Also removed NAK-sending code from autodown() (the INPUT command autodownload
handler), ckcfn2.c, 21 Sep 97.

Fixed VMS version to work with this too (just remove code to send NAK).
ckvtio.c, 21 Sep 97.

At the end of a protocol transaction, after we ring the bell, flush stdout --
otherwise the bell can get queued up for quite a while (e.g. if a file was
autodownloaded, the bell never rings until the next time you escape back).
This might also address reports we've had about the file transfer display not
fully updating itself before returning to the prompt.  UNIX only.  ckuusx.c,
21 Sep 97.

Ctrl-C during autodownload killed the UNIX version of C-Kermit.  This has been
true since 6.0 was first released.  Fixed in ckuus4.c, 21 Sep 97.

Added /PROTOCOL: for RECEIVE, still requiring an as-name for XMODEM.
ckuus6.c, 21 Sep 97.

Made sure that /PROTOCOL was available for both SEND and RECEIVE even if
CK_XYZ not defined (in which case it is accepted but does nothing -- i.e.
protocol remains Kermit), ckuus[r6].c,  21 Sep

The DG is dead (can't load OS from disk, hard error 0000001), RIP.  21 Sep 97.

Added addtl msgs for when UNIX C-K can't access dialout device or lockfile.
ckuus7.c, 22 Sep 97.

Filled in new speed-setting code for Plan 9.  ckutio.c, 22 Sep 97.

Now that Ctrl-C out of autodownload doesn't blow C-K away any more, I
discovered that it does prevent subsequent autodownloads.  After a lot of
heavy staring, I realized it was because the _apc_command macro is still
defined.  So I changed the Ctrl-C trap() routine to undefine it, and while
I was at it, I also had it reset a whole bunch of other protocol-related
settings by calling a new routine, ftreset(), which can also be called from
anywhere else when protocol settings need to be restored to their defaults
(e.g. after dynamic local changes that occurred during file transfer, or
because of an interrupted file-transfer command that was given with switches).
ckuusr.h, ckuus[5x].c, 22 Sep 97.

All the above stuff relative to autodownload broke APC execution in the UNIX
version of C-Kermit.  Ensured that the upper fork reads stuff from the pipe
in the same order and number that the lower fork puts the stuff there.  What
a mess, yuk -- it's so much easier without forks...  ckucon.c, 22 Sep 97.

Put back hpux500wintcp makefile entry (there's still at least one of them
out there...)  22 Sep 97.

Discovered that UNIX C-Kermit would crash upon startup if the current
directory was not readable.  Fixed in zgtdir(), ckufio.c, 23 Sep 97.

---Alpha.07---

(Actually that last item was done after the Alpha.07 binaries were built,
a few minutes after the announcement went out...)

Add /-stripping for URLs in netopen() (K95 only -- we should expand this to
work for all C-Kermits...)  ckcnet.c, 23 Sep 97.

The new autodownload code was calling parchk incorrectly, the result being
that parity was set whenever an autodownload took place, thus (at best)
slowing down the transfer by as much as 50%, or (at worst) making it fail.
Fixed in ckcfn2.c, 24 Sep 97.

---1.1.14---
---1.1.15---

Broke out separate getpkt() and decode() routines, bgetpkt() and bdecode(),
for the binary-mode no-parity case, to speed up this very common type of
transfer.  But the local net is so awful there is no way to tell if it does
any good.  ckcfns.c, 26 Sep 97.

Added fflush() to UNIX zsout() if file is ZWFILE (i.e. OPEN WRITE file) to
make it work better with pipes and FIFO files.  ckufio.c, 4 Oct 97.

Added SHOW LOGS (broke this out from SHOW FILE, which was getting too long).
ckuus[r45].c, ckuusr.h, 7 Oct 97.

Changed SET TRANSFER CRC-ACCUMULATION default from ON to OFF to speed up
transfers, added display of this setting to SHOW PROTOCOL.  ckcfns.c,
ckuus4.c, 7 Oct 97.

Tightened up decode() and getpkt() a bit more, as well as the checksum
routines.  Still no good way to test given heavy loads on systems and network.
ckcfn[s2].c, 7 Oct 97.

Changed exit-warning code to not warn under UNIX if running in background.
ckuus3.c, 8 Oct 97.

Adapted Jeff's URL-parsing code in netopen() to work for all versions, not
just K95, so now SET HOST, TELNET, -J, etc, can accept most forms of URL,
including the nutty ones from Netscape 4.0.  This is #ifdef'd in CK_URL, which
is now defined for all by default; -DNOURL overrides.  ckcnet.c, 8 Oct 97.

Generalized SET { SEND, RECEIVE } PATHNAMES at Peter Eichhorn's suggestion.
Instead of just ON and OFF, now we also allow ABSOLUTE and RELATIVE.  PATH_xxx
symbols defined in ckcker.h, new keyword table in ckuus7.c, SHOW FILE shows
new values.  I also undid the crazy "on means off", "1 - x", etc, and now just
compare against the symbol values.  ON is still accepted as an invisible
synonym for ABSOLUTE.  When receiving, if we get a (recognizably) absolute
pathname, we convert it to relative.  ckcmai.c, ckcfns.c, ckuus[r24567x].c,
8 Oct 97.

Fixed previously unused UNIXOROSK definition.  ckcdeb.h, 8 Oct 97.

Made a new symbol to enable all the new tuning code, CKTUNING, and defined it
for all but pdp11, where every byte counts.  So when CKTUNING is defined, it's
OK to duplicate chunks of code, put it inline, etc, to make file-transfer go
faster.  Added more tuning code to eliminate function calls & loops in various
spots -- calculate header checksum inline, call b{decode,getpkt} directly
rather than from inside decode and getpkt, tighten up b{decode,getpkt}
themselves.  Define NOTUNING to undo all of this and restore earlier well-
tested code.  Some of these improvements could also be filtered back into the
original general-purpose routines...  ckcfns.c, 9 Oct 97.

Microtuning, cont'd -- more of the same, in spack() and rpack().  Also in
zinfill() and zoutdump().  Guard potential function calls like debug() and
logpkt() with if-statements in critical sections, etc.  ckufio.c, ckcfns.c,
9 Oct 97.

There's no good way to test this stuff locally since the effect will be
noticed only on connections that are so fast that CPU is the bottleneck -- 
but the local net here is always saturated, so that never happens.  Still,
in many trials on an average busy day the new code seems about 50% faster
than the old.  (We also improve by a factor of 2 if we bypass the Telnet
server...)

Filled in COPY (alias CP) command for UNIX.  ckcdeb.h, ckuus6.c, ckufio.c,
9 Oct 97.

Added recursive directory traversal.  For the first cut, this works only
when a filename of "." is given, as in "send ." or "echo \ffiles(.)".  When
sending files, this works in conjunction with the various new SET SEND
PATHNAMES options, and so allows replication of directory trees between like
file systems.

 . test unix-to-unix because MSK rejects names unnecessarily (ok)
 . expand to be more flexible, e.g. "SEND /RECURSIVE *.txt". (ok)
 . What about VMS?  I think this already works: "SEND [...]*.*".

Also the relative/absolute pathnames need a lot more work -- what about
VMS, etc?  Need to:

 . Make /RECURSIVE imply /PATHNAMES:RELATIVE (ok)
 . Handle pathnames even when FILE NAMES CONVERTED.  In this case, convert
   to and from UNIX format.
 . Handle them when LITERAL - send native VMS (etc) *relative* paths.
 . Ditto for AOS/VS, etc.  Need to add a new zblah() function for this?
 . Check #ifdefs (CK_MKDIR, NORECURSE, etc.).

Added directory-creation entry to transaction log.  NOTE: this required a
(nonlethal) change to zmkdir().  ckcfns.c, 14 Oct 97.

SET PRINTER /FILE:xxx parsing improved by Jeff to parse an output filename
and check accessibility.  ckuus3.c, 14 Oct 97.

SET NET FILE parsing improved to use cmifi, from Jeff.  Also literal string
key definitions now handled when saving key definitions.  ckuus7.c, 14 Oct 97.

Removed "." as an alias for "current directory tree" except in UNIX, where it
can't possibly mean anything else.  Removed "..." altogether, since it has
opposite meanings in Windows and VMS.  ckufio.c, 15 Oct 97.

Added /MATCH-DOT-FILES and /NO-MATCH-DOT-FILES to SET WILD KERMIT.
ckuus[23].c, ckufio.c, ckcmai.c, 15 Oct 97.

Added \frfiles, \fdir(), \frdir() to list regular files and directory files,
flatly or recursively.  Changed \ffiles() to only list regular files.  Each of
these functions sets up \fnextfile() in the same way, but with a different
list of files.  In UNIX, these functions match or don't match dot-files
according to the SET WILD KERMIT /xxx setting.  The recursive functions don't
recurse when WILD is set to SHELL.  ckuusr.h, ckuus4.c, ckufio.c, 15 Oct 97.

 * Add another \f?files() function to match both files and dirs ??? (no)
 * Add help text to ckuus2 (ok).

Changed UNIX zxpand() to treat a directory name as if it ended in "/*" so now
"send foo" sends all the files in "foo" if "foo" is a directory, and "send
/recursive foo" does the same, but recursively.  ckufio.c, 15 Oct 97.

Added a new top-level token that lets us assign values to variables in a
somewhat more natural way: "." (shades of Bliss-10).

 .name = value    is equivalent to   DEFINE name value
 .name := value   is equivalent to   ASSIGN name value
 .name ::= value  is equivalent to   EVALUATE value then assign result to name

There can also be space(s) between "." and the name, and the name can be a
macro name, a \%{digit,letter} variable, or an array element.  ckucmd.[ch],
ckuus[r56].c, 16 Oct 97.

New code from Jeff for recursion in K95.  ckufio.c, 21 Oct 97.

Increased MAXWLD, SSPACE values in ckufio.c by a lot if BIGBUFOK and DYNAMIC
are defined.  ckufio.c, 21 Oct 97.

From Jeff: changed chkvar() not to actually evaluate a potential \f...()
function, since this can have side effects.  The check for a function is now
simply if the string matches \f*(*), which is less rigorous than checking if
it is really a function (e.g. parse the name and look it in the table, etc),
so this can be beefed up later if necessary.  But it probably won't be, since
we aren't likely to find files or directories with () in their names.
ckuus6.c, 21 Oct 97.

Changed \ffiles() and friends to make a copy of the array created by zxpand(),
except in K95, where Jeff did this in zxpand/znext themselves (to save space,
since K95 doesn't have to build lists).  Each call to \ffiles() (or \fdir(),
etc) frees the previous list (if any) and then allocates a new one dynamically
of the appropriate size.  With this change it is no longer necessary to copy
the \ffiles() list to an array before use (as on p.398 of the book).
ckuus4.c, 21 Oct 97.

Fixed parsing of SEND /PATHNAMES:xx<DEL> to work right.  ckuusr.c, 21 Oct 97.

Ditto for { RECEIVE, GET } /PATHNAMES, plus fixed the semantics -- it had
ON/OFF backward.  ckuus6.c, 21 Oct 97.

Made max(), min(), and mod() return their argument when given only one.
ckuus4.c, 21 Oct 97.

Fixes to K95 DIR command from Jeff.  ckuus6.c, 22 Oct 97.

Binary-mode file-transfer was sending short files sometimes due to a problem
trying to hand-optimize repeat-count code in bgetpkt() .  Fixed in ckcfns.c,
22 Oct 97.

Added WHERE command to show where most recent file transfer went.  ckuusr.h,
ckuus[r2].c, ckcfn[s3].c, ckcpro.w, 22 Oct 97.

Removed OS2 material from ckufio.c.  23 Oct 97.

Changed REMOTE QUERY KERMIT to evaluate its operand.  Thus:

  assign \%c xx
  remote query kermit files(\%c*)

asks for the number of files whose names match "xx*".  That is, \%c is
evaluated locally before the function call is passed to the server.  If you
want an argument to be evaluated remotely, double the leading backslash:

  remote assign \%c yy
  remote query kermit files(\\%c*)

ckuus7.c, 23 Oct 97.

Added REDO <command>, synonyms RR and token ^.  Required moving a lot of code
around in ckucmd.c -- in particular, the code that adds a command to history
buffer from gtword() to cmcfm() (which makes sense).  Added a new keyword flag
CM_NOR, meaning that this command should not be added to the history buffer.
This is used for the REDO command, of course, because otherwise REDO by itself
(which we would want to re-do the most recent command) would REDO itself
instead in an infinite loop.  ckucmd.[ch], ckuusr.[ch], ckuus5.c, 25 Oct 97.

Added /MOVE:xxx and /RENAME:xxx switches to SEND (etc).  These are similar to
/DELETE, specifying what happens to the source file after it is successfully
sent, except instead of deleting it, they move it to another place, or give it
a new name, respectively.  ckuusr.[ch], ckcmai.c, ckcpro.w, 25 Oct 97.

Added { RECEIVE, GET } /CALIBRATE.  This simply avoids opening incoming files
or writing anything to them, but still does all the rest -- decoding, etc.
ckuusr.[ch], ckuus6.c, ckcpro.w, 26 Oct 97.

Added SEND /CALIBRATE[:n], where n is the number of K to send, default = 1024.
This makes C-K internally generate its own pseudorandom file data, which is
about 77% uncompressible by gzip; no function calls, no file accesses.  The
data is processed normally, however, according text/binary settings, etc, so
the packets are the same as if the same data was read from a file.
ckuusr.[ch], ckuusx.c, ckcfn[s3].c, ckcpro.w, 26 Oct 97.

For now /CALIBRATE is an invisible switch.  It does not fool with packet or
window sizes, etc.  Maybe later.  All calibration code is in #ifdef CALIBRATE,
which is defined for all but CK_SMALL builds in ckcdeb.h.

Discovered that if a switch that does not take an argument is given an
argument anyway, e.g. /BINARY:foo, that the ":" or "=" would be treated as a
space and the argument would be treated as the first non-switch field.  Fixed
in ckuus[r6].c, 26 Oct 97.

Discovered that SEND switch table had some entries out of order, which
interfered with completion.  Fixed in ckuusr.c, 26 Oct 97.

If BIGBUFOK is defined, then also define IFDEBUG automatically.  If memory
is not scarce, then compile in all those if-tests to save thousands of
function calls when the debug log is not open.  ckcdeb.h, 26 Oct 97.

Added SEND /LIST:filename.  The named file contains a list of filenames to
be sent.  ckuusr.[ch], ckcfns.c, 26 Oct 97.

Whenever the /AS-NAME switch was used, the SEND parsing code could assign a
variable to point at a malloc'd buffer, which is later freed, but the variable
would still refer to it, potentially causing all sorts of problems later.
And some other problems like that.  Fixed in ckuusr.c, 26 Oct 97.

Looked into adding support for filenames (or other fields) enclosed in
doublequotes, but it didn't work after a few stabs so I gave up.

Added peak transfer rate to the STATISTICS display.  ckuus[x4].c, 26 Oct 97.
It only works when in local mode and FILE DISPLAY is FULL or CRT, otherwise
the per-packet CPS calculation code is not called.

A new variable, reliable, is set when (a) we make a connection on a reliable
network, such as TCP/IP, or (b) we start C-Kermit with the new -I (uppercase)
switch (mnemonic: I = Internet).  When this variable is set, we add a fudge
factor to the ttinl() timeout, since it normally should not need to time out.
ckuusy.c, ckcmai.c, ckcfn2.c, ckuus7.c, 26 Oct 97.

Made local-mode transfer display completion message a little more standoutish:
SUCCESS or FAILURE in big letters.  ckuusx.c, 26 Oct 97.

Fix from Jeff for changes to command recall.  ckucmd.c, 27 Oct 97.

Various fixes to calibration mode.  Missing thermometer in some cases,
improvements in random-file-generating code, various stats were not being
updated, etc, because it wasn't a real file, GET /CAL would say it failed when
it didn't, { GET, RECEIVE } /CAL filename was lost, SEND /CAL bytecount was
off, etc.  ckcpro.w, ckcfn3.c, 27 Oct 97.

Don't accumulate peak transfer rate until after the initial excitement has
settled down.  When sending, this is after the first windowful of packets has
gone out.  When receiving, just wait till after the 10th packet to get past
the slow-start effect.  ckuusx.c, 27 Oct 97.

Changed default statistics display to /BRIEF, and added a /VERBOSE switch
for greater detail.  ckuus[r4].c, 27 Oct 97.

Tightened up bdecode() even further by eliminating additional cases it will
never see.  ckcfns.c, 27 Oct 97.

Discovered that screenc() could skip updating the percent done, etc, in some
(rare) cases at the end of a file, so the file transfer would be complete, but
the display would show less than 100%.  Fixed in ckuusx.c, ckcfn3.c, 27 Oct 97.

Increased uncompressibility of /CAL data stream to over 90% and also gave it a
random seed so it will generate different data streams, but with the same
uncompressibility.  ckcfns.c, 28 Oct 97.

Fix from Jeff for SET LINE, which under some circumstances might get clobbered
when user types CR.  Not sure if this problem appeared in any released
version or was caused by recent edits.  ckuus7.c, 28 Oct 97.

Changed zopeno() to set the output file (when receiving a file during file
transfer) to O_NONBLOCK.  On some systems, including the one we mostly use
here, disk writes can be very slow -- there is no cache.  The same would be
true if writing to a slow disk, floppy, etc.  It's not clear to me yet how
errors are reported back if they occur -- presumably on the next write() call?
Preliminary measurements seem to show some improvement.

New command-line option, G, which is like g (GET), but sends result to stdout.
Use, for example, to suck files up for printing to the remote from the local
via autoupload:

  kermit -G oofa.txt | lpr

ckuusy.c, 29 Oct 97.

A couple micro-optimizations to ttinl, but it's already just about as
tight as it can be.  ckutio.c, 29 Oct 97.

Poked at zoutdump() some more.  Took out the fflush, and made it allow for
the possibility that write() might write less than asked.  ckufio.c, 29 Oct 97.

Added CRC to STATISTICS display.  ckuus4.c, 29 Oct 97.

Changed name of openx() to ckopenx() to avoid conflict in AIX.
ckcpro.w, ckcfn3.c, ckcker.h, 29 Oct 97.

More fallout from REDO -- a failing command was no longer entered into the
scrollback buffer, which is a major pain, because that's one of its major uses.
Fixed in ckucmd.c, ckuus5.c, 29 Oct 97.

Fixed the "def \%a 12:00:00, pause \%a" problem.  ckuus6.c, 29 Oct 97.

Added \v(printer).  ckuusr.h, ckuus4.c, 29 Oct 97.

Fixed parsing error in SET PRINTER <esc> (non-OS2).  ckuus3.c, 29 Oct 97.

Added invisible SET FILE OUTPUT { [UN]BUFFERED [ size ], [NON]BLOCKING } and
filled it in for UNIX.  It's only for experimentation, and users shouldn't be
told about it unless it can get them out of a jam, and there's no way to
display the settings, but they do show up in the debug log.  The optional size
parameter can be given after BUFFERED or UNBUFFERED to control the size of
C-K's internal file output buffer, zoutbuffer.  This can be any number at all,
even 1.  ckuusr.h, ckuus7.c, ckufio.c.  29 Oct 97.

Went public with SET FILE OUTPUT -- made it visible, added HELP and SHOW, made
it UNIX-only.  ckuus[247].c.  30 Oct 97.

Some initial work on automatic arrays, not done yet.  Must fill in pusharray(),
then add poparray().  ckuu5.c, 30 Oct 97.

Fixes to command parser from Jeff: partial filename completion, and case
insensitivity of filenames in OS/2.  ckucmd.c, 1 Nov 97.

Added automatic arrays.  ckuus5.c, 1 Nov 97.

Added "reliable" display to SHOW COMM.  ckuus4.c, 1 Nov 97.

Added \v(escape), \frandom(max), \fdirname(filespec).
ckuusr.h, ckuus4.c, 1 Nov 97.

Discovered that the UNIX code to make output file unbuffered wasn't working at
all because fcntl() was being called with a file pointer instead of a file
descriptor.  Fixed in ckufio.c, 2 Nov 97.

Moved outbound pathname handling into a new function nzltor(), which is like
zltor(), but has two more arguments: filename conversion flag (fncnv) and
send-pathnames value (fnspath).  This is done within #ifdef NZLTOR..#endif.
NZLTOR is defined for UNIX and VMS.  In the mainline code, we now call this
routine always, rather than only under certain conditions (if NZLTOR is
defined; otherwise we keep the old code).  ckcdeb.h, ckcfns.c, ckcplm.doc,
2 Nov 97.

The nzltor() function must handle six cases:

  SEND PATHNAMES {OFF,RELATIVE,ABSOLUTE} times FILE NAMES {CONVERTED,LITERAL}

The new prototype is:

  nzltor(char * name, char * outbuf, int fncnv, int fnspath, int max);

zltor() was converted to a stub which calls nzltor() with the appropriate
arguments in case anybody calls it by mistake.

VMS zltor() calls (static) parse_fname(), which luckily already gets the
various pieces of the filespec separately (node, device, directory, name,
extension, and version), and so handles its job by shuffling the new args
internally and adding a lot of creative string toodling.  A VMS expert could
no doubt do the same with system calls.  ckvfio.c, 2 Nov 97.

UNIX zltor was also made into a stub; nzltor simply adds the appropriate calls
to zstrip, zfnfqp, etc, to handle the pathnames, and then goes on to do what
it used to do.  ckufio.c, 2 Nov 97.

This was tested in UNIX by cd'ing to ~/tmp and giving "send blah/oofa.txt"
commands with all combinations of SET FILENAMES and SET SEND PATHNAMES, and
similarly in VMS with "set default [fdc], send [.blah]oofa.txt].  Results:

FILENAMES   SEND PATHNAMES  UNIX Result               VMS Result
 CONVERTED   OFF             OOFA.TXT                  OOFA.TXT 
 CONVERTED   RELATIVE        BLAH/OOFA.TXT             BLAH/OOFA.TXT 
 CONVERTED   ABSOLUTE        /W/FDC/TMP/BLAH/OOFA.TXT  /FDC/BLAH/OOFA.TXT
 LITERAL     OFF             oofa.txt                  OOFA.TXT 
 LITERAL     RELATIVE        blah/oofa.txt             [.BLAH]OOFA.TXT 
 LITERAL     ABSOLUTE        /w/fdc/tmp/blah/oofa.txt  [FDC.BLAH]OOFA.TXT

All of this works very nicely with existing features like "who am i"
(automatic switching to literal filenames between like systems, etc).

NOTES: In VMS, we always strip the node::, device:, and ;version, even when
file names are literal.

STILL TO DO: The other direction, nzrtol().  Its calling conventions will be
extended by the same kind of integer args: name conversion on/off, receive
pathname setting, and max length for result.

From Jeff: clear network buffers before starting an Rlogin session.  ckcnet.c,
3 Nov 97.

Lots of changes relating to detection of connection loss before or
during file transfer.  Many modules, 3 Nov 97.

K95 prompt now shows forward slashes in directory name, from Jeff, ckuus5.c,
4 Nov 97.

Save and restore many more variables around file transfer -- packet length,
etc, from Jeff, and then fixes to same.  ckuus[r6x].c, 4 Nov 97.

Change name of BeBox terminal from BeOS-ANSI to BeTerm, but leave old name
there invisibly.  ckuus7.c, 4 Nov 97.

Fix autodownload Kermit packet detector to ignore parity.  ckcfn2.c, 4 Nov 97.

Added SET OUTPUT SPECIAL-ESCAPES { ON, OFF } to turn on/off special processing
of \N, \B, and \L.  Added this to HELP and SHOW SCRIPTS, plus a new SHOW
OUTPUT command.  ckuusr.h, ckuus[r235].c, 4 Nov 97.

Jeff found a place in the protocol module where the input file is not closed
(if sdata() returns an error indicating the connection dropped).  ckcpro.w,
4 Nov 97.

Fixes to OS/2 from Jeff for previously unhandled socket errors.  ckcnet.c,
4 Nov 97.

Added SET { SEND, RECEIVE } NEGOTIATION-STRING-MAX-LENGTH <number> as a last
resort for making C-K talk with buggy Kermit implementations on the other
side that don't expect the init string to be longer than a certain length, or
that don't handle parameters after a certain length correctly.  It's invisible
and undocumented, for use only by help desk when confronted with desparate
callers who absolutely have to exchange files with a buggy BBS, etc.
ckuus7.c, ckcfns.c, 4 Nov 97.

Changed ttinl(), when in local mode, to check for console interruptions and
return -1 if there is something waiting in the console buffer (Jeff's idea),
to make for snappier response to file-transfer interruption characters.
ckutio.c, 4 Nov 97.  But then commented this out, since it's at least an extra
function call and system call per packet, and the response to keyboard
interruptions on fast connections is pretty fast anyway.  Can revisit this
later after further experimentation.

Changed ttchk() to always check first if we have an open connection and if
not, to return -2.  ckutio.c, 4 Nov 97.

Changed doconect() to use ttchk() to check if the connection is open.
ckuus4.c, 4 Nov 97.

Changed ttinl() and ttol() to return -3 when they detect a broken connection.

Went through all of the ckcfn*.c and ckcpro.w modules and made sure that every
call to rpack() and spack() had its return code checked and then did the
appropriate thing when it was < 0 (and, in particular, when < -1).  Tested by
making a Telnet connection, starting uploads and downloads, and then killing
the job on the far end during the transfer.  Now, for the first time, this
makes the file transfer either quit right away, or else within one timeout
interval, and the appropriate message is printed on the display, and the
transfer fails.  Once the failure was propogated up to the protocol state
machine, two more actions were needed to distinguish the cases where the
connection dropped when a file was open, versus when no file was open.
ckcfn[s23.c], ckcpro.w, 4 Nov 97.

Evidently there are places where we call command parsing routines with
constant strings as defaults, and then later attempt to write into those
strings (e.g. to strip braces, trim blanks, etc).  This was addressed by
making an internal copy of the default string and using that instead.
ckucmd.c, 4 Nov 97.

Fixed command-file reader to be tolerant of lines that end with bizarre
strings of control characters like ^M^M^J.  ckuus5.c, 4 Nov 97.

Added nrztol() for UNIX, moving lots of inappropriate code from rcvfil() to
it (with #ifdef NZLTOR..#endif).  ckcfns.c, ckufio.c, 5 Nov 97.

Added nrztol() for VMS.  ckvfio.c, 5 Nov 97.

Results for VMS receiving files, current directory is [FDC.TMP]:

Receive     File       
Pathnames   Names      Incoming Name       Saved as
 OFF         CONVERTED  OOFA.TXT            [FDC.TMP]OOFA.TXT
 OFF         CONVERTED  oofa.txt            [FDC.TMP]OOFA.TXT
 OFF         CONVERTED  /foo/bar/oofa.txt   [FDC.TMP]OOFA.TXT
 OFF         CONVERTED  [foo.bar]oofa.txt   [FDC.TMP]OOFA.TXT
 RELATIVE    CONVERTED  OOFA.TXT            [FDC.TMP]OOFA.TXT
 RELATIVE    CONVERTED  bar/oofa.txt        [FDC.TMP.BAR]OOFA.TXT     (*)
 RELATIVE    CONVERTED  [.bar]oofa.txt      [FDC.TMP.BAR]OOFA.TXT     (*)
 RELATIVE    CONVERTED  /foo/bar/oofa.txt   [FDC.TMP.FOO.BAR]OOFA.TXT (*)
 ABSOLUTE    CONVERTED  /foo/bar/oofa.txt   [FOO.BAR]OOFA.TXT         (*)
 ABSOLUTE    CONVERTED  [foo.bar]oofa.txt   [FOO.BAR]OOFA.TXT         (*)

(*) The indicated directory or subdirectory, one or more levels,
    is automatically created if allowed, otherwise the transfer fails.

Note: It turns out to be easy to recognize the directory format in incoming
packets, and so the FILE NAMES { CONVERTED, LITERAL } setting is not actually
so important, except if we care about case conversion.  We only need to detect
the native and UNIX pathname formats -- see VMS nzrtol() in ckvfio.c.

  This must still be done for OS/2.  After OS/2 part is done, a chunk 
  of #ifdef OS/2 can be removed from the "not NZLTOR" part of rcvfil.

Fixed isabsolute() for VMS.  ckcmai.c, 5 Nov 97.

Added IF ABSOLUTE to test if a filename is absolute or relative.  The file
need not exist.  ckuusr.h, ckuus6.c, 5 Nov 97.

After all this: 

 . I can transfer a directory tree UNIX-to-UNIX by telling the sender to
   "send /pathnames:relative /recursive *" and the receiver to
   "receive /pathnames:relative".  The entire directory tree is transferred
   quickly and quietly, and replicated on the other side.

 . Ditto from UNIX to VMS!

 . VMS to UNIX works too, but it's still a bit flaky.  In VMS you have to say:
   send /pathnames:rel /filenames:converted [...]*.*".

So hurray, transferring directory trees between unlike platforms.

From Jeff: peakcps should only be reset once per transaction; cps/peakcps
should be calculated and saved when File Display is None or CRT; thermometer
pct should not be set to 100% if we are discarding the file.  ckuusx.c,
6 Nov 97.

Made /RECURSIVE un-invisible for VMS and AOS/VS, since their native
recursive wildcards work fine.  In these cases, /RECURSIVE is only informative
and really translates to /PATHNAMES:RELATIVE.  (But I didn't actually migrate
any of the pathnames-handling code to AOS/VS yet, did I?)  ckuusr.c, 6 Nov 97.

Figured out why VMS-to-UNIX recursive transfers didn't seem to be working
right: SEND (and RECEIVE) /PATHNAMES:<not-OFF> was setting FILE NAMES to
LITERAL, which as needed before we made the new nz[rl]to[lr]() routines; fixed
by #ifdefing.  ckuus[r6].c, 6 Nov 97.

Various fixes to VMS nz[rl]to[lr](), including some long-standing problems
such as the inability to accept files whose names contain multiple periods.
Now it all works pretty well.  nrztol() now changes spaces and tildes into
underscore, other nonprintables into dollar signs -- much more readable in VMS
than changing everything to X, and as for dots:

 a.b.c.1 becomes a_b.c;1 (when only digits follow the last dot)
 a.b.c.d becomes a_b_c.d (otherwise)

and VMS is happy.  ckvfio.c, 6 Nov 97.

Added /SINCE as an invisible synonym for /AFTER since I type it all the time.
ckuusr.c, 6 Nov 97.

Changed -L switch to also SET SEND PATHNAMES RELATIVE.  ckuusy.c, 6 Nov 97.

Filled in MKDIR for VMS, and made MDKDIR and RMDIR for other platforms
print appropriate error messages when they fail.  ckuusr.c, 6 Nov 97.

Made blind stabs at implementing RMDIR in VMS.  Finally I gave up on doing
it using any APIs, since I haven't a clue, and just used system() commands.
Crude but effective.  Note: in VMS, we have to change the directory name
[a.b.c] into a filename [a.b]c.dir;1, change its protection to allow deletion,
and then delete it, which only works if it's empty.  If it can't be deleted,
all sorts of error messages spew out.  Needs to be replaced by somebody who
knows the actual VMS API for deleting a directory.  ckvfio.c, 6 Nov 97.

Added zrmdir() for UNIX.  #defined ZRMDIR symbol in ckcdeb.h for all platforms
that have a zrmdir() function (UNIX and VMS so far).  Changed RMDIR command
to use it.  ckufio.c, ckcdeb.h, ckuusr.c, 6 Nov 97.

zmkdir() was already there for UNIX, VMS, etc.  I fixed it so it could be
called to create directories, as you might expect.  Its previous use expected
a complete filespec, including a filename.  But this was not required for VMS,
and in UNIX the way to not require it is to make sure the string that is
passed to it ends with a directory separator.  Changed the MKDIR command to
do this.  ckuusr.c, 6 Nov 97.  Slightly reworded the zmkdir description in
ckcplm.doc.

  (This is all groundwork for adding REMOTE MKDIR and REMOTE RMDIR, but
  that's not done yet.)

"msend <nonexistent-file><SP>" caused a parsing foulup.  Fixed in ckucmd.c,
7 Nov 97.

Added all the new switches to the MSEND table.  ckuusr.c, 7 Nov 97.

Changed ?-help to add a directory separator at the end of a filename (except
in VMS) if the file is a directory, so you can tell by looking at the list
what's what.  ckucmd.c, 7 Nov 97.

Fix from Jeff to catch disk-write errors during file reception, bdecode()
(I left out an automatic variable declaration so a global variable of the same
name, but different type, was being used).  ckcfns.c, 7 Nov 97.

Added a 3rd arg to ckmatch() to say whether to ignore case in string
comparisons, and then in places where we are using it to match filenames, to
be case-sensitive or not depending on the underlying file system (like in SEND
/EXCEPT in UNIX vs DOS), and to ignore case in other pattern-matching
applications (e.g. REDO, SHOW VARIABLES *FOO*), regardless of the file system.
ckcker.h, ckcmai.c, ckucmd.c, ckcfns.c, ckuus[56].c, 7 Nov 97.

Added automatic per-file text/binary mode switching based on filename
pattern recognition, all within #ifdef PATTERNS..#endif.  7 Nov 97.

Commands:
 . SET FILE PATTERNS { ON, OFF }
 . SET FILE { BINARY-PATTERN, TEXT-PATTERN } [ <pattern>  [ <pattern> ... ] ]

Files:
 . ckcker.h - symbol defs & max number of patterns (64)
 . ckuusr.h - change name of shoparf to shofil (it was annoying me)
 . setfil, ckuus7.c - parse the command, set up the pattern lists
 . shofil, ckuus4.c - show the lists
 . gnfile, ckcfns.c - declare use the lists (via calls to ckmatch())
 . ckuus2.c - "help set file" text
 . ckermit2.upd - docs, mainly section 4.3, others updated too.

NOTE: Needed for VMS: permissions.

A couple fixes to yesterday's stuff from Jeff: ckuus2.c, ckucmd.c, 8 Nov 97.

Added { ADD, REMOVE } { BINARY-PATTERNS, TEXT-PATTERNS }.  Redid the lists to
be more dynamic and free()-safe.  Added SHOW PATTERNS, with a nice display,
and redid SHOW FILE to refer to SHOW PATTERNS.  (I also added { ADD, REMOVE }
SEND-LIST, but didn't fill it in.)  Added lots more patterns to default lists.
Made SET FILE TYPE LABELED override filename pattern-matching.  ckcmai.c,
ckcfns.c, ckuus[457].c, ckermit2.upd, 8 Nov 97.

"delete dir/file" didn't work for some reason in UNIX.  Changed dodel() to be
a little less confusing with its use of line[] and tmpbuf[].  Then I changed
the UNIX version to use Jeff's loop.  But all the messages were annoying so I
added /VERBOSE and /QUIET switches, making the latter the default for UNIX,
and cleaned up the output when /VERBOSE is set.  ckuus6.c, 8 Nov 97.

Started to add code to prevent client from sending a BYE or FINISH when it
had already done so on the same connection, but the risk outweighs the
benefit.  Maybe some other time.  8 Nov 97.

Fixed a bug I introduced in VMS zrtol() at the last minute on Nov 6, which had
extra filename dots being converted to underscores even after we had scanned
backwards into the directory name.  ckvfio.c, 8 Nov 97.

Added a second arg to gfmode() (get file mode) to tell it to return its result
in upper or lower case, adjusted the prototype and all references, removed
various chunks of redundant code.  ckuusr.h, ckuus[r56].c, 8 Nov 97.

Added client end of REMOTE MKDIR and REMOTE RMDIR.  ckuusr.[ch], ckuus7.c,
8 Nov 97.

Increased number of patterns to 256 if BIGBUFOK.  ckcker.h, 9 Nov 97.

Made "remo" an acceptable abbreviation for "remote".  ckuusrc., 9 Nov 97.

Fixes from Jeff to yesterday's code: ckucmd.c, ckuus5.c, 9 Nov 97.

From Jeff: don't check text patterns if already in text mode; ditto for binary,
ckcfns.c, 9 Nov 97.

Don't bother trying to send FINISH or BYE command when in local mode and
there is no connection.  ckcpro.w, 9 Nov 97.

Made sure that RESUME and SERVER macros in protocol module set all counters,
packet numbers, etc, back to 0.  ckcpro.w, 9 Nov 97.

Disabled automatic file type switching during RESEND.  ckcfns.c, 9 Nov 97.

Updated ckuker.bwr and ckermit.bwr.  9 Nov 97.

Discovered that when the C-Kermit server got a REMOTE DELETE command for
a directory (rather than a file), it did terrible things.  Added a check
against this in ckcpro.w, 9 Nov 97.

Moved some prototype declarations around in ckcpro.w to alleviate possible
problems with "declarations out of scope" noticed by some picky ANSI compilers.
ckcpro.w, 9 Nov 97.

Moved code out of MKDIR command in ckuusr.c to a new function, ckmkdir(), that
can be called from the command parser or during protocol, and similarly for
RMDIR.  ckcker.h (prototypes), ckuusr.c, ckcfn3.c, 9 Nov 97.

Added EN_MKD and EN_RMD symbols in ckuusr.h, and corresponding en_mkd and
en_rmd variables.  ckuusr.h, ckcmai.c, 9 Nov 97.

Added server end of REMOTE MKDIR & RMDIR.  ckcpro.w, ckcfn3.c, 9 Nov 97.
Added ENABLE/DISABLE MKDIR/RMDIR commands.  ckuus[56].c, 9 Nov 97.
Added help for above.  ckuus2.c, 9 Nov 97.
Added info for above to SHOW SERVER.  ckuus5.c, 9 Nov 97.

Should make server-side CD accept UNIX-style pathnames too (at least in
VMS).

There are still a few problems with REMOTE DIRECTORY, etc.  For example,
if pathnames are off, "remote directory foo/*" strips the "foo/".  But
that's what it should do.  But it seems to do it also when pathnames are on.

VMS difficulty with SEND /MAIL using:
system("$ mail %s %s/subj=\"Enclosed file %s\"")

Juggled things a bit in the got-E-packet section of the protocol module to try
(again) to ensure that file-transfer display does not say "100%" if a transfer
is canceled by an E-packet.  ckcpro.w, ckuusx.c, 10 Nov 97.

Added yet another level of file-type saving and restoring to allow gnfile() to
use prevailing transfer mode (as set by user, or as overridden by "whoami"
negotiation) for files it fails to identify by name pattern.  So now we have
three levels to save and restore: what the user said ("set file type"), the
"whoami" type (which persists throughout a transaction), and a per-file type
based on automatic file type recognition.  gnf_binary, ckcfns.c, 10 Nov 97.

Added /SUBDIRECTORIES as an invisible synonym for /RECURSIVE.  ckuus[r6].c,
10 Nov 97.

I just sent an E-packet.  I'm in local mode, I was receiving a file, I'm not a
server, and sliding windows are in use.  Therefore, there are likely to be a
bunch of packets already "in the pipe" on their way to me by the time the
remote sender gets the E-packet.  So the next time I CONNECT or try to start
another protocol operation, I am likely to become terribly confused by
torrents of incoming material.  To prevent this, a loop was added to errpkt()
to soak up packets from the connection until there is an error or timeout.
ckcfn2.c, 10 Nov 97.

Another try at getting better error screens when an E-packet is received.
ckcfn[s23].c, 10 Nov 97.

Make { ADD, REMOVE } patterns be case independent/sensitive according to
the underlying file system.  ckuusr.c, ckermit2.upd, 10 Nov 97.

Made K95 default patterns lowercase rather than upper.  ckcmai.c, 10 Nov 97.

---Alpha.08---

Streaming prototype & proof of concept, 12 Nov 97 (to be described later)
(if you stumble on it, don't try to use it).

Fixed VMS ttchk() to detect connection loss the same way the UNIX and OS/2
versions do.  ckvtio.c, 13 Nov 97.

Added missing prototype for cmaddnext().  ckucmd.h, 13 Nov 97.

Protected a couple unguarded references to no_recall by #ifdef CK_RECALL.
ckucmd.c, 13 Nov 97.

Removed unguarded references to binpatterns[] and txtpatterns[] from
doadd().  ckuusr.c, 13 Nov 97.

Added missing VOID to VMS declaration of nzrtol().  ckvfio.c, 13 Nov 97.

Removed spurious "(-1)" from VMS nzltor() return.  ckvfio.c, 13 Nov 97.

Supplied missing printf() argument in ADD command.  ckuusr.c, 13 Nov 97.

Added instructions for defining new network types to ckcplm.doc.  13 Nov 97.

Support for IRIX 6.2 from Ric Anderson.  Many modules, 13 Nov 97.

Got rid of call to time(0) in ckcmai.c as a random number seed, to avoid
yet another avalanche of #ifdefs, and called gtimer() instead, which is
already well-defined in ck?tio.c.  ckcmai.c, 13 Nov 97.

Changed UNIX version to strip off leading "./" or "../" from outbound
pathnames, no matter what the SEND PATHNAMES setting is.  ckufio.c, 13 Nov 97.

Fixed SHOW VERSIONS to state version numbers and dates consistently.
Many modules, 13 Nov 97.

Corrected some typos in ckermit2.upd, 13 Nov 97.

---Alpha.09---

Revived my DG mini.  Of course its compiler found several glitches that none
of the others revealed: extern declarations for variables that were never
defined anywhere, prototypes for static functions in header files, a reference
to zzstring in a cmtxt call instead of xxstring, and a backwards #ifdef NZLTOR
construction.  After fixing these, I successfully built the AOS/VS version.
ckuus[r35].c, ckcfn3.c, 14 Nov 97.

Based on logs from Carl Friedburg and Mike Freeman, found the spot where
file transfers on outbound VMS LAT connections were being inhibited and fixed
it (always remember: ttyfd is valid in VMS only on TCP/IP connections).
cncfn2.c, 17 Nov 97.

From Jeff over the weekend, installed 17 Nov 97:
 . Fixes to parens in peakcps calculation, ckuusx.c.
 . Changed communications input buffer from 4K to 32K if BIGBUFOK
   defined, so that TCP reads will have a chance of being big enough to open
   the TCP receive window.  ckutio.c.
 . Rearranged file input buffer size definitions.  ckcker.h.
 . Make -j/J command-line options set the reliable flag.  ckuusy.c.
 . Beginnings of Telnet client authorization and encryption code.  ckcnet.[ch].

Added missing AIX defines for TCP_NODELAY, TCP_KEEPALIVE, and TCP_MAXSEG.
ckcnet.h, 17 Nov 97.

Built for 16-bit QNX for the first time since before 6.0 was released, no
problems. 17 Nov 97.

Rec'd verification that VMS LAT calls now work again.  18 Nov 97.

Numerous tiny syntactic changes for the benefit of gcc -Wall, a couple of
which might actually make a difference (e.g. 2 or 3 spots where variables
could possibly be used before set).  Many modules, 18 Nov 97.

Fixed a problem with SEND /MAIL:<address> <filename> on VMS.  While working on
this, also improved some VMS error messages.  Tested to make sure that VMS
C-Kermit can SEND /MAIL and also receive files as mail and deliver them.
ckuusr.c, ckvfio.c, 18 Nov 97.

Using bgcc, William Bader found two places where an out-of-bounds array
reference might occur.  One was just a debug() call, so I commented it out.
The other was in the loop that strips junk from the end of a modem call-result
message; the tests were reversed.  Fixed in ckutio.c, ckudia.c, 18 Nov 97.

Added -V command-line option = SET FILE PATTERNS OFF / SET XFER MODE MANUAL.
ckuusy.c, 18 Nov 97.

Fixed SHOW MACRO <name>.  Not sure when it broke...  ckuus5.c, 18 Nov 97.

Added GET /RECURSIVE.  This is like telling the server to SEND /RECURSIVE.
Also GET /RECURSIVE /DELETE.  Client and server ends of both.
ckuus6.c, ckcpro.w, ckcfn2.c, 18 Nov 97.

Note: GET /DELETE /RECURSIVE deletes files but not directories.

Still have to add help text for this, etc.

See ~/new/Wall.txt again.

Cleaned up server end of new GET forms.  Got rid of en_ret, merged with
en_del.  Save & restore recursive & fnspath around each server transaction.
ckcpro.w, ckuus6.c, 19 Nov 97.

ttflui() should not be called by input() when streaming.  ckcfn2.c, 19 Nov 97.

Added SET STREAMING AUTO and SHOW STREAMING.  All of this is still invisible.
ckuusr.[ch], ckuus[356].c, 19 Nov 97.

Fixed input() in the streaming case to actually send an Error packet if it
received a bad packet, rather than just pretend that it got an Error packet.
ckcfn2.c, 20 Nov 97.

Simplified the syntax of shotab[], ckuusr.c, 20 Nov 97.

SET LINE / SET HOST / SET PORT commands were not getting into the recall
buffer.  Fixed in ckuus7.c, 20 Nov 97.

Ditto for SET DIAL DIRECTORY, SET MODEM CAPABILITIES, SET CONTROL PREFIX,
WAIT, and many other commands.  These are commands that accept a variable
number of args, and terminate when the command parsing routine returns -3.
The solution is, when this happens, to make sure that cmcfm() is called
anyway; otherwise lots of stuff doesn't happen that should happen.  Note: when
cmcfm() is called *after* the user typed CR, it knows this and does not make
them type another one.  ckuus*.c, 20 Nov 97.

Fixed REMOTE LOGIN not to succeed when it was not given enough parameters.
ckuus7.c, 20 Nov 97.

From Jeff: Make SET TITLE take effect immediately.  ckuus7.c, 20 Nov 97.

Added SET TRANSFER DISPLAY BRIEF.  Thus just writes a one-line report on
each file, similar to FTP:

  filename (transfer-mode) (size-if-known): status (and cps if status OK)

ckcker.h, ckuus[7x].c, 20 Nov 97.

Discovered that filename pattern matching was happening too early, and could
be undone by things that happened later.  Moved the matching code out of
gnfile() and into sfile() to make sure it was executed AFTER the S/I-packet
exchange rather than before, so it would not be undone by the WHO/WHATAMI
mechanism.  ckcfns.c, 20 Nov 97.

Allowed UNIX C-Kermit to accept /dev/null as an incoming filename and use
it literally.  ckufio.c, 20 Nov 97.

Changed \v(cps) to treat 0 elapsed seconds as 1 in calculating the transfer
rate (previously it just returned "0 cps", so now it returns the filesize).
ckuus4.c, 21 Nov 97.

Eliminated unnecessary screen() procedure calls in rpack() and spack()
when XFER DISPLAY is BRIEF.  ckcfn2.c, 22 Nov 97.

From Jeff: corrections to Telnet initializations when telnetting to non-23
ports more than once, plus unhiding some debugging routines.  ckcnet.c,
22 Nov 97.

Corrections to WHATAMI negotiation; some of the bits were wrong.  ckcfn2.c,
22 Nov 97.

More fixes to command history -- macro invocations were being skipped, and
commands that were canceled by the parser for syntax errors before entry were
being entered when they shouldn't have been.  ckuus[r5].c, 22 Nov 97.

Added SET FILE DESTINATION NOWHERE (alias CALIBRATE), invisible, a sticky
version of /CALIBRATE for receiving files, but it doesn't work -- come back
and fix it...

Changed all calls to screen() to go through a new macro, xxscreen(), which
does not make the call if Kermit is in remote mode.  This can eliminate a lot
of function-call overhead during file transfer, on one end anyway.  ckcpro.w,
ckcfn*.c, ckuusx.c, 24 Nov 97.

Changed sdata() to skip "sbufnum" countdown when streaming, and nxtpkt()
to skip out-of-window check.  ckcfn[s2].c, 24 Nov 97.

Changed brief file transfer display to use the same cps calculation that the
other displays use, and added elapsed seconds to the display.  ckuusx.c,
24 Nov 97.

Looked into making communication-device writes be nonblocking, so Kermit can
be forming its next packet while the write() is actually occurring.  But as
far as I can tell, at least in the UNIX version, ttyfd is already opened in
nonblocking mode, since that's how myread() works, and we use the same fd for
both reading and writing.  Still, I added a test for EWOULDBLOCK after the
write, so make sure it is not treated as an error.  ckutio.c, 25 Nov 97.

Fixed up the changes to sdata() from yesterday.  ckcfns.c, 25 Nov 97.

Added CLOSE [ CONNECTION ] command, since the current method for closing a
connection is quite mysterious ("set line" and/or "set host" without a device
or hostname), and added a new function, clsconnx(), to do it, consolidating a
bunch of confusing code that was in setlin().  ckuus[r7].c, 25 Nov 97.

Fixed STREAMING message on fullscreen file-transfer display.  ckuusx.c,
25 Nov 97.

Fixed STATISTICS to show the packet length that was actually used when sending
the last file, rather than the default that would be used in absence of
instructions from the receiver.  ckcfns.c, ckuus4.c, 25 Nov 97.

Turned slow-start off for transfers in which streaming is negotiated.
ckcpro.w, ckuusx.c, 25 Nov 97.

Fixed a bug in which bgetpkt() was repeat-counting a run of two characters,
when the minimum should be three, thus turning 2 into 3 and adding needless
overhead to the packet.  ckcfns.c, 26 Nov 97.

Made NUL (0) unprefixable:
 . Changed SET CONTROL UNPREFIX commmand to allow it.
 . Changed logpkt() to log packets correctly when they contain NULs.
 . Now C-Kermit sends packets containing NULs correctly.
 . Make [b]gecode() be length-driven, rather than stopping at NUL.
 . Make [b]getpkt() handling of leftovers be length-driven.
 . Make all chk[123]() routines be length driven rather than stopping at NUL.
 . Make all calls to chk[123]() routines pass length.
 . Update prototypes for chk[123]() routines.
ckcfn2.c, ckuus3.c, ckuus4.c, 26 Nov 97.

Not done:
 . Anything about recording packets the debug log.
 . Including zero in "set control unprefix all" or "set prefixing none".
 . Docs, help, etc.
 . Enough testing.

After these changes (reducing the unneeded repeat count for doublets and
allowing NUL to be unprefixed), the packet overhead went down by about 10%
when transferring the SunOS C-Kermit binary:

  size:         1026152
  packet chars: 1166088 (before)
  packet chars: 1062181 (after)

As a quick check, I built it on AIX and sent some files to it.  I was able to
consistently get 766Kcps sending the same 4MB binary file that never went
faster than about 600Kcps before.

Changed SET PREFIXING command to account for unprefixing 0, and also made
SET PREFIXING MINIMAL take flow-control setting into account when deciding
whether to prefix 17,19,145,147.  ckcmai.c, 26 Nov 97.

Fixed length in chk1() call from chkspkt(), which affected autodownloads,
from Jeff.  ckcfn2.c, 27 Nov 97.

Why on earth did chk3() take parity as an arg?  The CRC is applied to outbound
packets before adding parity, and is checked on arriving packets after
stripping parity.  Removed this in hopes of tightening up one more critical
loop.  ckcfn2.c, ckuus4.c, 27 Nov 97.

Added new low-level routines to the UNIX version: rftimer() and gftimer().
These time things using floating point seconds.  Within #ifdef GFTIMER, which
is, at present, defined only for UNIX.  ckcdeb.h, ckutio.c, ckcplm.doc,
27 Nov 97.

Added #ifdef GFTIMER sections throughout ckcpro.w, ckcfn*.c, ckuus4.c, and
ckuusx.c to take advantage of [rg]ftimer() when calculating elapsed time, time
left, and cps.  Now we no longer have the 1-second granularity in
file-transfer speed measurements, and therefore get accurate elapsed time and
CPS figures at the end of a transfer regardless of the file size (within
reason).  10BaseT socket-to-socket transfers from SunOS to AIX now routinely
register over 800Kcps.  27 Nov 97.

To add these routines to non-UNIX platforms:

 (VOID) rftimer() gets and saves the current time in whatever subsecond
   precision (millisecond, microsecond) is available.
 (float) gftimer() returns the number of seconds that have passed since
   rftimer() was last called as a fractional floating-point number.
 In ckcdeb.h, #define GFTIMER for your platform.

Converted getmsec() to gftimer(), so now we can get packet-read/write 
millisecond times in the debug log for any platform where GFTIMER is defined
("grep msec debug.log").  ckcfn2.c, ckutio.c, 27 Nov 97.

Checked GFTIMER on SunoOS, HP-UX 10.20, AIX 4.1, Solaris 2.5, 

Defined and added new WM_CLEAR flag to WHATAMI negotiation field.  This gives
the opposite Kermit permission to send any and all control characters
unprefixed in data packets.  ckcker.h, ckcfns.c, ckcmai.c, 27 Nov 97.

Added SET CLEARCHANNEL { ON, OFF, AUTO }, AUTO is the default, and lets
C-Kermit tell the other Kermit whether it has a clear channel based on whether
it has opened a TCP socket connection.  ON and OFF have the expected meanings.
The CLEARCHANNEL setting, for now, is shown by SHOW STREAMING.  Now if (and
only if) I SET HOST directly to a Kermit server that is waiting on a TCP
socket, I get minimal prefixing automatically.  For example, from SunOS to
AIX, with W=30, P=9000, I get > 800Kcps just about every time.  ckuusr.[ch],
ckuus3.c, etc, 27 Nov 97.

Added SET TRANSACTION-LOG { VERBOSE, BRIEF [ separator ] }.  If BRIEF is
chosen, one line is written per file, with a timestamp, action (SEND or RECV),
filename, size, mode (text or binary), status (OK or FAILED), and additional
info depending on the status.  The default separator is comma, but any other
nonalphanumeric character can be specified.  This format is suitable for
direct importation into Informix, Oracle, Sybase, etc.  ckcdeb.h, ckuusr.h,
ckuusx.c, ckcfn[s3].c, ckcpro.w, 27 Nov 97.

Built on SunOS, Solaris, HP-UX, AIX, and Unixware as a last-minute check.  No
complaints.

Fixed CPS display in brief display to be file chars / elapsed time, rather
than most recent CPS calculation.  ckuusx.c, 28 Nov 97.

Various other minor corrections to yesterday's work, mainly correcting
backwards #idefs for GFTIMER.  28 Nov 97.

Refinement of brief transaction log: always write 8 fields, enclose any
field in quotes if it contains the separator.  ckuusx.c, 28 Nov 97.

Added docs for new transaction log format to ckermit2.upd.  28 Nov 97.

Assorted minor corrections from Jeff to the last few days' work, ckcnet.c,
ckcdeb.h, ckutio.c, ckuus[4x].c, ckcfn2.c, 1 Dec 97.

Addition of hex dump debug tool, from Jeff, ckuusx.c, 1 Dec 97.

Fixed IF NUMERIC to work correctly for variables whose definitions contain
multiple words.  ckuus6.c, 1 Dec 97.

Made a lot of fixes that should improve the situation with command recall.
Until now, the command functions module, ckucmd.c, was ignorant about where
command were coming from.  Which is silly.  So now there is a function in the
command parser, cmdsrc(), that can be called from ckucmd.c (or anywhere else)
to determine the command source (keyboard, macro, TAKE file, etc), which makes
decisions about the command recall buffer, and many other things, perfectly
straightforward.  Also, throughout the ckuus*.c modules, I replaced all the
#ifdef'd tests of cmdlvl vs tlevel with calls to the new cmdsrc() function.
So now we have the command recall buffer working pretty much as it did before
I added the REDO command -- commands issued from macros don't go in; the SEND
command doesn't always go in; macro invocations do go in, etc.  Many modules,
1 Dec 97.

Replaced hardwired server-mode help text (sent in response to REMOTE HELP)
with dynamic version that actually tells which commands are available,
enabled, etc.  Will pretty it up later.  ckcmai.c, ckcfns.c, ckcpro.w,
1 Dec 97.

Replaced all checks for ttyfd < 0 to see if connection broken with calls to
ttchk(), which must be coded to fill this role.  This removes the risk of
checking ttyfd on systems where it's not supported or, worse, on systems where
it is used for one kind of connection but not others.  Examples: in VMS, where
it is used for TCP/IP but not serial; in AIX, where it is used for serial and
TCP/IP, but not X.25, etc.  ckcmai.c, ckcfn2.c, ckuus[434].c, 2 Dec 97.

Added some extra checks to ttgmdm() and ttchk() for local vs remote mode to
make sure they behave as advertised.  ckutio.c, 2 Dec 97.

SET DESTINATION NOWHERE (aka CALIBRATE) seems to have fixed itself.  Added
help and show text for it.  ckuus[24].c, 2 Dec 97.

Fixed READY TO SERVE... message for socket-based server.  ckcpro.w, 2 Dec 97.

Defined BIGBUFOK for Linux.  ckcdeb.h, 2 Dec 97.

Ripped out tons of stupid, confusing, and contradictory code for calculating
the elapsed time and CPS of file transfer.  Now this is done automatically in
the protocol module at the end of each file transfer, and again at the end of
a transaction, and the results are stored in global variables available for
use by the various display routines (file transfer display, STATISTICS
command, \v(cps) variable, etc).  Furthermore, the contradiction between file
time/cps and transaction time/cps when only one file was transferred was
eliminated simply by defining the latter to be the former in the 1-file case.

Routines:
  fcps(), called when an input or output file is closed, sets:
    xfsecs   = elapsed time this file, whole number of seconds.
    fpxfsecs = elapsed time this file, floating-point seconds.
    ffc      = number of characters, this file.
  tstats(), called when a B packet is sent or received, sets:
    tfsecs   = elapsed time whole transaction, whole number of seconds.
    fptsecs  = elapsed time whole transaction, floating-point seconds.
    tfc      = number of characters, all files.

Many modules, 2 Dec 97.

Fixed a bug in which a server could be given a REMOTE SET WINDOW and
REMOTE SET RECEIVE PACKET-LENGTH combination larger than its buffer size,
and it would accept them and try to use them.  Reported by David Fiander.
ckcfns.c, 2 Dec 97.

Fixed SET MODEM COMMAND VOLUME HIGH; previously it was assigning the given
command to VOLUME LOW.  Reported by Dragan Milicic.  ckuus3.c, 2 Dec 97.

Changed SHOW MACRO to use chained FDBs, so "show mac ?" works, and yet
"show mac x" also works when x is ambiguous, etc.  ckuus5.c, 2 Dec 97.

Changed askmore() to not ask when the batch or background flags are set.
ckuus5.c, 2 Dec 97.

Removed "kludge to fix redefinitions in <linux/wait.h>" since (a) this
interferes with the new glibc and headers, and (b) it isn't needed any more
anyway since we simplified how REDIRECT works.  ckutio.c, 2 Dec 97.

Another attempt at preventing "Transfer OK" messages when transfer wasn't
OK.  ckcpro.w, 3 Dec 97.

Started adding a "filestatus" variable to protocol modules, to clean up the
mess and confusion of all the separate flags: cxseen, czseen, discard,
epktrcvd, etc etc.  Not set or tested yet, to be continued later, maybe...
ckcker.h, ckc*.c, 3 Dec 97.

Removed the kludge by which we forced macro invocations into the command
recall buffer, since Monday's fixes removed the need for it.  ckuusr.c,
3 Dec 97.

Changed SHOW COMM to always show SET CARRIER-WATCH setting.  Updated the
HELP SET CARRIER-WATCH text.  ckuus[42].c, 3 Dec 97.

New HP-UX makefile entries from Peter Eichhorn.  3 Dec 97.

Enabled RLOGIN code for HP-UX 10.00 (it was already enabled for HP-UX 9.00)
and Digital UNIX 4.0.  ckcnet.h, 3 Dec 97.

Added a hint message for RLOGIN failures.  ckuusr.c, 3 Dec 97.

Changed STATISTICS to omit the transmission speed if it's a network connection
or if C-Kermit is not in local mode.  ckuus4.c, 3 Dec 97.

Fixed "cd .<ESC>" and "cd ..<ESC>" to behave as expected in UNIX and OS-9.
(Fixing this for "?" would be much harder, since "." and ".." do not get into
the directory list).  ckucmd.c, 3 Dec 97.

The following for VMS from Lucas Hart:

(1)  Add a NOVMSSHARE "feature", since that condition is contrary to 
     default VMS linking,  and a __CRTL_VER (that is what DEC C calls
     it, though DECC_RTL would be more precise for their usage) to CKUUS5.C
(2)  Update OLD_VMS conditionals for VMS 4.7 (before they were only to 
     V4.4), in CKVOLD.C, CKVFIO.C, CKVTIO.C
(3)  Change the CKVKER.COM link logic slightly to always define either
     NOVMSSHARE, or VMSSHARE, and to make the VAX NOVMSSHARE also define
     (and link) /NOSYSSHARE, as initially intended.
(4)  Comment out more of the debugging output in CKVKER.COM
(5)  Similar changes to CKVOLD.COM (and incorporate CKVKER 1.17 edits)

Contributed 5 Oct 97; I finally got around to them on 3 Dec 97.

Removed perror() calls from keepalive(), and replaced with debug() calls.
No point scaring people to death...  ckcnet.c, 3 Dec 97.

Assorted #ifdef adjustments for building on many systems.  Various modules,
3 Dec 97.

Fixed Data General AOS/VS version to allow recently defined file numbers,
chkfn(); ditto for OS-9.  ck[d9]fio.c, 4 Dec 97. 

RETURN from inside SWITCH did not work right; same problem as END (fixed on
July 3).  doreturn(), ckuus6.c, 4 Dec 97.

DIAL and ANSWER should not automatically CONNECT, no matter what the DIAL
CONNECT setting is, if C-Kermit is running in batch or in the background.
ckuusr.c, 4 Dec 97.

Documented CLOSE command.  ckermit2.upd, 4 Dec 97.

Added lots of code to VMS ttopen() to see what I could find out about modem
signals, in an effort to get SET CARRIER-WATCH working in VMS, where it never
has been implemented.  Need more info before I can make further progress.
However, it looks like the VMS SET TERM /MODEM vs /NOMODEM setting might be
critical here, and this has never been examined or set in VMS C-K before.
ckvtio.c, 4 Dec 97.

Changed CKVKER.COM to not give /NOSYSSHARE to linker when NOSHARE chosen,
since some of the nonsharable libraries are unusable (UCX, some versions of
SMG, etc).  Now I no longer get LIB$FIND_IMAGE_SYMBOL when building.
ckvker.com, 4 Dec 97.

From Lucas Hart, a fix for the annoying warning from DECC in Digital UNIX 4.0
about "union wait".  ttruncmd(), ckutio.c, 4 Dec 97.

Fixed some problems with parsing the DELETE command when it was given the
name of a file that doesn't exist.  ckuus6.c, 4 Dec 97.

Finally tracked down the reason why sometimes the file-transfer bar zooms
out to 100% when a file transfer is interrupted; the screen() routines were
resetting percent done when the Z packet comes, at the end of the transfer,
rather than when the F or X packet comes, at the beginning of the transfer.
This was OK except when a second copy of the Z packet came -- then suddenly
the percent done was 100 instead of whatever it was the first time.  No more.
screenc(), ckuusx.c, 5 Dec 97.

Still, it seems rather common for the file sender to send two Z packets when
streaming.  Why?  Because once interrupted, the receiver sends an ACK(X) for
every packet from now on.  The sender gets the first one and sends Z(D).  But
more arrive, so it sends another Z(D).  Cure: the receiver should only send
ONE ACK(X) or ACK(Z) when streaming.  Cure applied in ckcpro.w, 5 Dec 97.

When draining incoming packets after sending an E-packet and using the
fullscreen file-transfer display, put up a message that we are draining -- it
can take a while -- then another when finished.  errpkt(), ckcfn2.c, 5 Dec 97.

Eliminated another per-packet function call, getrtt(), in the streaming case.
ckcfn2.c, 5 Dec 97.

Ditto for calling gtimer() every time we send or receive a packet if we are
not timing out (as when streaming).  ckcfn2.c, 5 Dec 97.

Tightened up "drain loop" in error-packet sender by calculating timeouts on
the fly rather than using an overconservative value, even when streaming and
the timeout was 0.  errpkt(), ckcfn2.c, 5 Dec 97.

Cleaned up much errpkt()/ermsg()/screen()/clsif()/clsof() redundancy.  Made
errpkt() close files, call screen(), make debug and transaction log entries,
etc, which was previously done piecemeal all over the place.  Also made
errpkt() set czseen, since of course an E packet cancels the current batch of
files.  This prevents still more spurious "100%"'s, completion messages
stomping over each other, etc.  Now it all seems pretty tight.  ckcpro.w,
ckcfn2.c, 5 Dec 97.

Added some debugging code to netopen() to catch possible problems when
non-Telnet port is requested.  Plus merged in Jeff's recent changes.  ckcnet.c,
6 Dec 97.

UNIX C-Kermit beware file updated with various items.  ckuker.bwr, 6 Dec 97.

Elapsed time was always showing up as zero when receiving files.  Fixed in
fstats(), ckcfn2.c, 6 Dec 97.

Lots of changes to ckcnet.c from both me and Jeff regarding set socket options;
mine removed perrors (again) and replaced them with a consistent format of
debug log entry; Jeff's were substantive.  6 Dec 97.

Discovered it was too easy to introduce interoperability between non-zero-
prefixing and zero-prefixing Kermits by including 0 in SET PREFIXING MINIMAL.
Changed this to not unprefix zero after all, and changed SET PREFIXING NONE
to unprefix everything but CR, IAC, and SOP, and had the clear-channel code
do SET PREFIXING NONE, rather than MINIMAL.  ckcmai.c, ckcfns.c, ckuus5.c,
6 Dec 97.

Joe D persistently complained that streaming could not be interrupted in
Unixware.  Reason: ttchk() was not doing its job; it has to be relied on to
tell us how many characters are waiting unread.  But this was not happening in
UNIX versions that support select() or rdchk(), etc, but that do not support
FIONREAD.  select() would tell us *that* characters were waiting, but not how
many.  So the test in sdata() for (ttchk() > some-number) would never succeed,
and so the reverse channel would never be sampled.  

Well, it seems FIONREAD is being picked up on most systems from ioctl.h,
term.h, etc, but not on Solaris or Unixware, so we need to include it from
<filio.h> or wherever else it might be found.  ckutio.c, 6 Dec 97.

It turns out the non-FIONREAD-yet-MYREAD versions were just not working very
well at all transferring files with window sizes > 1 (or streaming).  In this
case I made ttchk() return the number of bytes in the myread buffer, if
nonzero; we'll get the next bunch of characters next time around.  When the
internal buffer is empty, then we go to select() and friends, and if select()
tells us data is ready to read, we call the myfillbuff() function to get as
many as are there, rather than returning 1 as before; this allows the
ACK-checking logic in the sdata() loop to detect an ACK much more quickly, in
theory at least.  ttchk(), ckutio.c, 6 Dec 97.

Meanwhile, I cleared up the old problem -- at least in MYREAD versions of UNIX
C-Kermit -- in which we read a packet by its length field and then leave any
trailing junk (like EOP) to still be read, which makes ttchk() always find at
least one character waiting, which can slow us down when we go to read a
packet but there isn't one there.  ttinl(), ckutio.c, 6 Dec 97.

Fixed SHOW STREAMING to show the actual cps of the last transfer.  ckuus5.c,
6 Dec 97.

Isolated SCO as a platform where there is no OS-assisted buffer peeking, and
so our new ttchk() select-then-read method must be used.  Tested streaming
there, including interruption of the SCO version from a receiver on the other
end -- it works fine.  The connection from here to there is Internet, but it
goes through a V.34 modem.  Streaming is anywhere from 50% to 1000% faster on
this connection.  Sometimes nonstreaming fails badly due to unpredictable
timing, whereas streaming has no timeout worries.  7 Dec 97.
                                      
Made sure streaming is turned on only during data phase, to prevent
"Transmission error on reliable link" from stopping the transmission before
it started, in case the user didn't escape back fast enough.  ckcpro.w,
ckcmai.c, ckcfn2.c, 7 Dec 97.

Joe D's persistent report about C-K in Unixware starting out at the slow-start
packet size and never going up turned out to be true.  The reason I couldn't
reproduce it is that all the versions I tested on had BIGBUFOK, but Unixware
didn't, aha.  Fixed in spar(), ckcfns.c, 7 Dec 97.

Discovered (after hours of trial and error) that you can't send the following
characters unprefixed to VMS: 1 3 13 14 15 17 19 24 25 141 145 147.  Several
of these (14,15,24,25) are a surprise.  Once I made sure these were prefixed,
streaming worked fine, as well as non-streaming with W=30, P=8000.  I added
the missing ones to the SET PREFIXING CAUTIOUS list, and also set them when
the WHOAREYOU mechanism lets us know we have VMS on the other end.

               FIONREAD                          SO_ERROR
SunOS          <sys/filio.h>      Works OK       <sys/socket.h>
Solaris        <sys/filio.h>      Works OK       <sys/socket.h>
Unixware       <sys/filio.h>      Works OK       <sys/socket.h>
AIX 4.1        <sys/ioctl.h>      Works OK       <sys/socket.h>
HP-UX 10.20    <sys/ioctl.h>      Works OK       <sys/socket.h>
SCO 5.0.4      <sys/socket.h>     Doesn't work   <sys/socket.h>
NeXT           <bsd/sys/ioctl.h>  Works OK       <bsd/sys/socket.h>
IRIX 6.2       <sys/socket.h>(*)  Works OK       <sys/socket.h>

(*) also in <sys/filio.h>

On a Telnet connection to an IRIX 6.2 system at the U of Oregon, discovered
that the IRIX version could not send a packet longer than 4096 bytes.  Its
logs show it constructing the packet right, but logs on the other side show
the packet being truncated at 4096 and then concatenated with other pieces of
itself.  Why?

 . Does it happen without streaming?                        Yes
 . Does it happen wit streaming?                            Yes
 . Does it happen with older Kermit on IRIX?                Yes
 . Does it happen with older Kermit on SunOS?               Yes
 . Does "set receive packet-length 4000" make it go away?   Yes
 . Does it happen if local is not SunOS?                    Yes
 . Does it happen with "set host *"?                        No <--
 . Does it happen with SET HOST connections?                No <--

So the IRIX 6.2 Telnet server is the culprit.  Streaming / 9K packets works
fine as long as the IRIX Telnet server is not in the picture.

The IRIX incident revealed that there were still some places where
transmission errors (crunched packets, timeouts, NAKs, out-of-sequence
packets, etc) were not treated as fatal during streaming.  Fixed in input(),
ckcfn2.c, 8 Dec 97.

I realized that streaming should be turned on the instant it is negotiated,
and turned off only at the end of the transaction.  There is absolutely no
need to switch it off within a transaction.  This simplifies matters greatly
and avoids errors when we get retransmissions of between-file packets (for
which there is absolutely no need).  ckcpro.w, ckcfn2.c, 8 Dec 97.

Tightened up UNIX ttinl() just a wee bit by checking the packet length field
only when (!havelen) (Jeff noticed this).  ckutio.c, 8 Dec 97.

Changed debug format F011 (never before used) to write counted strings
possibly containing NULs into the debug log:

  debug(F011,label-string,counted-string,count);

Used for entering a packet, or the beginning of one, into the debug log in a
relatively legible way, even if it contains NULs, LFs, etc.  ckuusx.c,
ckcfn2.c, ckutio.c, 8 Dec 97.

Back to VMS unprefixing -- it seems that SO/SI and ^C/^X/^Y don't need
prefixing when sending into an Alpha with Multinet.  But that doesn't prove
anything -- I've had transfers freeze with many VMS's, not just KERVAX, so
for now I'm leaving the extra prefixing in.

Changed "clear-channel" unprefixing to be sticky instead of saving and
restoring the user's prefixing selection around protocol actions.  Otherwise
the user would never be able to find out what happened (e.g. why a transfer
failed).  ckcfn2.c, 8 Dec 97.

Made "te" be a sufficient abbreviation for TELNET (conflicted with TELOPT),
and "ta" sufficient for TAKE (conflicted with TAPI).  ckuusr.c, 8 Dec 97.

Added BIGBUFOK for Unixware 2.0 and higher.  makefile, 9 Dec 97.

Change chktimo() to return(0) if streaming.  ckcfn2.c, 9 Dec 97.

The old bug of the server sending responses to REMOTE commands back in binary
mode came back again, so I fixed it again.  ckcpro.w, ckcfn2.c, 9 Dec 97.

Verified that IRIX 4K bug also exists on IRIX 5.3.  ckuker.bwr, 9 Dec 97.

Resync'd sources with Jeff's, ckuusr.h, ckuus[57x].c, ckcnet.c, 9 Dec 97.

Changed VMS version to not test controller type in ttgmdm() if it is running
on an Alpha.  I have no way of testing this.  ckvtio.c, 9 Dec 97.

Changed SET CARRIER and HELP SET CARRIER in VMS to print appropriate messages
about why it can't be done.  ckuus[23].c, 9 Dec 97.

Reorganized and augmented CKVKER.BWR.  9 Dec 97.

Started adding a section on how to invoke C-Kermit from Web browsers.
I couldn't find any way to do this in Lynx...  ckermit2.upd, 9 Dec 97.

Built quickly on SunOS, Solaris, HPUX, Unixware.  9 Dec 97.

In VMS C-K, incoming filetype attribute was overriding SET FILE TYPE IMAGE.
Fixed in ckcfn3.c, 10 Dec 97.

Peter Eichhorn says that in HP-UX, when C-Kermit is in CONNECT mode and pops
back to the prompt automatically, that the lower CONNECT fork is not killed,
so subsequent CONNECTs make more and more forks, which compete for i/o on
the device.  I can't reproduce it:

Popping back because connection dropped:
 . Does it happen in SunOS with a Telnet connection?   No
 . Does it happen in HP-UX with a Telnet connection?   No
 . Does it happen in HP-UX with a serial connection?   ???

Popping back because of an APC:
 . Does it happen in HP-UX with a Telnet connection?   No
 . Does it happen in HP-UX with a serial connection?   No

But there's another problem: HP-UX C-Kermit doesn't pop back to the prompt
anyway when carrier is lost.  As far as I can tell, it never did.

Streaming on serial connection:
 . V.34 ZIP-file Uploads: about 3400cps.
 . V.34 ZIP-file Downloads: about 2800cps.
 . C-X interrupt when uploading seems to hang, but works OK downloading.
   (Or else the modem just cut out -- it does that a lot).

Added addt'l debug stmts to UNIX CONNECT module to help catch a situation
reported in HP-UX in which "garbage" on the connection results in C-Kermit
popping back to command mode without killing the lower CONNECT fork, so that
subsequent CONNECTs make extra new forks that compete with each other for
input.  I also made sure that the pid variable was initialized to -1, and
reset to 0 whenever the fork was killed, so we can check it upon reentry to
the CONNECT module.  And then I decided, since the pid is kept in a static
variable anyway, to check it upon (re)entry to the CONNECT module, and if it's
not 0, to print a big message and then try to kill it -- a failsafe mechanism.
Also changed all debug() entries from the CONNECT module to start with
"CONNECT" to make them easily greppable.  ckucon.c, 11 Dec 97.

The new fullscreen cps-display procedure was taking up way too much time on
fast (e.g. local-net) connections, and tended to be too busy to read, so I
changed it to operate no more frequently than once per second.  The estimated
time left field received the same treatment.  ckuusx.c, 11 Dec 97.

Rearranged the code in VMS buffered-read routine, txbufr(), to recognize the
purported fact that some new data can be returned by sys$qiouw() even when it
also returns a status of SS$_HANGUP, in an effort to prevent loss of dying
gasps like NO CARRIER.  ckvtio.c, 11 Dec 97.

Changed SET TRANSFER MODE MANUAL to also SET FILE PATTERNS OFF, since those
who read about TRANSFER MODE MANUAL in the book expect it to do what the book
says.  ckuus3.c, 11 Dec 97.

The VMS version was not returning directory names when in server mode and
given the REMOTE DIRECTORY command.  Fixed in ckcfns.c, ckvfio.c, 12 Dec 97.

Changed fullscreen display to put the STREAMING message in the Window Slots
field, since window slots are irrelevant when streaming, and also not to put
false numbers in the RTT/Timeout field, and fixed various other fields to not
update unnecessarily, and consolidated various other code in the fullscreen
display routines.  ckuusx.c, 12 Dec 97.

Discovered I had broken sliding windows a few days ago by commenting out a
section of code I thought was redundant.  It wasn't.  ckcpro.w, 12 Dec 97.

Added comments to gattr() regarding the possibility of retaining the current
FILE COLLISION option when receiving a file with the Recover attribute that
does not need to be recovered.  The upshot is that it could be done, but it
would not be easy (so I didn't).  ckcfn3.c, 12 Dec 97.

Results back from VMS testers on CKVTIO.C changes:
 . Mike Freeman: It doesn't break LAT dialouts.

Changed SET CLEAR-CHANNEL AUTO to also announce a clear channel if RELIABLE
is ON.  ckcfns.c, 17 Dec 97.

External protocols were not propogating the exit status to the success variable
(which is the basis of IF SUCCESS / FAILURE as well as \v(status)).  Fixed in
ckcpro.w, 18 Dec 97.

More work on VMS txbufr() to allow for more and more possibilities regarding
how or whether VMS reports hangup of serial connection.  ckvtio.c, 19 Dec 97.

Minor change in Microlink modem description text.  ckudia.c, 19 Dec 97.

Checked on HP-UX automatically popping back when carrier was dropped -- it
never did.  Aside from that, serial dialouts are good; RTS/CTS works
perfectly, streaming works (since it's an error-corrected connection and the
connection between the modem and the HP is solid).  A non-compressed binary
file uploads at about 5400cps (on a 31200bps connection), whereas SEND /CAL
(the dynamically generated 90+ uncompressible data) uploads at about 3600cps.

Last-minute checks of streaming transfers between SunOS and AIX over local
10BaseT are fine -- they go at 600-730Kcps streaming, 540-660Kcps
nonstreaming.

Numerous #ifdef, prototype, declaration, and other syntactic adjustments to
allow compilation everywhere.  Many modules, 19 Dec 97.

Restored TELOPT_SGA handling to the way it was in Alpha.09 to prevent double
echoing when telnetting to AOS/VS.  ckcnet.c, 20 Dec 97.

More syntactic adjustments for VMS & DEC C, plus a fix for the new VMS handing
of SET [ MODEM ] CARRIER-WATCH.  ckuus3.c, various header files, 20 Dec 97.

"make du32"...  while compiling ckuusx.c, the compiler dumps core.  I did the
trick with compiling this module separately without the optimizer.  makefile,
20 Dec 97.

ckuus2.c (the help-text module) grew too big for the QNX 16-bit build, so
NOHELP added to makefile.  Also clearok() seems to be missing from its curses
library, so the reference to it in screenc() was #ifdef'd out.  makefile,
ckuver.h, ckuusx.c, 21 Dec 97.

---Alpha.10---

Changes from Jeff to ckcnet.c, 21 Dec 97.

The VMS version was warning that connection was still open after it closed.
That's because ttclos() was setting network to 0, so then a subsequent call to
ttchk() was taking the serial path.  Fixed in ckvtio.c, 22 Dec 97.

Added GFTIMER to VMS version using sys$gettim() and lib$sub_times(), with help
from James Puzzo <jamesp@dgii.com>.  Compiles and runs without complaint on
VMS 5.5, so should be OK on 5.0 and above, but maybe #ifndef OLD_VMS might be
needed.  ckcdeb.h, ckvtio.c, 22 Dec 97.

Added "*.exe" to UNIX list of binary filename patterns.  ckcmai.c, 22 Dec 97.

Changed \frand(n) to return a random integer between 0 and n, as advertised,
even if n <= 0.  ckuus4.c, 22 Dec 97.

Changed "Default file-transfer mode" message to say AUTOMATIC in the more
modern cases.  ckuus5.c, 22 Dec 97.

Changed a recently-added memcpy() in tn_sb() to strncpy(); memcpy is not
portable.  ckcnet.c, 22 Dec 97.

Changed #ifndef to #ifdef to avoid making a debug log entry for every single
character than comes in, in netinc(), ckcnet.c, 22 Dec 97.

Updated bgcc (bounds-checking gcc) makefile entry from William Bader,
23 Dec 97.

Fix from Jeff to netflui() for TCPLIB case.  ckcnet.c, 23 Dec 97.

Replaced the strncpy() that replaced the memcpy() with a loop so as not to
terminate at NUL.  tn_sb() in ckcnet.c, 23 Dec 97.

Changes from Jeff to SHOW TELNET.  ckuus4.c, 23 Dec 97.

Fixed clsconnx() in the remote-mode VMS case to call ttclos(), otherwise it's
not possible to SET LINE TTA0:, then SET LINE, the SET LINE TTA0: again (we
should check this in K95, etc, too).  ckuus7.c, 23 Dec 97.

Changed "float" to CKFLOAT everywhere, and defined CKFLOAT to be double in
ckcdeb.h (a little reading shows that double is more portable than float).
This was needed (at least) because in SCO, conversion from float to long dumps
core (on purpose!) if the real number is too long for a long (clearly, then,
this is not the right fix).  The default CKFLOAT definition can be overridden
by -DCKFLOAT=float (or whatever) on the command line.  Many modules, 24 Dec
97.

Fixed SHOW PATTERNS to not make some lines too long; it was miscounting the
length.  shopat(), ckuus5.c, 24 Dec 97.

Fix from Jeff for handling receive filters: evaluate \v(filename) after
converting the incoming name, rather than before.  rcvfil(), ckcfns.c,
29 Dec 97.

Disabled filename pattern-match based transfer mode switching when sending
from pipe or filter (Jeff's suggestion).  sfile(), ckcfns.c, 29 Dec 97.

Change from Jeff to not log incoming NUL after CR when executing INPUT
commands on Telnet connections.  ckuus4.c, 29 Dec 97.

Fixed a "== should be =" typo in the SET HOST code and supplied some missing
TCPSOCKET ifdefs (from David Lane).  ckuus7.c, 29 Dec 97.

Added entry for zrmdir() to ckcplm.doc.  29 Dec 97.

Updated IRIX makefile entries from Ric Anderson.  29 Dec 97.

Fixed an unguarded reference to zfnqfp().  ckcfn3.c, 30 Dec 97.

Fixed UNIX ttinl() to terminate on turn argument, if given, rather than
eol argument.  ckutio.c, 30 Dec 97.

Improvements on the new F011 debug.log format (so far used only by the UNIX
version of ttinl()).  ckuusx.c, 30 Dec 97.

Various changes to debug logging.  cku[tf]io.c, 30 Dec 97.

Found the problem that William Bader was reporting in the SCO version.  The
new code that I added to ttchk() in Alpha.10 for the non-FIONREAD case, that
would force a nonblocking read when all else failed, set the initial myread
buffer index to 0 when it should have been -1 (since, unlike mygetbuf(), it
was not returning a character).  ckutio.c, 30 Dec 97.

Made kermit -X and -Z (X.25 connections) set the reliable flag.  ckuusy.c,
30 Dec 97.

Added switches to SET LINE / SET HOST.

 /CONNECT means CONNECT automatically if connection is successful.
 /SERVER means go into server mode automatically if connection is successful.
 /SHARE (VMS SET LINE only) means allow SET LINE device to be shared.

/SHARE is to get around a problem in DECIntact, where the only way to use the
controlling terminal is if you have SHARE privilege.  When /CONNECT or /SERVER
is given on a serial connection, we wait up to 1 sec for CD to appear if
CARRIER-WATCH is not OFF, since instantaneous connecting tends to work because
it can take some time for CD to react to DTR.  Also, made the trailing /TELNET
and /RLOGIN switches invisible, since it doesn't make a lot of sense to say
"telnet blah /rlogin" or v.v.; left the "/raw-socket" switch visible.  Tested
on SunOS with TCP/IP, SunOS with serial ports, and Solaris X.25 connections.
The switch parsing code was not added for network types other than TCP/IP and
X.25.  ckuusr.h, ckuus[27].c, ckvtio.c, ckermit2.upd, 30 Dec 97.

The SET LINE (SET PORT) switch parsing for OS/2 is in place but not tested.
setlin(), ckuus7.c, 30 Dec 97.

C-Kermit's SWITCH command would erroneously execute the first case if the
switch variable did not have a matching label and there was no ":default"
label.  Fixed by adding a :default label to the SWITCH macro definition, which
is ignored if the user provides a :default label in the SWITCH statement.
ckuus5.c, 30 Dec 97.

Changed copyright dates to 1998.  All ck[cuv]*.[ch] modules.  30 Dec 1997.

Some fixes from Jeff to yesterday's changes.  ckuus[27].c, 31 Dec 97.

Allow remote filename to be shown in serial and/or CRT display, from Jeff.
ckcpro.w, ckuusx.c, 31 Dec 97.

Fixed protocol module to propogate failure into exit-status variable.
proto(), ckcpro.w, 31 Dec 97.

Changed SET LINE /SHARE (VMS) to not only not drop SHARE privilege but also
to try to enable it.  ckermit2.upd, ckvtio.c, 31 Dec 97.

Added SET LINE /NOSHARE (VMS), the opposite of /SHARE, since VMS people like
their switches in pairs.  ckuusr.h, ckuus[27].c, 31 Dec 97.

Changed all the VMS code that tests for SS$_HANGUP to do so only when
CARRIER-WATCH is not OFF.  txbufr(), contti(), ckvtio.c, 31 Dec 97.

Removed text from HELP SET CARRIER-WATCH saying that it didn't work in VMS.
ckuus2.c, 31 Dec 97.

Removed VMS warning text from SET CARRIER-WATCH.  ckuus3.c, 31 Dec 97.

Changed /CONNECT to undo any previous /SERVER and vice versa; the two are
contradictory and mutually exclusive, so if more than one are given, the last
one sticks.  ckuus7.c, 31 Dec 97.

Added carrier check at VMS CONNECT entry, just like in UNIX, to enforce
CARRIER-WATCH setting.  ckvcon.c, 31 Dec 97.

Improved the "Carrier required but not detected" message in the UNIX CONNECT
module (making it the same as the VMS one).  ckucon.c, 31 Dec 97.

Removed scary message from VMS CONNECT module if CD drops but CARRIER-WATCH
is OFF.  ckvcon.c, 31 Dec 97.

Commented out three gratuitous "blah connected on port blah" messages from
ckcnet.c which started popping up yesterday.  With only very few exceptions,
the upper-level code should take care of printing information messages.
ckcnet.c, 31 Dec 97.

Discovered that elapsed-time (and therefore also CPS) calculations were
complete nonsense in VMS on the Alpha, even though they were OK on the VAX.
Changed definition of CKFLOAT from "double" to "float" on the Alpha only.
which seems to have fixed it.  ckcdeb.h, 31 Dec 97.  

This bodes ill for other operating systems on the Alpha (like Digital UNIX),
especially if they use DEC C, but I tried it on DU4.0 as "double".  It did
the calculations correctly, but eventually died with a "floating point
exception", so I made CKFLOAT "float" here too.  ckcdeb.h, 31 Dec 97.

More fooling with Digital UNIX 4.0.  Regular file transfer works OK, but
streaming halts (hangs) almost immediately.  Debug log shows FIONREAD is
returning ridiculous numbers, like 4393751543808...  And so then we get
awfully confused trying to read that many bytes.  "man 7 tty" in DU4.0 says
the FIONREAD ioctl arg is int *, but I was using long *.  Changed it to int *,
and now get reasonable results from it -- numbers like 252 or less.  But it
still hangs when trying to stream.  Aha, it's only the stupid Xon/Xoff
business.  I wonder why it doesn't happen when not streaming?  Probably
because streaming is so much faster...  Anyway, the change to ckutio.c was a
good one, and long overdue -- I wonder how the code ever worked before...
31 Dec 97.

(I wonder what happens with Linux on the Alpha...)

Back to VMS...  If I Telnet from VMS C-K to somewhere else, then close the
connection (to return to remote mode), then type "receive", it goes back the
prompt immediately.  This is fallout from the December 22 change regarding
ttclos() setting network to 0.  Well now nobody was.  Fixed by making ttopen()
set network to 0 when it opens a serial connection.  ckvtio.c, 31 Dec 97.

Updated ckuker.bwr.  31 Dec 97 (sic transit anno 1997).

In the UNIX version, initialize all 12 file pointers to NULL, not just the
first 8.  ckufio.c, 1 Jan 98.

Documented modem signal treatment in VMS.  ckvker.bwr, section 3.1.4,
1 Jan 98.

Don't print hangup error message in VMS C-Kermit during CONNECT if 
CARRIER-WATCH is OFF.  ckvtio.c, 1 Jan 98.

When doing a labeled-mode transfer, if an as-name was given in the RECEIVE or
GET command, it should override the file's internal name, but until now it
didn't, which was very confusing.  This is now done by doing an implicit "set
file label name off" in rcvfil(), and then restoring the "set file label name"
setting to its previous value after the transfer.  Tested, works.  ckcfns.c,
ckuus[6x].c, 1 Jan 98.

Added cross-references to other relevant SHOW commands from SHOW FILE.
ckuus4.c, 1 Jan 98.

Minor cosmetic improvements to SHOW SCRIPTS.  ckuus5.c, 1 Jan 98.

Added Streaming and CKFLOAT type (float or double) to SHOW FEATURES.
ckuus5.c, 1 Jan 98.

Defined CK_PERMS for VMS to see what would happen.  Nothing.  ckcdeb.h,
1 Jan 98.

There's already code from Terry in ckvfio.c to fill in this stuff, but it has
never been exercised.  Does it send generic protection?  No, because the code
was putting binary data into the A packet.  Fixed it to convert to strings
(hex for 16-bit system-dependent, tochar() for generic).  VMS sys-dependent
protection is hex representation of WGOS fields (World,Group,Owner,System)
in that order; in each field Bit 0 = Read, 1 = Write, 2 = Execute, 3 = Delete.
A bit value of 0 means permission is granted, 1 means permission is denied.
ckvfio.c, 1 Jan 98.

VMS generic protection was being sent for "world" (by the book), but we're
doing it for "owner" instead these days, which makes more sense, so I made
this change.  So now VMS C-Kermit sends both permission fields correctly:

  r-01-00-^A/!FWERMIT.EXE'" 
  s-01-00-^AE!Y/amd/watsun/w/fdc/new/wermit.exe.DV
  r-02-01-^A]"A."D7""B8#119980101 18:14:05!#8531&872960,$A20B-!7(#512@ #.Y
  s-02-01-^A%"Y.5!                                     ^^^^^^^^^

The system-dependent protection "A20B" corresponds to (E,RWED,RED,RE) (but
note the order of fields is reversed and the bit sense is reversed).  The
generic protection "7" = 23 + 32; 23 = 16+4+2+1 = Read, Write, Execute,
Delete, which is indeed the owner permission.  ckvfio.c, 1 Jan 98.

This was somewhat difficult and time-consuming without manuals, man pages, or
header files, requiring much trial and error...  Then came the even more
mysterious task of setting received-file protection from the incoming
Attribute packet.  Two cases:

 1. Local protection (for VMS-VMS transfers; needs "set transfer mode manual"
    or else we get labeled transfer, which bypasses all of this).  I've got
    this working to the point of converting the incoming bit (like ",$E20B")
    to internal format.  (Once this works, we can easily extend it to cover
    RSX, etc, provided PDP-11 Kermit uses the same format, which it probably
    doesn't.)

 2. Generic protection.  I've got this working to the point of converting
    the generic format to VMS internal format, but only for the one field.
    What do I set the other fields to?    

And then, in both cases, I wind up at the bottom of zstime() with
xabpro_ofile.xab$w_pro filled in with a plausible value, but then nobody ever
uses it for anything so the incoming file's protection is never actually set.
That last part needs a VMS expert:

 1. How do I get the default protection for the file we're creating so I
    can set the non-owner fields to reasonable values?  For example, if it's
    a new version of an existing file, it should (and normally does) inherit
    its protection, but that happens transparently to Kermit.  But now we want
    to get the protection that *would* be set and change the owner field
    according to the attribute.

 2. What do I do with xabpro_ofile.xab$w_pro once it's filled in?  zstime()
    sets the file date simply by copying it to xabdat_ofile.xab$q_cdt, and
    then this is picked up later by zopeno(), so why isn't the protection
    also picked up?  I couldn't quite follow all the RABs and FABs...

The upshot is, protection/permissions work when sending from VMS to UNIX, but
not in the other direction.  So, for example, if you send an EXE file from VMS
to UNIX, it keeps its execute permission.  If we can get this working in the
other direction, then when you send it back from UNIX to VMS, it will still
have its execute permission.

Changed UNIX C-Kermit to set Delete bit in Generic permissions if file has
Owner Write permission (since UNIX has no separate Delete permission), and to
treat Delete bit in incoming Generic permission equivalent to Write bit.
ckutio.c, 1 Jan 98.

Tried not defining NOLISTEN for VMS to see what would happen.  It worked OK on
UCX 2.0.  It failed horribly on MultiNet; I twiddled some stuff here and there
and seem to have got it working.  Went back to UCX to make sure I didn't break
it there...  Hmmm, still seems to work.  ckcnet.[ch], ckermit2.upd, 1 Jan 98.

VMS: turn off broadcasts on the *console* channel as well as on the
communications channel.  conbin(), ckvtio.c, 2 Jan 98.

Changed the UNIX version when it is about to set a received file's owner
permissions from the incoming generic protection attribute, to use the umask
for the group and world permissions.  zstime(), ckufio.c, 2 Jan 98.

Updated File Permissions section of ckermit2.upd, 2 Jan 98.

Updated ckermit.bwr, and added a new section on "echoplex" scripts.  2 Jan 98.

Moved usage() routine and hlp1[] strings from ckuus2.c to ckuusy.c.  2 Jan 98.

Added little help blurbs for each command-line argument.  ckuusy.c, 2 Jan 98.

Added HELP OPTIONS [ { <opt>, ALL } ].  If <opt> given, it prints the short
HELP text for the option.  If ALL given, it prints them for all options, with
more-prompting, etc.  HELP OPTIONS by itself explains command-line options.
ckuusr.h, ckuus[2y].c, 2 Jan 98.

VMS protections, cont'd...  John Santos showed me how to link the protection
field into that rat's nest of FABs, RABs, and XABs, so now we are actually
setting the VMS file protection from the incoming A packet.  And it works for
both system-dependent (VMS 16-bit) and generic Kermit protections, hurray.
Except when using the generic protection, the non-Owner fields are set to 0,
e.g. (,RWED,,); I'll do something about that tomorrow.  ckvfio.c, 2 Jan 98.

Added \v(pid) for VMS.  ckcdeb.h, ckvfio.c, 3 Jan 98.

Added code to VMS version to set its process name to "C-Kermit_6.1".
If that's a duplicate name, then "C-Kermit_6.1_1", C-Kermit_6.1_2", etc.
sysinit(), ckvtio.c, 3 Jan 98.

Added code to VMS zstime() to get the user's default file protection with
sys$setdfprot(), and then used it to set the S, G, and W fields when setting O
field from generic protection (but using the O field as a mask for the other
fields).  ckvfio.c, ckcplm.doc, ckermit2.upd, 3 Jan 98.

Merged some changes from Jeff.  ckcmai.c, ckcnet.c, ckuus[xy].c, ckuusr.h,
3 Jan 98.

Minor cosmetic cleanups to HELP OPTIONS.  ckuus[2y].c, 3 Jan 98.

Increased Olimit for SINIX to 2100.  makefile, 3 Jan 98.  (But now ckcpro.c
takes a loooooong time to compile...)

Numerous last-minute #ifdef & declaration adjustements.  Many modules.
3 Jan 98.

At the last moment, found that what should have been "xitsta |= what;" had
been typed as "xitsta != what;" (watcom caught it - "meaningless expression").
So it's corrected in the code, but wrong in all the Alpha.11 binaries.
ckcpro.w, 3 Jan 98.

---Alpha.11---

(See last entry for Alpha.11.)

Some fixes to usage() message.  ckuus[2y].c, 4 Jan 98.

Minor fixes from David Lane to a debug() statement in ckcnet.c and to
VOS-related #ifdefs in ckcdeb.h, 4 Jan 98.

Added display of sizeof(xxx) to SHOW FEATURES, for xxx == int, char, long, etc.
ckuus5.c, 6 Jan 98.

Merged Jeff's recent changes, many modules.  13 Jan 98.

Merged David Lane's changes for Stratus VOS, adding support for recursive
directory traversal, fully-qualified filenames, etc.  ckcdeb.h, ckuusx.c,
plus all-new ckl*.* modules, 13 Jan 98.

We were still getting floating-point exceptions and related difficulties (up
to and including system halts) in Alpha.11 apparently due to constructions
like the following:

    if (fpxfsecs <= 0.0)
      fptsecs = (CKFLOAT) 0.000001;
    filcps = (long)((CKFLOAT) ffc / fpxfsecs);

The division by a tiny number created a quotient that might not fit in a long.
I replaced all references to "0.000001" by GFMINTIME, which is now defined in
ckcdeb.h to be 0.005.  This doesn't totally fix the problem, but makes it a
lot less likely.  E.g. suppose we have network so fast that we can transfer a
1MB file in less time than can be measured, so fpxfsecs is 0.0.  When we set
the time to 0.00001:

  1,000,000 / 0.00001 = 1,000,000,000,000

but 2^32 (the longest long) is 4,294,967,296, too small for this number,
hence the trap.  But if we set the time to 0.005:

  1,000,000 / 0.005 = 200,000,000

which fits.  The new symbol GFMINTIME is defined to this value, and we use
the symbol everywhere rather than the hardwired value.

But this still doesn't fix the problem; if the file were (say) 3MB, it would
still happen.  So we also have to check whether the result of a division would
exceed the capacity of a long (or int) to hold it, and in that case take
special action to avoid the trap.  ckcdeb.h, ckcfn2.c, ckutio.c, 13 Jan 98.

Recoded the memcpy() replacement loop in ckcnet.c to not use an unitialized
variable.  Then replaced the loop altogether with a call to a new routine,
ckmemcpy(), which is a system-independent version of memcpy() that can be
called safely from anywhere in C-Kermit.  Presently it's defined in ckcmai.c,
but eventually all of these utility routines should be moved out to a new
ckcuti.c module.  13 Jan 98.

Fixed an out-of-bounds array reference in the new debug(F011,...) handler.
From William Bader.  ckuusx.c, 13 Jan 98.

Raised MAXWLD for VMS from 4K to 1024K and made mtchs[] array dynamic.
ckvfio.c, 14 Jan 98.

Raised MAXWLD for UNIX in the non-BIGBUFOK case from 1K to 4K.  ckufio.c,
14 Jan 98.

Moved MAXWLD definition from ck[uvdl]fio.c to ckcdeb.h, so we can access
it from other modules.  Added MAXWLD display to SHOW FEATURES.  ckuus5.c,
14 Jan 98.

Defined BIGBUFOK for HP-UX 9.x.  ckcdeb.h, 14 Jan 98.

Added makefile entries and banner for HP-UX 11.00: "make hpux1100", etc.
makefile, ckuver.h, 14 Jan 98.

UNIX C-Kermit CONNECT command was not checking the return code of ttchk() for
a negative value, and so was not popping back to the prompt automatically.
Seems to do so now, at least on HP-UX, as long as CARRIER-WATCH is not OFF.
ckucon.c, 14 Jan 98.

By chance, I noticed something very strange in UNIX:

  C-Kermit> send /b foo

Sent the "foo" file over and over again.  Diagnosis: "/b" is not treated as a
switch because it does not uniquely match any switch (it is ambiguous between
/binary and /before).  So since it does not match a switch, we look to see if
it matches a file.  It so happens, there was a "b" directory under root.  Now
with the new recursive file sending feature, the SEND command, when given a
directory name, sends the files from the directory.  In other words, "/b"
is treated as "/b/*".  But the b directory contained no files, so zxpand()
came up with 0.  In that case, UNIX zxpand would call zltor() on the filespec
and try again.  Bad idea!  This caused the pathname to be stripped, leaving
only "*".  So "send /b foo" sent all the files from the current directory
with an as-name of "foo".  Cure: (1) remove the fallback -- if the filespec
doesn't match anything, that's that.  And (2) Make "/b" an acceptable
(nonunique) abbreviation for "/binary".  ckufio.c, ckuusr.c, 14 Jan 98.

Added missing return(0) to dohopts().  ckuus2.c, 14 Jan 98.

In SGI IRIX and in NeXTSTEP, there is no API for hardware flow control, but it
can still be used by selecting a device with a particular name, like /dev/cufa
instead of /dev/cua.  But in this case SET FLOW AUTO would wind up setting the
flow control to Xon/Xoff instead of leaving it alone.  Added #ifdefs for IRIX
and NeXT to prevent this.  Also defined a new IRIX symbol for all IRIX
versions 4.0 and later.  ckcdeb.h, ckuus3.c, 14 Jan 98.

How does VMS C-Kermit know if it's running under batch.  Currently:

 . When run interactively, batch == 0.
 . If started from a COM file, batch == 1.
 . If started in batch, batch == 1 and congm sys$qiow = SYSTEM-F-ILLIOFUNC
 . In batch, SHOW LOG SYS$INPUT says "_NLA0:".

Tried adding a sys$getjpiw() call, once I figured out how to set it up.
If asked for JPI$_MODE, it returns the mode of the job: batch, interactive,
etc: perfect.  Builds and runs fine on VMS 5.5-2, so should be OK elsewhere.
ckvtio.c, 14 Jan 98.

Fixed the new xxscreen() macro to not call screen() if batch (VMS) or backgrd
(elsewhere) was set.  ckcker.h.  This also required adding extern declarations
for batch & backgrd to ckcfn[s23].c, ckcpro.w, and ckuusx.c.  14 Jan 98.

 . Fullscreen display in interactive sessions: Yes
 . Fullscreen display in @blah.com sessions:   ??
 . Fullscreen display in submit blah sessions: No <-- so this is fixed now.

Not sure what the deal is with when running C-Kermit with @blah.com, where
blah.com contains image data...  But batch jobs now work nicely, don't put any
junk in the batch log.

Added SET BATCH { ON, OFF } in VMS to let user have the final word.  ckuusr.c,
14 Jan 98.

Minor fixes to "help options" text.  ckuus2.c, 14 Jan 98.

VMS C-Kermit reported a "fatal error" when executing an INPUT command on a
modem when it hung up, even though CARRIER-WATCH was OFF.  Tracked this down
with help of a debug log from Dale Dellutri.  Fixed in txbufr(), ckvtio.c,
15 Jan 98.

Dale D. also reported that an extraneous character could show up on the
CONNECT screen when the remote hung up.  No explanation jumps out from the
code, but I changed VMS ttinc() to not deduct 1 from the buffer count until
first checking that it's > 0.  ckvtio.c, 15 Jan 98.

Checked the VMS version on a system where I can dial out -- I don't seem to
have broken anything, and I don't see any of the symptoms any more that I
tried to fix, so maybe that's progress.

Built on the NeXT, dialed out, logged in somewhere, logged out, and for the
first time ever, C-Kermit popped back to its prompt automatically.  And if
CARRIER-WATCH is OFF it doesn't, and you can see the NO CARRIER message and
type more AT commands.

Evidently the HP workstation Reset key sends some kind of ueber-SIGINT that
can not be SIG_IGNored.  When the user hits it (usually because it's where PC
users expect Esc to be), suddenly we're in the Ctrl-C handler, longjmping back
to the prompt, which leaves the lower CONNECT spinning away merrily.  What's
odd about this is that it is the *previous* SIGINT handler, not the current
one, which is SIG_IGN.  I sent off a query to HP about how to handle this, but
in the meantime, in addition to the stale-fork-killing code I added to
ckucon.c a while back, I made the Ctrl-C trap simply return
"if (what == W_CONNECT)".  ckuusx.c, 15 Jan 98.

Peter Eichhorn verifies this fixes leftover fork problem on HP-UX; Reset is
now properly ignored during CONNECT and causes SIGINT at the command prompt,
which is handled properly.  16 Jan 98.

To subtract from, or maybe add to, the confusion about text and binary mode,
I made sure that if the user says SEND (MSEND, etc) /BINARY, that binary mode
is really used, i.e. not superseded by filename pattern-matching, or by
TRANSFER MODE AUTO.  Ditto for SEND /TEXT of course.  ckuus[r6x].c, 16 Jan 98.

Unfortunately, matters are not quite so simple with GET because WHOAMI takes
precedence over WHATAMI, as the manual states.  WHOAMI is controlled by SET
TRANSFER MODE, so if I tell the client to SET TRANSFER MODE MANUAL, then "get
/text x.zip", it should work.  But it doesn't because the server still has
FILE PATTERNS ON and ".zip" is a binary pattern.

While looking into this, I also discovered that REMOTE SET FILE TYPE was
broken.  Why?  Because as soon as we changed the mode, it was restored to its
previous value because it didn't also change g_binary (the global, prevailing
mode).

OK, fine, that's fixed.  But now if TRANSFER MODE is MANUAL, WHATAMI still
doesn't work.  Why?  Again because of the patterns.  gnfile() was resetting
its file type to whatever it was when protocol started between each file, so
as to get the global file mode right when pattern-switching.  So this undid
WHATAMI.  Fixed in gnfile(), ckcfns.c, 16 Jan 98.

So now if I tell the server to SET TRANSFER MODE MANUAL before putting it in
server mode, everything works right.  But there is no way for the client to do
this after the server is started.  So I added REMOTE SET TRANSFER MODE.  The
new code is 410, the values are 0 for AUTO, 1 for MANUAL.  Client side in
ckuus3.c, server sever side in remset() in ckcfns.c, documentation in
ckermit2.upd, 16 Jan 97.  Also sent a note to JRD so he can add it to MSK.

Added REMOTE SET XFER as a synomym for REMOTE SET TRANSFER and fixed both of
these to have a private keyword list rather than using the non-REMOTE one.
ckuus7.c, 17 Jan 98.

Additions/corrections to text and binary patterns lists.  ckcmai.c, 17 Jan 98.

Added \v(intime) to tell the number of milliseconds it took for INPUT to
find its match.  ckuusr.h, ckuus4.c, ckermit2.upd, 17 Jan 98.

Added display of modem's dial result message to "Call complete" if DIAL
DISPLAY not ON (and not quiet, etc).  ckudia.c, ckermit2.upd, 17 Jan 98.

Added \fword(s1,n1,s2) to return word number n1 from string s1, with optional
break set s2.  ckuusr.h, ckuus[24].c, ckermit2.upd, 17 Jan 98.

Fixed cmfdb() to print an error message if it gets through all the chained
fdb's without finding anything and the return code from the last parsing
function is -9.  Previously it just moved the cursor backwards silently
over the offending field.  ckucmd.c, 18 Jan 98.

If a command has a switch that takes an argument followed by a switch that
does not, e.g.:

  send /as:oofa.txt /text foo.bar

and then this command is recalled, there is a parse error.  Fixed in gtword(),
ckucmd.c, 18 Jan 98.

Added help text for KERMIT command.  ckuus2.c, 18 Jan 98.

Added optional message to EXIT/QUIT, like END and STOP.  ckuusr.c, 18 Jan 98.

Merged Jeff's recent changes, ckcdeb.h, ckuus7.c, ckcnet.c.  19 Jan 98.

Adjusted the constants for float->long overflow detection in fstats() and
tstats() (thanks to gcc -Wall).  ckcfn2.c, 19 Jan 98.

Ran a bunch of feature-test builds on SunOS; each one involved some --
sometimes lots of -- #ifdef adjustments and declaration juggling, especially
the ones marked with (*).  ckuus5.c, in particular, has been massively
rearranged:

 . (full)           ok (1097K)
 . -UDYNAMIC        ok (1081K) 
 . CK_SMALL         ok (1073K)
 . MINIDIAL         ok (1064K) (*)
 . NOBIGBUF         ok (1081K)
 . NOBROWSER        ok (1081K)
 . NOCAL            ok (1089K)
 . NOCKSPEED        ok (1089K)
 . NOCKTIMERS       ok (1089K) (*)
 . NOCMDL           ok (1073K)
 . NOCKXYZ          ok (1089K)
 . NOCSETS          ok (1024K)
 . NODEBUG          ok ( 991K)
 . NODIAL           ok ( 958K)
 . NOFRILLS         ok (1056K)
 . NOGFTIMER        ok (1089K)
 . HOHELP           ok ( 974K)
 . NOICP            ok ( 393K) (*)
 . NOJC             ok (1089K)
 . NOKERBEROS       ok (1089K)
 . NOLOCAL          ok ( 770K) (*)
 . NOMKDIR          ok (1089K) (*)
 . NONET            ok (1015K)
 . NOPARSEN         ok (1089K)
 . NOPATTERNS       ok (1081K)
 . NOPERMS          ok (1089K)
 . NOPIPESEND       ok (1089K)
 . NOPUSH           ok (1073K) (*)
 . NORECURSIVE      ok (1097K)
 . NOREDIRECT       ok (1089K)
 . NORENAME         ok (1089K)
 . NORESEND         ok (1089K)
 . NOSETKEY         ok (1089K)
 . NOSERVER         ok (1064K)
 . NOSHOW           ok (1040K) (*)
 . NOSPL            ok ( 925K) (*)
 . NOTRIGGER        ok (1089K)
 . NOTUNING         ok (1089K)
 . NOUNPREFIXZERO   ok (1097K)
 . NOSPL+NOLOCAL    ok ( 614K)
 . sunos42mi        ok ( 294K) ("minimum interactive")
 . sunos41m         ok ( 180K) ("minimum" - cmd line only)

After getting all these to build, I went through the list a second time to
make sure that the accumulated fixes didn't break earlier builds.  Then I
spot-checked various builds to make sure they transferred files OK, etc.
19 Jan 98.

Fixed "kermit -Q" to work no matter what the compile-time buffer lengths are.
ckuusy.c, 20 Jan 98.

Still more #ifdef adjustments for feature selection.  20 Jan 98.

Added an "include list" for \fword() (an exception list to the break set).
ckuus4.c, ckermit2.upd, 20 Jan 98.

Fixed cmdate() to not accept times that were so large they would wrap around
and become negative.  ckuus4.c, 20 Jan 98.

Discovered that filename completion was broken on VMS.  Fixed in ckucmd.c,
20 Jan 98.

Updated some of the UNIX makefile production rules to include ckcnet.h.
makefile, 20 Jan 98.

Discovered that TELOPT_AUTHENTICATION is erroneously defined as 45 on Ultrix,
OSF/1, Digital Unix, and IRIX (all versions of each).  It should be 37.  This
introduces conflicting definitions in the preprocessor, which I #ifdef'd out.
ckcnet.h, 20 Jan 98.

---Alpha.12---

Merged Jeff's changes since last week.  ckuus7.c, ckcnet.c, ckucmd.c,
26 Jan 98.

Added \fsplit(string,&array,break,include).  ckuusr.h, ckuus4.c, ckuus2.c,
ckermit2.upd, 26 Jan 98.

Made SHOW NETWORK available in all versions; if no network support is
included, it says so.  ckuus[r5].c, 26 Jan 98.

Integrated Jeff's changes since yesterday.  ckuus7.c, ckcnet.[ch], ckuusr.h,
27 Jan 98.

Added SET TCP REVERSE-DNS-LOOKUP { ON, OFF }.  Sets tcp_rdns; code needs to
be added to use it.  ckuusr.[ch], ckuus[234].c, ckcnet.c, 27 Jan 98.

Added -DNOGFTIMER to HP-UX 5.00 makefile entry, since the high precision
timers give off-the-wall results there.  makefile, 27 Jan 98.

Changed predefined FAST macro to "set prefixing cautious" instead of "minimal".
ckuus5.c, 27 Jan 98.

Discovered that command-line syntax error messages were never printed.
Fixed in fatal(), ckuusx.c, 27 Jan 98. 

Merged Jeff's changes.  ckuus[r37].c, ckcnet.[ch], 28 Jan 98.

Moved +DA1.0 from the hpux100o entries to the basic one, since it applies to
both compilers.  makefile, 28 Jan 98.

Added -pipe to linux entry so it won't make temp files, allowing builds on
systems where /tmp is too full.  makefile, 28 Jan 98.

In VMS, make zshcmd() (RUN command) return proper status, ditto for zxcmd(),
and make both set pexitstat.  ckcdeb.h, ckuus4.c, ckvfio.c, 29 Jan 98.

Enabled ck_errstr() for VMS, but errno is always 0.  Tried it again based on
vaxc$errno, same result.  So then I went thru ckvfio.c and ckvtio.c and
assigned the return of every sys$blah() and lib$blah() call to a global
variable, vms_lasterr.  Works.  ckv[ft]io.c, ckuusx.c, 29 Jan 98.

Added \ferrstring(n), returns error message for code n.  In <sys/errno.h>
environments (like UNIX), this requires knowing the maximum index of the
sys_errlist[] array, normally sys_nerr.  We'll soon find out how portable
that is...  UNIX and VMS only for now.  ckuusr.h, ckuus4.c, 29 Jan 98.

Added SET FUNCTION DIAGNOSTICS { ON, OFF }.  When ON, this makes variables
and functions return an error-message string as their values.  ckuusr.h,
ckuus[34].c.  30 Jan 98.

Discovered that array initializers were off by one (i.e. not skipping over
the "=" sign); numerous other problems with array bounds, malloc'ing and
freeing, etc, when processing initializers.  ckuusr.c, 30 Jan 98.

Added makefile entrys aix41, aix42, aix43.  These are all the same, but 
set a different program herald.  ckuver.h, makefile, 31 Jan 98.

Kerberos V authentication added to Linux version, using Cygnus libs.
Encryption does not work yet due to fork structure of ckucon.c.  makefile,
ckcmai.c, ckuus5.c, ckutio.c, ckcnet.[ch] + new non-public krbtel.[ch] module,
documented in kerberos.txt.  1 Feb 98.

Fixed the size of the command buffer to be at least as big as the function
result buffer.  This means, for BIGBUFOK builds, 10K rather than 4K.
ckucmd.h, 1 Feb 98.

Added SET FUNCTION ERROR { ON, OFF }.  When ON, this makes any command that
contains a bad function call or built-in variable reference fail.
ckermit2.upd, ckuus[2345].c.  1 Feb 98.

Uncoupled display of dialing-directory related info during dialing from
SET DIAL DISPLAY ON, which should only affect whether dialog with modem is
shown.  ckuus6.c, 1 Feb 98.

Fixed some prompt-stomping in VMS DIAL command when DIAL DISPLAY is ON.
ckudia.c, 1 Feb 98.

Added "k95" as a command to K95, an alias to "kermit".  ckuusr.c, 1 Feb 98.

Fixed minor problem with completion of "intro" command.  ckuusr.c, 1 Feb 98.

Discovered that isabsolute() for UNIX, OSK, Amiga, and K95 returned 1 instead
of 0 if the filename started with ".", which is completely wrong.  One symptom
was that an incoming file whose name started with "." when RECEIVE PATHNAMES
were RELATIVE would have a second dot added to the front of its name.  I can't
imagine why this was done in the first place, and hope I haven't broken
anything that depended on this -- but if I did, it shouldn't have...
ckcmai.c, 1 Feb 96.

When a file group is being transferred, CPS rates were not being calculated
after the first file.  Must have happened during the GFTIMER work...  Fixed
in ckuusx.c, 1 Feb 96.

In VMS, on a serial connection with CARRIER-WATCH off, and the remote hangs up
while C-Kermit is in CONNECT mode, contti() gets a completion from sys$qiow()
indicating SS$_HANGUP, but no character; however, Kermit was returning a
character anyway, whatever happened to be left in the variable from last time.
Fixed by having contti() set the read up to be queued again next time and then
returning a special status, -2.  ckcgetc(), looks for the -2 and then calls
contti() again, up to 10 times.  Experimentation shows that the second call
always succeeds -- SS$_HANGUP is returned only once; after that, reads work
normally again.  ckvtio.c, ckvcon.c, 1 Feb 98.

Quick check-builds on SunOS, Linux, HP-UX, VMS, and Unixware all compile OK...

Added test & message for no-such-macro to \fexec().  Added tests for bad array
references to \fwords().  Added tests for numeric arguments that were not
there yet, supplied defaults where they were not previously being supplied in
cases where it made sense, etc.  ckuus4.c, 2 Feb 98.

Added RTS/CTS for IRIX 6.2 and higher, since an API for it seems to have
appeared in termios.h; the "POSIX" style is used (tcsettar()), but the field
name is unique (CNEW_RTSCTC).  ckcdeb.h, 2 Feb 98.

Upon receipt of newer information, fixed RTS/CTS support for SGI to go back
to IRIX 5.2.  ckcdeb.h, ckuver.h, makefile, 3 Feb 98.

Added "set send packet 4000" to definition of FAST macro for IRIX.  ckuus5.c,
3 Feb 98.

Removed a lot of junk from ckermit.ini that isn't needed any more -- EDIT
macro, BSEND and friends, etc.  3 Feb 98.

Numerous declaration and #ifdef fixups, many modules, 4 Feb 98.

---Alpha.13---

Merged Jeff's changes: Telnet X-display-location, logout options, etc.
ckcnet.[ch], ckuus[27].c, ckcdeb.h, 5 Feb 98.

Changed \%* to hold the entire argument line for the macro, so now it can
be used to reference arguments past \%9.  ckuus[45].c, 5 Feb 98.

Changed SET LOGIN { USER, PASSWORD, PROMPT } <text> to allow braces around
<text> so text can end with "{" without swallowing the rest of the script.
ckuus3.c, 6 Feb 98.

After several false starts, figured out how to let the \&_[] array, which
contains pointers to the argument of the current macro, have more than 10
elements.  So now, for the first time, users can pass as many arguments as
they like to a macro in a straightforward way, and have a straightforward way
to reference them.  This works with nesting, FOR-loops, and everything else.
\v(argc) now includes any extra arguments.  ckuusr.h, ckuus[56].c, 9 Feb 98.

Added a new function, \fdimension(&a), which tells the declared size of the
given array.  ckuusr.h, ckuus4.c, 9 Feb 98.

Filled in \&_[0] element with name of macro.  ckuus5.c, 10 Feb 98.

New HP-UX 7.x entries from Peter Eichhorn.  makefile, 10 Feb 98.

Shuffled CK_AUTODL and CK_APC #ifdefs a bit to allow successful compilation
on OS-9.  ckcfn2.c, ckcker.h, ckucon.c, 10 Feb 98.

Removed -DNETCONN from Plan 9 makefile.  ckpker.mk, 10 Feb 98.

Guarded reference to EWOULDBLOCK error code by #ifdef EWOULDBLOCK, for Plan 9
and possibly also ISC 4.1.  ckutio.c, 10 Feb 98.

Removed redundant definition of OUT_PAC from ckuusr.h, 10 Feb 98.

Added CLOSE TRANSACTIONS as a synonym for CLOSE TRANSACTION-LOG, because the
book mentions CLOSE TRANSACTIONS.  ckuusr.c, 10 Feb 98.

Changed command-line option '#' to require a numeric argument, startflags.
ckuus[4y].c, 10 Feb 98.

Changed SET PRINTER #ifdefs to allow pipes for OS-9.  ckuus3.c, 10 Feb 98.

Commented out the "?Retry limit must be greater than window size" check
in SET RETRY, a relic from bygone days.  ckuus3.c, 10 Feb 98.

Fixed the DIAL command not to send modem commands if they were empty
strings (in this case, the behavior is different for null pointers and
empty strings).  ckudia.c, 10 Feb 98.

Fixed compilation of main program to not crash gcc on SCO OSR5.04.
ckcmai.c, 10 Feb 98.

Ditto for ckwart.c, 10 Feb 98.

rmdir() is not available in OS-9; guarded reference to it in ckmkdir()
by appropriate #ifdefs.  ckcfn3.c, 11 Feb 98.

rand() and srand() not available in OS-9, added NORANDOM to OS-9 makefile.
ck9ker.mak, 11 Feb 98.

Added another check to clsif() to make sure it does not put up a "Transfer
OK" screen when sending is incomplete (in this case because there was an i/o
error when sending), the check being for the number of file characters sent
less than the number of characters in the file, taking resends into account.
ckcfn3.c, 11 Feb 98.

Lots of fooling with ckutio.c (ttvt(), ttinc(), mygetbuf(), etc) and ckcgetc()
in ckucon.c to try to catch the case where C-Kermit is in CONNECT mode, stuck
in a blocking single-byte read(), and the modem is switched off, e.g. on HP-UX.
Even though CLOCAL is explicitly unset, the read() does not return when this
happens.  There doesn't seem to be anything I can do about it.  ckuker.bwr,
11 Feb 98.

In "get /as-name:foo bar", the as-name was ignored; I wonder why nobody
noticed this before.  Fixed in doxget().  ckuus6.c, 11 Feb 98.

Added SET INPUT CANCELLATION { ON, OFF } to enable / disable keyboard
cancellation of INPUT command in progress.  ckuusr.h ckuus[r2457].c, 12 Feb 98.

Added SET TRANSMIT TIMEOUT <sec>.  ckuus[r2457].c, 12 Feb 98.

Toned down disconnection error messages in doinput() (Jeff).  ckuus4.c,
14 Feb 98.

Changed [M]SEND /MOVE: to /MOVE-TO:.  Ditto for /RENAME:.  ckuusr.c, 14 Feb 98.

Fixed GET /COMMAND -- it was totally broken by my change on 11 Feb 98.
ckuus6.c, 15 Feb 98.

Added perfunctory help text for Kerberos-related commands; detailed help would
just be way too much.  Referred them to the kerberos.txt file instead.
ckuus2.c, 15 Feb 98.

Fix from Jeff for a memory leak in ckuus4.c, 20 Feb 98.

Reverse DNS lookup ON/OFF/AUTO + send DO LOGOUT, Jeff.  ckcnet.c, 20 Feb 98.

Fix for problem with ECHO and SET FUNCTION ERROR, Jeff.  ckuusr.c, 20 Feb 98.

Merged other changes from Jeff, ckuus[35x].c, ckucmd.c, ckcpro.w, 20 Feb 98.

Fixed another memory leak in initmac().  ckuus5.c, 20 Feb 98.

Fix from Jeff for SET { BROWSER, EDITOR }.  ckuus3.c, 21 Feb 98.

Added SET FTP-CLIENT / SHOW FTP.  ckuusr.[hc], ckuus[235].c, 21 Feb 98.

Added SET SLEEP (or PAUSE) CANCELLATION { ON, OFF }.  ckuusr.h, ckuus[r236].c,
21 Feb 98.

Added SET COMMAND INTERRUPTION { ON, OFF } to enable/disable the Ctrl-C trap.
ckuusr.h, ckuus[35].c, 21 Feb 98.

Fixed WAIT to work as advertised with SET WAIT (SLEEP) CANCELLATION OFF, and
Updated HELP WAIT and HELP SLEEP.  ckuus[r2].c, 22 Feb 98.

DISABLE CD prevented GET from working when a GET-PATH was set.  Fixed in
gnfile() and openi(), ckcfn3.c, 22 Feb 98.

The error message from C-Kermit when it could not open a file to be sent was
always "Can't open file", which was singularly uninformative.  Now it sends
"Access denied" if sending was prevented by DISABLE CD or other restriction,
otherwise it is the system error message from the open() failure, such as
"Read access denied".  ckcfn3.c, ckcpro.w, 22 Feb 98.

Similarly for sending files to C-Kermit.  opena(), ckcfn3.c, 22 Feb 98.

Discovered that UNIX C-Kermit server was no longer handling tilde notation
in GET command filespecs.  Fixed in sgetinit(), ckcpro.w, 22 Feb 98.

Ditto for MGET.  Fixed in gnfile(), ckcfns.c, 22 Feb 98.

Added SET DIAL PACING <msec>.  ckuusr.h, ckuus[34].c, ckudia.c, 22 Feb 98.

Added S14=0 to USR init string so +++ will not hang up the call.  ckudia.c,
22 Feb 98.

SHOW DIAL was too long; askmore()'d it.  ckuus4.c, 22 Feb 98.

Assorted last-minute fixes for declarations & ifdefs.  ckcnet.c, ckuus4.c,
22 Feb 98.

---Beta.01---

Fix for repeat counts when sending in text mode on CRLF-based systems, from
Jeff.  ckcfns.c, 22 Feb 98.

Added a definition for CK_UTSNAME for SunOS, HP-UX, POSIX (per POSIX.1), AIX,
and SVR4 (per SVID).  Will check on others later.  When this symbol is
defined, we #include <sys/utsname.h>, and then we can get the machine type, OS
name, OS version, etc, at runtime by calling uname() in sysinit().
ckcdeb.h, ckutio.c, 25 Feb 98.

In ckutio.c, CK_UTSNAME means it's OK to include <sys/utsname.h> and to call
uname(), but outside ckutio.c, it simply means that the strings listed below
may be referenced (which implies that they are defined in the corresponding
ck?tio.c module, and filled in by any appropriate means).

Added string variables to ckutio.c to hold these items:

  unm_mch[]  Machine name (e.g. "9000/715")
  unm_nam[]  OS name (e.g. "HP-UX")
  unm_ver[]  Name of major OS release (e.g. "A")
  unm_rel[]  Name of specific OS release (e.g. "A.10.20")

And logged them in the debug log.  Just type "log debug", "close debug" and
look at the top of debug.log to see them.  ckuus4.c, 25 Feb 96.

Changed \v(cpu) to evaluate to unm_mch[] in preference to "unknown" if
CK_UTSNAME is defined.  ckuus4.c, 25 Feb 96.

Added \v(osname) and \v(osversion).  For systems where CK_UTSNAME is defined,
these are the sysname and release members of the utsname struct, respectively.
Thus, these describe the system where C-Kermit is actually running.  We never
had this information before.  ckuusr.h, ckuus4.c, 25 Feb 96.

From now on \v(platform) should be thought of as describing the system for
which C-Kermit was built, which is not necessarily the same as the one it's
running on.

In HP-UX 9.0 and later, sysinit() sets the variable hpis800 if the machine is
an 800-series, otherwise unsets it, using the HP-blessed method of looking at
utsname.machine[5].  ckutio.c, 25 Feb 98.

Defined a new symbol HPUX9PLUS meaning "HP-UX 9.00 or higher".  Changed
ttlock() and ttunlock() to use this symbol instead of HPUX10.  But since the
format of device names in HP-UX 9.x is different from 10.00 on Series 700
hardware than on Series 800, I used the hpis800 variable to construct the
appropriate format for the lockfile name in ttlock().  At this point, the
lockfile behavior of HP-UX 9.xx and 10.xx and 11.xx should be identical.
ckutio.c, 25 Feb 98.

Changes to make 6.1 build under Sunsoft Interactive UNIX 4.1 from Kenneth
Cochran (#include <sys/time.h>, link with libinet).  ckutio.c, makefile,
26 Feb 98.

Added code to let server handle a GET command for a filename that contains
spaces.  This works if the client sends the name enclosed in either braces
or doublequotes.  ckcpro.w, ckermit2.upd, 26 Feb 98.

Fixed compilation errors HP-UX 9.xx lockfile code.  In HP-UX 10.00 and above
we also do SVR4 advisory locks, but these are not available in 9.xx, so more
#ifdefs were needed.  ckutio.c, 27 Feb 98.

Another change for HP-UX 9.xx lockfiles (it was using the HP-UX 10.00 lockfile
directory, /var/spool/locks, rather than /usr/spool/uucp).  ckutio.c, 2 Mar 98.

Adapted recent HP-UX lockfile code to all HP-UX versions.  Added additional
names to the list of names to check for lockfiles: "cuad" and "culd".  Built
and tested on HP-UX 10.20, 9.05, 8.00, 5.21.  ckutio.c, ckuker.bwr, 3 Mar 98.

Fixed \v(cpu) to return uname() hardware type if known, in preference to
"unknown".  I thought I did this before, but I missed an #ifdef in ckuver.h.
Now we can see all those exotic cpu types (tested on an HP-9000/550, where
\v(cpu) now says "9050X" rather than "unknown").  ckuver.h, 3 Mar 98.

Discovered that UNIX \v(xxx) variables that returned directory names did so
inconsistently -- some ended with /, some didn't, some ended with two /'s.
Fixed all of them to send with one and only one /.  ckuus4.c, ckutio.c,
3 Mar 98.

Merged Jeff's recent changes.  ckuus[r347x].c, ckcdeb.h, cknet.h, 3 Mar 98.

Discovered that \v(inidir) returned a filename rather than a directory name
if the initialization file didn't exist.  It should have returned an empty
string in this case.  Fixed in doinit(), ckuus5.c, 3 Mar 98.

Added designer banner for BSDI 3.0.  ckuver.h, makefile, 3 Mar 98.

Added uname() info, if we have it, to SHOW VERSION.  ckuus5.c, 3 Mar 98.

VMS #ifdefs for getsockname() to suppress compilation warnings in
getlocalipaddr(), from Lucas Hart.  ckcnet.c, 3 Mar 98.

Changes from Lucas Hart to VMS file module, ckvfio.c, 3 Mar 98:
 a. Issue an informative message upon failure to SPAWN.
 b. Support transfer of odd-record-length files.
 c. Improvements to isdir().

In more detail:

(a) add a diagnostic message when SPAWN fails because the default directory is
a remote node.  (4263)

(b) when sending a file in C-Kermit BINARY mode, change from RMS BLOCK to RMS
RECORD mode if the file format is fixed record length and the record length is
odd.  Implementing that turned out to be simple (after the fact.)  Maybe that
will do the job for whoever wants to retain the Kermit-32 behaviour.  I've
done some minimal testing - transfer to a du40 system of a short odd record
length file; in that case IMAGE vs BINARY had the intended effect of
including/excluding the pad byte.  (918)

(c) an extension of Mark Berryman's isdir(), to use $SEARCH rather than
depending on $PARSE to return the directory status.  By trial-and-error, I
concluded that PARSE only tests a directory specification for the existence of
a corresponding file with ".DIR;1"; it does not test if that file is a
directory file.  Also, PARSE is documented to not test for the existence of
the directory on a remote node.  As far as I can tell, isdir now correctly
reports whether a file is recognized by RMS as a directory and whether the
name was a passed as a directory specification or a directory name.  (715)

Disabled GFTIMER for VMS versions prior to 5.0 (William Bader & Lucas Hart --
actually Lucas sent in code to enable this, but it involves changing the
mechanism used on later versions also, a risk that would seem to outweigh the
benefit).  ckcdeb.h, 3 Mar 98.

Discovered that REMOTE SET <various things> didn't work any more because
the things that were SET were then restored to their saved values upon exit
from protocol mode.  Affected things were BLOCK-CHECK, RECEIVE TIMEOUT, and
FILE NAMES.  ckcpro.w, ckcfns.c, 4 Mar 98.

A user reported bizarre problems when using the MKDIR command in a macro.
Problem: incorrect assumption that msgflg was 0 when in protocol mode, nonzero
otherwise (found by Jeff).  Solution: add another agument to ckmkdir().
ckcker.h, ckcpro.w, ckuusr.c, 4 Mar 98.

Merged Jeff's changes.  ckuus7.c, ckuusy.c, ckucmd.c, 4 Mar 98.

VMS zrmdir() is a horrible hack, calling system() to set the permission of the
directory file and calling system() again to delete it -- if anyone knows a
better way, be my guest.  Improved this slightly by setting the owner
permission to RWED rather than just D, so if the delete command fails, at
least the directory can still be accessed (e.g. to delete its files, so the
directory can be deleted after all).  ckvfio.c, 4 Mar 98.

Discovered that VMS C-Kermit could not receive a file whose name contained
a segment that was more than 39 characters long.  The file-creation API does
not truncate extra characters from name segments, so I added code to VMS
nzltor() to do this.  ckvfio.c, 4 Mar 98.

Discovered that whenever an .OBJ file is sent from VMS C-Kermit, it says
"transfer interrupted", even though the file is sent OK.  This is because of a
check I added to clsif() recently to see if the number of file bytes sent was
not less than the size of the file.  Turns out this is not a reliable test for
VMS, so I dummied out the test for VMS.  Ditto for VOS.  ckcfn3.c, 4 Mar 98.

The same thing would happen if K95 was sending a text file with EOF CTRLZ,
so I added another test to allow for that too.  ckcfn3.c, 4 Mar 98.

Discovered that VMS C-Kermit on my local VAX with UCX doesn't know the name of
the TCP host it's connected to.  Evidently the new reverse DNS lookup doesn't
work in UCX (or at least not in UCX 2.0).  Changed the default for this in UCX.
ckcnet.c, 4 Mar 98.

Discovered that VMS C-Kermit under TGV Multinet doesn't have a SET TCP
command.  This is because all the tables are #ifdef SOL_SOCKET, which is
evidently not defined in Multinet.  But TCP ADDRESS, TCP REVERSE-DNS-LOOKUP,
etc, don't depend on this, so I removed the #ifdefs.  ckuus[3c].c, 4 Mar 98.

A bug was reported in VMS C-Kermit's fullscreen file transfer display that
happens during GET commands, but not SEND commands -- the left and right sides
of the display are skewed by one line.  I can't reproduce on VAX or Alpha.

Parsing of SET MODEM command was pretty awful if the user tried to edit, etc,
because of the horrible hack used to accept SET MODEM <modem-type> for
backwards compatibility.  Removed the hack and replaced with chained FDBs for
the two keyword tables.  ckuus3.c, 4 Mar 98.

More changes to HP-UX lockfile recognition -- now we recognize any string of 1
or more digits, or any string of one or more digits followed by a "p" followed
by one or more digits, as a unit number for purposes of identifying a standard
HP-UX serial device, regardless of the HP-UX version or the hardware model.
ckutio.c, 4 Mar 98.

Fixes to the yesterday's HP-UX lockfile work.  ckutio.c, 5 Mar 98.

Added more text and binary filename patterns for UNIX.  ckcmai.c, 5 Mar 98.

Added an error message if ttvt() call in OUTPUT command fails.  Made INPUT
messages consistent with OUTPUT.  ckuus[45].c, 5 Mar 98.

Conversion of UNIX CONNECT module to select()...  Previous copy of ckucon.c is
safe with Beta.01.  I butchered my working copy to:

 . Remove all hints of forks, pipes, pids, and signals.
 . Remove all X.25 support.
 . Use select() to wait for next event.

This cuts it down from 2400 lines to 1400 lines.

All the existing i/o and buffering mechanisms were kept.  Works fine on SunOS:

 . As a Telnet client (negotiations all ok).
 . As an Rlogin client (as root, of course).
 . On a serial port too.

Very fast too.  Ditto on HP-UX 10.20 and Solaris 2.5.  And Linux, yay.
But details need fixing:

 . Autodownload doesn't work.
 . The key-macro code was stripped out -- must put it back in.
 . Prompt-stomping & missing messages upon return from CONNECT mode.
 . #ifdefs for syntax of FD_blah, select(), etc, on many systems.
 . Test transferring files through this Kermit in the middle.

To do:

 . Fix above details.
 . Test test test, find and fix other details.
 . Add Kerberos support for Linux.
 . Find out which UNIXes can use select() for both serial & net connections.
 . Figure out a way to make a single source support both fork() and select().

The last one is probably too much.  But we can have separate modules easily
enough, since there are separate production rules in the makefile for regular
and Kerberized builds; this allows CONNECT modules with different names.
All the above: ckocon.c, 5 Mar 98.

Added back key mapping to new ckucon.c.  7 Mar 98.

Discovered SET KEY, when given in its multiline format, did not allow the
definition to be edited.  Fixed in ckuus3.c, 7 Mar 98.

Fixed APC, autodownload, prompt-stomping and missing messages.  Tested
triggers, character-set translation, Telnet to NeXT, all OK.  ckucon.c,
7 Mar 98.

Now try to get Kerberos encryption going on Linux.  Short story: it works but
it's slow.  Longer story: The normal ckucon.c strategy of using a blocking
ttinc() followed by n = ttchk() and then ttxin(n,buf) won't work with Kerberos
because ttxin() decrypts or does not decrypt the entire buffer that it reads
based on the current encryption state.  But the encryption state can change
midstream based on Telnet negotations that might be in the middle of the
buffer.  Since Telnet negotations are handled only at the highest level (by
the client of the client of the ttblah() functions), we must do
single-character reads only, using ttinc(), if there is a possibility of
encryption.  So far so good...

BUT... ttinc() also buffers stuff up internally, and this conflicts with the
our new select()-driven strucure; a deadlock can occur when select() waits on
the net, but the net has already sent everything it intends to and all this
material is already sitting in ttinc()'s internal buffer.  ttchk() to the
rescue?  No, because ttchk() looks not only at the internal buffer, but also
at the TCP buffers.

So... since it's all in the family (UNIX), I added a new UNIX-only function,
ttpeek(), which tells how many bytes are waiting in ttinc()'s internal buffer
(i.e. the MYREAD buffer).  This tells us whether to tell select() to block on
the net.  The result works fine, but slowly, since we have several layers of
function calls for each character we read: ckcgetc() -> ttinc() -> read().
And of course, now also the Kerberos decryption function.  There is no other
way to do this given the current layering.

I'll see if I can find any way to speed up the code, but in any case, it needs
variables it can test to see if encryption is a possibility.  For example, if
we know at runtime this is not a kerberized connection, we don't need the
byte loop.  I used "me_auth" for now.

File transfer works, but slooooowly, and streaming doesn't work at all because
there is always a CRC error on the first packet.  After a streaming transfer
failure and re-CONNECT, it just hangs -- nothing on the far end, can't escape
back either -- encryption sync is evidently lost.

After analyzing logs, I realized: if a packet is ever resent, then we are
encrypting a packet that was already encrypted, since ck_krb_encrypt() works
in place.  So I made ttol() copy the clear-text packet to its own private
buffer, then encrypt the buffer, then write it.  This cures the problems in
one direction (encrypting local Kermit is receiving -- autodownload works ok),
but not in the other -- it hangs for a while at the beginning, and then again
(forever) at the end of the transfer.

Made it safe to use memcpy() by defining a memcpy() macro to use ckmemcpy()
if USE_MEMCPY not defined, and then defining USE_MEMCPY for systems where I
know it's available (K95 + most modern UNIXes).  ckcdeb.h, 8 Mar 98.

Added a "SECURE" indication to SHOW COMM, the CONNECT message, and the Network
Type field of the fullscreen file-transfer display.  ckucon.c, ckuusx.c,
8 Mar 98.

Ran encrypted transfers again via K5 localhost connection, client/server:

 . SEND worked fine, no errors.  But later another SEND took a long time
   to start and hung at the end.

 . GET worked fine, no errors, but was excrutiatingly slow (83 cps).
   Both sides reported zero errors.  But after "fin" and connecting back,
   I saw a fragment of garbage on the screen, indicating some kind of
   encryption screwup.

 . Streaming transfers still fail immediately.

Speculation: mode-changing by ttpkt(), ttvt(), ttres(), etc, result in data
loss and therefore in loss of encryption sync.  No, they don't actually do
anything except turn Nagle on and off.

Added Nagle restoration code to ttres().  ckutio.c, 8 Mar 98.  (This made
no difference.)

Looking at the (huge) debug logs, now I see that there were lots of NAKs
after all, but they did not show up in the file-transfer display or statistics
(why?)  Sometimes the delay between packets was as much as 70 seconds.

OK, now I see the problem.  ttinl() reads the first data packet.  It is
decrypted correctly.  ttinl() recognizes the beginning, the length field, and
the end.  Then it gets to its CR-removal stage and says: "ttinl removed=13"
(good), "ttinl removed=0" (good), "ttinl removed=1" <-- uh oh, the SOH of the
next packet.  And then proceeds to discard the entire next packet.  Problem:
the lookahead test for the packet-start character was performed by peeking
into the encrypted buffer.  Solution: decrypt each character first, then test
it.  But oops, now we've already read it.  So resurrect the old myunrd()
function to push it back.  But oops, that doesn't work either, because when 
we go to read it again, we decrypt it again.  So instead we add a special
variable for saving and restoring a pushed-back ttinl() character, to know
not to decrypt it again when fetching it.  ttinl(), ckutio.c, 8 Mar 98.

So now we have my favorite situation: file transfers work perfectly in both
directions when the debug log is on, and fail miserably when it's off.  So
let's turn on streaming, which always fails, to catch an error in the log.
Nope, streaming works now too.  But when debugging is off sending to a server
still takes a long time to start and then hangs forever after sending the B
packet.

So I checked all calls to ck_krb_encrypt() in ckutio.c.  It is only called in
two places, ttol() and ttoc().  In neither place can it possibly encrypt
something that was already encrypted.  So the culprit must be ck_krb_decrypt().
But all calls to that look right too. 

Since the problems occur most frequently at the beginning or end of a file
transfer, ttflui() is the next suspect.  And dummying out ttflui() does,
indeed, make the problems completely disappear.  OK, but why?  Aha, an
off-by-one error in the clever reference to the mybuf address (the buffer
index is pre-, not post-incremented).  Fixed in ttflux(), ckutio.c, 8 Mar 98.

So now it all works.  Some tests:

 . Client/server works fine -- send/get, etc.
 . Streaming works fine.
 . Ditto for both when transferring a gzip'd file no prefixing, provided
   we SET FLOW NONE on the far end (!) (I need to address this in any case...)
 . Autodownload, APC work fine.
 . Scripts work, including the CLEAR command.
 . Encrypted transfers go at about 55Kcps on localhost connection,
   versus unencrypted transfers at about 106Kcps.
 . CONNECT mode is noticeably slower on long scrolling displays:
   ripple test is 24 seconds encrypted vs about 9 sec unencrypted.
   This is due to the combination of decryption overhead and character-
   at-a-time i/o.

However, attempts to make a new connection occasionally fail -- authentication
works, CONNECT works, etc, but encryption is evidently starting out wrong
because we just get a blank screen and frozen keyboard -- can't even escape
back.  Speculation: the encryption state is carried across sessions?  So if
something winds up not being encrypted or decrypted at the end of session <n>,
then session <n>+1 will never get off the ground.  I tried calling ttflui()
from ttclos() -- and not sending Telnet DO LOGOUT -- if it's an encrypted
connection.  This seems to alleviate the problem in most cases; now I can
reproduce only it by starting a server on the remote end and sending it a BYE.
All seems normal -- the client gets the ACK to the BYE, the server side logs
out, but the next encrypted connection attempt always fails.  I tried putting
an msleep(500) in the server code after sending the ACK() to the BYE and
before calling ttres() or zkself(), but it didn't change anything.  There
probably needs to be some kind of Kerberos call when C-Kermit exits or when
it logs itself out, to reset Kerberos to some known state.

Hmmm -- here's another way to make it always happen: use "set host" and
"connect" instead of "telnet".  The debug log shows that everything is working
correctly -- all the Telnet negotiations are correct -- authentication,
encryption, etc.  Then the host sends us its banner and greeting and we sit in
myfillbuf() stuck in a read() waiting for the prompt, but it never comes...

Ha, got it.  Yesterday I decided to use "me_auth" as the variable to decide
whether encryption was possible.  If me_auth was set, then the CONNECT module
did all reads by calling ttinc(), otherwise it was free to call ttxin().  But
this was not a good choice -- the log shows we called ttxin() before me_auth
was set, but ttxin() read too much.  So backing off that choice (a) makes
everything work, but (b) means that there is no way to use the faster code on
non-Kerberized connections.  I also backed off the changes to netclos();
everything works fine now without them.  ckcget(), ckucon.c, 8 Mar 98.

Removed some verbose debugging statements from file-transfer buffer management
code, since this code has been stable for six years.  ckcfn3.c, 8 Mar 98.

Improved F000 debug format to allow omission of s2.  ckuusx.c, 8 Mar 98.

Renamed the new ckucon.c to ckucns.c (UNIX CONNECT with select()) and changed
the makefile to reference it only for Kerberos builds.  Restored the original
ckucon.c for non-Kerberos builds.  It would have been better to combine them,
but the structures are radically different.  So this task is tabled until and
unless it becomes an issue with real users.  ckucon.c, ckucns.c, makefile,
8 Mar 98.

Noticed the maximum number of macros was only 256.  Increased this to 4K for
BIGBUFOK builds.  ckuusr.h, 8 Mar 98.

A user reported that "remote who > file" did not work.  The actual problem was
that redirection was never implemented for short-form REMOTE command replies.
Note: this was a bit tricky because a line terminator needed to be added to
the end -- it's too hard to explain, but it required adding a new character
output function zputfil(), that does exactly what putfil() does, but that has
a different name.  To see why, look for references to "putfil" in decode().
Fixed in ckcpro.w, ckcker.h, ckcfns.c, 10 Mar 98.

Merged Jeff's changes for "set net type { command, dll, ssh }" - K95 only for
now.  Note: I had to make a change to krbtel.c to indicate that Kerberos 4 was
*not* available in UNIX.  11 Mar 98.

Fixed up status messages in netopen().  ckcnet.c, 12 Mar 98.

Added code to allow the Kerberized version of C-Kermit to use block i/o on a
non-authenticated connection, so that the 99% of people who are not using
authentication or encryption won't be penalized because it is supported in the
binary.  ckutio.c, ckucns.c, 12 Mar 98.

Started to try to separate input and output communications file descriptors.
Eventually I gave up -- I don't think there's a prayer of doing this, at least
not in UNIX, when you look at all the manipulations we do on them -- hundreds
and hundreds of ioctl's (fcntl's, tcsattr's, etc) to change modes, duplicate
them, close/open them, etc etc.  Doing all this to *two* file descriptors in
lockstep without having to worry about which operations are legal on input vs
output descriptors in which releases of which OS's, not to mention opening up
timing windows or tickling peculariarities in underlying drivers or kernels,
is too much to expect.  12 Mar 98.

Added support for net i/o from lower fork thru pipes within #ifdef NETCMD:

 . ttopen() starts the command & opens the pipes, sets ttpipe flag.
 . ttclos() kills fork if active, closes pipes if open, unsets flag.
 . tthang() calls ttclos() if flag set.

 . ttvt/ttpkt/ttres: does nothing if flag is set.
 . ttsetflow(), tthflow() - ditto
 . ttsspd(), ttgspd() - ditto.
 . ttsnd[l]b() -- send a NUL if flag set.
 . ttgmdm() -- returns -1 if flag set.

 . myfillbuf(), ttxin(), ttinl(), ttinc() -- read from pipe if flag set.
 . ttol(), ttoc() -- write to pipe if flag set.
 . ttchk() - checks pipe if flag set.

 . ttlock() & friends are never called.
 . ttpeek, ttpushback, ttflux... - unaffected.

ckutio.c, ckucon.c, ckucns.c, ckuus5.c, 13 Mar 98.

Builds and works OK with NETCMD not defined.
Compiles OK (on SunOS) with NETCMD defined.
Works OK on normal connections.
Works OK on pipe connections:
 . Makes the connection.
 . CONNECT mode works right, no buffering delays, and it's fast.
 . File transfer works too, but rather slowly in the sending direction.
 . ttchk() always returns 0 on SunOS -- evidently FIONREAD doesn't work
   on pipes.  Slows down sliding-window sends.  I'll need to do something
   about this later.

Disabled if NOPUSH defined or nopush set.  ckcdeb.h, ckuus3.c, 13 Mar 98.

Added a brief preliminary section (2.7) on this to ckermit2.upd, but it needs
a lot of fleshing out with examples of ssh, ssl, etc.

Still need to make the command structure nicer.  SET NETWORK TYPE COMMAND
followed by SET HOST <command> is OK, but afterwards the network type is still
set to COMMAND, and so subsequent SET HOST commands probably won't work as
most people expect them to.  So I think it might be better to collapse this
into a PIPE command that combines the two, but does not affect the global
network type.  PIPE would be the general case, SSH could be a specific case
(with accompanying SET SSH command for configuration, etc).  None of this
is done yet.

Also, note that this feature has nothing to do with networks, yet it's only
available #ifdef NETCONN.  So this should be changed too.  Next week...

Got tired of wraparound during "make sunos.." so moved the common symbol
definitions from the makefile to ckcdeb.h.  13 Mar 98.

Got rid of the duplicate SET NETWORK keyword tables so now we only need to
add new network-type keywords in one place rather than two.  ckuus[r3].c,
13 Mar 98.

Jeff discovered that binary-mode transfers with space parity didn't work any
more.  Fixed by making receipt of a request to do 8th bit prefixing when
parity is none *and* no parity has been detected cause the parity to be
switched to space.  ckcfn[s2].c, 16 Mar 98.

Various changes for BeBox, SRP, etc, and other updates from Jeff, including
a fix for "wait 0 <signal>" not bothering to test for signal.  Many modules,
18 Mar 98.

Discovered that SET HOST did not parse switches for certain network types,
e.g. COMMAND.  Rearranged setlin() again so switches would be always be parsed
for SET HOST and SET PORT (LINE), removing about 200 lines of code in the
process.  Needs lots of testing.  ckuus7.c, 18 Mar 98.

Added SET HOST /COMMAND.  This takes the place of SET NETWORK TYPE COMMAND
followed by SET HOST <name-of-command>, but in this case the network type is
not sticky (normal behavior for switches).  Thus, for example, you can:

  set host /command rlogin hosta

and then later "set host hostb", and it will work, using the previous global
network type (usually TCP/IP).  ckuusr.h, ckuus7.c, 18 Mar 98.

Added the PIPE command, equivalent to SET HOST /COMMAND /CONNECT.  ckuusr.h,
ckuusr.c, 18 Mar 98.

Changed cmfdb() to return -9 and print a message if it was about to return -6,
which should be internal to cmfdb().  ckucmd.c, 19 Mar 98.

Changed cmkey() to return -3 as it should if the user types CR and no other
characters were given and there was no default.  ckucmd.c, 19 Mar 98.

Fix from Jeff to SET TERM KEY <type> <CR>.  ckuus7.c, 19 Mar 98.

Added REMOTE SET FILE INCOMPLETE.  Previously this was available only as
REMOTE SET INCOMPLETE, now demoted to invisibility.  ckuus[37].c, 19 Mar 98.

Added -DNOCOTFMC to Linux makefile entries at the suggestion of Paul Kimoto.
Details in the Linux section of ckuker.bwr.  makefile, 19 Mar 98.

Added NOCOTFMC display to SHOW FEATURES.  ckuus5.c, 19 Mar 98.

Big revisions/updates to ckuker.bwr for Linux & elsewhere.  19 Mar 98.

Fixes from Jeff to parsing of Telnet authentication/etc negotiations.
ckcnet.c, 19 Mar 98.

In UNIX, "send /recursive foo" (foo not wild) did not work; it only sent the
foo file from the current directory, but then did not recurse.  Furthermore,
if no foo file was in the current directory, nothing was transferred, even if
one or more foo's were in subdirectories,   Fixed in traverse(), ckufio.c,
19 Mar 98.  (Needs more testing, though...)

Minor changes from Jeff to ckcnet.c.  20 Mar 98.

Added missing mention of /RECURSIVE in HELP GET.  ckuus2.c, 21 Mar 98.

Discovered that not defining USE_MEMCPY on platforms where we pick up
prototypes for memcpy() from the header files (like string.h on the NeXT)
causes ANSI compilations to bomb.  Added USE_MEMCPY for NeXT, OSF/1, VMS,
AOS/VS.  ckcdeb.h, 21-22 Mar 98.

Moved the -Dblah CFLAGS that were common to all the Solaris makefile entries
to ckcdeb.h, similar to what was done for SunOS a few days ago.  ckcdeb.h,
21 Mar 98.

Added new "xermit" target to UNIX makefile.  It's just like "wermit", but
uses ckucns (select() version of CONNECT module) rather than ckucon (fork()
version).  Changed sunos41 entry to use xermit target, tested it on serial,
TCP/IP, and pipe connections, works fine.  Tried it in several other places:

 Entry      Telnet   Serial    Pipe
  sunos41     OK       OK       OK
  hpux100     OK       OK       OK
  linux       OK       ??       OK
  solaris25   OK       ??       OK (but rlogin prints scary messages)

Left xermit in for SunOS, left the others as is.  makefile, 21 Mar 98.

Fixed a problem in ttinc(), timed MYREAD case, when it gets a NUL character
(as it would during rlogin initial connection) -- test for error was off by 1.
Diagnosed by Jeff.  21 Mar 98.

Discovered that \v(errstring) evaluation in nvlook() was returning a pointer
to an automatic array, oops.  Made it static.  ckuus4.c, 22 Mar 98.

Added \v(osrelease).  ckuusr.h, ckuus4.c, 22 Mar 98.

Changed \v(osname) to return the same as \v(platform) if CK_UTSNAME not
defined.  ckuus4.c, 22 Mar 98.

Changed sinix542 makefile target to not optimize ckcpro.c, since this was
taking several hours before I interrupted it...  makefile, 22 Mar 98.

--- Beta.02 ---

successful "xermit" tests:

  sunos 4.1
  unixware 1.1.2
  hpux 10.20

Minor changes to prototypes, etc.  ckuus[7x].c, ckcnet.h, ckcdeb.h,
24 Mar 98.

Added SET HOST /PASSWORD:.  ckuusr.h, ckuus[r37x].c, 24 Mar 98.

Authentication material from Jeff. ckuus[347].c, ckutio.c, ckcnet.c, 25 Mar 98.

Added better ?-help message for SET TELNET ENCRYPTION.  ckuus3.c, 25 Mar 98.

Folded lines > 79 and removed trailing blanks from ckuath.c.  25 Mar 98.

Changed definitions of CX_xxx encryption types to use the ENCTYPE_xxx_xxx
ones if they are defined.  However, there is no ENCTYPE_blah for NONE, and we
can't use negative numbers for keyword values, so I chose 999.  ckcnet.h,
25 Mar 98.

Removed various unportable constructions from ck_crp.c.  25 Mar 98.

Changed SET TELNET ENCRYPTION TYPE to get its keyword table dynamically.
ckuus3.c, 25 Mar 98.

....

Added checking of LINES and COLUMNS to ttgwsiz() if ioctl() fails.  ckutio.c,
25 Mar 98.

Added dgux54411i entry to makefile.  3 Apr 98.

Merged Jeff's changes, mostly a&e, plus: some updated help text, crypto
material in SHOW TELNET; moved "Server done" message until after all files are
closed to prevent overwriting of messages.  Also, fix one more "Transfer OK"
test in clsif() that could result in spurious OK result when not OK.  Many
modules, 3 Apr 98.

Removed the hidden TEST command so people can define macros called TEST as
shown in various docs.  ckuusr.c, 3 Apr 98.

Changed SET TELNET ENVIRONMENT DISP to DISPLAY (spelled out) to agree with
docs.  ckuus3.c, 3 Apr 98.

SHOW NET display was too long.  Gave it the askmore() treatment.  This was a
big job, since it calls a lot of subfunctions.  This askmore() business really
needs to be reworked.  We need a *portable* printf() replacement that takes
screen dimenensions into account.  Either that, or one that pipes its output
into an external program (like "more") (but that would not be portable) (but
UNIX users would still like it -- plus then you could redirect output of any
command to a file, etc).  ckuus[45].c, 4 Apr 98.

Changed ttopen() to not print "DNS lookup..." if it is not doing a DNS lookup.
ckcnet.c, 4 Apr 98.  But it almost always does, so this makes little
difference.

Added TERMINAL as a synonym for SET TERMINAL TYPE.  Familiar to UNIX users,
etc.  ckuusr.[ch], ckuus7.c, 4 Apr 98.

Added STATUS as a synonym for SHOW STATUS.  ckuusr.[ch], 4 Apr 98.

Added a second "personality" to the C-Kermit command line.  If C-Kermit is
stored as telnet (or telnet.exe), it parses a Telnet command line:

  telnet [ host [ port ] ]

I didn't bother with rlogin.  This works with the C-Kermit networks directory.
ckcmai.c, ckuus[4y].c, ckermit.ini, 4 Apr 98.

Added \v(name), the name with which the program was invoked.  Used this to
bypass non-Telnet material in the initialization file for faster startup
(since we don't have options on the Telnet command line, e.g. to bypass the
initialization file).  ckuusr.h, ckuus4.c, ckermit.ini, 4 Apr 98.

Noticed that "telnet watsun 13" (i.e. to the "daytime" socket) has started to
misbehave again.  First, ttopen() is called two or three times for some
reason.  Second, ttvt() fails because the other side has already closed itself
before we can get around to reading the daytime string.  I thought I fixed
this a long time ago.  It needed more fixing.  In ckucon.c, the section that
handles ttvt() failures by hanging, closing, and reopening the connection
makes no sense at all for network connections, so now it is used only if
(!network).  Second, a loop-exit test was missing in the new CONNECT module.
ckucon.c, ckucns.c, 4 Apr 98.  NOTE: K95 has the same problem, needs checking.

Added ON and OFF as invisible synonyms for DISABLED and ENABLED in nabltab[],
since the book has some examples like this that wouldn't work otherwise.
ckuus7.c, 4 Apr 98.

Added command-line switch -0, meaning "be 100% transparent in CONNECT mode".
This is equivalant to a bunch of other commands, like eightbit, set flow none,
set term escape disabled, set term char transparent, set term autodownload
off, set term apc off, etc.  It probably could use some work.  Setting the
flow control to none might be a bit extreme, but currently there is no way to
say "don't allow software flow control, but do allow any kind of hardware 
flow control."  ckuusy.c, 4 Apr 98.  Note: I did not add an interactive
command to do the same thing since that would beg the question of how to undo
it, which would not necessarily be easy.

Noticed that a quoted hyphen or opening brace at the end of a line was still
taken as a continuation character, which shouldn't happen; \- should mean
to take the dash literally.  Fixed in getnct() and in gtword().  Ran all the
demo & hostmode scripts to make sure this didn't break anything.  ckcuus5.c,
ckucmd.c, 4 Apr 98.

Noticed that "echo foo - ; comment", when given at the prompt, did not treat
the "-" as a continuation character.  Fixed in gtword(), ckucmd.c, 4 Apr 98.

Got rid of SET HOST /PASSWORD: since it can't work.  ckuus7.c, 4 Apr 98.

PIPE connections worked only once; subsequent ones would not work.  Nor
would (say) CONNECT to a closed pipe connection.  Fixed in ttclos(), ckutio.c,
4 Apr 98 (Don't set ttpipe to 0 -- leave it alone).

Added utsname info for VMS, obtained by assorted $GETSYI() calls.  Also added
a new variable, \v(model), which returns the CPU model.  Works only for VMS,
returns null string elsewhere.  Note: K95 will need to define a unm_mod[]
buffer for this, and either fill it in or set it to the null string.
ckuusr.h, ckuus4.c, ck[uv]tio.c, 5 Apr 98.

Added utsname info to SHOW FEATURES.  ckuus5.c, 5 Apr 98.

Added Stanford copyright to main copyright notice shown by VERSION command
if SRP included.  ckcmai.c, 5 Apr 98.

In Beta.02, routine tn_sb() broke the HP-UX 7.0 optimizer.  Changed all HP-UX
7.0 entries to not optimize ckcnet.c.  makefile, 5 Apr 98.

I had a report that \v(filename) did not work when sending, but I don't see
a problem, in either remote or local mode.

C-Kermit or K95 server failed to send any files when sent "GET *" -- oops.  It
looks like something I broke when adding /CALIBRATE back in October; I wonder
why nobody noticed until Jeff did a couple days ago.  Good thing we actually
use this software ourselves...  Fixed in fnlist(), ckcfns.c, 5 Apr 98.

If C-Kermit was sending a file and the transfer was interrupted with Ctrl-C,
then a subsequent SEND or RESEND would fail to update the Estimated Time Left
and Transfer Rate fields of the fullscreen file transfer display because the
time variables were not reset by the Ctrl-C handler.  Fixed in ftreset(),
ckuusx.c, 5 Apr 98.

Changed -I switch to also "set flow none" (except on VMS), since not doing so
makes for Xoff deadlocks.  This is a bit risky, but I think it's less risky
than not doing it.  ckuusy.c, 5 Apr 98.

Added 877 and 866 to list of toll-free area codes for the NANP.  877 goes live
today; 866 is next, probably within a year or two.  ckuus3.c, 5 Apr 98.

If the connection is lost during file transfer, the file-transfer display
message "FAILED: Connection lost" is properly displayed, but then immediately
overwritten by "Transfer interrupted", a less specific reason.  This was
because we never sent an Error packet, since there was no longer a connection
to send it on.  Fixed by pretending to send an E packet by setting epktsent=1
in spack() when it prints the "FAILED: Connection lost" message, to prevent
clsif() from printing any subsequent messages, and copying the "Connection
lost" message to the file-transfer error message buffer so it could be
accessed afterwards by \v(xfermsg).  ckcfn[23].c, 5 Apr 98.

Remove OLD_VMS #includes for GFTIMER; they didn't work, and we're not using
GFTIMER in OLD_VMS anyway.  From Lucas Hart.  ckvtio.c, 5 Apr 98.

Various last-minute adjustments to copyright notices, etc.  ckcmai.c,
ckuus5.c, 6 Apr 98.

Addition of SRP-related makefile entries for Linux.  makefile, 6 Apr 98.

Add ".hex" and ".hqx" as text file types.  ckcmai.c, 6 Apr 98.

---1.1.16--- (8 Apr 98)

Add -DKANJI for Linux ifndef NOCSETS.  ckcdeb.h, 10 Apr 98.

Fixed "Closing..." message (and call to ttclos()) in doexit() to make the
ttyfd != -1 test only #ifdef OS2 (not OS2ORUNIX).  Otherwise this path is
always taken in UNIX.  ckuusx.c, 10 Apr 98.

Suppose C-Kermit is sitting at its prompt and receives the command "kermit -x".
This almost certainly is the "autoserver" string from K95, or another copy of
C-Kermit.  The user has given a GET or REMOTE command without first putting
C-Kermit in server mode.  So far so good; the "kermit -x" command does the
trick.  But then after the transaction is finished, C-Kermit stays in server
mode, so when the user CONNECTs back, s/he gets "a blue screen".  Solution:
any protocol actions resulting from "kermit" commands at the prompt set the
justone flag, which tells the protocol to exit after just one transaction.
This way they get the command prompt back, as expected.  ckuusr.c, 10 Apr 98.

Put doftp() and doping() in #ifndef NOPUSH..#endif.  ckuusr.c, 10 Apr 98.

Allow for longer debug messages for tracking authentication problems.
ckuusx.c, 11 Apr 98.

Updated sv68r3v6 and sv88r40 makefile entries from Gerry Belanger at
Cognitronics, since GFTIMER broke both of them, and REDIRECT broke the
former.  makefile, 11 Apr 98.

Merged in Jeff's recent changes, mainly (1) addition of XMODEM-CRC as a
protocol type, and (2) make sure INPUT sets \v(instatus) correctly upon
failure due to lost connection.  Also, remove auto-upload strings for XMODEM
and YMODEM because their echoes cause confusion about the checksum type, etc,
e.g. if the filename contains an uppercase C.  Many modules, 17 Apr 98.

Merged IBM AIX X.25 support from Stephen Riehm, pc-plus, in Germany.  Most
modules.  18 Apr 98.  This still needs to be tested to ensure it didn't break
anything, especially Sun X.25, and to document it.

Added support for ttylock()/ttylocked()/ttyunlock() via #ifdef USETTYLOCK,
which is defined in ckcdeb.h for IBM AIX 3.1 and later.  This is supposed to
prevent confusion about the name, location, contents, and format of the UUCP
lockfile.  ckcdeb.h, ckutio.c, ckuus5.c, 19 Apr 98.

Built on an AIX 4.1 system; it compiles and links without complaint, but I
can't test it because that system has no serial devices.  20 Apr 98.

SET HOST commands weren't making it into the command recall buffer.  Fixed
(I think -- at least I can't make it happen any more) in setlin(), ckuus7.c,
20 Apr 98.

Changed ttopen() to always call perror() to print error message when open()
fails.  Also added perror() calls to ttunlck() to give informative messages
upon failure to delete lockfiles.  ckutio.c, 21 Apr 98.

"help ?" incorrectly said "Or the name of a macro..." at the end of the
keyword list.  Fixed in ckucmd.c, 21 Apr 98.

Changed ttrpid() to not depend on hardwired definition for format of lockfile,
but rather to check its size and then treat it as binary if 4 bytes or less,
and as a string if longer than 4 bytes.  Tested successfully with string pids.
ckutio.c, 21 Apr 98.

Changed ttunlck() to not try to remove the lockfile if the pid it contains is
not ours, e.g. in case some other process has seized control of the device.
ckutio.c, 21 Apr 98.

Added a couple checks against dereferencing NULL data pointer, which can
evidently happen if C-Kermit is started with the -J command-line option and
then Ctrl-C'd at a certain critical point.  ckcfns.c, 21 Apr 98.

Added code to make INPUT 0 xxx behave as advertised: it should check the
only the characters that have arrived but have not yet been read for the
search string, and succeed or fail immediately depending on whether a match
was found.  ckuus4.c, 21 Apr 98.

Added 877 and 866 to default list of toll-free area codes for country code 1
(again -- I did this before, but in the wrong place).  ckudia.c, 22 Apr 98.

Discovered that an optimization I added to ckucns.c to avoid unnecessary calls
to chkaes() was bad -- symptom: as soon as the first escape sequence was
received, C-Kermit would send an ESC to the terminal before each character
from then on.  Removed the optimizations, went back to calling chkaes() for
every incoming character.  ckucns.c, 23 Apr 98.

Got rid of some confusing and dangerous ifdefs in VMS sysinit(); now we get
the hardware & OS version consistently on VAX and Alpha.  ckvtio.c, 23 Apr 98.

Fixed various bad declarations.  ckuus5.c, ...

Added OSF/1 and SCO 3.2v5.04 to the systems where CK_UTSNAME can be safely
defined.  ckcdeb.h, 23 Apr 98.  (Also tried NeXT, but it's not allowed.)

---Beta.03---

Removed an unreachable return() statement from the end of tn_doop().
Jeff, ckcnet.c,1 May 98.

Fixed \fsplit() return value -- it was counting too many words.
Jeff, ckuus4.c, 1 May 98.

Fixed broken SET TERMINAL ESCAPE option synonyms.  Jeff, ckuus7.c, 1 May 98.

Added -DNOGFTIMER to hpux90mot (HP-UX 9.0 on Motorola 680x0), since this
evidently doesn't work.  If somebody wants to try fixing it, be my guest.
makefile, 2 May 98.

Changed Elapsed Time display in STATISTICS command to show hh:mm:ss as well
as the total number of seconds.  ckuus4.c, 2 May 98.

Added \v(model) for HP-UX, works by running the HP-UX "model" command and
capturing its output into a cache (there is no API for this); subsequent
references read from the cache.  ckuus4.c, 2 May 98.

Moved the NEEDSELECTDEFS section from ckcnet.h to ckcdeb.h to allow non-TCP
builds to get these definitions, e.g. when needed for the new select()-based
CONNECT module.  This was necessary at least for HP-UX 6.5.  Added hpux65x
target for HP-UX 6.5 that specifies the xermit target and includes
-DNEEDSELECTDEFS.  ckcnet.h, ckcdeb.h, makefile, 2 May 98.

Peter E reported that Beta.03 no longer removed its lockfiles in HP-UX.  Since
my HP workstation drowned in the recent flood, I could not check this myself;
it doesn't happen on non-HP platforms, but they use different code.  I went
through the code, consolidated the HP and non-HP parts as much as possible,
added debugging statements, corrected some errors, and satisfied myself that
it works fine on non-HP platforms:

 . If the device is not in use, the appropriate lockfile is created and
   then destroyed when it is closed.

 . If the device is in use by an active process (Kermit or cu), Kermit refuses
   to open it, and displays the pid of the owning process.

 . If there is a lockfile for the device, but it contains a pid that does
   not correspond to an active process, C-Kermit removes the stale lockfile
   (printing a message) and opens the device.

Later I found an HP-UX 10.20 workstation that had an unprotected serial port
and lockfile directory -- all the above tests worked fine, except that cu was
not installed so I could only verify that Kermit interlocked with itself, and
that 4-byte integer pids were written and read OK.  ckutio.c, 2 May 98.

Made "x" a legal abbreviation for "xmodem" in "set protocol" (because of
"xmodem-crc".  ckuus3.c, 2 May 98.

Discovered that the code to check that RECEIVE was given an as-name for
XMODEM protocol was not in the right place.  Moved it.  ckuus6.c, 2 May 98.

The following sequence did not work with XMODEM:

  define \%a foo
  set protocol xmodem
  receive \%a

Fixed in doxget(), ckuus6.c, 2 May 98.

I broke SunLink X.25 compilation in Beta.03.  Fixed in ckuus4.c, 2 May 98.

PIPE command didn't allow its argument to be braced.  Fixed in setlin(),
ckuus7.c, 3 May 98.

Plugged a couple of out-of-bounds array references noticed by DEC C 5.7 and
reported by John Santos.  ckv[tf]io.c, 3 May 98.

Added #ifdefs to [rg]ftimer() for System V/88 on Motorola 88000 from Gerry
Belanger at Cognitronics.  ckutio.c, 3 May 98.

---Beta.04---

Ric Anderson reported a place where ttchkpid() could exit without returning
a value.  Fixed in ckutio.c, 4 May 98.

Finally discovered the cause of persistent reports that uucp lockfiles were
not being removed: a test of ttchk()'s return value in doclean() would fail if
the line had never been used, and so ttclos() would not be called, which was
just plain wrong: "set line /dev/xxx, exit" would leave the lockfile behind.
(Thanks to Peter Eichhorn for narrowing down how to reproduce it.)
ckuusx.c, 4 May 98.

In tracking down the previous problem, I discovered the following: in HP-UX,
if the "set line" device name starts with "cu", we also create a lockfile for
the corresponding "ttyd" device, even if that device does not exist.  This is
normally OK, since both lockiles are removed by ttunlck().  However, when a
stale "cu"... lockfile is found (and removed), C-Kermit did not remove the
corresponding "ttyd"... lockfile if the ttyd device did not exist.  So I
changed ttlock() to create the ttyd lockfile only if the ttyd device exists.
ckutio.c, 4 May 98.

Fixed a reference to an uninitialized variable in ttopen(), detected by DECC
5.8.  ckutio.c, 4 May 98.

Filled in \v(model) for Digital UNIX on advice from DEC, and added a symbol,
OSF50, and a designer banner for Digital UNIX 5.0, which will be released
soon.  ckcdeb.h, ckuver.h, ckuus4.c, makefile, 4 May 98.

Fixed \v(model) to return value of unm_mch[] in preference to nothing at all.
ckuus4.c, 4 May 98.

Removed -DNOGFTIMER from hpux90mot entry, since reportedly Beta.04 works fine
there.  makefile, 4 May 98.

Omitted listing of unm_mod at beginning of debug log if not filled in, which
it won't be except in VMS or if \v(model) has previously been referenced.
ckuus4.c, 4 May 98.

Updated AOS/VS text & binary filetype list.  ckcmai.c, 4 May 98.

Put an unguarded reference to "nopush" within #ifdef NOPUSH..#endif.
setlin(), ckuus7.c, 4 May 98.

Moved zxcmd() and zclosf() inside of #ifdef NOPUSH..#endif

syscmd() was not properly #ifdef'd for NOPUSH.  Fixed in ckcfns.c, 4 May 98.

Ditto for zshcmd().  ckufio.c, 4 May 98.

References to doftp() and doping() were not ifdef'd for NOPUSH.  Fixed in
ckuusr.c, 4 May 98.

Added a new compile-time option, NOTIMESTAMP, to disable all code related
to file timestamps, and employed it accordingly in ckufio.c.  4 May 98.

Added a banner for the AS/400 to ckuver.h.  You never know...  4 May 98.

Fix for hpux90mot makefile entry from Peter E.  makefile, 5 May 98.

Commented out "Alias => xxx" display.  ttopen(), ckcnet.c, 5 May 98.

Various #ifdef fiddling for AT&T 3Bx's.  cku[tf]io.c, ckcdeb.h, 5 May 98.

Final corrected makefile entries for AT&T 7300 that work, with help from
Peter Mauzey at Bell Labs.  makefile, 6 May 98.

Added banners for Ultrix 4.3, 4.4, 4.5.  ckuver.h, 6 May 98.

Made new SET MODEM TYPE keywords for USR and Megahertz that more obviously
correspond with the actual models, via synonyms, invisible abbreviations, etc,
without invalidating previous names.  ckudia.c, 7 May 98.

Made SET / SHOW { STREAMING, RELIABLE, CLEARCHANNEL } visible keywords.
ckuusr.c, 7 May 98.

Improved HELP SET [ TERMINAL ] ESCAPE messages.  ckuus2.c, 7 May 98.

VMS fixes from Lucas Hart, 7 May 98:

 . More allowances for <xxx> directory-name format: ckcfn3.c.
 . Improvements in hardware-name getting: ckvtio.c.
 . Enabling reverse DNS lookup for UCX (but not old UCX): ckcnet.c.
 . Improved isdir(), relative directories for labeled transfers,
   Fortran CC handling fixed to handle 0-length records and overprinting,
   etc: ckvfio.c.

Made MKDIR print a message (but still succeed) if it is told to create a
directory that already exists.  ckuusr.c, 7 May 98.

Added cross-references to SHOW PROTOCOL.  ckuus4.c, 7 May 98.

Added missing switches to HELP SEND text, plus cross-refs, and fixed text
for SEND /PATHNAMES:xxx.  ckuus2.c, 7 May 98.

UNIX nzltor() was correctly stripping ./ or ../ from the beginning of a local
filename before sending it to the remote, but only the first occurrence.
Fixed it to strip all occurrences from the beginning of the pathname.
ckufio.c, 7 May 98.

Added some minor source-code corrections to ckucon.c and ckcnet.c affecting
only IBM AIXLink/X.25 builds, from Stephen Riehm.  15 May 98.

******************
6.1.193 VMS BUILDS

DEC HARDWARE      TCP/IP      COMPILER     VMS VER   BUILD PROC  DATE      SIZE
Alpha 1000A       TGV 4.0B    DECC 5.2     VMS 6.2   ckvker.com  971222       ?
Alpha 2000 5/300  TGV 4.0A    DECC 4.0-000 VMS 6.2   ckvker.com  971221 1242112
Alpha 2000 5/300  none        DECC 4.0-000 VMS 6.2   ckvker.com  971221 1317888
Alpha 3000/400    none        DECC 4.0-000 VMS 6.2   ckvker.com  970916 1159680
Alpha 3000/400    TGV 4.0A    DECC 4.0-000 VMS 6.2   ckvker.com  970916 1225216
Alpha 3000/300L   none        DECC 5.3-006 VMS 6.2   ckvker.com  980511 1304064
Alpha 3000/300L   UCX 4.0     DECC 5.3-006 VMS 6.2   ckvker.com  980511 1414656
Alpha model unk   UCX 4.0B    ?            VMS 6.2   ckvker.com  980512 1385984
Alpha 3000/400    none        DECC 4.0-000 VMS 7.1   ckvker.com  980322 1294848
Alpha 3000/400    TGV 4.0A    DECC 4.0-000 VMS 7.1   ckvker.com  980322 1387520
Alphastation 500  TGV 4.0B    DECC 5.6-003 VMS 7.1   ckvker.com  971220 1315328
Alphastation 500  none        DECC 5.6-003 VMS 7.1   ckvker.com       ?       ?
Alpha 3000-300    UCX 4.1     DECC 5.6     VMS 7.1   ckvker.com  970906       ?
Alpha 200 4/166   none        DECC 5.5-002 VMS 7.1   ckvker.com  980508 1308160
Alpha 200 4/166   TGV 4.0B    DECC 5.5-002 VMS 7.1   ckvker.com  980508 1404416
VAX 11/750        none        VAXC 2.4-026 VMS 4.4   ckvold.com  980513  859136
VAX 11/750        TWG 3.2     VAXC 2.4-026 VMS 4.4   ckvold.com  980513  942080
MicroVAX II       none        VAXC 2.4-026 VMS 4.5   ckvold.com  980225  777728
VAX 3100/38       none        VAXC 3.2-044 VMS 5.5-2 ckvker.com  980507  847872
VAX 3100/38       UCX 2.0     VAXC 3.2-044 VMS 5.5-2 ckvker.com  980507  917504
VAX model unk     UCX 2.2        ? ?       VMS 5.5-2 ckvker.com  971220       ?
VAX 3600          none        VAXC 3.1     VMS 6.1   ckvker.com  980507  848384
VAX 3600          TGV 4.0AX   VAXC 3.1     VMS 6.1   ckvker.com  980507  909312
VAX 3100/??       none        DECC 5.6-003 VMS 7.1   ckvker.com  980507  834048
VAX 3100/??       TGV 4.0BX   DECC 5.6-003 VMS 7.1   ckvker.com  980507  899584
VAX 4000-200      TCPWare 5.2 DECC 5.6     VMS 7.1   ckvker.com  970906       ?
MicroVAX 3600     CMU/IP 6.6  VAXC 3.2     VMS 7.1   ckvker.com  970906       ?

Other non-UNIX builds:

PLATFORM                  OS             VERSION  MAKE TARGET    DATE      SIZE
Apollo DN4000             Domain OS       SR10.4  sr10-s5r3      970821  900735
Commodore Amiga           AmigaDOS           3.1  ckiker.smk     980513  742296
DG MV 2500                AOS/VS-II      2.20.73  ckdmak.cli     980507 1093632
Quanterra 680x0           OS-9/68K + TCP/IP  2.4  ck9ker.mak     980211 1098676
Quanterra 680x0           OS-9/68K (no net)  2.4  ck9ker.mak     980211 1022178
MIPS                      Plan 9               -  ckpker.mk      980508 1486327
PC 386 and above          Plan 9               -  ckpker.mk      980508 1212059
Sun SPARC                 Plan 9               -  ckpker.mk      980508 1586375
Motorola 68020            Plan 9               -  ckpker.mk      980508 1136761

6.1.193 UNIX BUILDS

PLATFORM                  OS             VERSION  MAKE TARGET    DATE      SIZE
AT&T 7300 UNIX PC         UNIX System III  3.51m  sys3upc        980513  712696
AT&T 7300 UNIX PC         UNIX System III  3.51m  sys3upcg       980513  750944
AT&T 7300 UNIX PC         UNIX System III  3.51m  sys3upcgc      980506  866220
AT&T 7300 UNIX PC         UNIX System III  3.51m  sys3upcold     980506  732212
AT&T 7300 UNIX PC         UNIX System III  3.51m  att351gm       980514  867464
DEC Alpha 400 4/166       Digital UNIX       3.2  du32           980507 1310720
DEC Alpha 255 4/232       Digital UNIX       4.0  du40           980503 1253376
DEC Alpha 255 4/232       Digital UNIX      4.0B  du40           980507 1253376
DEC Alpha (model unk)     Digital UNIX       5.0  du40           980504       ?
DECstation 5000/240       Ultrix             4.3  ultrix3        980508 1089536
HP-9000/300               BSD           4.4-Lite  bsd44c         980507  891716
HP-9000/550               HP-UX             5.21  hpux500wintcp  980322 1162602
HP-9000/350               HP-UX             6.50  hpux65oc       980512  868352
HP-9000/350               HP-UX             7.05  hpux70olfnc    980512  966656
HP-9000/385               HP-UX             8.00  hpux80         980508  974848
HP-9000/385               HP-UX             8.00  hpux80c        980508  991232
HP-9000/385               HP-UX             8.00  hpux80oc       980103  806912
HP-9000/425S              HP-UX             8.00  hpux80oc       980512  839680
HP-9000/425S              HP-UX             8.00  hpux80ocnotcp  980512  761856
HP-9000/712/60            HP-UX             9.05  hpux90         980508 1183744
HP-9000/712/60            HP-UX             9.05  hpux90o700     980508  925696
HP-9000/340               HP-UX             9.10  hpux90mot      980512  864256
HP-9000/712/60            HP-UX            10.20  hpux100        980507 1211111
HP-9000/712/60            HP-UX            10.20  hpux100o       980507  945216
HP-9000/715/33            HP-UX            10.20  hpux100        980322 1198816
HP-9000/715/33            HP-UX            10.20  hpux100o       980322  937014
HP-9000/887/H70           HP-UX          B.10.30  hpux100o       980108  912612
HP-9000/871/D370          HP-UX          B.11.00  hpux100        980508 1223421
HP-9000/871/D370          HP-UX          B.11.00  hpux100o+      980105  937030
IBM Power Server 850      AIX                4.1  aix41          980507 1068020
Motorola Force Sparc/VME  Solaris            2.6  solaris26      980408 1088260
Motorola MVME 147 68K     System V/68       R3V6  sv68r3v6       980508  914363
Motorola MVME 187 88K     System V R4        4.4  sv88r40        980508 1065528
NeXT 68040                NeXTSTEP           3.1  next           980507  934696
NeXT 68040                NeXTSTEP           3.3  next           980507  943296
PC (spcuna)               BSDI               2.1  bsdi2          971221  890349
PC (nynet)                BSDI               3.0  bsdi2          970922  941021
PC (spcuna)               BSDI               3.1  bsdi3          980507 1044607
PC (jspath)               FreeBSD          2.0.5  freebsd2       980111  820585
PC (ngr)                  FreeBSD          2.2.5  freebsd2       980221       ?
PC (kwc)                  Interactive UNIX   4.1  is5r3jc        980506  912162
PC (yclept)               Linux           1.2.13  linux          980507  850161
PC (yclept)               Linux           1.2.13  linux+krb      980423 1229390
PC (yclept)               Linux           1.2.13  linux+srp      980423 1107599
PC (yclept)               Linux           1.2.13  linux+krb+srp  980423 1454842
PC (vvv)                  Linux           2.0.33  linux          980514  855025
PC (jspath)               NetBSD            1.2G  netbsd         970926  739586
PC (jspath)               NetBSD            1.2G  netbsdn        970926  839809
PC (jspath)               NetBSD             1.3  netbsd         980111  812471
PC (infomarket.ru)        QNX (16-bit)      4.24  qnx16          980508  890657
PC (infomarket.ru)        QNX (32-bit)      4.24  qnx32          980508  907918
PC (wbader)               SCO UNIX/ODT20 3.2v4.0  sco32v4netnd   970727       ?
PC (wbader)               SCO UNIX/ODT20 3.2v4.2  sco32v4netnd   980508  746512
PC (wbader)               SCO OSR5       3.2v5.0  sco32v5net     970818       ?
PC (jpr)                  SCO OSR5     3.2v5.0.4  sco32v5        970811  822172
PC   "                    SCO OSR5     3.2v5.0.4  sco32v5net     970811 1098168
PC   "                    SCO OSR5     3.2v5.0.4  sco32v5gcc     970811  770052
PC   "                    SCO OSR5     3.2v5.0.4  sco32v5netgcc  970811  895368
PC   "                    SCO OSR5     3.2v5.0.4  sco32v504      980503  932216
PC   "                    SCO OSR5     3.2v5.0.4  sco32v504net   980503 1096056
PC   "                    SCO OSR5     3.2v5.0.4  sco32v504gcc   970811  769120
PC   "                    SCO OSR5     3.2v5.0.4  sco32v504netgcc970811  895264
PC (dircsa)               pre-SCO UNIXware 1.1.2  unixware       980508  995336
PC (netlab1)              SCO UNIXware     2.1.1  unixware2      980204  922336
PC (lerami)               SCO UNIXware     2.1.2  unixware2      980507  938076
Pyramid DC                OSX                  ?  pyrdcosx       980505 1236961
Pyramid MIS-12/06         OSX        5.1a-93a080  pyramid        980508 1046528
Pyramid MIS/4             OSx64MN    5.1a-93a080  pyramid        971221       ?
Pyramid MIS/4             OSx64MN    5.1a-93a080  pyramid-hdb    971221       ?
Pyramid MIServer-ES6/1024 SMP_DC-OSx1.1-95c087.2  pyrdcosx       980508 1239137
SGI model unk             IRIX               5.3  irix53         980507 1258280
SGI model unk             IRIX               6.2  irix62         980508 1428424
SGI Challenge-L           IRIX               6.2  irix62         980322 1414700
SGI Indy R5000            IRIX               6.2  irix62         980204 1405844
SGI Octane                IRIX               6.3  irix63         980508 1434032
SGI Octane                IRIX               6.4  irix64         980508 1302368
SGI model unk (ric)       IRIX               6.4  irix64         980423       ?
Siemens Nixdorf RM 200    SINIX             5.42  sinix542       980507 1323517
Sun model unk (surver)    Solaris            2.4  solaris24      980508 1133468
Sun model unk (surver)    Solaris            2.4  solaris24g     980508 1962020
Sun model unk (surver)    Solaris+X.25       2.4  solaris2x25    980508 1157868
Sun Ultra-170             Solaris            2.5  solaris25g     980225 2110216
Sun Ultra-1 (watsol)      Solaris          2.5.1  solaris25      980507 1109476
Sun Ultra-1 (watsol)      Solaris          2.5.1  solaris25g     980507 1959460
Sun model unk (math)      Solaris            2.6  solaris26      980507 1100628
Sun SPARCserver 20        SunOS         4.1.3_U1  sunos41c       980507 1114112
Sun SPARCserver 20        SunOS         4.1.3_U1  sunos41gcc     980507 1048576
Sun SPARCserver 20        SunOS         4.1.3_U1  sunos41mi      980322  311296
Sun SPARCserver 20        SunOS         4.1.3_U1  sunos41m       980503  196608

**************
And from Peter Eichhorn, assyst GmbH:



===============================================================================
CKVER= "6.1.193 Beta.05"  with select()
===============================================================================
HP-9000/770/J210          HP-UX          B.10.20  hpux100o       980511  945190
HP-9000/770/J210          HP-UX          B.10.20  hpux100o+      980511  932894

HP-9000/780/C180          HP-UX          B.10.20  hpux100        980512 1206996
HP-9000/780/C180          HP-UX          B.10.20  hpux100o       980512  945190
HP-9000/780/C180          HP-UX          B.10.20  hpux100o+Onol..980512  932894
HP-9000/780/C180          HP-UX          B.10.20  hpux100o+      980512  932894

HP-9000/777/C100          HP-UX          A.09.07  hpux90         980511 1179648
HP-9000/777/C100          HP-UX          A.09.07  hpux90gcc      980511 1135108
HP-9000/777/C100          HP-UX          A.09.07  hpux90mot      980511  966656
HP-9000/777/C100          HP-UX          A.09.07  hpux90mot+Ono..980511  937984
HP-9000/777/C100          HP-UX          A.09.07  hpux90o        980511  958464
HP-9000/777/C100          HP-UX          A.09.07  hpux90o+Onoli..980511  937984
HP-9000/777/C100          HP-UX          A.09.07  hpux90o700     980511  921600
HP-9000/777/C100          HP-UX          A.09.07  hpux90o700+On..980511  897024

HP-9000/755/99            HP-UX          A.09.07  hpux90         980508 1179648
HP-9000/755/99            HP-UX          A.09.07  hpux90gcc      980508 1118208
HP-9000/755/99            HP-UX          A.09.07  hpux90mot      980508  966656
HP-9000/755/99            HP-UX          A.09.07  hpux90mot+Ono..980508  946176
HP-9000/755/99            HP-UX          A.09.07  hpux90o        980508  958464
HP-9000/755/99            HP-UX          A.09.07  hpux90o+Onoli..980508  937984
HP-9000/755/99            HP-UX          A.09.07  hpux90o700     980508  921600
HP-9000/755/99            HP-UX          A.09.07  hpux90o700+On..980508  897024

HP-9000/715/75            HP-UX          A.09.05  hpux90         980508 1179648
HP-9000/715/75            HP-UX          A.09.05  hpux90mot      980508  966656
HP-9000/715/75            HP-UX          A.09.05  hpux90mot+Ono..980508  942080
HP-9000/715/75            HP-UX          A.09.05  hpux90o        980508  962560
HP-9000/715/75            HP-UX          A.09.05  hpux90o+Onoli..980508  942080
HP-9000/715/75            HP-UX          A.09.05  hpux90o700     980508  921600
HP-9000/715/75            HP-UX          A.09.05  hpux90o700+On..980508  897024

HP-9000/712/60            HP-UX          A.09.05  hpux90         980511 1179648
HP-9000/712/60            HP-UX          A.09.05  hpux90mot      980511  962560
HP-9000/712/60            HP-UX          A.09.05  hpux90mot+Ono..980511  950272
HP-9000/712/60            HP-UX          A.09.05  hpux90o        980511  962560
HP-9000/712/60            HP-UX          A.09.05  hpux90o+Onoli..980511  946176
HP-9000/712/60            HP-UX          A.09.05  hpux90o700     980511  925696
HP-9000/712/60            HP-UX          A.09.05  hpux90o700+On..980511  901120

HP-9000/340               HP-UX          B.09.10  hpux90         980508 1003520
HP-9000/340               HP-UX          B.09.10  hpux90mot      980508  864256

HP-9000/385               HP-UX          B.09.03  hpux90         980508 1003520
HP-9000/385               HP-UX          B.09.03  hpux90mot      980508  864256

HP-9000/425S              HP-UX          B.08.00  hpux80         980511  970752
HP-9000/425S              HP-UX          B.08.00  hpux80c        980511  987136
HP-9000/425S              HP-UX          B.08.00  hpux80notcp    980511  897024
HP-9000/425S              HP-UX          B.08.00  hpux80o        980511  823296
HP-9000/425S              HP-UX          B.08.00  hpux80oc       980511  839680
HP-9000/425S              HP-UX          B.08.00  hpux80onotcp   980511  761856

HP-9000/350               HP-UX             7.05  hpux70lfn      980511 1040384
HP-9000/350               HP-UX             7.05  hpux70lfnc     980511 1097728
HP-9000/350               HP-UX             7.05  hpux70olfn     980511  909312
HP-9000/350               HP-UX             7.05  hpux70olfnc    980511  966656
HP-9000/350               HP-UX             7.05  hpux70osf      980511  819200
HP-9000/350               HP-UX             7.05  hpux70osftcpc  980511  966656
HP-9000/350               HP-UX             7.05  hpux70sf       980511  942080
HP-9000/350               HP-UX             7.05  hpux70sftcpc   980511 1097728

===============================================================================
CKVER= "6.1.193 Beta.05"  with fork()
===============================================================================
HP-9000/780/C180          HP-UX          B.10.20  hpux100        980508 1215207
HP-9000/780/C180          HP-UX          B.10.20  hpux100o       980508  949308
HP-9000/780/C180          HP-UX          B.10.20  hpux100o+Onol..980508  932917
HP-9000/780/C180          HP-UX          B.10.20  hpux100o+      980508  932917

HP-9000/777/C100          HP-UX          A.09.07  hpux90         980508 1187840
HP-9000/777/C100          HP-UX          A.09.07  hpux90gcc      980508 1143300
HP-9000/777/C100          HP-UX          A.09.07  hpux90mot      980508  974848
HP-9000/777/C100          HP-UX          A.09.07  hpux90mot+Ono..980508  946176
HP-9000/777/C100          HP-UX          A.09.07  hpux90o        980508  966656
HP-9000/777/C100          HP-UX          A.09.07  hpux90o+Onoli..980508  946176
HP-9000/777/C100          HP-UX          A.09.07  hpux90o700     980508  925696
HP-9000/777/C100          HP-UX          A.09.07  hpux90o700+On..980508  901120

HP-9000/755/99            HP-UX          A.09.07  hpux90         980508 1187840
HP-9000/755/99            HP-UX          A.09.07  hpux90gcc      980508 1122304
HP-9000/755/99            HP-UX          A.09.07  hpux90mot      980508  974848
HP-9000/755/99            HP-UX          A.09.07  hpux90mot+Ono..980508  954368
HP-9000/755/99            HP-UX          A.09.07  hpux90o        980508  966656
HP-9000/755/99            HP-UX          A.09.07  hpux90o+Onoli..980508  946176
HP-9000/755/99            HP-UX          A.09.07  hpux90o700     980508  925696
HP-9000/755/99            HP-UX          A.09.07  hpux90o700+On..980508  901120

HP-9000/715/75            HP-UX          A.09.05  hpux90         980508 1187840
HP-9000/715/75            HP-UX          A.09.05  hpux90mot      980508  974848
HP-9000/715/75            HP-UX          A.09.05  hpux90mot+Ono..980508  954368
HP-9000/715/75            HP-UX          A.09.05  hpux90o        980508  966656
HP-9000/715/75            HP-UX          A.09.05  hpux90o+Onoli..980508  946176
HP-9000/715/75            HP-UX          A.09.05  hpux90o700     980508  925696
HP-9000/715/75            HP-UX          A.09.05  hpux90o700+On..980508  905216

HP-9000/712/60            HP-UX          A.09.05  hpux90         980508 1187840
HP-9000/712/60            HP-UX          A.09.05  hpux90mot      980508  970752
HP-9000/712/60            HP-UX          A.09.05  hpux90mot+Ono..980508  958464
HP-9000/712/60            HP-UX          A.09.05  hpux90o        980508  970752
HP-9000/712/60            HP-UX          A.09.05  hpux90o+Onoli..980508  950272
HP-9000/712/60            HP-UX          A.09.05  hpux90o700     980508  929792
HP-9000/712/60            HP-UX          A.09.05  hpux90o700+On..980508  905216

HP-9000/340               HP-UX          B.09.10  hpux90         980508 1011712
HP-9000/340               HP-UX          B.09.10  hpux90mot      980508  872448

HP-9000/385               HP-UX          B.09.03  hpux90         980508 1011712
HP-9000/385               HP-UX          B.09.03  hpux90mot      980508  872448

HP-9000/425S              HP-UX          B.08.00  hpux80         980508  978944
HP-9000/425S              HP-UX          B.08.00  hpux80c        980508  991232
HP-9000/425S              HP-UX          B.08.00  hpux80notcp    980508  905216
HP-9000/425S              HP-UX          B.08.00  hpux80o        980508  831488
HP-9000/425S              HP-UX          B.08.00  hpux80oc       980508  843776
HP-9000/425S              HP-UX          B.08.00  hpux80onotcp   980508  765952

HP-9000/350               HP-UX             7.05  hpux70lfn      980508 1048576
HP-9000/350               HP-UX             7.05  hpux70lfnc     980508 1101824
HP-9000/350               HP-UX             7.05  hpux70olfn     980508  917504
HP-9000/350               HP-UX             7.05  hpux70olfnc    980508  970752
HP-9000/350               HP-UX             7.05  hpux70osf      980508  827392
HP-9000/350               HP-UX             7.05  hpux70osftcpc  980508  970752
HP-9000/350               HP-UX             7.05  hpux70sf       980508  950272
HP-9000/350               HP-UX             7.05  hpux70sftcpc   980508 1101824

HP-9000/350               HP-UX              6.5  hpux65         980511  954368
HP-9000/350               HP-UX              6.5  hpux65c        980511 1003520
HP-9000/350               HP-UX              6.5  hpux65o        980511  819200
HP-9000/350               HP-UX              6.5  hpux65oc       980511  868352

(End)