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)
|