Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch core-8-3-1-branch Through [24624019e1] Excluding Merge-Ins
This is equivalent to a diff from 3429c5f93a to 24624019e1
|
2002-03-26
| ||
| 02:27 | added shell and gdb targets check-in: d2bc485fde user: hobbs tags: core-8-3-1-branch | |
| 02:26 | generic/tclMain.c: reduced oversized static buffer allocation check-in: 24624019e1 user: hobbs tags: core-8-3-1-branch | |
|
2002-03-24
| ||
| 19:07 | * Be sure the tcltest variable is updated. [Bug 454050]. check-in: 218b9ec806 user: dgp tags: core-8-3-1-branch | |
|
2000-05-31
| ||
| 01:28 | 2000-05-29 Sandeep Tamhankar <sandeep@scriptics.com> * tests/http.test * doc/http.n * library/h... check-in: 43202241e2 user: sandeep tags: core-8-3-1-branch | |
|
2000-05-02
| ||
| 22:02 | 2000-05-02 Andreas Kupries <a.kupries@westend.com> * Overall changes: (1) Implementation of jo... check-in: cdf262856d user: kupries tags: trunk | |
|
2000-04-28
| ||
| 00:47 | * doc/library.n: Added entries for auto_qualify and auto_import [Bug: 1271]. * doc/Init.3: Manual e... check-in: 3429c5f93a user: ericm tags: trunk | |
|
2000-04-27
| ||
| 01:46 | * doc/memory.n: Man page for Tcl "memory" command, which is created when TCL_MEM_DEBUG is defined at... check-in: 9aabc80546 user: ericm tags: trunk | |
Changes to ChangeLog.
|
| > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
2002-03-24 Don Porter <dgp@users.sourceforge.net>
* library/tcltest/tcltest.tcl: Be sure the tcltest variable is updated.
[Bug 454050].
* library/tcltest/pkgIndex.tcl:
* library/tcltest/tcltest.tcl: Allow non-proc commands to be used
as the customization hooks. Bump to 1.0.2. Converted from lazy to
direct loading. [Bug 495662]
2002-03-18 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclScan.c (Tcl_ScanObjCmd): prevented ckfree being
called on a pointer to NULL.
2002-03-15 Miguel Sofer <msofer@users.sourceforge.net>
Backport of Donal Fellows patch:
* tests/compile.test (compile-12.3): Test to detect bug 530320.
* generic/tclCompile.c (TclCompileTokens): Fixed buffer overrun
reported in bug 530320.
2002-03-01 Jeff Hobbs <jeffh@ActiveState.com>
* tests/io.test:
* tests/encoding.test: updated to reflect iso2022 escape change
* library/encoding/iso2022-jp.enc:
* library/encoding/iso2022.enc:
* tools/encoding/iso2022-jp.esc:
* tools/encoding/iso2022.esc: gave <ESC>$B precedence over <ESC>$@,
based on comments (point 1) in [Bug #219283] (rfc 1468)
* tests/encoding.test: added encoding-23.* tests
* generic/tclIO.c (FilterInputBytes): reset the TCL_ENCODING_START
flags in the ChannelState when using 'gets'. [Bug #523988]
Also reduced the value of ENCODING_LINESIZE from 30 to 20 as this
seems to improve the performance of 'gets' according to tclbench.
2002-02-27 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* unix/tclUnixChan.c (TclpOpenFileChannel): Added code to regonize
"/dev/tty" (by name) and to not handle it as tty / serial
line. This is the controlling terminal and is special. Setting
it into raw mode as is done for other tty's is a bad idea. This
is a hackish fix for expect SGF Bug #520624.
2002-02-25 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* mac/tclMacSock.c (TcpGetOptionProc): Changed to recognize the
option "-error". Essentially ignores the option, always
returning an empty string.
2002-02-25 Jeff Hobbs <jeffh@ActiveState.com>
* win/tclWinNotify.c (Tcl_FinalizeNotifier): backported fix for
[Bug #217982] which also affected Tkinter [Python Bug #216289]
2002-02-25 Daniel Steffen <das@users.sourceforge.net>
* unix/tclLoadDyld.c: updated to use Mac OS X 10.1 dyld APIs that
have more libdl-like semantics. (bug #514392)
2002-02-19 Don Porter <dgp@users.sourceforge.net>
* changes: reversed the order of 8.3.3 changes.
2002-02-15 Don Porter <dgp@users.sourceforge.net>
* changes: First draft of Tcl changes for 8.3.5 release.
2002-02-06 Jeff Hobbs <jeffh@ActiveState.com>
* tests/scan.test:
* generic/tclScan.c (Tcl_ScanObjCmd): corrected scan 0x... %x
handling that didn't accept the 0x as a prelude to a base 16
number. [Bug #495213]
2002-02-05 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* unix/tclUnixChan.c (FileOutputProc): Fixed [bug 465765] reported
by Dale Talcott <daletalcott@users.sourceforge.net>. Avoid
writing nothing into a file as STREAM based implementations will
consider this a EOF (if the file is a pipe). Not done in the
generic layer as this type of writing is actually useful to
check the state of a socket.
2002-02-05 Don Porter <dgp@users.sourceforge.net>
* library/http/http.tcl:
* library/http/pkgIndex.tcl: Corrected use of http::error when
::error was intended. Bump to http 2.4.2.
2002-02-01 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* tests/io.test: io-39.22 split into two tests, one platform
dependent, the other not. -eofchar is not empty on the windows
platform.
2002-01-25 Mo DeJong <mdejong@users.sourceforge.net>
Make -eofchar and -translation options read only for
server sockets. [Bug 496733]
* generic/tclIO.c (Tcl_GetChannelOption, Tcl_SetChannelOption):
Instead of returning nothing for the -translation option
on a server socket, always return "auto". Return the empty
string enclosed in quotes for the -eofchar option on
a server socket. Fixup -eofchar usage message so that
it matches the implementation.
* tests/io.test: Add -eofchar tests and -translation tests
to ensure options are read only on server sockets.
* tests/socket.test: Update tests to account for -eofchar
and -translation option changes.
2002-01-24 Jeff Hobbs <jeffh@ActiveState.com>
* library/http/pkgIndex.tcl:
* library/http/http.tcl: don't add port in default case to handle
broken servers. http bumped to 2.4.1 [Bug #504508]
2002-01-21 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIO.c (WriteChars): Fix for SF #506297, reported by
Martin Forssen <ruric@users.sourceforge.net>. The encoding
chosen in the script exposing the bug writes out three intro
characters when TCL_ENCODING_START is set, but does not consume
any input as TCL_ENCODING_END is cleared. As some output was
generated the enclosing loop calls UtfToExternal again, again
with START set. Three more characters in the out and still no
use of input ... To break this infinite loop we remove
TCL_ENCODING_START from the set of flags after the first call
(no condition is required, the later calls remove an unset flag,
which is a no-op). This causes the subsequent calls to
UtfToExternal to consume and convert the actual input.
2002-01-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIOCmd.c (Tcl_GetsObjCmd): Fixed bug #504642 as
reported by Brian Griffin <bgriffin@users.sourceforge.net>,
using his patch. Before the patch the generic I/O layer held an
unannounced reference to the interp result to store the read
line into. This unfortunately has disastrous results if the
channel driver executes a tcl script to perform its operation,
this freeing the interp result. In that case we are
dereferencing essentially a dangling reference. It is not truly
dangling because the object is in the free list, but this only
causes us to smash the free list and have the error occur later
somewhere else. The patch simply creates a new object for the
line and later sets it into the interp result when we are done
with reading.
2001-12-28 Jeff Hobbs <jeffh@ActiveState.com>
* library/init.tcl (auto_execok): make sure env(COMSPEC) on
Windows is executed with the right case, as it may otherwise fail
inexplicably.
2001-12-21 Daniel Steffen <das@users.sourceforge.net>
* unix/tcl.m4: fixed incorrect SHLIB_LD_LIBS
setting for MacOSX / Darwin.
* unix/configure: Regen.
* unix/mkLinks.tcl: improved case-insensitive
filesystem support.
* unix/mkLinks: Regen.
2001-12-10 Don Porter <dgp@users.sourceforge.net>
* doc/Access.3:
* doc/DString.3:
* doc/ExprLong.3:
* doc/TCL_MEM_DEBUG.3:
* doc/Utf.3:
* doc/file.n: Several typo and formatting corrections discovered
during conversion to TMML. Thanks to Joe English. [Patch 490514]
2001-11-29 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclInt.h:
* generic/tclNamesp.c:
* tests/namespace.test: backporting patch for [Bug 231259]
2001-11-20 Kevin B. Kenny <kennykb@users.sourceforge.net>
* generic/tclCmdMZ.c (Tcl_TimeObjCmd) Added extra parentheses to a
cast expression to remove ambiguity and conform with Tcl
Engineering Manual. [Suggestion by Donal Fellows in commentary on
patch #483500]
2001-11-19 Kevin B. Kenny <kennykb@users.sourceforge.net>
* generic/tclCmdMZ.c (Tcl_TimeObjCmd): Corrected bug in [time]
when dealing with test sequences that run more than 2**31
microseconds. [Bug 478847]
2001-11-09 Don Porter <dgp@users.sourceforge.net>
* tests/var.test:
* generic/tclVar.c: Corrected bug in [global] when dealing
with variable names matching :*. [Bug 480176]
2001-11-06 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIO.c (ReadChars): Fixed bug #478856 reported by
Stuart Cassoff <stwo@users.sourceforge.net>. The bug caused loss
of fileevents when [read]ing less data from the channel than
buffered. Due to an empty input buffer the flag
CHANNEL_NEED_MORE_DATA was set but never reset, causing the I/O
system to wait for more data instead of using a timer to
synthesize fileevents and to flush the pending data out of the
buffers.
2001-10-19 Jeff Hobbs <jeffh@ActiveState.com>
************************
**** 8.3.4 TAGGED ****
************************
* generic/tclInt.h:
* generic/tclObj.c: added -DPURIFY object allocation option.
* unix/configure:
* unix/tcl.m4: added -lc to LIBS on AIX
2001-10-19 Daniel Steffen <das@users.sourceforge.net>
* mac/tclMacFile.c: fix to glob -join, wasn't traversing aliased
folders
* mac/tclMacLoad.c: : corrected utf8 handling, comparison of
package names to code fragment names changed to only match on the
length of package name, this allows for fragment names with version
numbers appended (backport from 8.4)
2001-10-18 Jeff Hobbs <jeffh@ActiveState.com>
* unix/configure: regend
* unix/tcl.m4 (SC_ENABLE_GCC): enabled better recognition of gcc.
* tests/clock.test (clock-8.1):
* generic/tclDate.c (RelativeMonth):
* generic/tclGetDate.y (RelativeMonth): corrected off-by-one-day
error in clock scan with relative months and years during swing
hours. [Bug #413397, Patch #414024] (lavana)
2001-10-17 Jeff Hobbs <jeffh@ActiveState.com>
* unix/tclUnixPipe.c (PipeInputProc, PipeOutputProc): do immediate
retry when error is returned with errno == EINTR.
[Bug #415131] (leger)
2001-10-17 Daniel Steffen <das@users.sourceforge.net>
* mac/tclMacProjects.sea.hqx: updated projects with new version
numbers and resource reorganization; included XML versions of
the projects for CW Pro5 or Pro7 users.
* mac/tcltkMacBuildSupport.sea.hqx: updated build instructions
and readme's; MoreFiles 1.5.2 added; XML versions of projects.
2001-10-17 Daniel Steffen <das@users.sourceforge.net>
Backport of mac specific changes added to 8.4 since 8.3.3:
* generic/tcl.h: removed line continuation in #if clause as this
breaks the mac resource compiler (note that *.r files include tcl.h)
* compat/strftime.c:
* mac/tclMacTime.c:
* mac/tclMacPort.h:
* generic/tclInt.decls:
* generic/tclIntPlatDecls.h:
* generic/tclStubInit.c: timezone support for mac via
TclpGetTZName() like on windows, using an inverse timezone table
adapted from tclDate.c to map gmtoffset in seconds gotten from
the MacOS APIs to a timezone string, as there is no good way to get
this info from MacOS. I had to make up some unusual timezones and
arbitrarily decide on the most standard of the multiple choices
* generic/tclCmdAH.c:
* generic/tclDate.c:
* generic/tclGetDate.y:
* mac/tclMacInt.h:
* mac/tclMacFile.c: default mac epoch changed to standard unix
epoch and related mac time/date handling changes from TIP17.
* mac/tclMacFile.c: glob -dir compatibility for unix style
relative paths, from TIP17
* mac/tclMacAppInit.c: support for WASTE text library using
temporary memory, setting has no effect if WASTE is not used.
* tests/cmdAH.test: access time not available on the mac, skip the
atime touch test
* mac/tclMacApplication.r:
* mac/tclMacLibrary.r:
* mac/tclMacOSA.r:
* mac/tclMacResource.r: updated copyrights/dates in version
strings; reorganized resources among these files to avoid
multiple copies in applications and shared libraries, the script
libraries are now no longer duplicated in Tclsh but are only
included in the resources of Tcl.shlb.
* tests/cmdMZ.test:
* tests/exec.test:
* tests/fileName.test: added missing cleanups/tests/catches that
caused tests to fail on the mac.
* doc/tclvars.n: documentation error, env(PWD) should be env(HOME)
2001-10-17 Jeff Hobbs <jeffh@ActiveState.com>
* unix/tclUnixFCmd.c: minor casts to prevent warnings
* unix/configure: regened
* unix/configure.in: added preset CFLAGS check from HEAD to
prevent --enable-gcc from adding "-g -O2"
2001-10-17 Don Porter <dgp@users.sourceforge.net>
* changes: First draft of Tcl changes for 8.3.4 release.
2001-10-16 Don Porter <dgp@users.sourceforge.net>
* unix/Makefile.in: Restored install of tclConfig.sh file
to $TCL_EXEC_PREFIX/lib. It contains platform-dependent
definitions, and must not be installed under $TCL_PREFIX.
2001-10-16 Jeff Hobbs <jeffh@ActiveState.com>
* unix/tclLoadAout.c (TclGuessPackageName): removed unused vars
and fixed warnings. [Bug #446622] (lim)
2001-10-16 Daniel Steffen <das@users.sourceforge.net>
* unix/Makefile.in:
* unix/configure.in:
* unix/tcl.m4: Added support for MacOSX / Darwin
* unix/configure: Autoconf
* unix/mkLinks:
* unix/mkLinks.tcl: Added check for case-insensitive
filesystems and conditionalized links that only differ by
case (needed for MacOSX/Darwin on HFS+ FS)
* unix/tclLoadDyld.c: change in binary extension format from
MachO bundles to standard .dylib dynamic libraries like on
other unices. **POTENTIAL INCOMPATIBILITY*** extensions
will have to be recompiled as .dylib's.
Improved error handling and use of DStrings and
Tcl_UtfToExternalDString instead of sprintf to build up
symbol and library names. [Patch 435258]
2001-10-16 Don Porter <dgp@users.sourceforge.net>
* tests/trace.test (trace-18.1): Added test to demonstrate
memory corruption problems. [Bug 219393].
* unix/mkLinks: 'make mklinks' for Tcl_SetMainLoop.
* unix/Makefile.in (dist: target): Removed copy of files
matching mac/*.exp; no such files.
2001-10-15 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclInt.decls (TclExpandCodeArray,TclGetInstructionTable):
Added to internal stubs table. Tclcompiler (Tclpro project)
needs them if used as loadable package under Windows. Changed
signatures. We don't want to describe compiler internal
structures in "tclInt.h".
* generic/tclCompile.h: S.a. Removed function declarations.
* generic/tclCompile.c: S.a. Adapted to changed signatures.
2001-10-15 Jeff Hobbs <jeffh@ActiveState.com>
* unix/configure:
* unix/configure.in:
* win/configure:
* win/configure.in:
* win/tcl.m4: reworked to be a little cleaner in comparison to
each other, and to AC_SUBST even empty vars for win/tclConfig.sh
* generic/tcl.h:
* win/tclWinPort.h: moved #define of WIN32 to tcl.h where __WIN32__
is defined and added #ifndef check.
2001-10-12 Jeff Hobbs <jeffh@ActiveState.com>
* tests/winPipe.test: removed obsolete cat16 tests, fixed
winpipe-1.22 to only run on Win9*.
* tests/timer.test: slight skewing of after values to allow for
correct results on burdened machines.
* tests/winFCmd.test: differentiated test results for win2k
versus not.
* win/tclWinInit.c: cleanup back-ported from 8.4 HEAD.
* win/tclWinPort.h: move winsock2.h include, header cleanup
back-ported from 8.4 HEAD.
* library/encoding/ebcdic.enc:
* tools/encoding/ebcdic.txt: EBCDIC charset mapping.
[Patch #219323] (nijtmans)
* library/encoding/tis-620.enc:
* tools/encoding/tis-620.txt: TIS-620 charset mapping.
[Patch #467423] (poonlap)
2001-10-11 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclLiteral.c: (TclReleaseLiteral) insured that
self-referential bytecodes are properly cleaned up on interpreter
deletion [Bug 467523] (Ronnie Brunner)
2001-10-10 Don Porter <dgp@users.sourceforge.net>
* tests/unixInit.test: Corrected restore of ::env(LANG).
2001-10-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclCmdMZ.c: Removed pointless #include and SCAN_* flags.
(Tcl_RegexpObjCmd): Fixed match area offset bug.
(Tcl_StringObjCmd): Fixed STR_INDEX and STR_REPEAT, and tidied up
STR_IS and STR_LENGTH.
2001-10-09 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclObj.c: removed duplicate definition of tclObjsAlloced
and tclObjsFreed. These variables only exist when compiling with
TCL_COMPILE_STATS, and are already defined in generic/tclExecute.c
2001-10-09 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclFileName.c (ExtractWinRoot): corrected ABR error
* doc/bgerror.n: back-port from 8.4 that indicates new behavior of
bgerror in Tk.
2001-10-09 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclLiteral.c: (TclReleaseLiteral) reverted previous
patch for [Bug 467523] - cure is worse than the illness.
2001-10-09 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/io.test (io-32.8): Fixed typo.
2001-10-08 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/cmdIL.test: test improvement.
* doc/lsort.n: Doc improvement.
* generic/tclCmdIL.c (InfoBodyCmd): Strengthened bytecode
isolation [fix orig. by Miguel Sofer]
(Tcl_LsortObjCmd, SortCompare): Symbolic indexing values plus
correct handling of indexing relative to end in [lsort].
2001-10-05 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclLiteral.c: (TclReleaseLiteral) insured that
self-referential bytecodes are properly cleaned up on interpreter
deletion [Bug 467523] (Ronnie Brunner)
2001-10-04 Jeff Hobbs <jeffh@ActiveState.com>
* library/encoding/cp1250.enc:
* library/encoding/cp1251.enc:
* library/encoding/cp1252.enc:
* library/encoding/cp1253.enc:
* library/encoding/cp1254.enc:
* library/encoding/cp1255.enc:
* library/encoding/cp1256.enc:
* library/encoding/cp1257.enc:
* library/encoding/cp1258.enc:
* library/encoding/cp874.enc:
* library/encoding/cp936.enc:
* library/encoding/cp949.enc:
* library/encoding/cp950.enc:
* library/encoding/iso8859-10.enc:
* library/encoding/iso8859-13.enc:
* library/encoding/iso8859-14.enc:
* library/encoding/iso8859-15.enc:
* library/encoding/iso8859-16.enc:
* library/encoding/iso8859-6.enc:
* library/encoding/iso8859-7.enc:
* library/encoding/iso8859-8.enc:
* library/encoding/koi8-u.enc:
* library/encoding/macCroatian.enc:
* library/encoding/macCyrillic.enc:
* library/encoding/macGreek.enc:
* library/encoding/macIceland.enc:
* library/encoding/macRoman.enc:
* library/encoding/macTurkish.enc:
* tools/encoding/cp1250.txt:
* tools/encoding/cp1251.txt:
* tools/encoding/cp1252.txt:
* tools/encoding/cp1253.txt:
* tools/encoding/cp1254.txt:
* tools/encoding/cp1255.txt:
* tools/encoding/cp1256.txt:
* tools/encoding/cp1257.txt:
* tools/encoding/cp1258.txt:
* tools/encoding/cp874.txt:
* tools/encoding/cp932.txt:
* tools/encoding/cp936.txt:
* tools/encoding/cp949.txt:
* tools/encoding/cp950.txt:
* tools/encoding/iso8859-1.txt:
* tools/encoding/iso8859-10.txt:
* tools/encoding/iso8859-13.txt:
* tools/encoding/iso8859-14.txt:
* tools/encoding/iso8859-15.txt:
* tools/encoding/iso8859-16.txt:
* tools/encoding/iso8859-2.txt:
* tools/encoding/iso8859-3.txt:
* tools/encoding/iso8859-4.txt:
* tools/encoding/iso8859-5.txt:
* tools/encoding/iso8859-6.txt:
* tools/encoding/iso8859-7.txt:
* tools/encoding/iso8859-8.txt:
* tools/encoding/iso8859-9.txt:
* tools/encoding/koi8-r.txt:
* tools/encoding/macCentEuro.txt:
* tools/encoding/macCroatian.txt:
* tools/encoding/macCyrillic.txt:
* tools/encoding/macGreek.txt:
* tools/encoding/macIceland.txt:
* tools/encoding/macRoman.txt:
* tools/encoding/macTurkish.txt:
Updated encodings with latest mappings from www.unicode.org. This
did not include some Mac encodings that have special multi-unichar
translations now (like symbols, dingbats and japanese). Also does
not include big5, gb or euc* as those have different formats in
the latest Unicode version that need new conversion tools. Not
all related .enc files changed as some had been updated separately.
2001-10-03 Jeff Hobbs <jeffh@ActiveState.com>
* README:
* generic/tcl.h:
* mac/README:
* tools/tcl.hpj.in:
* tools/tcl.wse.in:
* unix/Makefile.in:
* unix/README:
* unix/configure:
* unix/configure.in:
* unix/tcl.m4:
* unix/tcl.spec:
* win/README:
* win/REAME.binary: updated patchlevel to 8.3.4. Changed urls to
point to www.tcl-tk.net where applicable.
* win/configure:
* win/configure.in:
* win/tcl.m4:
* win/Makefile.in: added proper Win64 build support.
updated patchlevel to 8.3.4.
* generic/tclEvent.c (Tcl_FinalizeThread): moved freeing of
tclLibraryPath to before the thread exit handlers are called.
Slight modification to change on 2001-09-24.
2001-09-28 Miguel Sofer <msofer@users.sourceforge.net>
* doc/FindExec.3: added a comment not to change the working
directory before calling Tcl_GetNameOfExecutable [Bug 219215]
2001-09-28 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIO.c: added (on behalf of Kevin Kenny
<kennykb@users.sourceforge.net>) two more '(ClientData)' casts
on calls to Tcl_Preserve and Tcl_Release -- ones that Vince
apparently missed.
2001-09-27 Don Porter <dgp@users.sourceforge.net>
* generic/tclIO.c (ChannelTimerProc): Added Tcl_Preserve()
and Tcl_Release() to fix segfault introduced by the 2001-09-26
changes. [Bug 465494]
* doc/TCL_MEM_DEBUG.3: Updated out-of-date reference to
#define GUARD_SIZE.
2001-09-26 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* The changes below fix [Bug #462317] where Expect tried to read
more than was in the buffers and then blocked in the OS call as
its pty channel driver provides no blockmodeproc through which
the OS could be notified of blocking-behaviour. Because of this
the general I/O core has to take more care than usual to
preserve the semantics of non-blocking channels.
* generic/tclIO.c (Tcl_ReadRaw): Do not read from the driver if
the channel is non-blocking and the fileevent causing the read
was generated by a timer. We do not know if there is data
available from the OS. Instead of going to the OS for more and
potentially blocking we simply signal EWOULDBLOCK to the higher
levels to cause the system to wait for true fileevents.
(GetInput): Same as before.
(ChannelTimerProc): Added set and clear of CHANNEL_TIMER_FEV.
* generic/tclIO.h (CHANNEL_TIMER_FEV): New flag for channels. Is
set if a fileevent was generated by a timer, the channel is not
blocking and the driver did not provide a blockmodeproc. In that
case the I/O core has to be especially careful about going to
the driver for more data.
2001-09-24 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* The change below fixes [Bug #464380]. The bug was reported by
Ronnie Brunner <rbrunner@users.sourceforge.net>. He also
provided the patch.
* generic/tclEvent.c (Tcl_Finalize): Moved release of
'tclLibraryPath' to Tcl_FinalizeThread.
(Tcl_FinalizeThread): See above, new place for release of
'tclLibraryPath'.
2001-09-20 Jeff Hobbs <jeffh@ActiveState.com>
* win/makefile.vc: updated IA64 compile settings
* win/tclWinInit.c: added extra processor definitions. (mstacy)
* win/tclWinSock.c (SocketThread): corrected pointer cast for _WIN64.
* win/tclWinNotify.c: removed unnecessary winsock include (it is
already in from tclWinPort.h).
* win/tclWinPort.h: changed winsock.h include to winsock2.h.
Reverses change from 2000-11-16, but is necessary for WIN64.
Extensions should comply with defined OS words, or use #ifndef.
2001-09-19 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclTest.c (TestcmdtokenCmd): corrected pointer
storage/retrieval for 64bit machines.
* generic/tclCmdAH.c (Tcl_FormatObjCmd):
* generic/tclScan.c (Tcl_ScanObjCmd): corrected handling of format
and scan on 64-bit machines. [Bug 219223, Patch #412696] (rmax)
* unix/configure: regen'ed
* unix/tcl.m4: added --enable-64bit support for HP-11 with the
64-bit kernel.
* generic/tcl.h: removed forced #define USE_TCLALLOC 1 for
Windows. This means the native system allocator will be used by
default. This should be binary and source compatible with
extensions, as Tcl_Alloc is a properly stubbed function.
2001-09-18 Don Porter <dgp@users.sourceforge.net>
* unix/configure: Regen.
* unix/tcl.m4 (SC_CONFIG_CFLAGS): On Linux, disable inlining when
one of the compat/*.c routines is to be linked in. [Patch 440891]
2001-09-13 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclUtf.c (Tcl_UtfPrev): corrected to return the proper
location when the middle of a UTF-8 byte was passed in.
[Tk Bug #450504]
2001-09-13 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* tests/ioCmd.test: Changed the computation of the result for
iocmd-8.1[123] so that the tests work for single- and
multi-process execution of the testsuite. Depending on the
choice of the user stdout is a tty or not and thus reports
different channel options. Fixes [460993] reported by Don
Porter.
2001-09-12 Don Porter <dgp@users.sourceforge.net>
Backport several bug fixes from HEAD to core-8-3-1-branch:
* tests/rename.test:
* tests/split.test: Corrected tests to better isolate tests in
one file from influencing tests in other files. [Bug 460591]
* unix/tclLoadShl.c: Added #include of tclInt.h; access to Tcl
internals, notably TclpUnloadFile(), is required. Thanks to
Bob Techentin for report and patch. [Bug 459305]
* generic/tclInitScript.h (initScript):
* win/tclWinInit.c (TCL_REGISTRY_KEY, TclpSetVariables): Removed
vestiges of Tcl's old initialization from registry variables.
[Bug 455645]
* tests/unixInit.test (unixInit-3.2): Updated test to support
newer HP-UX releases that properly report euc-jp as the system
encoding for Japanese. Bug report and patch verification by Bob
Techentin. [Bug 453883]
* compat/strtod.c (strtod): Fixed failure to handle expressions
like 3eq2 and failure to set errno on overflow. [Bug 440894]
2001-09-10 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclEvent.c (TclInExit): Corrected handling of tsd in
late stages of finalization. [Bug #419449] (darley)
* tests/stack.test:
* generic/tclInterp.c (AliasObjCmd): Check the numLevels to ensure
that we aren't hitting some alias loop condition. [Bug #443184]
2001-09-10 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclInt.decls: Added 'TclWinFlushDirtyChannels' to
the internal platform specific stub table.
2001-09-06 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* All the changes below serve to fix bug [219148] which reports a
80x performance hit for file I/O on Win* systems. On my system
it was closer to a 120x hit. Problem report by Uwe Traum <no
email address available>.
The fix goes like this: The obstacle is 'FlushFileBuffers',
executed whenever Tcl writes data to the OS, as Tcl has to wait
for the disk to complete I/O, and disks are slow. We remove that
obstacle. This opens another problem, [file size] reports back
wrong numbers. So for [file size] we add the call back in. As
optimization we keep track of the channels which were written to
and flush only these.
* win/tclWinFile.c (TclpObjStat): Added a call to
'TclWinFlushDirtyChannels'. This ensures that [file size] and
related commands report the correct size of a file even if Tcl
has recently written to it. Unixoid OS's always report the
correct size even for files with pending data, but Win*
syssystem don't. They only report what is actually on disk.
* win/tclWinInt.h: Added declaration of
'TclWinFlushDirtyChannels', making it available to other parts
of the tcl core.
* win/tclWinChan.c (TclWinFlushDirtyChannels): New, internal,
procedure. Goes through the list of open file channels and
forces the OS to flush its file buffers for all which were
written to since the last call of this function. This is an
expensive operation as Tcl has to wait for the OS to complete
actual writes to the disk.
(FileInfo): Added dirty flag required by the procedure above.
(FileOutputProc): Removed flushing of file buffers, setting the
dirty flag instead. This means that the previously incurred
delays do not happen anymore.
(TclWinOpenFileChannel): Added initialization of 'dirty' flag.
2001-09-06 Don Porter <dgp@users.sourceforge.net>
* doc/http.n:
* library/http/*.tcl:
* tools/tcl.wse.in:
* tools/tclmin.wse:
* unix/Makefile.in:
* win/{Mm}akefile.*: Updated http package to version 2.4,
reflecting the new features just added.
2001-09-06 Jeff Hobbs <jeffh@ActiveState.com>
* doc/http.n: noted -binary, charset and coding state keys.
* tests/http.test:
* library/http/pkgIndex.tcl:
* library/http/http.tcl (geturl): correctly get charset parameter
and convert text according to specified encoding (if known).
RFC iso8859-1 is used by default. Also recognize
Content-encoding to see if we should do binary translation.
Added a CYA -binary switch for the cases that were missed. [Bug
#219211 #219399]
* tests/ioUtil.test: changed to make better use of constraints and
remove knownBug constraints that weren't valid.
2001-09-01 David Gravereaux <davygrvy@pobox.com>
-=[ Tcl_Async* API merge from HEAD ]=-
* generic/tclInt.decls: Removed TclpAsyncMark permanently and left
the hole not to upset the positions.
* generic/tclDecls.h:
* generic/tclIntDecls.h:
* generic/tclIntPlatDecls.h:
* generic/tclPlatDecls.h:
* generic/tclStubInit.c: regen'd tables.
* generic/tclAsync.c: Brought source to match -r1.6 on the HEAD
branch.
* generic/tclEvent.c:
* generic/tclInt.h: Added prototype to and use of new
TclFinalizeAsync() found in tclAsync.c.
* unix/tclUnixPort.h:
* mac/tclMacPort.h: removed #defines for TclpAsyncMark.
* win/tclWinInit.c: Removed the TclpAsyncMark function and the
thread ID saving that was going on in TclpInitPlatform(). [the old
hack]
* win/tclWinThread.c: TclpFinalizeCondition() and
TclpFinalizeMutex() are now properly returning the old
CriticalSection handle to the system. Tcl_CreateThread() is now
decrementing its handle reference, so the system will recover
resources when the thread closes (doh!). These changes are all
already up on the HEAD.
* doc/Async.3: matches HEAD.
2001-08-30 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclIndexObj.c: fixed some casting problems that upset
Crays. [Bug #419528] (andreasen)
* tests/httpd (httpdRespond): added response to timeout value in
query string.
2001-08-30 Don Porter <dgp@users.sourceforge.net>
* generic/tcl.h: Silence warning from Sun compiler. [Bug 454374]
2001-08-27 Jeff Hobbs <jeffh@ActiveState.com>
* doc/Encoding.3: added note that tclPlatDecls.h must be included
for use of Tcl_WinTCharToUtf and Tcl_WinUtfToTChar.
* doc/Tcl_Main.3: added docs for Tcl_SetMainLoop
* generic/tclStubInit.c:
* generic/tclDecls.h:
* generic/tcl.decls: added Tcl_SetMainLoop proc that allows people
to set a main loop that will run for tclsh.
* generic/tcl.h: added Tcl_MainLoopProc typedef
* generic/tclMain.c (Tcl_SetMainLoop, StdinProc, Prompt): new
StdinProc and Prompt static procs and Tcl_SetMainLoop stubs proc.
The first two handle a fileevent based prompt (taken from
tkMain.c). Tcl_SetMainLoop enables the interactive setting of a
main loop procedure. This enables Tk to be a loadable package.
2001-08-24 Don Porter <dgp@users.sourceforge.net>
* tests/unixInit.test (unixInit-2.9): Corrected expected result
to match Tcl's quirky construction of its init library path.
* tests/ioUtil.test (ioUtil-3.*): Corrected errors in tests
revealed by fix of overagressive compiler. [Bug 451200]
* doc/tclsh.1: Added note that the tclsh program is frequently
installed with the Tcl version numer as part of the name.
[Patch 402725]
* generic/tclPkg.c:
* tests/pkg.test: [package forget] now forgets all of the
package arguments it receives, not stopping when a package is
not found. [Bug 415273]
* doc/pkgMkindex.n:
* library/package.tcl: Corrected documentation and usage
message of [pkg_mkIndex].
* tests/unixInit.test (unixInit-2.8): Added extra constraint,
notInstalledInTmp, to stop this test from damaging installations
in /tmp; not much fun to have to reinstall the Tcl library every
time you run the test suite!
* tests/unixInit.test (unixInit-2.9):
* unix/tclUnixInit.c (TclpInitLibraryPath):
* win/tclWinInit.c (TclpInitLibraryPath): Corrected buggy
construction of search path entries relative to executable.
Added test for bad construction. [Bug 438014]
* tests/cmdMZ.test (cmdMZ-1.4): added notLinux constraint to test
to prevent failure message on Linux due to OS caching bug.
* doc/library.n:
* library/init.tcl:
* tests/autoMkindex.t*: Modified [auto_import] to apply
pattern matching in the [namespace import] style. [Bug 420186]
***POTENTIAL INCOMPATIBILITY*** for any callers of [auto_import]
from outside Tcl that expect the pattern matching to be like that
of [string match].
* tools/genStubs.tcl: Add a package require of Tcl 8
at the beginning of the script so that the script
will print a descriptive error message when run
in an old Tcl 7 shell.
2001-08-23 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* win/tclWinPipe.c (BuildCommandLine): Fixed tcl Bug
[432499]. Part of the code used the non-absolute path to the
executable to determine quoting. This failed if the absolute
path contained spaces, but the application name itself not. This
bug caused no trouble on Win NT 5, but does for other variants
in the Win* family. Report and fix due to Ken Poole
<kenpoole@users.sourceforge.net>.
2001-08-23 Jeff Hobbs <jeffh@ActiveState.com>
* unix/configure:
* unix/tcl.m4: added QNX-6 build support. [Bug #219410] (loverso)
2001-08-20 Jeff Hobbs <jeffh@ActiveState.com>
* library/http/http.tcl (geturl): added port number to Host:
header to comply with HTTP/1.1 spec (RFC 2068). [Bug #452217]
2001-08-08 Don Porter <dgp@users.sourceforge.net>
* library/dde1.1/pkgIndex.tcl:
* library/reg1.0/pkgIndex.tcl: Package dependencies. [Patch 448931]
* library/http/http.tcl:
* library/http/pkgIndex.tcl: Upgrade to http 2.3.2.
* library/msgcat/msgcat.tcl:
* library/msgcat/pkgIndex.tcl: Upgrade to msgcat 1.1.1.
* library/opt/optparse.tcl:
* library/opt/pkgIndex.tcl: Upgrade to opt 0.4.3.
* library/tcltest/tcltest.tcl:
* library/tcltest/pkgIndex.tcl: Upgrade to tcltest 1.0.1.
2001-08-07 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclExecute.c: Avoid panic when there are extra items in
the tcl stack [Bugs #406709 and 439843, Patch #414470]
* tests/foreach.test: test to exercise the patch
2001-08-06 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclCmdMZ.c (Tcl_RegexpObjCmd, Tcl_RegsubObjCmd):
reordered the retrieval of arguments to avoid shimmering bug when
the pattern and string referenced the same object.
* unix/configure: regenerated
* unix/tcl.m4: added GNU (HURD) configuration target. (brinkmann)
[Patch: #442974]
2001-08-03 Jeff Hobbs <jeffh@ActiveState.com>
* win/configure: regenerated
* win/tcl.m4: fixed DLLSUFFIX definition to always be ${DBGX}.dll.
This is necessary for TEA compliant builds that build shared
against a static-built Tcl.
* win/Makefile.in ($(TCLSH)): added $(TCL_STUB_LIB_FILE) to build
target, otherwise it wouldn't get generated in a static build.
2001-08-06 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIOCmd.c (Tcl_GetsObjCmd): Applied patch from SF item
[442665] to fix the bug reported by it. The function can corrupt
a freed object if it is called with objc == 3. This is because
it retrieves resultPtr and does not increment its reference
count, but then calls Tcl_ObjSetVar2, which causes the retrieved
resultPtr object to be released.
2001-07-18 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* doc/bgerror.n: Fixed Tk! Bug #415757.
2001-07-18 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIO.c: Aftermath to [SF #427196]. Squash empty buffers
if they are smaller than the requested buffersize, to prevent
reusage of old buffers and to honor changes in the requested
buffersize made by the user.
2001-07-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIO.c (GetInput): Fixed [SF #427196]. Memory was
overwritten because a buffer was used after a change of the
requested buffersize together with that requested buffersize and
not its actual size, which was smaller. Note that the continous
reuse of the smaller buffer negatively impacts performance. The
system never allocates a buffer with the newly requested bigger
buffersize.
2001-07-16 Jeff Hobbs <jeffh@ActiveState.com>
* win/tclWinPipe.c (PipeClose2Proc): constrained the mutex lock to
just the TerminateThread call and waiting for termination. (jsmith)
2001-07-02 Jeff Hobbs <jeffh@ActiveState.com>
* tests/util.test: added util-4.6
* generic/tclUtil.c (Tcl_ConcatObj): Corrected walking backwards
over utf-8 chars. [Bug #227512]
2001-06-27 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclUtf.c (Tcl_UtfBackslash): Corrected backslash
handling of multibyte utf-8 chars. [Bug #217987]
* generic/tclCmdIL.c (InfoProcsCmd): fixed potential mem leak in
info procs that created objects without using them.
* generic/tclCompCmds.c (TclCompileStringCmd): fixed mem leak when
string command failed to parse the subcommand.
2001-05-22 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclObj.c (TclAllocateFreeObjects): simplified
objSizePlusPadding to use sizeof(Tcl_Obj) (max)
2001-05-04 Daniel Steffen <das@users.sourceforge.net>
** Mac 8.3.3 binary release
** detailed change log for changes to mac code for 8.3.3
** (expands on log entries below marked 2001-04-04 Jeff Hobbs)
* generic/tcl.h: MAC_TCL: addition of ConditionalMacros.h and use of
DLLIMPORT and DLLEXPORT like on other platforms. ( => no longer need
the .exp files and can remove use of #pragma export that never worked
well)
* mac/tclMacShLib.exp:
* mac/tclMacOSA.exp:
* mac/tclMacMSLPrefix.h: removed files
* mac/MW_TclBuildLibHeader.h:
* mac/MW_TclBuildLibHeader.pch:
* mac/MW_TclHeaderCommon.h:
* mac/MW_TclStaticHeader.h:
* mac/MW_TclStaticHeader.pch: new precompiled header files
* mac/MW_TclAppleScriptHeader.pch:
* mac/MW_TclHeader.pch:
* mac/MW_TclTestHeader.pch:
* mac/tclMacCommonPch.h: revised precompiled header handling: now
include a common header file 'MW_TclHeaderCommon.h' from all .pch
files, the .pch files themselves now only setup #defines (e.g.
BUILD_tcl, STATIC_BUILD, TCL_DEBUG, TCL_THREADS) like in makefiles on
other platforms.
* mac/tclMac.h:
* mac/tclMacPort.h:
* mac/tclMacInt.h: use of BUILD_tcl and TCL_STORAGE_CLASS like on other
platforms, standardize #include'd files to what's done on other
platforms, removed use of #pragma export.
* mac/tcltkMacBuildSupport.sea.hqx: new archive of mac build support
files & suggested build environment directory hierarchy:
- 'Building MacTclTk' & 'CW Pro6 changes' readme's.
- projects for MoreFiles 1.5.1 static & shared libraries.
- project & sources for 'pseudoCarbonSupport', see below.
* mac/tclMacProjects.sea.hqx: updated mac build project files:
- build support for CodeWarrior Pro6, UnivIntf 3.4 & shared runtime
libraries: the MSL libraries and MoreFiles are no longer compiled into
Tcl.shlb, all non-static binaries now use the Pro6 shared runtime
libraries and MoreFiles.shlb. These shlbs are merged into the standard
Wish and TclShell, but 3rd party applications linking with Tcl.shlb or
Tk.shlb need to setup access to them. (see the "(sh-ppc)" targets
for how to do this.)
- Merging the full MSL.shlb and the other shlbs into Wish & TclShell
makes them a bit larger than before, use unmerged binaries to avoid
copying the shared code with every application, e.g. when deploying
numerous Wish based droplets.
- Note that using CW Pro5 to compile extensions is in principle still
possible, but need to link with Pro6 runtime libraries.
- Tclapplescript now loads and runs on CFM68k.
- Highly experimental "pseudoCarbon" support for Tcl only on OS 8/9:
binaries in "Build:(Carbon):" link against CarbonLib instead of
InterfaceLib, however the actual code has not been carbonized! i.e. it
will not run on OSX and may not even run properly with CarbonLib.
This should in principle allow you to build & test OS9 CFM Carbon
binaries that need to link with Tcl.shlb. On OSX you can use the
native Tcl.framework, but you have to build a MachO binary as there
is no CFM glue lib for Tcl.framework.
the library pseudoCarbonSupport.shlb manually loads the symbols
from InterfaceLib that are not in CarbonLib but are needed by the
uncarbonized code in Tcl.shlb and TclShell.
* generic/tclMain.c: MAC_TCL: workaround for broken/non-standard isatty
on MW Pro6, #include <unistd.h> instead of defining isatty
* mac/tclMacPort.h: MW Pro6 changes for MSL fcntl.h, stat.h & isatty
* mac/tclMacAppInit.c: add EXTERN to InstallConsole to enable DLL
export via the TCL_STORAGE_CLASS mechanism.
* mac/tclMacFCmd.c: fix for FSpDirectoryCopy API change
* mac/tclMacLibrary.c: emit compile time error when
TCL_REGISTER_LIBRARY and USE_TCL_STUBS are both defined at the same
time in an extension, this use is not currently supported and will
result in a crash when dynamically loading the extension.
* mac/tclMacApplication.r:
* mac/tclMacLibrary.r:
* mac/tclMacOSA.r:
* mac/tclMacResource.r: fixed obsolete copyrights/dates in version
strings; updated version strings to standard usage; added support for
'(Support Libraries)' subfolder for shared runtime libraries in
unmerged binaries; commented out demo setting of "Tcl Environment
Variables"
* mac/tclMacChan.c:
* mac/tclMacSock.c: cast for *BlockMode
* mac/tclMacUtil.c:
* mac/tclMacMath.h: removed obsolete hypot() definition
* generic/tclIntPlatDecls.h:
* generic/tclInt.decls:
* generic/tclStubInit.c:
* mac/tclMacNotify.c:
* mac/tclMacOSA.c:
* mac/tclMacUtil.c:
* generic/tclThreadTest.c: renamed routines conflicting with standard
Apple or MoreFiles headers (at compile or link time):
GetGlobalMouse -> GetGlobalMouseTcl
FSpGetDirectoryID -> FSpGetDirectoryIDTcl
FSpOpenResFileCompat -> FSpOpenResFileCompatTcl
FSpCreateResFileCompat -> FSpCreateResFileCompatTcl
NewThread -> NewTestThread
the renamed MoreFiles *Tcl routines are just wrappers calling into the
MoreFiles DLL.
* mac/tclMacCommonPch.h:
* mac/tclMacThrd.c:
* mac/tclMacPanic.c: removed OLDROUTINENAMES define, renamed obsolete
apple API names to modern equivalents; UH3.4 support: added #include
<ControlDefinitions.h>, updated New*Proc() calls to New*UPP().
* mac/tclMacUnix.c: added missing (Tcl_Obj ***) cast to
Tcl_ListObjGetElements call
* mac/tclMacAlloc.c: modernized TclpSysAlloc() to use temporary
memory instead of system heap memory when available (MacOS
>= 7.5 and possibly earlier, use of system heap has been
discouraged for a long time and has many disadvantages, e.g. memory
isn't paged out, and errors can very easily bring the system down);
fixed crashing bug in TclpSysRealloc() and CleanUpExitProc() where
memory was being accessed after having been deallocated; fixed
memory leak in (de)allocation code (for every block ever allocated
with TclpSysAlloc, a Ptr was leaked), if temporary memory is
available, don't track allocated memory, instead use
RecoverHandle() to get Handle from Ptr, otherwise use doubly linked
list to correctly track memory and free all allocated memory; added
new option for ConfigureMemory: MEMORY_DONT_USE_TEMPMEM, disables
use of temporary memory even when it would be available, only
necessary when writing e.g. a driver (using tcl??); increased
fraction of application heap reserved for OS routines to 512K
2001-04-06 Jeff Hobbs <jeffh@ActiveState.com>
* unix/install-sh: added -S option
* unix/tcl.m4: added Rhapsody/Darwin target
* unix/tclLoadDyld.c (TclpLoadFile):
* unix/tclMtherr.c (matherr): added support for Mac OS X
2001-04-05 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclObj.c (TclAllocateFreeObjects): simplified
objSizePlusPadding to use sizeof(Tcl_Obj) (max)
* win/README:
* win/README.binary: removed note about use of registry (hasn't
been used for loading since 8.0).
* win/configure:
* win/tcl.m4: added -link50compat
* mac/tclMacProjects.sea.hqx: fixed accidental swap with Tk
project files.
2001-04-04 Jeff Hobbs <jeffh@ActiveState.com>
** Start changes for improved mac build (steffen) **
* mac/tclMacShLib.exp:
* mac/tclMacMSLPrefix.h: removed files
* generic/tcl.h: addition of ConditionalMacros.h and use of
DLLIMPORT and DLLEXPORT.
* generic/tclIntPlatDecls.h:
* generic/tclInt.decls:
* generic/tclMain.c:
* generic/tclStubInit.c:
* generic/tclThreadTest.c: NewThread -> NewTestThread
* mac/MW_TclAppleScriptHeader.pch:
* mac/MW_TclHeader.pch:
* mac/MW_TclTestHeader.pch:
* mac/tclMac.h:
* mac/tclMacAppInit.c:
* mac/tclMacApplication.r:
* mac/tclMacChan.c: cast for *BlockMode
* mac/tclMacCommonPch.h:
* mac/tclMacFCmd.c:
* mac/tclMacInt.h:
* mac/tclMacLibrary.c:
* mac/tclMacLibrary.r:
* mac/tclMacMath.h:
* mac/tclMacNotify.c:
* mac/tclMacOSA.c:
* mac/tclMacOSA.r:
* mac/tclMacPanic.c:
* mac/tclMacPort.h:
* mac/tclMacResource.r:
* mac/tclMacSock.c: cast for *BlockMode
* mac/tclMacThrd.c:
* mac/tclMacUnix.c:
* mac/tclMacUtil.c: changed mac declarations to use Tcl ending,
fixed copyrights, updated headers, fixed comments, updated
resource files. Mac builds are now meant to be build with
MetroWerks CW 6.
* mac/MW_TclBuildLibHeader.h:
* mac/MW_TclBuildLibHeader.pch:
* mac/MW_TclHeaderCommon.h:
* mac/MW_TclStaticHeader.h:
* mac/MW_TclStaticHeader.pch:
* mac/tcltkMacBuildSupport.sea.hqx: new files
* mac/tclMacProjects.sea.hqx: new mac build project files.
** End changes for improved mac build (steffen) **
* unix/configure:
* unix/tcl.m4: extended test of termios vs. termio vs. sgtty to
better detect result on Linux and when certain configure
redirections are being used. (max) [Patch #402923; Bug #227412,
#219194]
2001-04-03 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclListObj.c (Tcl_SetListObj): set objPtr->length = 0 in
empty object case to maintain sanctity of Tcl_Obj bytes/length
pairing. (porter) [Patch #405998]
* README:
* mac/README:
* win/README:
* win/README.binary:
* unix/README: updated patchlevel information to 8.3.3 and
updated links and notes.
* generic/tcl.h:
* tools/tcl.wse.in:
* win/configure.in (TCL_PATCH_LEVEL):
* win/configure:
* unix/configure:
* unix/configure.in (TCL_PATCH_LEVEL):
* unix/tcl.spec: updated patchlevel information to 8.3.3
***************************************************************
** START OF ASYNC BACKPORT LOG (8.4aCVS 2001-04-03 -> 8.3.3) **
***************************************************************
* doc/CrtChannel.3:
* doc/CrtSlave.3:
* doc/DetachPids.3:
* doc/Eval.3:
* doc/ObjectType.3:
* doc/StrMatch.3:
* doc/after.n:
* doc/append.n:
* doc/bgerror.n:
* doc/binary.n:
* doc/break.n:
* doc/case.n:
* doc/cd.n:
* doc/close.n:
* doc/concat.n:
* doc/continue.n:
* doc/dde.n:
* doc/encoding.n:
* doc/eof.n:
* doc/error.n:
* doc/eval.n:
* doc/exec.n:
* doc/exit.n:
* doc/fblocked.n:
* doc/fileevent.n:
* doc/filename.n:
* doc/flush.n:
* doc/for.n:
* doc/foreach.n:
* doc/format.n:
* doc/gets.n:
* doc/glob.n:
* doc/global.n:
* doc/http.n:
* doc/if.n:
* doc/incr.n:
* doc/join.n:
* doc/lappend.n:
* doc/library.n:
* doc/lindex.n:
* doc/linsert.n:
* doc/list.n:
* doc/llength.n:
* doc/load.n:
* doc/lrange.n:
* doc/lreplace.n:
* doc/lsort.n:
* doc/man.macros:
* doc/memory.n:
* doc/open.n:
* doc/package.n:
* doc/packagens.n:
* doc/pid.n:
* doc/pkgMkIndex.n:
* doc/proc.n:
* doc/puts.n:
* doc/pwd.n:
* doc/read.n:
* doc/regexp.n:
* doc/regsub.n:
* doc/rename.n:
* doc/resource.n:
* doc/return.n:
* doc/scan.n:
* doc/seek.n:
* doc/set.n:
* doc/split.n:
* doc/string.n:
* doc/subst.n:
* doc/switch.n:
* doc/tclvars.n:
* doc/tell.n:
* doc/time.n:
* doc/unknown.n:
* doc/update.n:
* doc/uplevel.n:
* doc/upvar.n:
* doc/variable.n:
* doc/vwait.n:
* doc/while.n: doc clarifications and cleanup from 8.4aCVS docs
2001-04-02 Jeff Hobbs <jeffh@ActiveState.com>
* win/configure:
* win/tcl.m4 (SHLIB_LD): added -incremental:no. [Bug #219381]
2001-03-30 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclCkalloc.c (TclFinalizeMemorySubsystem): set curTagPtr
to NULL to allow for reuse.
* generic/tclEvent.c (Tcl_Finalize): moved the tsdPtr
initialization inside the subsystemsInitialized check to prevent
it potentially getting called twice during finalization. (wu)
[Patch #403532, Bug #219391]
* win/tclWinSock.c (SocketEventProc): Fixed race condition in
readability of socket on Windows.
[Patch #410674, Bug #219205 #219333]
* win/tcl.m4: added imm32.lib to LIBS_GUI for Tk IME support.
* win/Makefile.in (install-doc): improved install-* targets to use
their base build dependency.
2001-03-29 Mo DeJong <mdejong@redhat.com>
* tests/interp.test: Print out warning when
testinterpdelete command is not defined.
Add tests that checks to make sure a
child interp inherits the parent's cwd.
2001-03-29 Jeff Hobbs <jeffh@activestate.com>
* unix/tclUnixPipe.c (TclpCreateTempFile): prevent potential race
condition and security leak in tmp filename creation.
(max) [Patch #402924]
* unix/configure:
* unix/tcl.m4: corrected IRIX-5.x config to not use -n32.
(english) [Patch #403626]
* unix/tclUnixThrd.c (Tcl_ConditionWait): fixed handling of
timeout for threads (corrects excessive CPU usage issue for Tk on
Unix in threaded Tcl environment). (ruppert) [Bug #411603]
2001-03-26 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* win/tclWinInt.h (tclWinTCharEncoding): Removed as now a static
variable in win/tclWin32Dll.c instead.
2001-03-23 Jeff Hobbs <jeffh@activestate.com>
* generic/tclVar.c (Tcl_ArrayObjCmd): Corrected retrieval of
resultPtr to prevent possible corruption.
* generic/tclNamesp.c (Tcl_Import): Correctly freed a DString.
(lavana) [Patch #403755]
2001-03-14 Don Porter <dgp@users.sourceforge.net>
* library/package.tcl (pkg_mkIndex): Added patch from Vince
Darley to make [pkg_mkIndex -verbose] even more verbose.
[Bug 219349, Patch 403529]
2001-03-13 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclCmdMZ.c (Tcl_StringObjCmd): A missing
{return TCL_OK;} was causing memory corruption. [Bug #408002]
* generic/tclExecute.c (TclDeleteExecEnv, GrowEvaluationStack,
TclExecuteByteCode): Added some casts to ClientData that are
apparently needed on some architectures.
2001-03-02 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclExecute.c (TclExecuteByteCode): Fixed bug that could
pass pointers to freed memory to command implementations, which
most obviously caused some weird behaviour with [info level], but
could have caused problems with user code and command traces too.
[Bug 404865, Patch 405436]
2001-02-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclCmdMZ.c (Tcl_SplitObjCmd): Improved efficiency of
splitting strings into individual characters by adding hash so
that only one Tcl_Obj per character is created. Improves
performance of splitting of short strings and makes a huge
difference to splitting of long strings, such as is done in the
mime package in tcllib. [Bug #131523]
2001-01-30 Don Porter <dgp@users.sourceforge.net>
* generic/tclIO.c (CopyData): Moved code that updates the count
of how many bytes are left to copy. Corrects bug that when
writing occurs in the background, the copy loop could be
escaped without updating the count, causing CopyData() to try
to copy more bytes than the toRead value originally passed to
TclCopyChannel(), leading to hangs and misreporting of number
of bytes copied. [Bug 118203, Patch 103432]
2001-01-04 Don Porter <dgp@users.sourceforge.net>
* tests/unixInit.test:
* unix/tclUnixInit.c (TclpInitLibraryPath):
* win/tclWinInit.c (TclpInitLibraryPath): Several entries in
the library path ($tcl_libPath) are determined relative to the
absolute path of the executable. When the executable is
installed in or near the root directory of the file system,
relative pathnames were being incorrectly generated, and in
the worst case, memory access violations were crashing the program.
[Bug 119416, Patch 102972]
2000-12-14 Don Porter <dgp@users.sourceforge.net>
* generic/tclExecute.c:
* tests/expr-old.test: Re-wrote Tcl's [expr rand()] and
[expr srand($seed)] implementations, fixing a range error
on some 64-bit platforms. Added tests that detect the bug.
The rewrite changes the seed -> sequence map on 64-bit
platforms, only for seed >= 2^31, a slight incompatibility.
[Bug 121072, Patch 102781]
2000-12-10 Don Porter <dgp@users.sourceforge.net>
* library/init.tcl:
* library/msgcat/msgcat.tcl:
* library/msgcat/pkgIndex.tcl:
* library/opt/optparse.tcl:
* library/opt/pkgIndex.tcl: Where [uplevel] is used in a proc
to evaluate a Tcl built-in command in the caller's context,
the built-in commands are now fully namespace-qualified. This
prevents problems when the caller context is in a namespace where
the built-in command name has been used by a command in the
namespace. (For example, [::ns::set] might be called instead
of the intended [::set]). [Bug #119422, Patch #102545]
2000-12-09 jeff hobbs <jhobbs@interwoven.com>
* docs/scan.n:
* tests/scan.test:
* generic/tclScan.c (Tcl_ScanObjCmd): changed %o and %x to use
strtoul instead of strtol to correctly preserve scan<>format
conversion of large integers. [Patch #102663, Bug #124600]
* generic/tclExecute.c (TclExecuteByteCode): Commited patch fixing
handling of {!<boolean>} in expressions. [Patch #102702]
2000-12-08 jeff hobbs <jhobbs@interwoven.com>
* library/init.tcl: Added support for PATHEXT variable in
auto_execok, recognizing the proper set of executable extensions
on Windows. [Patch #102719]
2000-12-08 Andreas Kupries <a.kupries@westend.com>
* generic/tclEncoding.c (LoadTableEncoding): Changed dangerous
code to something less critical. This fixes bug 119417, part A
without affecting the speed when loading encodings.
2000-11-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclExecute.c (TclExecuteByteCode): Logical negation "!"
can now handle string booleans, provided those values are placed
in variables.
* tests/expr.test (expr-13.17): Check that [expr {!$var}] can
negate the string-versions of booleans "yes", "false", etc.
* library/tcltest/tcltest.tcl (getMatchingFiles,
getMatchingDirectories):
* tools/man2html.tcl (doDir):
* tools/man2help.tcl (doDir):
* library/package.tcl (tclPkgUnknown,tclMacPkgSearch):
* library/safe.tcl (AddSubDirs): [glob] uses -directory instead of
unsafe [file join] to fix Bug #123313
* generic/tclIndexObj.c:
* generic/tclTestObj.c (TestindexobjCmd): Changed internal
representation of index objects to fix Bug #119082; fix
shouldn't be visible to outside world...
* generic/tclTest.c (TestGetIndexFromObjStructObjCmd):
* tests/indexObj.test: (indexObj-6.*) Added to test for presence
of Bug #119082.
2000-11-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclCmdIL.c (Tcl_LsortObjCmd): Fixed memory leak from Bug
#119398
* library/init.tcl (unknown): Added specific level parameters to
all uplevel invokations to boost performance; didn't dare touch
the "namespace inscope" stuff though, since it looks sensitive
to me! Should fix Bug #123217, though testing is tricky...
2000-11-16 Andreas Kupries <a.kupries@westend.com>
* win/tclWinPort.h (line 69): Changed reference to winsock2.h into
winsock.h. This was a leftover from a foray into using winsock
version 2 (History lesson from Scott Redman and Jeff
Hobbs). This code was no problem when compiling Tcl itself, but
could trip extensions. Fixes bug 122568.
2000-11-02 David Gravereaux <davygrvy@ajubasolutions.com>
* generic/tclEvent.c: tclLibraryPath Tcl_Obj didn't have a way
to share its data among threads. This caused Tcl_Init() to
always fail in threads. Added a way to pass the data around
with a global char*. [BUG: 5301]
2000-11-02 Jeff Hobbs <hobbs@ajubasolutions.com>
* unix/configure:
* unix/dltest/configure:
* win/configure:
* tools/configure: checked in configure scripts so people doing
CVS checkouts aren't required to have autoconf. Changes to
configure.in in the future will require the corresponding
configure script to also be re-autoconf'ed and checked in.
* win/makefile.vc:
* win/tcl.m4: makefile fixes for Win64 support
* generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): minor cast
changes.
2000-11-01 Jeff Hobbs <hobbs@ajubasolutions.com>
* unix/tcl.m4: removed use of -lbsd and -ldl for AIX-5.
* tests/subst.test: added tests for non-zero return code handling
by subst.
* generic/tclParse.c (Tcl_EvalEx): corrected handling of non-zero,
non-error return code cases for subst. [BUG: 119829]
* generic/tclVar.c (TclVarTraceExists): Corrected excessive mem
use when info exists was called on a non-existent array element.
[BUG: 119213, 119336]
2000-10-30 David Gravereaux <davygrvy@ajubasolutions.com>
* win/configure.in:
* win/Makefile.in:
* win/makefile.vc:
* win/tcl.rc:
* win/tclsh.rc: Added logic to derive filenames better in the resource
scripts based on compile options.
2000-10-30 Jeff Hobbs <hobbs@ajubasolutions.com>
* unix/tclUnixInit.c: added default encoding map from
"ja_JP.eucJP" to "euc-jp". (takahashi)
* tests/clock.test: corrected clock-2.* test numbering
* unix/configure.in (SC_TCL_LINK_LIBS): removed code that was
commented out (it had been moved to tcl.m4's SC_TCL_LINK_LIBS
already).
* unix/tcl.m4: consolidated gettimeofday check for AIX.
2000-10-27 Jeff Hobbs <hobbs@ajubasolutions.com>
* unix/configure.in:
* unix/tcl.m4: added support for AIX-5.
* generic/tclIO.c (Tcl_NotifyChannel): removed #ifdef around code
for old channel structures, placed preserve/release around statePtr
* generic/tclIO.c (CloseChannel): the statePtr for a channel was
not being freed when the last channel in a stack was freed,
causing a mem leak.
* unix/tclUnixChan.c: updated channel types to strict
TCL_CHANNEL_VERSION_2 style to avoid compiler warnings. They work
either way, but this avoids compiler warnings (that worries people).
2000-10-26 David Gravereaux <davygrvy@ajubasolutions.com>
* win/tclWinFile.c (TclpMatchFilesTypes): NULL was being set to
"attr" which was a DWORD. Changed NULL to zero because a 'void *'
can't be set to a DWORD to avoid the compiler warning.
2000-10-20 Jeff Hobbs <hobbs@ajubasolutions.com>
* win/tclWinFile.c (TclpMatchFilesTypes): made the stat call only
occur when necessary (for 'glob' command). Significantly speeds
up glob command from 8.3. [BUG: 6216]
2000-10-06 David Gravereaux <davygrvy@ajubasolutions.com>
* win/tclWinChan.c: moved Win2K bug case test with GetStdHandle()
from TclpGetDefaultStdChannel into Tcl_MakeFileChannel to enable
a more general method in detecting invalid OS handles rather than
just a specific known case. [BUG: 5971]
2000-10-06 Jeff Hobbs <hobbs@ajubasolutions.com>
* tests/cmdAH.test: extra tests for 'file channels' that include
multiple interpreter tests and channel sharing
* generic/tclIO.c (Tcl_GetChannelNamesEx): corrected function (and
consequently 'file channels') to return channels that are actually
registered for this specific interp, rather than this thread.
2000-09-29 Jeff Hobbs <hobbs@scriptics.com>
* win/tclWinSerial.c (SerialGetOptionProc): corrected reporting of
space parity on Windows (Eason) [Bug 6057].
* win/Makefile.in: commented use of TESTFLAGS
* unix/Makefile.in: added TESTFLAGS to test target to
conform with Windows makefile and TEA style.
* tests/stack.test: prevented possible crash on systems with low
default stacksize (Tru64, AIX) in infinite recursion test. A
solution to check remaining stack space in the core is best, but
hard to do in a cross-platform manner.
* generic/tclIOGT.c (FLUSH_DELAY): renamed DELAY define to
FLUSH_DELAY to avoid defn conflict using Tru64's cc.
2000-09-28 Jeff Hobbs <hobbs@ajubasolutions.com>
* tools/tcl.wse.in: added tclPlatDecls.h and tkPlatDecls.h to the
Windows .exe install.
* tests/fCmd.test (fCmd-6.20): corrected test to remove
c:/tcl8975@ after creating it.
* tests/fileName.test: cleaned up the testing of glob patterns for
c:/globTest (Windows) to directly create/remove directory.
2000-09-27 Jeff Hobbs <hobbs@ajubasolutions.com>
* generic/tclIO.c (StopCopy): fixed a bug introduced by a partial
fix in 8.3.2 that didn't set nonBlocking correctly when resetting
the flags for the write side. [Bug: 6261]
***************************************************************
** END OF ASYNC BACKPORT LOG (8.4aCVS 2001-04-03 -> 8.3.3) **
***************************************************************
2000-08-08 Jeff Hobbs <hobbs@ajubasolutions.com>
8.3.2 RELEASE finalized
* changes: updated for release notes version of ChangeLog
* library/msgcat1.0/pkgIndex.tcl:
* library/msgcat1.0/msgcat.tcl: bumped msgcat version to 1.1.
2000-08-07 Jeff Hobbs <hobbs@ajubasolutions.com>
* doc/ChnlStack.3:
* doc/CrtChannel.3: updated the docs to be aware of the
TCL_CHANNEL_VERSION_2 style of Tcl channels.
* generic/tclIO.c (Tcl_CreateChannel): added assertion to verify
that the new channel versioning will be binary compatible with
older channel drivers.
* BACKPORTED FROM 8.4 (HEAD) BRANCH:
* doc/memory.n: Man page for Tcl "memory" command, which is
created when TCL_MEM_DEBUG is defined at compile time.
* doc/TCL_MEM_DEBUG.3: Man page with overall information about
TCL_MEM_DEBUG usage.
* doc/DumpActiveMemory.3: Man page for Tcl_DumpActiveMemory,
Tcl_InitMemory, and Tcl_ValidateAllMemory [Bug: 1816, 1835].
* doc/Init.3: Man page for Tcl_Init [Bug: 1820].
* unix/Makefile.in: add tclsh.ico and tcl.spec to dist target
* unix/mkLinks: Regen'd with new mkLinks.tcl.
* unix/mkLinks.tcl: Fixed indentation, made link setup more
intelligent (only do one existance test per man page, instead of
one per function).
* doc/AddErrInfo.3:
* doc/ChnlStack.3:
* doc/Exit.3:
* doc/GetIndex.3:
* doc/Notifier.3:
* doc/Object.3:
* doc/RegExp.3:
* doc/SetResult.3:
* doc/SplitList.3:
* doc/Thread.3: Added missing entries to NAME section.
* doc/AddErrInfo.3:
* doc/CrtObjCmd.3:
* doc/RecEvalObj.3: Changed Tcl_EvalObj to Tcl_EvalObjEx
* doc/library.n: Added entries for auto_qualify and auto_import
[Bug: 1271].
* doc/library.n: Fixed .SH NAME macro to include each function
documented on the page, so that mkLinks will know about the
functions listed there, and so that the Windows help file index
will get set up correctly [Bug: 1898, 5273].
* doc/expr.n: Added documentation for each of the math library
functions that expr supports [Bug: 1054].
* doc/regsub.n: correct regsub docs [Bug: 5346]
* doc/scan.n: minor doc fixes [Bug: 5396]
* doc/RegExp.3: Replaced instances of "Tcl_GetRegExpInfo" with
"Tcl_RegExpGetInfo", the correct name of the function [Bug: 5901].
* doc/package.n: Corrected information about [package forget]
arguments [Bug: 5418].
* generic/tclCkalloc.c: Fixed some function headers.
* tests/clock.test: Added test for "2 days 2 hours ago" style
specifications.
* generic/tclDate.c: Regenerated from tclGetDate.y.
* generic/tclGetDate.y: Tweaked grammar to properly handle the
"ago" keyword when it follows multiple relative unit specifiers,
as in "2 days 2 hours ago". [Bug: 5497].
* generic/tclClock.c (FormatClock): correct code to handle locale
specific return values from strftime, if any. [Bug: 3345]
* unix/tclUnixInit.c (TclpSetInitialEncodings): attempt to
correct setlocale calls for XIM support and locale issues.
[BUG: 5422 3345 4236 2522 2521]
* library/init.tcl (auto_import): added check to see if a valid
pattern was coming in, to avoid simple error cases [Bug: 3326]
* library/history.tcl: Corrected an off-by-one error in HistIndex,
which was causing [history redo] to start its search at the wrong
event index. [Bug: 1269].
* generic/tclPosixStr.c (Tcl_SignalMsg): clarified #defines for
Linux on Sparc to compile correctly. [Bug: 5364]
* generic/tclEnv.c: cast cleanup [Bug: 5624]
* win/tclWinFCmd.c: cast cleanup [Bug: 5627]
* generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): Corrected
caching of the index ptr to account for offsets != sizeof(char *).
[Bug: 5153]
* tests/opt.test:
* library/opt0.4/optparse.tcl: Applied patch from [Bug: 5922], which
corrected an incorrect use of [string match].
* tests/stringObj.test: Tweaked tests to avoid hardcoded
high-ASCII characters (which will fail in multibyte locales);
instead used \uXXXX syntax. [Bug: 3842].
2000-08-05 Jeff Hobbs <hobbs@scriptics.com>
* generic/tclIOGT.c (TclChannelTransform): fixed segfault that
would occur when transforming a channel with a proc that did not
yet exist. (Kupries)
* generic/tclTest.c (TestChannelCmd): added some lint init'ing of
statePtr and chan vars.
2000-07-28 Mo DeJong <mdejong@redhat.com>
* win/Makefile.in:
* win/configure.in:
* win/tcl.m4:
* win/tclConfig.sh.in: Back port of gcc for windows
build system from 8.4.
2000-07-26 Jeff Hobbs <hobbs@scriptics.com>
* merged core-8-3-1-io-rewrite back into core-8-3-1-branch.
The core-8-3-1-io-rewrite branch should now be considered defunct.
* generic/tclStubInit.c:
* generic/tclDecls.h:
* generic/tcl.decls:
* generic/tcl.h:
* generic/tclIO.c: moved the Tcl_Channel* macros from tcl.h to
tclIO.c and made them proper stubbed functions. These are:
Tcl_ChannelName, Tcl_ChannelVersion, Tcl_ChannelBlockModeProc,
Tcl_ChannelCloseProc, Tcl_ChannelClose2Proc, Tcl_ChannelInputProc,
Tcl_ChannelOutputProc, Tcl_ChannelSeekProc, Tcl_ChannelSetOptionProc,
Tcl_ChannelGetOptionProc, Tcl_ChannelWatchProc,
Tcl_ChannelGetHandleProc, Tcl_ChannelFlushProc,
and Tcl_ChannelHandlerProc. These should be used to access the
Tcl_ChannelType structure instead of direct pointer dereferencing.
* unix/Makefile.in: undid 07-25 Makefile.in changes because we
don't really want to force all private makefiles on everyone.
This needs to be addressed again in the future. Best possible
solution is to create a tcl/ subdir in the installing include dir
(as is done already with the lib dir).
* tests/iogt.test: added RCS string, marked tests 2.* to be
unixOnly due to underlying system differences.
* tests/all.tcl: corrected additional sets by Kupries for testing.
2000-07-25 Brent Welch <welch@ajubasolutions.com>
* unix/Makefile.in: Need to install all the Tcl headers because
Itcl depends on internal headers.
2000-07-25 Andreas Kupries <a.kupries@westend.com>
* tests/iogt.test: (line 866f) New tests iogt-6.[01], highlighting
buffering trouble when stacking and unstacking transformations.
iogt-6.0 is solved, see the changes below. iogt-6.1 remains, for
now, due to the perceived complexity of solutions.
* generic/tclIO.h: (line 139f) struct Channel, added a buffer
queue, to hold data pushed back when stacking a transformation.
* generic/tclIO.c:
(line 91f, line 7434f) New internal function 'CopyBuffer'.
Derived from 'CopyAndTranslateBuffer', with translation
removed.
(line 1025f, line 1212f): Initialization of new queue.
(line 1164f, Tcl_StackChannel): Pushback of input queue.
(line 1293f, Tcl_UnstackChannel): Discard input and pushback.
(line 3748f, Tcl_ReadRaw): Modified to use data in the push back
area before going to the driver. Uses 'CopyBuffer', s.a.
(line 4702f, GetInput): Modified to use data in the push back
area before going to the driver.
(line 4867f, Tcl_Seek): Modified to take pushback of the topmost
channel in a stack into account.
(line 5620f, Tcl_InputBuffered): See above. Added
'Tcl_ChannelBuffered'. Analogue to 'Tcl_InputBuffered' but for
the buffer area in the channel.
* generic/tcl.decls: New public API 'Tcl_ChannelBuffered'. S.a.
2000-07-19 Jeff Hobbs <hobbs@scriptics.com>
* tests/socket.test: removed doTestsWithRemoteServer constraint
from socket-12.*. It requires 'exec', not a remote server.
Cleaned up some coding errors.
2000-07-18 Brent Welch <welch@ajubasolutions.com>
* win/Makefile.in: Added rules for static tcldde and tclreg libraries.
2000-07-17 Jeff Hobbs <hobbs@scriptics.com>
* README:
* win/README:
* win/README.binary:
* win/configure.in:
* unix/configure.in:
* unix/tcl.spec:
* tools/tcl.wse.in:
* generic/tcl.h (TCL_RELEASE_SERIAL): updated to patchlevel 8.3.2
* unix/Makefile.in:
* win/Makefile.in:
* win/makefile.vc: added tclIOGT.c to objects list to compile.
* generic/tclStubInit.c:
* generic/tclIntDecls.h:
* generic/tclInt.decls: commented out internal decls for
TclTestChannelCmd and TclTestChannelEventCmd as they were moved to
tclTest.c. Added new decls for TclChannelEventScriptInvoker and
TclChannelTransform.
* generic/tclIO.h: new file that contains the main internal
structures of Tcl_Channel code to allow for multiple files to
access them.
* generic/tclTest.c:
* generic/tclIO.c: broke into 3 files - tclIO.c core code, tclIO.h
header code, and tclIOGT.c - the giot test code from Kupries. The
channel test code also moved to tclTest.c.
* generic/tclIO.c (CloseChannel): stopped masking out of the
TCL_READABLE|TCL_WRITABLE bits from the state flags in
CloseChannel, instead adding extra intelligence to
CheckChannelErrors with a new CHANNEL_RAW_MODE bit for special
behavior when called from Raw channel APIs.
2000-07-13 Jeff Hobbs <hobbs@scriptics.com>
* generic/tclIO.c (StackSetBlockMode): moved set of chanPtr
outside of blockModeProc check to avoid infinite loop when
blockModeProc was NULL (Kupries). updated TransformSeekProc to
not call Tcl_Seek directly (Kupries).
* win/tclWinChan.c: updated fileChannelType to v2 channel struct
* win/tclWinConsole.c: updated consoleChannelType to v2 channel struct
* win/tclWinPipe.c: updated pipeChannelType to v2 channel struct
* win/tclWinSerial.c: updated serialChannelType to v2 channel struct
* win/tclWinSock.c: updated tcpChannelType to v2 channel struct
2000-07-11 Brent Welch <welch@ajubasolutions.com>
* win/tclConfig.sh.in: Cleaned up unix-specific autoconf variables.
2000-07-11 Jeff Hobbs <hobbs@scriptics.com>
* tests/iogt.test: made tests [345].0 not run by default as they
were failing in the new design, but I'm not convinced that the
returned result isn't correct.
* generic/tclDecls.h:
* generic/tclStubInit.c:
* generic/tcl.decls: added Tcl_GetTopChannel C API that returns
the current top channel of a channel stack. Tcl_GetChannel was
changed earlier to return the bottommost channel of a stack
because that is the one that is guaranteed to stay around the
longest, and this was needed to compensate for certain
operations that want to look at the state of the main channel.
Most channel APIs already compensate for grabbing the top, so it
shouldn't be needed often.
* generic/tclIO.c (Tcl_StackChannel, Tcl_UnstackChannel): Added
flushing of buffers (Kupries), removed use of DownChannel macro,
added Tcl_GetTopChannel public API to get to the top channel of
the channel stack (necessary for TLS). Rewrote Tcl_NotifyChannel
for new channel design (Kupries). Did some code cleanup in the
transform code. tclIO.c must still be broken into bits (separate
out test code and giot code, create tclIO.h).
2000-07-10 Andreas Kupries <a.kupries@westend.com>
* tests/iogt.test: Reverted some earlier changes as a fix by Jeff
revived the original and correct behaviour. IOW, the tests showed
a genuine error and I didn't see it :(.
* generic/tclIO.c (Tcl_Read|Write_Raw): Changed to directly use
the drivers and not DoRead|DoWrite. The latter use the buffering
system, encoding and eol-translation and this wreaks havoc with
the data going through the transformations. Both procedures use
CheckForchannelErrors and let it believe that there is no
background copy in progress or else stacked channels could not
be used for that.
* generic/tclIO.c (TclCopyChannel, CopyData): Moved access to the
topmost channel from the first to the second procedure to make
the decision about that at the last possible time (Callbacks can
change the stacking).
test suite: failures of iogt-[345].0
2000-07-06 Jeff Hobbs <hobbs@scriptics.com>
* tests/iogt.test: new tests for stacked channel stuff based off
new 'testchannel transform|unstack' code (Kupries IOGT extension).
* generic/tcl.decls:
* generic/tcl.h:
* generic/tclDecls.h:
* generic/tclStubsInit.c:
* generic/tclIO.c: complete rewrite of Tcl Channel code for
stacked channels. Channels are now designed to work in a more
stacked fashion with a shared ChannelState data structure.
2000-06-02 Jeff Hobbs <hobbs@scriptics.com>
* generic/tclIO.c (CloseChannel): removed the &ing out of
(TCL_READABLE|TCL_WRITABLE) from the flags, as CloseChannel does
this on the next pass through for the top channel, and it appeared
to be causing hangs by not allowing the final flush.
2000-06-01 Jeff Hobbs <hobbs@scriptics.com>
* generic/tclIO.c (CloseChannel): Rewrote CloseChannel code to
unstack a channel during the close process. Fixed a refcount bug
in Tcl_UnstackChannel. [Bug: 5623]
(CloseChannel): further extended CloseChannel in the stacked case
to effect certain operations on the next channel that would have
been done in Tcl_Close. Also added CHANNEL_CLOSED and removed
(TCL_READABLE|TCL_WRITABLE) bits from chanPtr->flags. Changed
final reset of the WatchProc to check the chanDownPtr's (next)
interestMask.
2000-05-29 Sandeep Tamhankar <sandeep@scriptics.com>
* tests/http.test
* doc/http.n
* library/http2.3/http.tcl: Fixed bug 5741, where unsuccessful
geturl calls sometimes leaked memory and resources (sockets).
Also, switched around some of the logic so that http::wait never
throws an exception. This is because in an asynchronous geturl,
the command callback will probably end up doing all the error
handling anyway, and in an asynchronous situation, the user
expects to check the state when the transaction completes, as
opposed to being thrown an exception. For the http package, this
menas the user can check http::status for "error" and http::error
for the error message after doing the http::wait.
2000-04-26 Jeff Hobbs <hobbs@scriptics.com>
8.3.1 RELEASE
* README:
* mac/README:
|
| ︙ | ︙ |
Changes to README.
1 | README: Tcl | | | | | | | | < | | | | > | > | > | | | | | | | | | | | | < | | | < > | | | | | | < < > | | | | | < < | < < | | | < | < < < < < | < | | < | > | < < < < | | | | | | | | | < < < < < | | | | 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 |
README: Tcl
This is the Tcl 8.3.4 source distribution.
You can get any release of Tcl from:
http://sourceforge.net/project/showfiles.php?group_id=10894
Tcl/Tk is also available through NetCVS:
http://tcl.sourceforge.net/
RCS: @(#) $Id: README,v 1.31.2.3 2001/10/03 20:26:09 hobbs Exp $
Contents
--------
1. Introduction
2. Documentation
3. Compiling and installing Tcl
4. Development tools
5. Tcl newsgroup
6. Tcl contributed archive
7. Tcl Resource Center
8. Mailing lists
9. Support and Training
10. Thank You
1. Introduction
---------------
Tcl provides a powerful platform for creating integration applications that
tie together diverse applications, protocols, devices, and frameworks.
When paired with the Tk toolkit, Tcl provides the fastest and most powerful
way to create GUI applications that run on PCs, Unix, and the Macintosh.
Tcl can also be used for a variety of web-related tasks and for creating
powerful command languages for applications.
Tcl is maintained, enhanced, and distributed freely by the Tcl community.
The home for Tcl/Tk sources and bug/patch database is on SourceForge:
http://tcl.sourceforge.net/
with the Tcl Developer Xchange hosted at:
http://www.tcl-tk.net/
Tcl is a freely available open source package. You can do virtually
anything you like with it, such as modifying it, redistributing it,
and selling it either in whole or in part. See the file
"license.terms" for complete information.
2. Documentation
----------------
Extensive documentation is available at our website.
The home page for this release, including new features, is
http://www.tcl-tk.net/software/tcltk/8.3.html
Detailed release notes can be found at
http://sourceforge.net/project/showfiles.php?group_id=10894
Information about Tcl itself can be found at
http://www.tcl-tk.net/scripting/
There are many Tcl books on the market. Most are listed at
http://www.tcl-tk.net/resource/doc/books/
2a. Unix Documentation
----------------------
The "doc" subdirectory in this release contains a complete set of
reference manual entries for Tcl. Files with extension ".1" are for
programs (for example, tclsh.1); files with extension ".3" are for C
library procedures; and files with extension ".n" describe Tcl
commands. The file "doc/Tcl.n" gives a quick summary of the Tcl
language syntax. To print any of the man pages on Unix, cd to the
"doc" directory and invoke your favorite variant of troff using the
normal -man macros, for example
ditroff -man Tcl.n
to print Tcl.n. If Tcl has been installed correctly and your "man" program
supports it, you should be able to access the Tcl manual entries using the
normal "man" mechanisms, such as
man Tcl
2b. Windows Documentation
-------------------------
The "doc" subdirectory in this release contains a complete set of Windows
help files for Tcl. Once you install this Tcl release, a shortcut to the
Windows help Tcl documentation will appear in the "Start" menu:
Start | Programs | Tcl | Tcl Help
3. Compiling and installing Tcl
-------------------------------
There are brief notes in the unix/README, win/README, and mac/README about
compiling on these different platforms. There is additional information
about building Tcl from sources at
http://www.tcl-tk.net/doc/howto/compile.html
4. TclPro Development tools
---------------------------
A high quality set of commercial quality development tools is available to
accelerate your Tcl application development. The TclPro product provides a
debugger, static code checker, packaging utility, and bytecode compiler.
TclPro was open-sourced when Scriptics/Ajuba was acquired by Interwoven.
Visit its home at SourceForge for more information and source/binaries:
http://tclpro.sourceforge.net/
5. Tcl newsgroup
----------------
There is a network news group "comp.lang.tcl" intended for the exchange of
information about Tcl, Tk, and related applications. The newsgroup is a
great place to ask general information questions. For bug reports, please
see the "Support and bug fixes" section below.
6. Tcl contributed archive
--------------------------
Many people have created exciting packages and applications based on Tcl
and/or Tk and made them freely available to the Tcl community. An archive
of these contributions is kept on the machine ftp.neosoft.com. You
can access the archive using anonymous FTP; the Tcl contributed archive is
in the directory "/pub/tcl". The archive also contains several FAQ
("frequently asked questions") documents that provide solutions to problems
that are commonly encountered by TCL newcomers.
7. Tcl Resource Center
----------------------
Visit http://www.tcl-tk.net/resource/ to see an annotated index of
many Tcl resources available on the World Wide Web. This includes
papers, books, and FAQs, as well as development tools, extensions,
applications, binary releases, and patches. You can also recommend
additional URLs for the resource center using the forms labeled "Add a
Resource".
8. Mailing lists
----------------
Several mailing lists are hosted at SourceForge to discuss development or
use issues (like Macintosh and Windows topics). For more information and
to subscribe, visit:
http://sourceforge.net/projects/tcl/
and go to the Mailing Lists page.
9. Support and Training
------------------------
We are very interested in receiving bug reports, patches, and suggestions
for improvements. We prefer that you send this information to us via the
bug form at SourceForge, rather than emailing us directly. The bug
database is at:
http://tcl.sourceforge.net/
The bug form was designed to give uniform structure to bug reports as
well as to solicit enough information to minimize followup questions.
We will log and follow-up on each bug, although we cannot promise a
specific turn-around time. Enhancements may take longer and may not happen
at all unless there is widespread support for them (we're trying to slow
the rate at which Tcl/Tk turns into a kitchen sink). It's very difficult
to make incompatible changes to Tcl/Tk at this point, due to the size of
the installed base.
The Tcl community is too large for us to provide much individual support
for users. If you need help we suggest that you post questions to
comp.lang.tcl. We read the newsgroup and will attempt to answer esoteric
questions for which no-one else is likely to know the answer. In addition,
see the following Web site for links to other organizations that offer
Tcl/Tk training:
http://www.tcl-tk.net/resource/community/commercial/training
10. Thank You
-------------
We'd like to express our thanks to the Tcl community for all the
helpful suggestions, bug reports, and patches we have received.
Tcl/Tk has improved vastly and will continue to do so with your help.
|
Changes to changes.
1 2 | Recent user-visible changes to Tcl: | | | 1 2 3 4 5 6 7 8 9 10 | Recent user-visible changes to Tcl: RCS: @(#) $Id: changes,v 1.56.2.7 2002/02/19 08:29:05 dgp Exp $ 1. No more [command1] [command2] construct for grouping multiple commands on a single command line. 2. Semi-colon now available for grouping commands on a line. 3. For a command to span multiple lines, must now use backslash-return |
| ︙ | ︙ | |||
4869 4870 4871 4872 4873 4874 4875 | 2000-04-23 (bug fix) several Mac socket fixes (ingham) 2000-04-24 (bug fix) fixed hang in threaded Unix case when backgrounded exec process was running (dejong) --- Released 8.3.1, April 26, 2000 --- See ChangeLog for details --- | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
2000-04-23 (bug fix) several Mac socket fixes (ingham)
2000-04-24 (bug fix) fixed hang in threaded Unix case when backgrounded
exec process was running (dejong)
--- Released 8.3.1, April 26, 2000 --- See ChangeLog for details ---
2000-05-29 (bug fix) corrected resource cleanup in http error cases.
Improved handling of error cases in http. (tamhankar)
2000-07 (feature rewrite) complete rewrite of the Tcl IO channel subsystem
to correct problems (hangs, core dumps) with the initial stacked channel
implementation. The new system has many more tests for robustness and
scalability. There are new C APIs (see Tcl_CreateChannel), but only
stacked channel drivers are affected (ie: TLS, Trf, iogt). The iogt
extension has been added to the core test code to test the system.
(hobbs, kupries)
**** POTENTIAL INCOMPATABILITY ****
2000-07 (build improvements) cleanup of the makefiles and configure scripts
to correct support for building under gcc for Windows. (dejong)
2000-08-07 (bug fix) corrected sizeof error in Tcl_GetIndexFromObjStruct.
(perkins)
2000-08-07 (bug fix) correct off-by-one error in HistIndex, which was
causing [history redo] to start its search at the wrong event index. (melski)
2000-08-07 (bug fix) corrected setlocale calls for XIM support and locale
issues in startup. (takahashi)
2000-08-07 (bug fix) correct code to handle locale specific return values
from strftime, if any. (wagner)
2000-08-07 (bug fix) tweaked grammar to properly handle the "ago" keyword
when it follows multiple relative unit specifiers, as in
"2 days 2 hours ago". (melski)
2000-08-07 (doc fixes) numerous doc fixes to correct SEE ALSO and NAME
sections. (english)
2000-08-07 (bug fix) new man pages memory.n, TCL_MEM_DEBUG.3, Init.3 and
DumpActiveMemory.3. (melski)
--- Released 8.3.2, August 9, 2000 --- See ChangeLog for details ---
2000-09-27 (bug fix) fixed a bug introduced by a partial fix in 8.3.2 that
didn't set nonBlocking correctly when resetting the flags for the write
side (mem leak) Correct mem leak in channels when statePtr was released
(hobbs)
2000-09-29 (bug fix) corrected reporting of space parity on Windows (Eason)
2000-10-06 (bug fix) corrected [file channels] to only return channels in
the current interpreter (hobbs)
2000-10-20 (feature enhancement) call stat only when necessary in 'glob' to
speed up command significantly in base cases (hobbs)
2000-11-01 (mem leak) Corrected excessive mem use of info exists on a
non-existent array element (hobbs)
2000-11-02 (bug fix) Corrected sharing of tclLibraryPath in threaded
environment (gravereaux)
2000-11-23 (mem leak) fixed potential memory leak in error case of lsort
(fellows)
2000-12-09 (feature enhancement) changed %o and %x to use strtoul instead
of strtol to correctly preserve scan<>format conversion of large integers
(hobbs)
Fixed handling of {!<boolean>} in expressions (hobbs, fellows)
2000-12-14 (feature enhancement) improved (s)rand for 64-bit platforms
(porter)
2001-01-04 (bug fix) corrected parsing of $tcl_libPath at startup on
Windows (porter)
2001-01-30 (bug fix) Fixed possible hangs in fcopy. (porter)
2001-02-15 (feature enhancement) improved efficiency of [string split]
(fellows)
2001-03-13 (bug fix) Correctly possible memory corruption in string map {}
$str (fellows)
2001-03-29 (bug fix) prevent potential race condition and security leak in
tmp filename creation on Unix. (max)
Fixed handling of timeout for threads (corrects excessive CPU usage issue
for Tk on Unix in threaded Tcl environment). (ruppert)
2001-03-30 (bug fix) corrected Windows memory error on exit (wu)
Fixed race condition in readability of socket on Windows.
2001-04-03 (doc fixes) numerous doc corrections and clarifications.
Update of READMEs.
2001-04-04 (build improvements) redid Mac build structure (steffen)
Corrected IRIX-5* configure (english). Added support for AIX-5 (hobbs).
Added support for Win64 (hobbs).
--- Released 8.3.3, April 6, 2001 --- See ChangeLog for details ---
2001-06-27 (bug fix) corrected backslash substitution of non-ASCII characters.
(hobbs, riefenstahl)
2001-07-02 (bug fix) corrected [concat] treatment of UTF-8 strings (hobbs,
barras)
2001-07-16 (bug fix) corrected thread-enabled pipe closing on Windows
(hobbs, jsmith)
2001-07-18 (bug fix) corrected memory overwrite error when buffer size
of a channel is changed after channel use has already begun (kupries, porter)
2001-08-06 (bug fix) corrected object reference counting in [gets] (jikamens)
2001-08-06 (new feature) added GNU (HURD) configuration target. (brinkmann)
2001-08-07 (bug fix) corrected bytecode stack management during [break]
(see test foreach-5.5) (sofer, tallneil, jstrot)
2001-08-08 (new features) updated packages msgcat 1.1.1, opt 0.4.3,
tcltest 1.0.1, dependencies checked (porter)
2001-08-20 (new feature) http 2.3.2: include port number in Host: header
to comply with HTTP/1.1 spec (RFC 2068) (hobbs, tils)
2001-08-23 (new feature) added QNX-6 build support (loverso)
2001-08-23 (bug fix) corrected handling of spaces in path name passed to
[exec] on Windows (kenpoole)
2001-08-24 (bug fix) corrected [package forget] stopping on non-existent
package (porter)
2001-08-24 (bug fix) corrected construction of script library search path
relative to executable (porter)
2001-08-24 (bug fix) [auto_import] now matches patterns like
[namespace import], not like [string match] (porter)
**** POTENTIAL INCOMPATABILITY ****
2001-08-27 (new feature) added Tcl_SetMainLoop() to enable loading Tk as a
true package (hobbs)
2001-08-30 (bug fix) build support for Crays (andreasen)
2001-09-01 (bug fix) rewrite of Tcl_Async* APIs to better manage thread
cleanup (gravereaux)
2001-09-06 (new feature) http 2.4: honor the Content-encoding and charset
parameters; add -binary switch for forcing the issue (hobbs, saoukhi, orwell)
2001-09-06 (speed improvement) rewrite of file I/O flush management on
Windows. Approximately 100x speedup for some operations. (kupries, traum)
2001-09-10 (bug fix) corrected finalization error in TclInExit (darley)
2001-09-10 (bug fix) protect against alias loops (hobbs)
2001-09-12 (bug fix) added missing #include in tclLoadShl.c (techentin)
2001-09-12 (bug fix) script library path construction on Windows no longer
uses registry, nor adds the current working directory to the path (porter)
2001-09-12 (bug fix) correct bugs in compatibility strtod() (porter)
2001-09-13 (bug fix) Tcl_UtfPrev now returns the proper location when the
middle of a UTF-8 byte is passed in (hobbs)
2001-09-19 (bug fix) [format] and [scan] corrected for 64-bit machines (rmax)
2001-09-19 (new feature) --enable-64-bit support for HP-11. (hobbs)
2001-09-19 (new feature) native memory allocator now default on Windows
(hobbs)
2001-09-20 (new feature) WIN64 support and extra processor definitions
(hobbs, mstacy)
2001-09-26 (bug fix) corrected potential deadlock in channels that do not
provide a BlockModeProc (kupries, kogorman)
2001-10-03 (new feature) WIN64 build support (hobbs)
2001-10-03 (bug fix) correction in thread finalization (rbrunner)
2001-10-04 (new feature) updated encodings with latest mappings from
www.unicode.org (hobbs)
2001-10-11 (bug fix) corrected cleanup of self-referential bytecodes at
interpreter deletion (sofer, rbrunner)
2001-10-16 (new feature) config support for MacOSX / Darwin (steffen)
2001-10-16 (new feature, Mac) change in binary extension format from MachO
bundles to standard .dylib dynamic libraries like on other unices.
**POTENTIAL INCOMPATIBILITY***
2001-10-18 (bug fix) corrected off-by-one-day error in clock scan with
relative months and years during swing hours. (lavana)
--- Released 8.3.4, October 19, 2001 --- See ChangeLog for details ---
2001-11-06 (bug fix)[478856] loss of fileevents due to short reads (kupries)
2001-11-09 (bug fix)[480176] [global] mishandled varnames matching :* (porter)
2001-11-19 (bug fix)[478847] overflows in [time] of >2**31 microseconds (kenny)
2001-11-29 (bug fix)[231259] failure to re-compile after cmd shadowing (sofer)
2001-12-10 (bug fix)[490514] doc fixes (porter,english)
2001-12-21 (new feature) MaxOSX / Darwin support (steffen)
2001-12-28 (bug fix) proper case in [auto_execok] use of $env(COMPSPEC) (hobbs)
2002-01-17 (bug fix)[504642] Tcl_Obj refCounts in [gets] (griffen,kupries)
2002-01-21 (bug fix)[506297] infinite loop writing in iso2022-jap encoding
(forssen,kupries)
2002-01-24 (HTTP server bug workaround)[504508] leave the default port out
of the Host: header value
=> http 2.4.1 (hobbs)
2002-01-25 (new feature)[496733] socket options -eofchar and -translation
return read-only values (dejong)
2002-02-05 (bug fix) [http::error] called when [::error] intended
=> http 2.4.2 (porter)
2002-02-05 (bug fix)[465765] avoid zero-byte writes to STREAMs (talcott,kupries)
2002-02-06 (bug fix)[495213] [scan] accept 0x as prefix of base 16 value (hobbs)
|
Changes to compat/strftime.c.
1 2 3 4 5 6 7 8 9 10 | /* * strftime.c -- * * This file contains a modified version of the BSD 4.4 strftime * function. * * This file is a modified version of the strftime.c file from the BSD 4.4 * source. See the copyright notice below for details on redistribution * restrictions. The "license.terms" file does not apply to this file. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * strftime.c -- * * This file contains a modified version of the BSD 4.4 strftime * function. * * This file is a modified version of the strftime.c file from the BSD 4.4 * source. See the copyright notice below for details on redistribution * restrictions. The "license.terms" file does not apply to this file. * * RCS: @(#) $Id: strftime.c,v 1.7.2.1 2001/10/17 19:29:24 das Exp $ */ /* * Copyright (c) 1989 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without |
| ︙ | ︙ | |||
41 42 43 44 45 46 47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #if defined(LIBC_SCCS) | | | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #if defined(LIBC_SCCS) static char *rcsid = "$Id: strftime.c,v 1.7.2.1 2001/10/17 19:29:24 das Exp $"; #endif /* LIBC_SCCS */ #include <time.h> #include <string.h> #include <locale.h> #include "tclInt.h" #include "tclPort.h" |
| ︙ | ︙ | |||
320 321 322 323 324 325 326 | 2, '0')) return(0); continue; case 'Y': if (!_conv((t->tm_year + TM_YEAR_BASE), 4, '0')) return(0); continue; | < < | 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 |
2, '0'))
return(0);
continue;
case 'Y':
if (!_conv((t->tm_year + TM_YEAR_BASE), 4, '0'))
return(0);
continue;
case 'Z': {
char *name = TclpGetTZName(t->tm_isdst);
if (name && !_add(name)) {
return 0;
}
continue;
}
case '%':
/*
* X311J/88-090 (4.12.3.5): if conversion char is
* undefined, behavior is undefined. Print out the
* character itself as printf(3) does.
*/
default:
|
| ︙ | ︙ |
Changes to compat/string.h.
1 2 3 4 5 6 7 8 9 10 11 | /* * string.h -- * * Declarations of ANSI C library procedures for string handling. * * Copyright (c) 1991-1993 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * string.h -- * * Declarations of ANSI C library procedures for string handling. * * Copyright (c) 1991-1993 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: string.h,v 1.3.12.1 2001/04/03 22:54:36 hobbs Exp $ */ #ifndef _STRING #define _STRING #include <tcl.h> |
| ︙ | ︙ | |||
55 56 57 58 59 60 61 | CONST char *s2, size_t n)); extern char * strncat _ANSI_ARGS_((char *dst, CONST char *src, size_t numChars)); extern int strncmp _ANSI_ARGS_((CONST char *s1, CONST char *s2, size_t nChars)); extern char * strncpy _ANSI_ARGS_((char *dst, CONST char *src, size_t numChars)); | | > | | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | CONST char *s2, size_t n)); extern char * strncat _ANSI_ARGS_((char *dst, CONST char *src, size_t numChars)); extern int strncmp _ANSI_ARGS_((CONST char *s1, CONST char *s2, size_t nChars)); extern char * strncpy _ANSI_ARGS_((char *dst, CONST char *src, size_t numChars)); extern char * strpbrk _ANSI_ARGS_((CONST char *string, CONST char *chars)); extern char * strrchr _ANSI_ARGS_((CONST char *string, int c)); extern size_t strspn _ANSI_ARGS_((CONST char *string, CONST char *chars)); extern char * strstr _ANSI_ARGS_((CONST char *string, CONST char *substring)); extern char * strtok _ANSI_ARGS_((char *s, CONST char *delim)); #endif /* _STRING */ |
Changes to compat/strtod.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * strtod.c -- * * Source code for the "strtod" library procedure. * * Copyright (c) 1988-1993 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > | 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 | /* * strtod.c -- * * Source code for the "strtod" library procedure. * * Copyright (c) 1988-1993 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: strtod.c,v 1.2.18.1 2001/09/12 21:26:36 dgp Exp $ */ #include "tcl.h" #ifdef NO_STDLIB_H # include "../compat/stdlib.h" #else # include <stdlib.h> #endif #include <ctype.h> #include "tclPort.h" #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #ifndef NULL #define NULL 0 |
| ︙ | ︙ | |||
201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
expSign = TRUE;
p += 1;
} else {
if (*p == '+') {
p += 1;
}
expSign = FALSE;
}
while (isdigit(*p)) {
exp = exp * 10 + (*p - '0');
p += 1;
}
}
if (expSign) {
| > > > > | 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
expSign = TRUE;
p += 1;
} else {
if (*p == '+') {
p += 1;
}
expSign = FALSE;
}
if (!isdigit(*p)) {
p = pExp;
goto done;
}
while (isdigit(*p)) {
exp = exp * 10 + (*p - '0');
p += 1;
}
}
if (expSign) {
|
| ︙ | ︙ | |||
228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
expSign = TRUE;
exp = -exp;
} else {
expSign = FALSE;
}
if (exp > maxExponent) {
exp = maxExponent;
}
dblExp = 1.0;
for (d = powersOf10; exp != 0; exp >>= 1, d += 1) {
if (exp & 01) {
dblExp *= *d;
}
}
| > | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
expSign = TRUE;
exp = -exp;
} else {
expSign = FALSE;
}
if (exp > maxExponent) {
exp = maxExponent;
errno = ERANGE;
}
dblExp = 1.0;
for (d = powersOf10; exp != 0; exp >>= 1, d += 1) {
if (exp & 01) {
dblExp *= *d;
}
}
|
| ︙ | ︙ |
Changes to doc/Access.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1998-1999 Scriptics Corportation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1998-1999 Scriptics Corportation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Access.3,v 1.3.12.1 2001/12/10 16:01:42 dgp Exp $ '\" .so man.macros .TH Tcl_Access 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_Access, Tcl_Stat \- check file permissions and other attributes .SH SYNOPSIS |
| ︙ | ︙ | |||
64 65 66 67 68 69 70 | time. .PP If \fIpath\fR exists, \fBTcl_Stat\fR returns 0 and the stat structure is filled with data. Otherwise, -1 is returned, and no stat info is given. .SH KEYWORDS | | | 64 65 66 67 68 69 70 71 | time. .PP If \fIpath\fR exists, \fBTcl_Stat\fR returns 0 and the stat structure is filled with data. Otherwise, -1 is returned, and no stat info is given. .SH KEYWORDS stat, access |
Changes to doc/AddErrInfo.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: AddErrInfo.3,v 1.4.2.1 2000/08/07 21:29:36 hobbs Exp $ '\" .so man.macros .TH Tcl_AddErrorInfo 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_AddObjErrorInfo, Tcl_AddErrorInfo, Tcl_SetObjErrorCode, Tcl_SetErrorCode, Tcl_SetErrorCodeVA, Tcl_PosixError, Tcl_LogCommandInfo \- record information about errors .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp \fBTcl_AddObjErrorInfo\fR(\fIinterp, message, length\fR) .sp \fBTcl_AddErrorInfo\fR(\fIinterp, message\fR) |
| ︙ | ︙ | |||
78 79 80 81 82 83 84 | and additional elements in \fBerrorCode\fR hold additional pieces of information that depend on the class. See the Tcl overview manual entry for details on the various formats for \fBerrorCode\fR. .PP The \fBerrorInfo\fR variable is gradually built up as an error unwinds through the nested operations. | | | | | | 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 | and additional elements in \fBerrorCode\fR hold additional pieces of information that depend on the class. See the Tcl overview manual entry for details on the various formats for \fBerrorCode\fR. .PP The \fBerrorInfo\fR variable is gradually built up as an error unwinds through the nested operations. Each time an error code is returned to \fBTcl_EvalObjEx\fR (or \fBTcl_Eval\fR, which calls \fBTcl_EvalObjEx\fR) it calls the procedure \fBTcl_AddObjErrorInfo\fR to add additional text to \fBerrorInfo\fR describing the command that was being executed when the error occurred. By the time the error has been passed all the way back to the application, it will contain a complete trace of the activity in progress when the error occurred. .PP It is sometimes useful to add additional information to \fBerrorInfo\fR beyond what can be supplied automatically by \fBTcl_EvalObjEx\fR. \fBTcl_AddObjErrorInfo\fR may be used for this purpose: its \fImessage\fR and \fIlength\fR arguments describe an additional string to be appended to \fBerrorInfo\fR. For example, the \fBsource\fR command calls \fBTcl_AddObjErrorInfo\fR to record the name of the file being processed and the line number on which the error occurred; for Tcl procedures, the procedure name and line number within the procedure are recorded, and so on. The best time to call \fBTcl_AddObjErrorInfo\fR is just after \fBTcl_EvalObjEx\fR has returned \fBTCL_ERROR\fR. In calling \fBTcl_AddObjErrorInfo\fR, you may find it useful to use the \fBerrorLine\fR field of the interpreter (see the \fBTcl_Interp\fR manual entry for details). .PP \fBTcl_AddErrorInfo\fR resembles \fBTcl_AddObjErrorInfo\fR but differs in initializing \fBerrorInfo\fR from the string value of the interpreter's result |
| ︙ | ︙ |
Changes to doc/Async.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Async.3,v 1.4.2.1 2001/09/01 22:53:45 davygrvy Exp $ '\" .so man.macros .TH Tcl_AsyncCreate 3 7.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_AsyncCreate, Tcl_AsyncMark, Tcl_AsyncInvoke, Tcl_AsyncDelete, Tcl_AsyncReady \- handle asynchronous events .SH SYNOPSIS |
| ︙ | ︙ | |||
56 57 58 59 60 61 62 63 64 65 66 67 68 69 | interpreter may already be in the middle of evaluating a script; it may not even be safe to allocate memory, since a memory allocation could have been in progress when the event occurred. The only safe approach is to set a flag indicating that the event occurred, then handle the event later when the world has returned to a clean state, such as after the current Tcl command completes. .PP \fBTcl_AsyncCreate\fR creates an asynchronous handler and returns a token for it. The asynchronous handler must be created before any occurrences of the asynchronous event that it is intended to handle (it is not safe to create a handler at the time of an event). When an asynchronous event occurs the code that detects the event | > > > > > > > | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | interpreter may already be in the middle of evaluating a script; it may not even be safe to allocate memory, since a memory allocation could have been in progress when the event occurred. The only safe approach is to set a flag indicating that the event occurred, then handle the event later when the world has returned to a clean state, such as after the current Tcl command completes. .PP \fBTcl_AsyncCreate\fR, \fBTcl_AsyncDelete\fR, and \fBTcl_AsyncReady\fR are thread sensitive. They access and/or set a thread-specific data structure in the event of an --enable-thread built core. The token created by Tcl_AsyncCreate contains the needed thread information it was called from so that calling Tcl_AsyncMark(token) will only yield the origin thread into the AsyncProc. .PP \fBTcl_AsyncCreate\fR creates an asynchronous handler and returns a token for it. The asynchronous handler must be created before any occurrences of the asynchronous event that it is intended to handle (it is not safe to create a handler at the time of an event). When an asynchronous event occurs the code that detects the event |
| ︙ | ︙ |
Changes to doc/ChnlStack.3.
1 | '\" | | | | | | | 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 | '\" '\" Copyright (c) 1999-2000 Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: ChnlStack.3,v 1.1.10.2 2000/08/08 00:57:52 hobbs Exp $ .so man.macros .TH Tcl_StackChannel 3 8.3 Tcl "Tcl Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Tcl_StackChannel, Tcl_UnstackChannel, Tcl_GetStackedChannel \- stack an I/O channel on top of another, and undo it .SH SYNOPSIS .nf .nf \fB#include <tcl.h>\fR .sp Tcl_Channel \fBTcl_StackChannel\fR(\fIinterp, typePtr, clientData, mask, channel\fR) .sp int \fBTcl_UnstackChannel\fR(\fIinterp, channel\fR) .sp Tcl_Channel \fBTcl_GetStackedChannel\fR(\fIchannel\fR) .sp .SH ARGUMENTS .AS Tcl_ChannelType |
| ︙ | ︙ | |||
39 40 41 42 43 44 45 | This can be a subset of the operations currently allowed on \fIchannel\fP. .AP Tcl_Channel channel in An existing Tcl channel such as returned by \fBTcl_CreateChannel\fR. .BE .SH DESCRIPTION .PP | | | | < | > | | | | | < < < < < < < < < < < < < | | > | < > > > > | < < | | | < | | | | | | | < | | < | > > | 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 | This can be a subset of the operations currently allowed on \fIchannel\fP. .AP Tcl_Channel channel in An existing Tcl channel such as returned by \fBTcl_CreateChannel\fR. .BE .SH DESCRIPTION .PP These functions are for use by extensions that add processing layers to Tcl I/O channels. Examples include compression and encryption modules. These functions transparently stack and unstack a new channel on top of an existing one. Any number of channels can be stacked together. .PP The implementation of the Tcl channel code was rewritten in 8.3.2 to correct some problems with the previous implementation with regard to stacked channels. Anyone using stacked channels or creating stacked channel drivers should update to the new \fBTCL_CHANNEL_VERSION_2\fR \fBTcl_ChannelType\fR structure. See \fBTcl_CreateChannel\fR for details. .PP \fBTcl_StackChannel\fR stacks a new \fIchannel\fP on an existing channel with the same name that was registered for \fIchannel\fP by \fBTcl_RegisterChannel\fP. .PP \fBTcl_StackChannel\fR works by creating a new channel structure and placing itself on top of the channel stack. EOL translation, encoding and buffering options are shared between all channels in the stack. The hidden channel does no buffering, newline translations, or character set encoding. Instead, the buffering, newline translations, and encoding functions all remain at the top of the channel stack. A pointer to the new top channel structure is returned. If an error occurs when stacking the channel, NULL is returned instead. .PP The \fImask\fP parameter specifies the operations that are allowed on the new channel. These can be a subset of the operations allowed on the original channel. For example, a read-write channel may become read-only after the \fBTcl_StackChannel\fR call. .PP Closing a channel closes the channels stacked below it. The close of stacked channels is executed in a way that allows buffered data to be properly flushed. .PP \fBTcl_UnstackChannel\fP reverses the process. The old channel is associated with the channel name, and the processing module added by \fBTcl_StackChannel\fR is destroyed. If there is no old channel, then \fBTcl_UnstackChannel\fP is equivalent to \fBTcl_Close\fP. If an error occurs unstacking the channel, \fBTCL_ERROR\fR is returned, otherwise \fBTCL_OK\fR is returned. .SH "SEE ALSO" Notifier(3), Tcl_CreateChannel(3), Tcl_OpenFileChannel(3), vwait(n). .SH KEYWORDS channel, compression |
Changes to doc/CrtChannel.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | > | | | < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < < | 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 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" Copyright (c) 1997-2000 Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: CrtChannel.3,v 1.5.2.2 2001/04/03 22:06:43 hobbs Exp $ .so man.macros .TH Tcl_CreateChannel 3 8.3 Tcl "Tcl Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Tcl_CreateChannel, Tcl_GetChannelInstanceData, Tcl_GetChannelType, Tcl_GetChannelName, Tcl_GetChannelHandle, Tcl_GetChannelMode, Tcl_GetChannelBufferSize, Tcl_SetChannelBufferSize, Tcl_NotifyChannel, Tcl_BadChannelOption, Tcl_ChannelName, Tcl_ChannelVersion, Tcl_ChannelBlockModeProc, Tcl_ChannelCloseProc, Tcl_ChannelClose2Proc, Tcl_ChannelInputProc, Tcl_ChannelOutputProc, Tcl_ChannelSeekProc, Tcl_ChannelSetOptionProc, Tcl_ChannelGetOptionProc, Tcl_ChannelWatchProc, Tcl_ChannelGetHandleProc, Tcl_ChannelFlushProc, Tcl_ChannelHandlerProc, \- procedures for creating and manipulating channels .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp Tcl_Channel \fBTcl_CreateChannel\fR(\fItypePtr, channelName, instanceData, mask\fR) .sp ClientData \fBTcl_GetChannelInstanceData\fR(\fIchannel\fR) .sp Tcl_ChannelType * \fBTcl_GetChannelType\fR(\fIchannel\fR) .sp char * \fBTcl_GetChannelName\fR(\fIchannel\fR) .sp int \fBTcl_GetChannelHandle\fR(\fIchannel, direction, handlePtr\fR) .sp int \fBTcl_GetChannelBufferSize\fR(\fIchannel\fR) .sp \fBTcl_SetChannelBufferSize\fR(\fIchannel, size\fR) .sp \fBTcl_NotifyChannel\fR(\fIchannel, mask\fR) .sp int \fBTcl_BadChannelOption\fR(\fIinterp, optionName, optionList\fR) .VS 8.3.2 .sp char * \fBTcl_ChannelName\fR(\fItypePtr\fR) .sp Tcl_ChannelTypeVersion \fBTcl_ChannelVersion\fR(\fItypePtr\fR) .sp Tcl_DriverBlockModeProc * \fBTcl_ChannelBlockModeProc\fR(\fItypePtr\fR) .sp Tcl_DriverCloseProc * \fBTcl_ChannelCloseProc\fR(\fItypePtr\fR) .sp Tcl_DriverClose2Proc * \fBTcl_ChannelClose2Proc\fR(\fItypePtr\fR) .sp Tcl_DriverInputProc * \fBTcl_ChannelInputProc\fR(\fItypePtr\fR) .sp Tcl_DriverOutputProc * \fBTcl_ChannelOutputProc\fR(\fItypePtr\fR) .sp Tcl_DriverSeekProc * \fBTcl_ChannelSeekProc\fR(\fItypePtr\fR) .sp Tcl_DriverSetOptionProc * \fBTcl_ChannelSetOptionProc\fR(\fItypePtr\fR) .sp Tcl_DriverGetOptionProc * \fBTcl_ChannelGetOptionProc\fR(\fItypePtr\fR) .sp Tcl_DriverWatchProc * \fBTcl_ChannelWatchProc\fR(\fItypePtr\fR) .sp Tcl_DriverGetHandleProc * \fBTcl_ChannelGetHandleProc\fR(\fItypePtr\fR) .sp Tcl_DriverFlushProc * \fBTcl_ChannelFlushProc\fR(\fItypePtr\fR) .sp Tcl_DriverHandlerProc * \fBTcl_ChannelHandlerProc\fR(\fItypePtr\fR) .VE .sp .SH ARGUMENTS .AS Tcl_EolTranslation *channelName in .AP Tcl_ChannelType *typePtr in Points to a structure containing the addresses of procedures that can be called to perform I/O and other functions on the channel. .AP char *channelName in The name of this channel, such as \fBfile3\fR; must not be in use by any other channel. Can be NULL, in which case the channel is created without a name. .AP ClientData instanceData in Arbitrary one-word value to be associated with this channel. This value is passed to procedures in \fItypePtr\fR when they are invoked. .AP int mask in OR-ed combination of \fBTCL_READABLE\fR and \fBTCL_WRITABLE\fR to indicate whether a channel is readable and writable. .AP Tcl_Channel channel in The channel to operate on. .AP int direction in \fBTCL_READABLE\fR means the input handle is wanted; \fBTCL_WRITABLE\fR means the output handle is wanted. .AP ClientData *handlePtr out Points to the location where the desired OS-specific handle should be stored. .AP Tcl_EolTranslation transMode in The translation mode; one of the constants \fBTCL_TRANSLATE_AUTO\fR, \fBTCL_TRANSLATE_CR\fR, \fBTCL_TRANSLATE_LF\fR and \fBTCL_TRANSLATE_CRLF\fR. .AP int size in The size, in bytes, of buffers to allocate in this channel. .AP int mask in An OR-ed combination of \fBTCL_READABLE\fR, \fBTCL_WRITABLE\fR and \fBTCL_EXCEPTION\fR that indicates events that have occurred on this channel. .AP Tcl_Interp *interp in Current interpreter. (can be NULL) .AP char *optionName in Name of the invalid option. .AP char *optionList in Specific options list (space separated words, without "-") to append to the standard generic options list. Can be NULL for generic options error message only. .BE .SH DESCRIPTION .PP Tcl uses a two-layered channel architecture. It provides a generic upper layer to enable C and Tcl programs to perform input and output using the |
| ︙ | ︙ | |||
147 148 149 150 151 152 153 | the same as the \fItypePtr\fR argument in the call to \fBTcl_CreateChannel\fR that created this channel. .PP \fBTcl_GetChannelName\fR returns a string containing the name associated with the channel, or NULL if the \fIchannelName\fR argument to \fBTcl_CreateChannel\fR was NULL. .PP | < < < < < < | > > | < > | > > > < < < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
the same as the \fItypePtr\fR argument in the call to
\fBTcl_CreateChannel\fR that created this channel.
.PP
\fBTcl_GetChannelName\fR returns a string containing the name associated
with the channel, or NULL if the \fIchannelName\fR argument to
\fBTcl_CreateChannel\fR was NULL.
.PP
\fBTcl_GetChannelHandle\fR places the OS-specific device handle
associated with \fIchannel\fR for the given \fIdirection\fR in the
location specified by \fIhandlePtr\fR and returns \fBTCL_OK\fR. If
the channel does not have a device handle for the specified direction,
then \fBTCL_ERROR\fR is returned instead. Different channel drivers
will return different types of handle. Refer to the manual entries
for each driver to determine what type of handle is returned.
.PP
\fBTcl_GetChannelMode\fR returns an OR-ed combination of \fBTCL_READABLE\fR
and \fBTCL_WRITABLE\fR, indicating whether the channel is open for input
and output.
.PP
\fBTcl_GetChannelBufferSize\fR returns the size, in bytes, of buffers
allocated to store input or output in \fIchan\fR. If the value was not set
by a previous call to \fBTcl_SetChannelBufferSize\fR, described below, then
the default value of 4096 is returned.
.PP
\fBTcl_SetChannelBufferSize\fR sets the size, in bytes, of buffers that
will be allocated in subsequent operations on the channel to store input or
output. The \fIsize\fR argument should be between ten and one million,
allowing buffers of ten bytes to one million bytes. If \fIsize\fR is
outside this range, \fBTcl_SetChannelBufferSize\fR sets the buffer size to
4096.
.PP
\fBTcl_NotifyChannel\fR is called by a channel driver to indicate to
the generic layer that the events specified by \fImask\fR have
occurred on the channel. Channel drivers are responsible for invoking
this function whenever the channel handlers need to be called for the
channel. See \fBWATCHPROC\fR below for more details.
.PP
\fBTcl_BadChannelOption\fR is called from driver specific set or get option
procs to generate a complete error message.
.SH TCL_CHANNELTYPE
.PP
A channel driver provides a \fBTcl_ChannelType\fR structure that contains
pointers to functions that implement the various operations on a channel;
these operations are invoked as needed by the generic layer. The structure
was versioned starting in Tcl 8.3.2/8.4 to correct a problem with stacked
channel drivers. See the \fBOLD_CHANNEL\fR section below for details about
the old structure.
.PP
The \fBTcl_ChannelType\fR structure contains the following fields:
.CS
typedef struct Tcl_ChannelType {
char *\fItypeName\fR;
Tcl_ChannelTypeVersion \fIversion\fR;
Tcl_DriverCloseProc *\fIcloseProc\fR;
Tcl_DriverInputProc *\fIinputProc\fR;
Tcl_DriverOutputProc *\fIoutputProc\fR;
Tcl_DriverSeekProc *\fIseekProc\fR;
Tcl_DriverSetOptionProc *\fIsetOptionProc\fR;
Tcl_DriverGetOptionProc *\fIgetOptionProc\fR;
Tcl_DriverWatchProc *\fIwatchProc\fR;
Tcl_DriverGetHandleProc *\fIgetHandleProc\fR;
Tcl_DriverClose2Proc *\fIclose2Proc\fR;
Tcl_DriverBlockModeProc *\fIblockModeProc\fR;
Tcl_DriverFlushProc *\fIflushProc\fR;
Tcl_DriverHandlerProc *\fIhandlerProc\fR;
} Tcl_ChannelType;
.CE
.PP
The driver must provide implementations for all functions except
\fIblockModeProc\fR, \fIseekProc\fR, \fIsetOptionProc\fR,
\fIgetOptionProc\fR, and \fIclose2Proc\fR, which may be specified as
NULL. Other functions that can not be implemented for this type of
device should return \fBEINVAL\fR when invoked to indicate that they
are not implemented, except in the case of \fIflushProc\fR and
\fIhandlerProc\fR, which should specified as NULL if not otherwise defined.
.PP
.VS 8.3.2
The user should only use the above structure for \fBTcl_ChannelType\fR
instantiation. When referencing fields in a \fBTcl_ChannelType\fR
structure, the following functions should be used to obtain the values:
\fBTcl_ChannelName\fR, \fBTcl_ChannelVersion\fR,
\fBTcl_ChannelBlockModeProc\fR, \fBTcl_ChannelCloseProc\fR,
\fBTcl_ChannelClose2Proc\fR, \fBTcl_ChannelInputProc\fR,
\fBTcl_ChannelOutputProc\fR, \fBTcl_ChannelSeekProc\fR,
\fBTcl_ChannelSetOptionProc\fR, \fBTcl_ChannelGetOptionProc\fR,
\fBTcl_ChannelWatchProc\fR, \fBTcl_ChannelGetHandleProc\fR,
\fBTcl_ChannelFlushProc\fR, or \fBTcl_ChannelHandlerProc\fR.
.PP
The change to the structures was made in such a way that standard channel
types are binary compatible. However, channel types that use stacked
channels (ie: TLS, Trf) have new versions to correspond to the above change
since the previous code for stacked channels had problems.
.VE
.SH TYPENAME
.PP
The \fItypeName\fR field contains a null-terminated string that
identifies the type of the device implemented by this driver, e.g.
\fBfile\fR or \fBsocket\fR.
.PP
.VS 8.3.2
This value can be retrieved with \fBTcl_ChannelName\fR, which returns
a pointer to the string.
.VE
.VS 8.3.2
.SH VERSION
.PP
The \fIversion\fR field should be set to \fBTCL_CHANNEL_VERSION_2\fR.
If it is not set to this value \fBTCL_CHANNEL_VERSION_2\fR, then this
\fBTcl_ChannelType\fR is assumed to have the older structure. See
\fBOLD_CHANNEL\fR for more details. While Tcl will recognize and
function with either structure, stacked channels must be of the newer
style to function correctly.
.PP
This value can be retrieved with \fBTcl_ChannelVersion\fR, which returns
either \fBTCL_CHANNEL_VERSION_2\fR or \fBTCL_CHANNEL_VERSION_1\fR.
.VE
.SH BLOCKMODEPROC
.PP
The \fIblockModeProc\fR field contains the address of a function called by
the generic layer to set blocking and nonblocking mode on the device.
\fIBlockModeProc\fR should match the following prototype:
.PP
|
| ︙ | ︙ | |||
251 252 253 254 255 256 257 258 259 260 261 262 263 264 | .PP If the operation is successful, the function can modify the supplied \fIinstanceData\fR to record that the channel entered blocking or nonblocking mode and to implement the blocking or nonblocking behavior. For some device types, the blocking and nonblocking behavior can be implemented by the underlying operating system; for other device types, the behavior must be emulated in the channel driver. .SH "CLOSEPROC AND CLOSE2PROC" .PP The \fIcloseProc\fR field contains the address of a function called by the generic layer to clean up driver-related information when the channel is closed. \fICloseProc\fR must match the following prototype: .PP | > > > > > | 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | .PP If the operation is successful, the function can modify the supplied \fIinstanceData\fR to record that the channel entered blocking or nonblocking mode and to implement the blocking or nonblocking behavior. For some device types, the blocking and nonblocking behavior can be implemented by the underlying operating system; for other device types, the behavior must be emulated in the channel driver. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelBlockModeProc\fR, which returns a pointer to the function. .VE .SH "CLOSEPROC AND CLOSE2PROC" .PP The \fIcloseProc\fR field contains the address of a function called by the generic layer to clean up driver-related information when the channel is closed. \fICloseProc\fR must match the following prototype: .PP |
| ︙ | ︙ | |||
275 276 277 278 279 280 281 | output will have been flushed to the device before this function is called, and no further driver operations will be invoked on this instance after calling the \fIcloseProc\fR. If the close operation is successful, the procedure should return zero; otherwise it should return a nonzero POSIX error code. In addition, if an error occurs and \fIinterp\fR is not NULL, the procedure should store an error message in the interpreter's result. .PP | < | 351 352 353 354 355 356 357 358 359 360 361 362 363 364 | output will have been flushed to the device before this function is called, and no further driver operations will be invoked on this instance after calling the \fIcloseProc\fR. If the close operation is successful, the procedure should return zero; otherwise it should return a nonzero POSIX error code. In addition, if an error occurs and \fIinterp\fR is not NULL, the procedure should store an error message in the interpreter's result. .PP Alternatively, channels that support closing the read and write sides independently may set \fIcloseProc\fR to \fBTCL_CLOSE2PROC\fR and set \fIclose2Proc\fR to the address of a function that matches the following prototype: .PP .CS typedef int Tcl_DriverClose2Proc( |
| ︙ | ︙ | |||
302 303 304 305 306 307 308 309 310 311 312 313 314 315 | described above for \fIcloseProc\fR. No further operations will be invoked on this instance after \fIclose2Proc\fR is called with all flags cleared. In all cases, the \fIclose2Proc\fR function should return zero if the close operation was successful; otherwise it should return a nonzero POSIX error code. In addition, if an error occurs and \fIinterp\fR is not NULL, the procedure should store an error message in the interpreter's result. .VE .SH INPUTPROC .PP The \fIinputProc\fR field contains the address of a function called by the generic layer to read data from the file or device and store it in an internal buffer. \fIInputProc\fR must match the following prototype: | > > > > > | 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | described above for \fIcloseProc\fR. No further operations will be invoked on this instance after \fIclose2Proc\fR is called with all flags cleared. In all cases, the \fIclose2Proc\fR function should return zero if the close operation was successful; otherwise it should return a nonzero POSIX error code. In addition, if an error occurs and \fIinterp\fR is not NULL, the procedure should store an error message in the interpreter's result. .PP .VS 8.3.2 These value can be retrieved with \fBTcl_ChannelCloseProc\fR or \fBTcl_ChannelClose2Proc\fR, which returns a pointer to the respective function. .VE .SH INPUTPROC .PP The \fIinputProc\fR field contains the address of a function called by the generic layer to read data from the file or device and store it in an internal buffer. \fIInputProc\fR must match the following prototype: |
| ︙ | ︙ | |||
345 346 347 348 349 350 351 352 353 354 355 356 357 358 | return without blocking. If the input device has no data available whatsoever and the channel is in nonblocking mode, the function should return an \fBEAGAIN\fR error. If the input device has no data available whatsoever and the channel is in blocking mode, the function should block for the shortest possible time until at least one byte of data can be read from the device; then, it should return as much data as it can read without blocking. .SH OUTPUTPROC .PP The \fIoutputProc\fR field contains the address of a function called by the generic layer to transfer data from an internal buffer to the output device. \fIOutputProc\fR must match the following prototype: .PP | > > > > > | 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 | return without blocking. If the input device has no data available whatsoever and the channel is in nonblocking mode, the function should return an \fBEAGAIN\fR error. If the input device has no data available whatsoever and the channel is in blocking mode, the function should block for the shortest possible time until at least one byte of data can be read from the device; then, it should return as much data as it can read without blocking. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelInputProc\fR, which returns a pointer to the function. .VE .SH OUTPUTPROC .PP The \fIoutputProc\fR field contains the address of a function called by the generic layer to transfer data from an internal buffer to the output device. \fIOutputProc\fR must match the following prototype: .PP |
| ︙ | ︙ | |||
381 382 383 384 385 386 387 388 389 390 391 392 393 394 | less in some cases such as if the output operation is interrupted by a signal. If an error occurs the function should return -1. In case of error, some data may have been written to the device. .PP If the channel is nonblocking and the output device is unable to absorb any data whatsoever, the function should return -1 with an \fBEAGAIN\fR error without writing any data. .SH SEEKPROC .PP The \fIseekProc\fR field contains the address of a function called by the generic layer to move the access point at which subsequent input or output operations will be applied. \fISeekProc\fR must match the following prototype: | > > > > > | 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 | less in some cases such as if the output operation is interrupted by a signal. If an error occurs the function should return -1. In case of error, some data may have been written to the device. .PP If the channel is nonblocking and the output device is unable to absorb any data whatsoever, the function should return -1 with an \fBEAGAIN\fR error without writing any data. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelOutputProc\fR, which returns a pointer to the function. .VE .SH SEEKPROC .PP The \fIseekProc\fR field contains the address of a function called by the generic layer to move the access point at which subsequent input or output operations will be applied. \fISeekProc\fR must match the following prototype: |
| ︙ | ︙ | |||
410 411 412 413 414 415 416 417 418 419 420 421 422 423 | the generic layer for returning \fBerrno\fR values from the function. The function should set this variable to a POSIX error code if an error occurs. The function should store an \fBEINVAL\fR error code if the channel type does not implement seeking. .PP The return value is the new access point or -1 in case of error. If an error occurred, the function should not move the access point. .SH SETOPTIONPROC .PP The \fIsetOptionProc\fR field contains the address of a function called by the generic layer to set a channel type specific option on a channel. \fIsetOptionProc\fR must match the following prototype: .PP | > > > > > | 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 | the generic layer for returning \fBerrno\fR values from the function. The function should set this variable to a POSIX error code if an error occurs. The function should store an \fBEINVAL\fR error code if the channel type does not implement seeking. .PP The return value is the new access point or -1 in case of error. If an error occurred, the function should not move the access point. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelSeekProc\fR, which returns a pointer to the function. .VE .SH SETOPTIONPROC .PP The \fIsetOptionProc\fR field contains the address of a function called by the generic layer to set a channel type specific option on a channel. \fIsetOptionProc\fR must match the following prototype: .PP |
| ︙ | ︙ | |||
440 441 442 443 444 445 446 | each channel type and the \fIsetOptionProc\fR procedure of the channel driver will get called to implement them. The \fIsetOptionProc\fR field can be NULL, which indicates that this channel type supports no type specific options. .PP If the option value is successfully modified to the new value, the function returns \fBTCL_OK\fR. | < < > > > > > < < < < > > > > > < < < > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | 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 | each channel type and the \fIsetOptionProc\fR procedure of the channel driver will get called to implement them. The \fIsetOptionProc\fR field can be NULL, which indicates that this channel type supports no type specific options. .PP If the option value is successfully modified to the new value, the function returns \fBTCL_OK\fR. It should call \fBTcl_BadChannelOption\fR which itself returns \fBTCL_ERROR\fR if the \fIoptionName\fR is unrecognized. If \fIoptionValue\fR specifies a value for the option that is not supported or if a system call error occurs, the function should leave an error message in the \fIresult\fR field of \fIinterp\fR if \fIinterp\fR is not NULL. The function should also call \fBTcl_SetErrno\fR to store an appropriate POSIX error code. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelSetOptionProc\fR, which returns a pointer to the function. .VE .SH GETOPTIONPROC .PP The \fIgetOptionProc\fR field contains the address of a function called by the generic layer to get the value of a channel type specific option on a channel. \fIgetOptionProc\fR must match the following prototype: .PP .CS typedef int Tcl_DriverGetOptionProc( ClientData \fIinstanceData\fR, Tcl_Interp *\fIinterp\fR, char *\fIoptionName\fR, Tcl_DString *\fIdsPtr\fR); .CE .PP \fIOptionName\fR is the name of an option supported by this type of channel. If the option name is not NULL, the function stores its current value, as a string, in the Tcl dynamic string \fIdsPtr\fR. If \fIoptionName\fR is NULL, the function stores in \fIdsPtr\fR an alternating list of all supported options and their current values. On success, the function returns \fBTCL_OK\fR. It should call \fBTcl_BadChannelOption\fR which itself returns \fBTCL_ERROR\fR if the \fIoptionName\fR is unrecognized. If a system call error occurs, the function should leave an error message in the \fIresult\fR field of \fIinterp\fR if \fIinterp\fR is not NULL. The function should also call \fBTcl_SetErrno\fR to store an appropriate POSIX error code. .PP Some options are handled by the generic code and this function is never called to retrieve their value, e.g. \fB-blockmode\fR. Other options are specific to each channel type and the \fIgetOptionProc\fR procedure of the channel driver will get called to implement them. The \fIgetOptionProc\fR field can be NULL, which indicates that this channel type supports no type specific options. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelGetOptionProc\fR, which returns a pointer to the function. .VE .SH WATCHPROC .PP The \fIwatchProc\fR field contains the address of a function called by the generic layer to initialize the event notification mechanism to notice events of interest on this channel. \fIWatchProc\fR should match the following prototype: .PP .CS typedef void Tcl_DriverWatchProc( ClientData \fIinstanceData\fR, int \fImask\fR); .CE .PP The \fIinstanceData\fR is the same as the value passed to \fBTcl_CreateChannel\fR when this channel was created. The \fImask\fR argument is an OR-ed combination of \fBTCL_READABLE\fR, \fBTCL_WRITABLE\fR and \fBTCL_EXCEPTION\fR; it indicates events the caller is interested in noticing on this channel. .PP The function should initialize device type specific mechanisms to notice when an event of interest is present on the channel. When one or more of the designated events occurs on the channel, the channel driver is responsible for calling \fBTcl_NotifyChannel\fR to inform the generic channel module. The driver should take care not to starve other channel drivers or sources of callbacks by invoking Tcl_NotifyChannel too frequently. Fairness can be insured by using the Tcl event queue to allow the channel event to be scheduled in sequence with other events. See the description of \fBTcl_QueueEvent\fR for details on how to queue an event. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelWatchProc\fR, which returns a pointer to the function. .VE .SH GETHANDLEPROC .PP The \fIgetHandleProc\fR field contains the address of a function called by the generic layer to retrieve a device-specific handle from the channel. \fIGetHandleProc\fR should match the following prototype: .PP .CS typedef int Tcl_DriverGetHandleProc( ClientData \fIinstanceData\fR, int \fIdirection\fR, ClientData *\fIhandlePtr\fR); .CE .PP \fIInstanceData\fR is the same as the value passed to \fBTcl_CreateChannel\fR when this channel was created. The \fIdirection\fR argument is either \fBTCL_READABLE\fR to retrieve the handle used for input, or \fBTCL_WRITABLE\fR to retrieve the handle used for output. .PP If the channel implementation has device-specific handles, the function should retrieve the appropriate handle associated with the channel, according the \fIdirection\fR argument. The handle should be stored in the location referred to by \fIhandlePtr\fR, and \fBTCL_OK\fR should be returned. If the channel is not open for the specified direction, or if the channel implementation does not use device handles, the function should return \fBTCL_ERROR\fR. .PP .VS 8.3.2 This value can be retrieved with \fBTcl_ChannelGetHandleProc\fR, which returns a pointer to the function. .VE .VS 8.3.2 .SH FLUSHPROC .PP The \fIflushProc\fR field is currently reserved for future use. It should be set to NULL. \fIFlushProc\fR should match the following prototype: .PP .CS typedef int Tcl_DriverFlushProc( ClientData \fIinstanceData\fR); .CE .PP This value can be retrieved with \fBTcl_ChannelFlushProc\fR, which returns a pointer to the function. .SH HANDLERPROC .PP The \fIhandlerProc\fR field contains the address of a function called by the generic layer to notify the channel that an event occured. It should be defined for stacked channel drivers that wish to be notified of events that occur on the underlying (stacked) channel. \fIHandlerProc\fR should match the following prototype: .PP .CS typedef int Tcl_DriverHandlerProc( ClientData \fIinstanceData\fR, int \fIinterestMask\fR); .CE .PP \fIInstanceData\fR is the same as the value passed to \fBTcl_CreateChannel\fR when this channel was created. The \fIinterestMask\fR is an OR-ed combination of \fBTCL_READABLE\fR or \fBTCL_WRITABLE\fR; it indicates what type of event occured on this channel. .PP This value can be retrieved with \fBTcl_ChannelHandlerProc\fR, which returns a pointer to the function. .VE .SH TCL_BADCHANNELOPTION .PP This procedure generates a "bad option" error message in an (optional) interpreter. It is used by channel drivers when a invalid Set/Get option is requested. Its purpose is to concatenate the generic options list to the specific ones and factorize the generic options error message string. |
| ︙ | ︙ | |||
575 576 577 578 579 580 581 |
<...generic options...>+<...specific options...>
so you get for instance:
bad option "-blah": should be one of -blocking,
-buffering, -buffersize, -eofchar, -translation,
-peername, or -sockname
when called with optionList="peername sockname"
.CE
| | | | > > > > > > > > > > > > > > > > > > > > > > > > > > | | 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 |
<...generic options...>+<...specific options...>
so you get for instance:
bad option "-blah": should be one of -blocking,
-buffering, -buffersize, -eofchar, -translation,
-peername, or -sockname
when called with optionList="peername sockname"
.CE
``blah'' is the optionName argument and ``<specific options>''
is a space separated list of specific option words.
The function takes good care of inserting minus signs before
each option, commas after, and an ``or'' before the last option.
.SH OLD_CHANNEL
The original (8.3.1 and below) \fBTcl_ChannelType\fR structure contains
the following fields:
.PP
.CS
typedef struct Tcl_ChannelType {
char *\fItypeName\fR;
Tcl_DriverBlockModeProc *\fIblockModeProc\fR;
Tcl_DriverCloseProc *\fIcloseProc\fR;
Tcl_DriverInputProc *\fIinputProc\fR;
Tcl_DriverOutputProc *\fIoutputProc\fR;
Tcl_DriverSeekProc *\fIseekProc\fR;
Tcl_DriverSetOptionProc *\fIsetOptionProc\fR;
Tcl_DriverGetOptionProc *\fIgetOptionProc\fR;
Tcl_DriverWatchProc *\fIwatchProc\fR;
Tcl_DriverGetHandleProc *\fIgetHandleProc\fR;
Tcl_DriverClose2Proc *\fIclose2Proc\fR;
} Tcl_ChannelType;
.CE
.PP
It is still possible to create channel with the above structure. The
internal channel code will determine the version. It is imperative to use
the new \fBTcl_ChannelType\fR structure if you are creating a stacked
channel driver, due to problems with the earlier stacked channel
implementation (in 8.2.0 to 8.3.1).
.SH "SEE ALSO"
Tcl_Close(3), Tcl_OpenFileChannel(3), Tcl_SetErrno(3), Tcl_QueueEvent(3), Tcl_StackChannel(3)
.SH KEYWORDS
blocking, channel driver, channel registration, channel type, nonblocking
|
Changes to doc/CrtObjCmd.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: CrtObjCmd.3,v 1.3.12.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Tcl_CreateObjCommand 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_CreateObjCommand, Tcl_DeleteCommand, Tcl_DeleteCommandFromToken, Tcl_GetCommandInfo, Tcl_SetCommandInfo, Tcl_GetCommandName \- implement new commands in C .SH SYNOPSIS |
| ︙ | ︙ | |||
55 56 57 58 59 60 61 | Tcl command. .BE .SH DESCRIPTION .PP \fBTcl_CreateObjCommand\fR defines a new command in \fIinterp\fR and associates it with procedure \fIproc\fR such that whenever \fIname\fR is | | | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | Tcl command. .BE .SH DESCRIPTION .PP \fBTcl_CreateObjCommand\fR defines a new command in \fIinterp\fR and associates it with procedure \fIproc\fR such that whenever \fIname\fR is invoked as a Tcl command (e.g., via a call to \fBTcl_EvalObjEx\fR) the Tcl interpreter will call \fIproc\fR to process the command. .PP \fBTcl_CreateObjCommand\fR deletes any existing command \fIname\fR already associated with the interpreter (however see below for an exception where the existing command is not deleted). It returns a token that may be used to refer |
| ︙ | ︙ | |||
116 117 118 119 120 121 122 | return \fBTCL_OK\fR or \fBTCL_ERROR\fR. In addition, if \fIproc\fR needs to return a non-empty result, it can call \fBTcl_SetObjResult\fR to set the interpreter's result. In the case of a \fBTCL_OK\fR return code this gives the result of the command, and in the case of \fBTCL_ERROR\fR this gives an error message. Before invoking a command procedure, | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | return \fBTCL_OK\fR or \fBTCL_ERROR\fR. In addition, if \fIproc\fR needs to return a non-empty result, it can call \fBTcl_SetObjResult\fR to set the interpreter's result. In the case of a \fBTCL_OK\fR return code this gives the result of the command, and in the case of \fBTCL_ERROR\fR this gives an error message. Before invoking a command procedure, \fBTcl_EvalObjEx\fR sets interpreter's result to point to an object representing an empty string, so simple commands can return an empty result by doing nothing at all. .PP The contents of the \fIobjv\fR array belong to Tcl and are not guaranteed to persist once \fIproc\fR returns: \fIproc\fR should not modify them. Call \fBTcl_SetObjResult\fR if you want |
| ︙ | ︙ | |||
248 249 250 251 252 253 254 | was created, then \fBTcl_GetCommandName\fR returns the current name. This name does not include any \fB::\fR namespace qualifiers. The command corresponding to \fItoken\fR must not have been deleted. The string returned by \fBTcl_GetCommandName\fR is in dynamic memory owned by Tcl and is only guaranteed to retain its value as long as the command isn't deleted or renamed; callers should copy the string if they need to keep it for a long time. | < | 248 249 250 251 252 253 254 255 256 257 258 259 260 | was created, then \fBTcl_GetCommandName\fR returns the current name. This name does not include any \fB::\fR namespace qualifiers. The command corresponding to \fItoken\fR must not have been deleted. The string returned by \fBTcl_GetCommandName\fR is in dynamic memory owned by Tcl and is only guaranteed to retain its value as long as the command isn't deleted or renamed; callers should copy the string if they need to keep it for a long time. .SH "SEE ALSO" Tcl_CreateCommand, Tcl_ResetResult, Tcl_SetObjResult .SH KEYWORDS bind, command, create, delete, namespace, object |
Changes to doc/CrtSlave.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: CrtSlave.3,v 1.3.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_CreateSlave 3 7.6 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_IsSafe, Tcl_MakeSafe, Tcl_CreateSlave, Tcl_GetSlave, Tcl_GetMaster, Tcl_GetInterpPath, Tcl_CreateAlias, Tcl_CreateAliasObj, Tcl_GetAlias, Tcl_GetAliasObj, Tcl_ExposeCommand, Tcl_HideCommand \- manage multiple Tcl interpreters, aliases and hidden commands. .SH SYNOPSIS |
| ︙ | ︙ | |||
216 217 218 219 220 221 222 | If a hidden command whose name is \fIhiddenCmdName\fR already exists, the operation also returns \fBTCL_ERROR\fR and the \fIresult\fR field in \fIinterp\fR contains an error message. If the operation succeeds, it returns \fBTCL_OK\fR. After executing this command, attempts to use \fIcmdName\fR in a call to \fBTcl_Eval\fR or with the Tcl \fBeval\fR command will fail. .PP | < > > | 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | If a hidden command whose name is \fIhiddenCmdName\fR already exists, the operation also returns \fBTCL_ERROR\fR and the \fIresult\fR field in \fIinterp\fR contains an error message. If the operation succeeds, it returns \fBTCL_OK\fR. After executing this command, attempts to use \fIcmdName\fR in a call to \fBTcl_Eval\fR or with the Tcl \fBeval\fR command will fail. .PP For a description of the Tcl interface to multiple interpreters, see \fIinterp(n)\fR. .SH "SEE ALSO" interp .SH KEYWORDS alias, command, exposed commands, hidden commands, interpreter, invoke, master, slave, |
Changes to doc/DString.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: DString.3,v 1.5.2.1 2001/12/10 16:01:43 dgp Exp $ '\" .so man.macros .TH Tcl_DString 3 7.4 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_DStringInit, Tcl_DStringAppend, Tcl_DStringAppendElement, Tcl_DStringStartSublist, Tcl_DStringEndSublist, Tcl_DStringLength, Tcl_DStringValue, Tcl_DStringSetLength, Tcl_DStringTrunc, Tcl_DStringFree, Tcl_DStringResult, Tcl_DStringGetResult \- manipulate dynamic strings .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp \fBTcl_DStringInit\fR(\fIdsPtr\fR) .sp char * |
| ︙ | ︙ |
Changes to doc/DetachPids.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | > > > > > > > > > > < | 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 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: DetachPids.3,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_DetachPids 3 "" Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_DetachPids, Tcl_ReapDetachedProcs, Tcl_WaitPid \- manage child processes in background .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp \fBTcl_DetachPids\fR(\fInumPids, pidPtr\fR) .sp \fBTcl_ReapDetachedProcs\fR() .sp Tcl_Pid \fBTcl_WaitPid\fR(\fIpid, statPtr, options\fR) .SH ARGUMENTS .AS int *statusPtr .AP int numPids in Number of process ids contained in the array pointed to by \fIpidPtr\fR. .AP int *pidPtr in Address of array containing \fInumPids\fR process ids. .AP Tcl_Pid pid in The id of the process (pipe) to wait for. .AP int* statPtr out The result of waiting on a process (pipe). Either 0 or ECHILD. .AP int options The options controlling the wait. WNOHANG specifies not to wait when checking the process. .BE .SH DESCRIPTION .PP \fBTcl_DetachPids\fR and \fBTcl_ReapDetachedProcs\fR provide a mechanism for managing subprocesses that are running in background. These procedures are needed because the parent of a process must eventually invoke the \fBwaitpid\fR kernel call (or one of a few other similar kernel calls) to wait for the child to exit. Until the |
| ︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 | Tcl automatically calls \fBTcl_ReapDetachedProcs\fR each time the \fBexec\fR command is executed, so in most cases it isn't necessary for any code outside of Tcl to invoke \fBTcl_ReapDetachedProcs\fR. However, if you call \fBTcl_DetachPids\fR in situations where the \fBexec\fR command may never get executed, you may wish to call \fBTcl_ReapDetachedProcs\fR from time to time so that background processes can be cleaned up. .SH KEYWORDS background, child, detach, process, wait | > > > > > > | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | Tcl automatically calls \fBTcl_ReapDetachedProcs\fR each time the \fBexec\fR command is executed, so in most cases it isn't necessary for any code outside of Tcl to invoke \fBTcl_ReapDetachedProcs\fR. However, if you call \fBTcl_DetachPids\fR in situations where the \fBexec\fR command may never get executed, you may wish to call \fBTcl_ReapDetachedProcs\fR from time to time so that background processes can be cleaned up. .PP \fBTcl_WaitPid\fR is a thin wrapper around the facilities provided by the operating system to wait on the end of a spawned process and to check a whether spawned process is still running. It is used by \fBTcl_ReapDetachedProcs\fR and the channel system to portably access the operating system. .SH KEYWORDS background, child, detach, process, wait |
Changes to doc/Encoding.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1997-1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | '\" '\" Copyright (c) 1997-1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Encoding.3,v 1.7.2.1 2001/08/28 00:08:40 hobbs Exp $ '\" .so man.macros .TH Tcl_GetEncoding 3 "8.1" Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_GetEncoding, Tcl_FreeEncoding, Tcl_ExternalToUtfDString, Tcl_ExternalToUtf, Tcl_UtfToExternalDString, Tcl_UtfToExternal, Tcl_WinTCharToUtf, Tcl_WinUtfToTChar, Tcl_GetEncodingName, Tcl_SetSystemEncoding, Tcl_GetEncodingNames, Tcl_CreateEncoding, Tcl_GetDefaultEncodingDir, Tcl_SetDefaultEncodingDir \- procedures for creating and using encodings. .SH SYNOPSIS .nf \fB#include <tcl.h>\fR \fB#include <tclPlatDecls.h>\fR \fI/* Tcl_Win* functions only */\fR .sp Tcl_Encoding \fBTcl_GetEncoding\fR(\fIinterp, name\fR) .sp void \fBTcl_FreeEncoding\fR(\fIencoding\fR) .sp |
| ︙ | ︙ |
Changes to doc/Eval.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Eval.3,v 1.6.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_Eval 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_EvalObjEx, Tcl_EvalFile, Tcl_EvalObjv, Tcl_Eval, Tcl_EvalEx, Tcl_GlobalEval, Tcl_GlobalEvalObj, Tcl_VarEval, Tcl_VarEvalVA \- execute Tcl scripts .SH SYNOPSIS |
| ︙ | ︙ | |||
62 63 64 65 66 67 68 | Points to an array of pointers to objects; each object holds the value of a single word in the command to execute. .AP int numBytes in The number of bytes in \fIscript\fR, not including any null terminating character. If \-1, then all characters up to the first null byte are used. .AP char *script in | | | | | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | Points to an array of pointers to objects; each object holds the value of a single word in the command to execute. .AP int numBytes in The number of bytes in \fIscript\fR, not including any null terminating character. If \-1, then all characters up to the first null byte are used. .AP char *script in Points to first byte of script to execute (NULL terminated and UTF-8). This script must be in writable memory: temporary modifications are made to it during parsing. .AP char *string in String forming part of a Tcl script. .AP va_list argList in An argument list which must have been initialised using \fBTCL_VARARGS_START\fR, and cleared using \fBva_end\fR. .BE |
| ︙ | ︙ | |||
106 107 108 109 110 111 112 | script. The \fIobjc\fR and \fIobjv\fR arguments contain the values of the words for the Tcl command, one word in each object in \fIobjv\fR. \fBTcl_EvalObjv\fR evaluates the command and returns a completion code and result just like \fBTcl_EvalObjEx\fR. .PP \fBTcl_Eval\fR is similar to \fBTcl_EvalObjEx\fR except that the script to be executed is supplied as a string instead of an object and no compilation | > > > | | | | | | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | script. The \fIobjc\fR and \fIobjv\fR arguments contain the values of the words for the Tcl command, one word in each object in \fIobjv\fR. \fBTcl_EvalObjv\fR evaluates the command and returns a completion code and result just like \fBTcl_EvalObjEx\fR. .PP \fBTcl_Eval\fR is similar to \fBTcl_EvalObjEx\fR except that the script to be executed is supplied as a string instead of an object and no compilation occurs. The string should be a proper UTF-8 string as converted by \fBTcl_ExternalToUtfDString\fR or \fBTcl_ExternalToUtf\fR when it is known to possibly contain upper ascii characters who's possible combinations might be a UTF-8 special code. The string is parsed and executed directly (using \fBTcl_EvalObjv\fR) instead of compiling it and executing the bytecodes. In situations where it is known that the script will never be executed again, \fBTcl_Eval\fR may be faster than \fBTcl_EvalObjEx\fR. \fBTcl_Eval\fR returns a completion code and result just like \fBTcl_EvalObjEx\fR. Note: for backward compatibility with versions before Tcl 8.0, \fBTcl_Eval\fR copies the object result in \fIinterp\fR to \fIinterp->result\fR (use is deprecated) where it can be accessed directly. This makes \fBTcl_Eval\fR somewhat slower than \fBTcl_EvalEx\fR, which doesn't do the copy. .PP \fBTcl_EvalEx\fR is an extended version of \fBTcl_Eval\fR that takes |
| ︙ | ︙ |
Changes to doc/Exit.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Exit.3,v 1.3.12.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Tcl_Exit 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_Exit, Tcl_Finalize, Tcl_CreateExitHandler, Tcl_DeleteExitHandler, Tcl_ExitThread, Tcl_FinalizeThread, Tcl_CreateThreadExitHandler, Tcl_DeleteThreadExitHandler \- end the application or thread (and invoke exit handlers) .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp \fBTcl_Exit\fR(\fIstatus\fR) .sp \fBTcl_Finalize\fR() |
| ︙ | ︙ |
Changes to doc/ExprLong.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: ExprLong.3,v 1.3.2.1 2001/12/10 16:01:43 dgp Exp $ '\" .so man.macros .TH Tcl_ExprLong 3 7.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_ExprLong, Tcl_ExprDouble, Tcl_ExprBoolean, Tcl_ExprString \- evaluate an expression .SH SYNOPSIS |
| ︙ | ︙ | |||
50 51 52 53 54 55 56 | .PP These four procedures all evaluate the expression given by the \fIstring\fR argument and return the result in one of four different forms. The expression can have any of the forms accepted by the \fBexpr\fR command. Note that these procedures have been largely replaced by the object-based procedures \fBTcl_ExprLongObj\fR, \fBTcl_ExprDoubleObj\fR, | | | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | .PP These four procedures all evaluate the expression given by the \fIstring\fR argument and return the result in one of four different forms. The expression can have any of the forms accepted by the \fBexpr\fR command. Note that these procedures have been largely replaced by the object-based procedures \fBTcl_ExprLongObj\fR, \fBTcl_ExprDoubleObj\fR, \fBTcl_ExprBooleanObj\fR, and \fBTcl_ExprObj\fR. Those object-based procedures evaluate an expression held in a Tcl object instead of a string. The object argument can retain an internal representation that is more efficient to execute. .PP The \fIinterp\fR argument refers to an interpreter used to evaluate the expression (e.g. for variables and nested Tcl |
| ︙ | ︙ |
Changes to doc/FindExec.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: FindExec.3,v 1.4.2.1 2001/09/28 17:53:48 msofer Exp $ '\" .so man.macros .TH Tcl_FindExecutable 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_FindExecutable, Tcl_GetNameOfExecutable \- identify or return the name of the binary file containing the application .SH SYNOPSIS |
| ︙ | ︙ | |||
35 36 37 38 39 40 41 | The executable's path name is needed for several purposes in Tcl. For example, it is needed on some platforms in the implementation of the \fBload\fR command. It is also returned by the \fBinfo nameofexecutable\fR command. .PP On UNIX platforms this procedure is typically invoked as the very first thing in the application's main program; it must be passed | > > | | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | The executable's path name is needed for several purposes in Tcl. For example, it is needed on some platforms in the implementation of the \fBload\fR command. It is also returned by the \fBinfo nameofexecutable\fR command. .PP On UNIX platforms this procedure is typically invoked as the very first thing in the application's main program; it must be passed \fIargv[0]\fR as its argument. It is important not to change the working directory before the invocation. \fBTcl_FindExecutable\fR uses \fIargv0\fR along with the \fBPATH\fR environment variable to find the application's executable, if possible. If it fails to find the binary, then future calls to \fBinfo nameofexecutable\fR will return an empty string. .PP \fBTcl_GetNameOfExecutable\fR simply returns a pointer to the internal full path name of the executable file as computed by |
| ︙ | ︙ |
Changes to doc/GetIndex.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: GetIndex.3,v 1.5.8.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Tcl_GetIndexFromObj 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_GetIndexFromObj, Tcl_GetIndexFromObjStruct \- lookup string in table of keywords .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp int \fBTcl_GetIndexFromObj\fR(\fIinterp, objPtr, tablePtr, msg, flags, indexPtr\fR) |
| ︙ | ︙ |
Changes to doc/Notifier.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1998-1999 Scriptics Corporation '\" Copyright (c) 1995-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1998-1999 Scriptics Corporation '\" Copyright (c) 1995-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Notifier.3,v 1.7.12.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Notifier 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_CreateEventSource, Tcl_DeleteEventSource, Tcl_SetMaxBlockTime, Tcl_QueueEvent, Tcl_ThreadQueueEvent, Tcl_ThreadAlert, Tcl_GetCurrentThread, Tcl_DeleteEvents, Tcl_InitNotifier, Tcl_FinalizeNotifier, Tcl_WaitForEvent, Tcl_AlertNotifier, Tcl_SetTimer, Tcl_ServiceAll, Tcl_ServiceEvent, Tcl_GetServiceMode, Tcl_SetServiceMode \- the event queue and notifier interfaces .SH SYNOPSIS |
| ︙ | ︙ | |||
333 334 335 336 337 338 339 | more information on memory management issues). Each event source can define its own event structure with whatever information is relevant to that event source. However, the first element of the structure must be a structure of type \fBTcl_Event\fR, and the address of this structure is used when communicating between the event source and the rest of the notifier. A \fBTcl_Event\fR has the following definition: .CS | | | | 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 |
more information on memory management issues). Each event source can
define its own event structure with whatever information is relevant
to that event source. However, the first element of the structure
must be a structure of type \fBTcl_Event\fR, and the address of this
structure is used when communicating between the event source and the
rest of the notifier. A \fBTcl_Event\fR has the following definition:
.CS
typedef struct {
Tcl_EventProc *\fIproc\fR;
struct Tcl_Event *\fInextPtr\fR;
} Tcl_Event;
.CE
The event source must fill in the \fIproc\fR field of
the event before calling \fBTcl_QueueEvent\fR.
The \fInextPtr\fR is used to link together the events in the queue
and should not be modified by the event source.
.PP
An event may be added to the queue at any of three positions, depending
|
| ︙ | ︙ | |||
593 594 595 596 597 598 599 | \fBTcl_SetServiceMode\fR returns the previous value of the service mode, which should be restored when the recursive loop exits. \fBTcl_GetServiceMode\fR returns the current value of the service mode. .VE .SH "SEE ALSO" \fBTcl_CreateFileHandler\fR, \fBTcl_DeleteFileHandler\fR, \fBTcl_Sleep\fR, | | | 593 594 595 596 597 598 599 600 601 602 | \fBTcl_SetServiceMode\fR returns the previous value of the service mode, which should be restored when the recursive loop exits. \fBTcl_GetServiceMode\fR returns the current value of the service mode. .VE .SH "SEE ALSO" \fBTcl_CreateFileHandler\fR, \fBTcl_DeleteFileHandler\fR, \fBTcl_Sleep\fR, \fBTcl_DoOneEvent\fR, \fBThread(3)\fR .SH KEYWORDS event, notifier, event queue, event sources, file events, timer, idle, service mode, threads |
Changes to doc/Object.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Object.3,v 1.4.10.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_Obj 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_NewObj, Tcl_DuplicateObj, Tcl_IncrRefCount, Tcl_DecrRefCount, Tcl_IsShared, Tcl_InvalidateStringRep \- manipulate Tcl objects .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp Tcl_Obj * \fBTcl_NewObj\fR() .sp |
| ︙ | ︙ |
Changes to doc/ObjectType.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: ObjectType.3,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_ObjType 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_RegisterObjType, Tcl_GetObjType, Tcl_AppendAllObjTypes, Tcl_ConvertToType \- manipulate Tcl object types .SH SYNOPSIS |
| ︙ | ︙ | |||
51 52 53 54 55 56 57 | .PP \fBTcl_RegisterObjType\fR registers a new Tcl object type in the table of all object types supported by Tcl. The argument \fItypePtr\fR points to a Tcl_ObjType structure that describes the new type by giving its name and by supplying pointers to four procedures that implement the type. | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | .PP \fBTcl_RegisterObjType\fR registers a new Tcl object type in the table of all object types supported by Tcl. The argument \fItypePtr\fR points to a Tcl_ObjType structure that describes the new type by giving its name and by supplying pointers to four procedures that implement the type. If the type table already contains a type with the same name as in \fItypePtr\fR, it is replaced with the new type. The Tcl_ObjType structure is described in the section \fBTHE TCL_OBJTYPE STRUCTURE\fR below. .PP \fBTcl_GetObjType\fR returns a pointer to the Tcl_ObjType with name \fItypeName\fR. |
| ︙ | ︙ |
Changes to doc/OpenFileChnl.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: OpenFileChnl.3,v 1.9.2.1 2001/12/07 17:39:04 dgp Exp $ .so man.macros .TH Tcl_OpenFileChannel 3 8.3 Tcl "Tcl Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Tcl_OpenFileChannel, Tcl_OpenCommandChannel, Tcl_MakeFileChannel, Tcl_GetChannel, Tcl_GetChannelNames, Tcl_GetChannelNamesEx, Tcl_RegisterChannel, Tcl_UnregisterChannel, Tcl_Close, Tcl_ReadChars, Tcl_Read, Tcl_GetsObj, Tcl_Gets, Tcl_WriteObj, Tcl_WriteChars, Tcl_Write, Tcl_Flush, Tcl_Seek, Tcl_Tell, Tcl_GetChannelOption, Tcl_SetChannelOption, Tcl_Eof, Tcl_InputBlocked, Tcl_InputBuffered, Tcl_Ungets \- buffered I/O facilities using channels .SH SYNOPSIS |
| ︙ | ︙ | |||
441 442 443 444 445 446 447 | If the channel is in nonblocking mode, the return value can also be \-1 if no data was available or the data that was available did not contain an end-of-line character. When \-1 is returned, the \fBTcl_InputBlocked\fR procedure may be invoked to determine if the channel is blocked because of input unavailability. .PP \fBTcl_Gets\fR is the same as \fBTcl_GetsObj\fR except the resulting | | | 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 | If the channel is in nonblocking mode, the return value can also be \-1 if no data was available or the data that was available did not contain an end-of-line character. When \-1 is returned, the \fBTcl_InputBlocked\fR procedure may be invoked to determine if the channel is blocked because of input unavailability. .PP \fBTcl_Gets\fR is the same as \fBTcl_GetsObj\fR except the resulting characters are appended to the dynamic string given by \fIdsPtr\fR rather than a Tcl object. .SH "TCL_UNGETS" .PP \fBTcl_Ungets\fR is used to add data to the input queue of a channel, at either the head or tail of the queue. \fIInput\fR is a pointer to the data that is to be added. \fIInputLen\fR gives the length of the |
| ︙ | ︙ |
Changes to doc/RecEvalObj.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: RecEvalObj.3,v 1.2.18.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_RecordAndEvalObj 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_RecordAndEvalObj \- save command on history list before evaluating .SH SYNOPSIS |
| ︙ | ︙ | |||
29 30 31 32 33 34 35 | command but don't evaluate it. TCL_EVAL_GLOBAL means evaluate the command at global level instead of the current stack level. .BE .SH DESCRIPTION .PP \fBTcl_RecordAndEvalObj\fR is invoked to record a command as an event | | | | | | 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 | command but don't evaluate it. TCL_EVAL_GLOBAL means evaluate the command at global level instead of the current stack level. .BE .SH DESCRIPTION .PP \fBTcl_RecordAndEvalObj\fR is invoked to record a command as an event on the history list and then execute it using \fBTcl_EvalObjEx\fR (or \fBTcl_GlobalEvalObj\fR if the TCL_EVAL_GLOBAL bit is set in \fIflags\fR). It returns a completion code such as TCL_OK just like \fBTcl_EvalObjEx\fR, as well as a result object containing additional information (a result value or error message) that can be retrieved using \fBTcl_GetObjResult\fR. If you don't want the command recorded on the history list then you should invoke \fBTcl_EvalObjEx\fR instead of \fBTcl_RecordAndEvalObj\fR. Normally \fBTcl_RecordAndEvalObj\fR is only called with top-level commands typed by the user, since the purpose of history is to allow the user to re-issue recently-invoked commands. If the \fIflags\fR argument contains the TCL_NO_EVAL bit then the command is recorded without being evaluated. .SH "SEE ALSO" Tcl_EvalObjEx, Tcl_GetObjResult .SH KEYWORDS command, event, execute, history, interpreter, object, record |
Changes to doc/RegExp.3.
1 2 3 4 5 6 7 8 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 1998-1999 Scriptics Corportation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 1998-1999 Scriptics Corportation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: RegExp.3,v 1.6.2.2 2001/10/14 16:25:29 dgp Exp $ '\" .so man.macros .TH Tcl_RegExpMatch 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_RegExpMatch, Tcl_RegExpCompile, Tcl_RegExpExec, Tcl_RegExpRange, Tcl_GetRegExpFromObj, Tcl_RegExpMatchObj, Tcl_RegExpExecObj, Tcl_RegExpGetInfo \- Pattern matching with regular expressions .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp int \fBTcl_RegExpMatchObj\fR(\fIinterp\fR, \fIstrObj\fR, \fIpatObj\fR) .sp |
| ︙ | ︙ | |||
34 35 36 37 38 39 40 | .sp Tcl_RegExp \fBTcl_GetRegExpFromObj\fR(\fIinterp\fR, \fIpatObj\fR, \fIcflags\fR) .sp int \fBTcl_RegExpExecObj\fR(\fIinterp\fR, \fIregexp\fR, \fIobjPtr\fR, \fIoffset\fR, \fInmatches\fR, \fIeflags\fR) .sp | | | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | .sp Tcl_RegExp \fBTcl_GetRegExpFromObj\fR(\fIinterp\fR, \fIpatObj\fR, \fIcflags\fR) .sp int \fBTcl_RegExpExecObj\fR(\fIinterp\fR, \fIregexp\fR, \fIobjPtr\fR, \fIoffset\fR, \fInmatches\fR, \fIeflags\fR) .sp \fBTcl_RegExpGetInfo\fR(\fIregexp\fR, \fIinfoPtr\fR) .VE 8.1 .SH ARGUMENTS .AS Tcl_Interp *interp .AP Tcl_Interp *interp in Tcl interpreter to use for error reporting. The interpreter may be NULL if no error reporting is desired. |
| ︙ | ︙ | |||
95 96 97 98 99 100 101 | value will be taken as the maximum number of subexpressions to remember. .AP int eflags in OR-ed combination of the values TCL_REG_NOTBOL and TCL_REG_NOTEOL. See below for more information. .AP Tcl_RegExpInfo *infoPtr out The address of the location where information about a previous match | | | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | value will be taken as the maximum number of subexpressions to remember. .AP int eflags in OR-ed combination of the values TCL_REG_NOTBOL and TCL_REG_NOTEOL. See below for more information. .AP Tcl_RegExpInfo *infoPtr out The address of the location where information about a previous match should be stored by \fBTcl_RegExpGetInfo\fR. .VE 8.1 .BE .SH DESCRIPTION .PP \fBTcl_RegExpMatch\fR determines whether its \fIpattern\fR argument matches \fIregexp\fR, where \fIregexp\fR is interpreted |
| ︙ | ︙ | |||
162 163 164 165 166 167 168 | the source string for the most recent call to \fBTcl_RegExpExec\fR. \fIIndex\fR indicates which of several ranges is desired: if \fIindex\fR is 0, information is returned about the overall range of characters that matched the entire pattern; otherwise, information is returned about the range of characters that matched the \fIindex\fR'th parenthesized subexpression within the pattern. If there is no range corresponding to \fIindex\fR then NULL | | | | | 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 | the source string for the most recent call to \fBTcl_RegExpExec\fR. \fIIndex\fR indicates which of several ranges is desired: if \fIindex\fR is 0, information is returned about the overall range of characters that matched the entire pattern; otherwise, information is returned about the range of characters that matched the \fIindex\fR'th parenthesized subexpression within the pattern. If there is no range corresponding to \fIindex\fR then NULL is stored in \fI*startPtr\fR and \fI*endPtr\fR. .PP .VS 8.1 \fBTcl_GetRegExpFromObj\fR, \fBTcl_RegExpExecObj\fR, and \fBTcl_RegExpGetInfo\fR are object interfaces that provide the most direct control of Henry Spencer's regular expression library. For users that need to modify compilation and execution options directly, it is recommended that you use these interfaces instead of calling the internal regexp functions. These interfaces handle the details of UTF to Unicode translations as well as providing improved performance through caching in the pattern and string objects. .PP \fBTcl_GetRegExpFromObj\fR attepts to return a compiled regular expression from the \fIpatObj\fR. If the object does not already contain a compiled regular expression it will attempt to create one from the string in the object and assign it to the internal representation of the \fIpatObj\fR. The return value of this function is of type \fBTcl_RegExp\fR. The return value is a token for this compiled form, which can be used in subsequent calls to \fBTcl_RegExpExecObj\fR or \fBTcl_RegExpGetInfo\fR. If an error occurs while compiling the regular expression then \fBTcl_GetRegExpFromObj\fR returns NULL and leaves an error message in the interpreter result. The regular expression token can be used as long as the internal representation of \fIpatObj\fR refers to the compiled form. The \fIeflags\fR argument is a bitwise OR of zero or more of the following flags that control the compilation of \fIpatObj\fR: |
| ︙ | ︙ | |||
247 248 249 250 251 252 253 | `[^' bracket expressions and `.'. In this mode `^' matches an empty string after any newline in addition to its normal function, and `$' matches an empty string before any newline in addition to its normal function. .TP \fBTCL_REG_NOSUB\fR Compile for matching that reports only success or failure, not what was matched. This reduces compile overhead and may improve | | | 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | `[^' bracket expressions and `.'. In this mode `^' matches an empty string after any newline in addition to its normal function, and `$' matches an empty string before any newline in addition to its normal function. .TP \fBTCL_REG_NOSUB\fR Compile for matching that reports only success or failure, not what was matched. This reduces compile overhead and may improve performance. Subsequent calls to \fBTcl_RegExpGetInfo\fR or \fBTcl_RegExpRange\fR will not report any match information. .TP \fBTCL_REG_CANMATCH\fR Compile for matching that reports the potential to complete a partial match given more text (see below). .RE .PP |
| ︙ | ︙ | |||
290 291 292 293 294 295 296 | .TP \fBTCL_REG_NOTEOL\fR The last character in the string will not be treated as the end of a line or the end of the string, so '$' will not match there. Note that this flag has no effect on how `\fB\eZ\fR' matches. .RE .PP | | | 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
.TP
\fBTCL_REG_NOTEOL\fR
The last character in the string will not be treated as the end of a
line or the end of the string, so '$' will not match there.
Note that this flag has no effect on how `\fB\eZ\fR' matches.
.RE
.PP
\fBTcl_RegExpGetInfo\fR retrieves information about the last match
performed with a given regular expression \fIregexp\fR. The
\fIinfoPtr\fR argument contains a pointer to a structure that is
defined as follows:
.PP
.CS
typedef struct Tcl_RegExpInfo {
int \fInsubs\fR;
|
| ︙ | ︙ |
Changes to doc/SetResult.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: SetResult.3,v 1.5.2.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_SetResult 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_SetObjResult, Tcl_GetObjResult, Tcl_SetResult, Tcl_GetStringResult, Tcl_AppendResult, Tcl_AppendResultVA, Tcl_AppendElement, Tcl_ResetResult, Tcl_FreeResult \- manipulate Tcl result .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp \fBTcl_SetObjResult\fR(\fIinterp, objPtr\fR) .sp Tcl_Obj * |
| ︙ | ︙ |
Changes to doc/SplitList.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: SplitList.3,v 1.3.2.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_SplitList 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_SplitList, Tcl_Merge, Tcl_ScanElement, Tcl_ConvertElement, Tcl_ScanCountedElement, Tcl_ConvertCountedElement \- manipulate Tcl lists .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp int \fBTcl_SplitList\fR(\fIinterp, list, argcPtr, argvPtr\fR) .sp |
| ︙ | ︙ |
Changes to doc/StrMatch.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | < > | < < < | 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 | '\" '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: StrMatch.3,v 1.3.10.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_StringMatch 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_StringMatch, Tcl_StringCaseMatch \- test whether a string matches a pattern .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp int \fBTcl_StringMatch\fR(\fIstring\fR, \fIpattern\fR) .sp int \fBTcl_StringCaseMatch\fR(\fIstring\fR, \fIpattern\fR, \fInocase\fR) .SH ARGUMENTS .AP char *string in String to test. .AP char *pattern in Pattern to match against string. May contain special characters from the set *?\e[]. .AP int nocase in Specifies whether the match should be done case-sensitive (0) or case-insensitive (1). .BE .SH DESCRIPTION .PP This utility procedure determines whether a string matches a given pattern. If it does, then \fBTcl_StringMatch\fR returns 1. Otherwise \fBTcl_StringMatch\fR returns 0. The algorithm |
| ︙ | ︙ |
Changes to doc/TCL_MEM_DEBUG.3.
1 2 3 4 5 | '\" '\" Copyright (c) 1992-1999 Karl Lehenbauer and Mark Diekhans. '\" Copyright (c) 2000 by Scriptics Corporation. '\" All rights reserved. '\" | | | | | > | | | 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 | '\" '\" Copyright (c) 1992-1999 Karl Lehenbauer and Mark Diekhans. '\" Copyright (c) 2000 by Scriptics Corporation. '\" All rights reserved. '\" '\" RCS: @(#) $Id: TCL_MEM_DEBUG.3,v 1.2.14.2 2001/12/10 16:01:43 dgp Exp $ '\" .so man.macros .TH TCL_MEM_DEBUG 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME TCL_MEM_DEBUG \- Compile-time flag to enable Tcl memory debugging. .SH DESCRIPTION When Tcl is compiled with \fBTCL_MEM_DEBUG\fR defined, a powerful set of memory debugging aids are included in the compiled binary. This includes C and Tcl functions which can aid with debugging memory leaks, memory allocation overruns, and other memory related errors. .SH "ENABLING MEMORY DEBUGGING" .PP To enable memory debugging, Tcl should be recompiled from scratch with \fBTCL_MEM_DEBUG\fR defined. This will also compile in a non-stub version of \fBTcl_InitMemory\fR to add the \fBmemory\fR command to Tcl. .PP \fBTCL_MEM_DEBUG\fR must be either left defined for all modules or undefined for all modules that are going to be linked together. If they are not, link errors will occur, with either \fBTclDbCkfree\fR and \fBTcl_DbCkalloc\fR or \fBTcl_Ckalloc\fR and \fBTcl_Ckfree\fR being undefined. .PP Once memory debugging support has been compiled into Tcl, the C functions \fBTcl_ValidateAllMemory\fR, and \fBTcl_DumpActiveMemory\fR, and the Tcl \fBmemory\fR command can be used to validate and examine memory usage. .SH "GUARD ZONES" .PP When memory debugging is enabled, whenever a call to \fBckalloc\fR is made, slightly more memory than requested is allocated so the memory debugging code can keep track of the allocated memory, and eight-byte ``guard zones'' are placed in front of and behind the space that will be returned to the caller. (The sizes of the guard zones are defined by the C #define \fBLOW_GUARD_SIZE\fR and #define \fBHIGH_GUARD_SIZE\fR in the file \fIgeneric/tclCkalloc.c\fR -- it can be extended if you suspect large overwrite problems, at some cost in performance.) A known pattern is written into the guard zones and, on a call to \fBckfree\fR, the guard zones of the space being freed are checked to see if either zone has been modified in any way. If one has been, the guard bytes and their new contents are identified, and a ``low guard failed'' or ``high guard failed'' message is issued. The ``guard failed'' message includes the address of the memory packet and the file name and line number of the code that called \fBckfree\fR. This allows you to detect the common sorts of one-off problems, where not enough space was allocated to contain the data written, for example. .SH "DEBUGGING DIFFICULT MEMORY CORRUPTION PROBLEMS" .PP Normally, Tcl compiled with memory debugging enabled will make it easy to isolate a corruption problem. Turning on memory validation with the memory command can help isolate difficult problems. If you suspect (or know) that corruption is occurring before the Tcl interpreter comes up far enough for you to issue commands, you can set \fBMEM_VALIDATE\fR define, recompile tclCkalloc.c and rebuild Tcl. |
| ︙ | ︙ |
Changes to doc/Tcl_Main.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | > | | | > > > > | 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 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Tcl_Main.3,v 1.2.18.1 2001/08/28 00:12:43 hobbs Exp $ '\" .so man.macros .TH Tcl_Main 3 8.3.4 Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_Main, Tcl_SetMainLoop \- main program and event loop definition for Tcl-based applications .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp \fBTcl_Main\fR(\fIargc, argv, appInitProc\fR) .sp \fBTcl_SetMainLoop\fR(\fImainLoopProc\fR) .SH ARGUMENTS .AS Tcl_AppInitProc *appInitProc .AP int argc in Number of elements in \fIargv\fR. .AP char *argv[] in Array of strings containing command-line arguments. .AP Tcl_AppInitProc *appInitProc in Address of an application-specific initialization procedure. The value for this argument is usually \fBTcl_AppInit\fR. .AP Tcl_MainLoopProc *mainLoopProc in Address of an application-specific event loop procedure. .BE .SH DESCRIPTION .PP \fBTcl_Main\fR acts as the main program for most Tcl-based applications. Starting with Tcl 7.4 it is not called \fBmain\fR anymore because it is part of the Tcl library and having a function \fBmain\fR |
| ︙ | ︙ | |||
49 50 51 52 53 54 55 | the \fIappInitProc\fR argument. This procedure provides a ``hook'' for the application to perform its own initialization, such as defining application-specific commands. The procedure must have an interface that matches the type \fBTcl_AppInitProc\fR: .CS typedef int Tcl_AppInitProc(Tcl_Interp *\fIinterp\fR); .CE | > | | > > > > > > > > > > | > > > > | 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 | the \fIappInitProc\fR argument. This procedure provides a ``hook'' for the application to perform its own initialization, such as defining application-specific commands. The procedure must have an interface that matches the type \fBTcl_AppInitProc\fR: .CS typedef int Tcl_AppInitProc(Tcl_Interp *\fIinterp\fR); .CE \fIAppInitProc\fR is almost always a pointer to \fBTcl_AppInit\fR; for more details on this procedure, see the documentation for \fBTcl_AppInit\fR. When the \fIappInitProc\fR is finished, the startup script will be evaluated. If none exists, then an interactive prompt is provided. .PP .VS 8.3.4 \fBTcl_SetMainLoop\fR allows setting an event loop procedure to be run. This allows, for example, Tk to be dynamically loaded and set its event loop. The event loop will run following the startup script. If you are in interactive mode, setting the main loop procedure will cause the prompt to become fileevent based and then the loop procedure is called. The main loop procedure must have an interface that matches the type \fBTcl_MainLoopProc\fR: .CS typedef void Tcl_MainLoopProc(void); .CE .VE 8.3.4 .SH KEYWORDS application-specific initialization, command-line arguments, main program |
Changes to doc/Thread.3.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1999 Scriptics Corporation '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | '\" '\" Copyright (c) 1999 Scriptics Corporation '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Thread.3,v 1.11.2.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Threads 3 "8.1" Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_ConditionNotify, Tcl_ConditionWait, Tcl_ConditionFinalize, Tcl_GetThreadData, Tcl_MutexLock, Tcl_MutexUnlock, Tcl_MutexFinalize, Tcl_CreateThread \- Tcl thread support. .SH SYNOPSIS .nf \fB#include <tcl.h>\fR .sp void \fBTcl_ConditionNotify\fR(\fIcondPtr\fR) .sp |
| ︙ | ︙ | |||
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | .AP int *size in The size of the thread local storage block. This amount of data is allocated and initialized to zero the first time each thread calls \fBTcl_GetThreadData\fR. .AP Tcl_ThreadId *idPtr out The refered storage will contain the id of the newly created thread as returned by the operating system. .AP Tcl_ThreadCreateProc threadProc in This procedure will act as the \fBmain()\fR of the newly created thread. The specified \fIclientData\fR will be its sole argument. .AP ClientData clientData in Arbitrary information. Passed as sole argument to the \fIthreadProc\fR. .AP int stackSize in The size of the stack given to the new thread. .AP int flags in Bitmask containing flags allowing the caller to modify behaviour of the new thread. .BE .SH INTRODUCTION Beginning with the 8.1 release, the Tcl core is thread safe, which allows you to incorporate Tcl into multithreaded applications without customizing the Tcl core. To enable Tcl multithreading support, you must include the \fB--enable-threads\fR option to \fBconfigure\fR when you configure and compile your Tcl core. | > > > > > | 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 | .AP int *size in The size of the thread local storage block. This amount of data is allocated and initialized to zero the first time each thread calls \fBTcl_GetThreadData\fR. .AP Tcl_ThreadId *idPtr out The refered storage will contain the id of the newly created thread as returned by the operating system. .AP Tcl_ThreadId id in Id of the thread waited upon. .AP Tcl_ThreadCreateProc threadProc in This procedure will act as the \fBmain()\fR of the newly created thread. The specified \fIclientData\fR will be its sole argument. .AP ClientData clientData in Arbitrary information. Passed as sole argument to the \fIthreadProc\fR. .AP int stackSize in The size of the stack given to the new thread. .AP int flags in Bitmask containing flags allowing the caller to modify behaviour of the new thread. .AP int *result out The refered storage is used to place the exit code of the thread waited upon into it. .BE .SH INTRODUCTION Beginning with the 8.1 release, the Tcl core is thread safe, which allows you to incorporate Tcl into multithreaded applications without customizing the Tcl core. To enable Tcl multithreading support, you must include the \fB--enable-threads\fR option to \fBconfigure\fR when you configure and compile your Tcl core. |
| ︙ | ︙ |
Changes to doc/Utf.3.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Utf.3,v 1.7.2.1 2001/12/10 16:01:43 dgp Exp $ '\" .so man.macros .TH Utf 3 "8.1" Tcl "Tcl Library Procedures" .BS .SH NAME Tcl_UniChar, Tcl_UniCharToUtf, Tcl_UtfToUniChar, Tcl_UniCharToUtfDString, Tcl_UtfToUniCharDString, Tcl_UniCharLen, Tcl_UniCharNcmp, Tcl_UtfCharComplete, Tcl_NumUtfChars, Tcl_UtfFindFirst, Tcl_UtfFindLast, Tcl_UtfNext, Tcl_UtfPrev, Tcl_UniCharAtIndex, Tcl_UtfAtIndex, Tcl_UtfBackslash \- routines for manipulating UTF-8 strings. .SH SYNOPSIS |
| ︙ | ︙ | |||
131 132 133 134 135 136 137 | to UTF-8, storing the result in a previously-initialized \fBTcl_DString\fR. You must specify the length of the given Unicode string. The return value is a pointer to the UTF-8 representation of the Unicode string. Storage for the return value is appended to the end of the \fBTcl_DString\fR. .PP \fBTcl_UtfToUniCharDString\fR coverts the given UTF-8 string to Unicode, | | | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | to UTF-8, storing the result in a previously-initialized \fBTcl_DString\fR. You must specify the length of the given Unicode string. The return value is a pointer to the UTF-8 representation of the Unicode string. Storage for the return value is appended to the end of the \fBTcl_DString\fR. .PP \fBTcl_UtfToUniCharDString\fR coverts the given UTF-8 string to Unicode, storing the result in the previously-initialized \fBTcl_DString\fR. you may either specify the length of the given UTF-8 string or "-1", in which case \fBTcl_UtfToUniCharDString\fR uses \fBstrlen\fR to calculate the length. The return value is a pointer to the Unicode representation of the UTF-8 string. Storage for the return value is appended to the end of the \fBTcl_DString\fR. The Unicode string is terminated with a Unicode NULL character. .PP |
| ︙ | ︙ |
Changes to doc/after.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1990-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1990-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: after.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH after n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME after \- Execute a command after a time delay |
| ︙ | ︙ | |||
99 100 101 102 103 104 105 | assume that the application is event driven: the delayed commands will not be executed unless the application enters the event loop. In applications that are not normally event-driven, such as \fBtclsh\fR, the event loop can be entered with the \fBvwait\fR and \fBupdate\fR commands. .SH "SEE ALSO" | | | 99 100 101 102 103 104 105 106 107 108 109 | assume that the application is event driven: the delayed commands will not be executed unless the application enters the event loop. In applications that are not normally event-driven, such as \fBtclsh\fR, the event loop can be entered with the \fBvwait\fR and \fBupdate\fR commands. .SH "SEE ALSO" bgerror(n), concat(n), update(n), vwait(n) .SH KEYWORDS cancel, delay, idle callback, sleep, time |
Changes to doc/append.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: append.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH append n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME append \- Append to variable |
| ︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 | it is given a value equal to the concatenation of all the \fIvalue\fR arguments. This command provides an efficient way to build up long variables incrementally. For example, ``\fBappend a $b\fR'' is much more efficient than ``\fBset a $a$b\fR'' if \fB$a\fR is long. .SH KEYWORDS append, variable | > > > | 24 25 26 27 28 29 30 31 32 33 34 35 | it is given a value equal to the concatenation of all the \fIvalue\fR arguments. This command provides an efficient way to build up long variables incrementally. For example, ``\fBappend a $b\fR'' is much more efficient than ``\fBset a $a$b\fR'' if \fB$a\fR is long. .SH "SEE ALSO" concat(n), lappend(n) .SH KEYWORDS append, variable |
Changes to doc/bgerror.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1990-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1990-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: bgerror.n,v 1.2.18.3 2001/10/09 19:04:01 hobbs Exp $ '\" .so man.macros .TH bgerror n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME bgerror \- Command invoked to process background errors |
| ︙ | ︙ | |||
27 28 29 30 31 32 33 | A background error is one that occurs in an event handler or some other command that didn't originate with the application. For example, if an error occurs while executing a command specified with the \fBafter\fR command, then it is a background error. For a non-background error, the error can simply be returned up through nested Tcl command evaluations until it reaches the top-level code in the application; then the application can report the error | | < | | | | | | | | | | | | | | | | | | | | | < < | | > > > > > > > > > > > > > > | 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 | A background error is one that occurs in an event handler or some other command that didn't originate with the application. For example, if an error occurs while executing a command specified with the \fBafter\fR command, then it is a background error. For a non-background error, the error can simply be returned up through nested Tcl command evaluations until it reaches the top-level code in the application; then the application can report the error in whatever way it wishes. When a background error occurs, the unwinding ends in the Tcl library and there is no obvious way for Tcl to report the error. .PP When Tcl detects a background error, it saves information about the error and invokes the \fBbgerror\fR command later as an idle event handler. Before invoking \fBbgerror\fR, Tcl restores the \fBerrorInfo\fR and \fBerrorCode\fR variables to their values at the time the error occurred, then it invokes \fBbgerror\fR with the error message as its only argument. Tcl assumes that the application has implemented the \fBbgerror\fR command, and that the command will report the error in a way that makes sense for the application. Tcl will ignore any result returned by the \fBbgerror\fR command as long as no error is generated. .PP If another Tcl error occurs within the \fBbgerror\fR command (for example, because no \fBbgerror\fR command has been defined) then Tcl reports the error itself by writing a message to stderr. .PP If several background errors accumulate before \fBbgerror\fR is invoked to process them, \fBbgerror\fR will be invoked once for each error, in the order they occurred. However, if \fBbgerror\fR returns with a break exception, then any remaining errors are skipped without calling \fBbgerror\fR. .PP Tcl has no default implementation for \fBbgerror\fR. However, in applications using Tk there is a default \fBbgerror\fR procedure which posts a dialog box containing the error message and offers the user a chance to see a stack trace showing where the error occurred. In addition to allowing the user to view the stack trace, the dialog provides an additional application configurable button which may be used, for example, to save the stack trace to a file. By default, this is the behavior associated with that button. This behavior can be redefined by setting the option database values \fB*ErrorDialog.function.text\fR, to specify the caption for the function button, and \fB*ErrorDialog.function.command\fR, to specify the command to be run. The text of the stack trace is appended to the command when it is evaluated. If either of these options is set to the empty string, then the additional button will not be displayed in the dialog. .SH "SEE ALSO" after(n), tclvars(n) .SH KEYWORDS background error, reporting |
Changes to doc/binary.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1997 by Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | | | | | 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 | '\" '\" Copyright (c) 1997 by Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: binary.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH binary n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME binary \- Insert and extract fields from binary strings .SH SYNOPSIS \fBbinary format \fIformatString \fR?\fIarg arg ...\fR? .br \fBbinary scan \fIstring formatString \fR?\fIvarName varName ...\fR? .BE .SH DESCRIPTION .PP This command provides facilities for manipulating binary data. The first form, \fBbinary format\fR, creates a binary string from normal Tcl values. For example, given the values 16 and 22, on a 32 bit architecture, it might produce an 8-byte binary string consisting of two 4-byte integers, one for each of the numbers. The second form of the command, \fBbinary scan\fR, does the opposite: it extracts data from a binary string and returns it as ordinary Tcl string values. .SH "BINARY FORMAT" .PP The \fBbinary format\fR command generates a binary string whose layout is specified by the \fIformatString\fR and whose contents come from the additional arguments. The resulting binary value is returned. .PP |
| ︙ | ︙ | |||
538 539 540 541 542 543 544 | .SH "PLATFORM ISSUES" Sometimes it is desirable to format or scan integer values in the native byte order for the machine. Refer to the \fBbyteOrder\fR element of the \fBtcl_platform\fR array to decide which type character to use when formatting or scanning integers. .SH "SEE ALSO" | | | 538 539 540 541 542 543 544 545 546 547 548 | .SH "PLATFORM ISSUES" Sometimes it is desirable to format or scan integer values in the native byte order for the machine. Refer to the \fBbyteOrder\fR element of the \fBtcl_platform\fR array to decide which type character to use when formatting or scanning integers. .SH "SEE ALSO" format(n), scan(n), tclvars(n) .SH KEYWORDS binary, format, scan |
Changes to doc/break.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: break.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH break n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME break \- Abort looping command |
| ︙ | ︙ | |||
26 27 28 29 30 31 32 33 34 | The exception causes the current script to be aborted out to the innermost containing loop command, which then aborts its execution and returns normally. Break exceptions are also handled in a few other situations, such as the \fBcatch\fR command, Tk event bindings, and the outermost scripts of procedure bodies. .SH KEYWORDS abort, break, loop | > > > | 26 27 28 29 30 31 32 33 34 35 36 37 | The exception causes the current script to be aborted out to the innermost containing loop command, which then aborts its execution and returns normally. Break exceptions are also handled in a few other situations, such as the \fBcatch\fR command, Tk event bindings, and the outermost scripts of procedure bodies. .SH "SEE ALSO" catch(n), continue(n), for(n), foreach(n), while(n) .SH KEYWORDS abort, break, loop |
Changes to doc/case.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: case.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH case n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME case \- Evaluate one of several scripts, depending on a given value |
| ︙ | ︙ | |||
50 51 52 53 54 55 56 57 58 59 | The second form makes it easy to construct multi-line case commands, since the braces around the whole list make it unnecessary to include a backslash at the end of each line. Since the \fIpatList\fR arguments are in braces in the second form, no command or variable substitutions are performed on them; this makes the behavior of the second form different than the first form in some cases. .SH KEYWORDS case, match, regular expression | > > > | 50 51 52 53 54 55 56 57 58 59 60 61 62 | The second form makes it easy to construct multi-line case commands, since the braces around the whole list make it unnecessary to include a backslash at the end of each line. Since the \fIpatList\fR arguments are in braces in the second form, no command or variable substitutions are performed on them; this makes the behavior of the second form different than the first form in some cases. .SH "SEE ALSO" switch(n) .SH KEYWORDS case, match, regular expression |
Changes to doc/cd.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > > > | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: cd.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH cd n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME cd \- Change working directory .SH SYNOPSIS \fBcd \fR?\fIdirName\fR? .BE .SH DESCRIPTION .PP Change the current working directory to \fIdirName\fR, or to the home directory (as specified in the HOME environment variable) if \fIdirName\fR is not given. Returns an empty string. .SH "SEE ALSO" filename(n), glob(n), pwd(n) .SH KEYWORDS working directory |
Changes to doc/close.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: close.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH close n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME close \- Close an open channel. |
| ︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 | when the process exits. Channels are switched to blocking mode, to ensure that all output is correctly flushed before the process exits. .VE .PP The command returns an empty string, and may generate an error if an error occurs while flushing output. .SH KEYWORDS blocking, channel, close, nonblocking | > > > | 51 52 53 54 55 56 57 58 59 60 61 62 | when the process exits. Channels are switched to blocking mode, to ensure that all output is correctly flushed before the process exits. .VE .PP The command returns an empty string, and may generate an error if an error occurs while flushing output. .SH "SEE ALSO" file(n), open(n), socket(n), eof(n) .SH KEYWORDS blocking, channel, close, nonblocking |
Changes to doc/concat.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: concat.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH concat n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME concat \- Join lists together |
| ︙ | ︙ | |||
32 33 34 35 36 37 38 39 40 |
.CS
\fBa b c d e f {g h}\fR
.CE
as its result.
.PP
If no \fIarg\fRs are supplied, the result is an empty string.
.SH KEYWORDS
concatenate, join, lists
| > > > | 32 33 34 35 36 37 38 39 40 41 42 43 |
.CS
\fBa b c d e f {g h}\fR
.CE
as its result.
.PP
If no \fIarg\fRs are supplied, the result is an empty string.
.SH "SEE ALSO"
append(n), eval(n)
.SH KEYWORDS
concatenate, join, lists
|
Changes to doc/continue.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: continue.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH continue n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME continue \- Skip to the next iteration of a loop |
| ︙ | ︙ | |||
26 27 28 29 30 31 32 33 34 | The exception causes the current script to be aborted out to the innermost containing loop command, which then continues with the next iteration of the loop. Catch exceptions are also handled in a few other situations, such as the \fBcatch\fR command and the outermost scripts of procedure bodies. .SH KEYWORDS continue, iteration, loop | > > > | 26 27 28 29 30 31 32 33 34 35 36 37 | The exception causes the current script to be aborted out to the innermost containing loop command, which then continues with the next iteration of the loop. Catch exceptions are also handled in a few other situations, such as the \fBcatch\fR command and the outermost scripts of procedure bodies. .SH "SEE ALSO" break(n), for(n), foreach(n), while(n) .SH KEYWORDS continue, iteration, loop |
Changes to doc/dde.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: dde.n,v 1.5.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH dde n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME dde \- Execute a Dynamic Data Exchange command |
| ︙ | ︙ | |||
124 125 126 127 128 129 130 131 | When using DDE, be careful to ensure that the event queue is flushed using either \fBupdate\fR or \fBvwait\fR. This happens by default when using \fBwish\fR unless a blocking command is called (such as \fBexec\fR without adding the \fB&\fR to place the process in the background). If for any reason the event queue is not flushed, DDE commands may hang until the event queue is flushed. This can create a deadlock situation. .SH "SEE ALSO" | > | > | 124 125 126 127 128 129 130 131 132 133 134 135 136 | When using DDE, be careful to ensure that the event queue is flushed using either \fBupdate\fR or \fBvwait\fR. This happens by default when using \fBwish\fR unless a blocking command is called (such as \fBexec\fR without adding the \fB&\fR to place the process in the background). If for any reason the event queue is not flushed, DDE commands may hang until the event queue is flushed. This can create a deadlock situation. .SH "SEE ALSO" tk(n), winfo(n), send(n) .SH KEYWORDS application, dde, name, remote execution |
Changes to doc/encoding.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1998 by Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1998 by Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: encoding.n,v 1.2.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH encoding n "8.1" Tcl "Tcl Built-In Commands" .BS .SH NAME encoding \- Manipulate encodings .SH SYNOPSIS |
| ︙ | ︙ | |||
69 70 71 72 73 74 75 | .CS set s [encoding convertfrom euc-jp "\\xA4\\xCF"] .CE would return the Unicode string "\\u306F", which is the Hiragana letter HA. .SH "SEE ALSO" | | | 69 70 71 72 73 74 75 76 77 78 79 | .CS set s [encoding convertfrom euc-jp "\\xA4\\xCF"] .CE would return the Unicode string "\\u306F", which is the Hiragana letter HA. .SH "SEE ALSO" Tcl_GetEncoding(3) .SH KEYWORDS encoding |
Changes to doc/eof.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > > > | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: eof.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH eof n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME eof \- Check for end of file condition on channel .SH SYNOPSIS \fBeof \fIchannelId\fR .BE .SH DESCRIPTION .PP Returns 1 if an end of file condition occurred during the most recent input operation on \fIchannelId\fR (such as \fBgets\fR), 0 otherwise. .SH "SEE ALSO" file(n), open(n), close(n), fblocked(n) .SH KEYWORDS channel, end of file |
Changes to doc/error.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: error.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH error n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME error \- Generate an error |
| ︙ | ︙ | |||
50 51 52 53 54 55 56 57 58 | such information is available; see the \fBtclvars\fR manual page for information on the proper format for the variable. If the \fIcode\fR argument is not present, then \fBerrorCode\fR is automatically reset to ``NONE'' by the Tcl interpreter as part of processing the error generated by the command. .SH KEYWORDS error, errorCode, errorInfo | > > > | 50 51 52 53 54 55 56 57 58 59 60 61 | such information is available; see the \fBtclvars\fR manual page for information on the proper format for the variable. If the \fIcode\fR argument is not present, then \fBerrorCode\fR is automatically reset to ``NONE'' by the Tcl interpreter as part of processing the error generated by the command. .SH "SEE ALSO" catch(n), tclvars(n) .SH KEYWORDS error, errorCode, errorInfo |
Changes to doc/eval.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: eval.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH eval n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME eval \- Evaluate a Tcl script |
| ︙ | ︙ | |||
24 25 26 27 28 29 30 | \fBEval\fR concatenates all its arguments in the same fashion as the \fBconcat\fR command, passes the concatenated string to the Tcl interpreter recursively, and returns the result of that evaluation (or any error generated by it). .SH KEYWORDS concatenate, evaluate, script | > > > | 24 25 26 27 28 29 30 31 32 33 | \fBEval\fR concatenates all its arguments in the same fashion as the \fBconcat\fR command, passes the concatenated string to the Tcl interpreter recursively, and returns the result of that evaluation (or any error generated by it). .SH KEYWORDS concatenate, evaluate, script .SH "SEE ALSO" catch(n), concat(n), error(n), subs(n), tclvars(n) |
Changes to doc/exec.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: exec.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH exec n 7.6 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME exec \- Invoke subprocess(es) |
| ︙ | ︙ | |||
297 298 299 300 301 302 303 | \fBMacintosh\fR The \fBexec\fR command is not implemented and does not exist under Macintosh. .TP \fBUnix\fR\0\0\0\0\0\0\0 The \fBexec\fR command is fully functional and works as described. .SH "SEE ALSO" | | < < | 297 298 299 300 301 302 303 304 305 306 307 | \fBMacintosh\fR The \fBexec\fR command is not implemented and does not exist under Macintosh. .TP \fBUnix\fR\0\0\0\0\0\0\0 The \fBexec\fR command is fully functional and works as described. .SH "SEE ALSO" error(n), open(n) .SH KEYWORDS execute, pipeline, redirection, subprocess |
Changes to doc/exit.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > > > | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: exit.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH exit n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME exit \- End the application .SH SYNOPSIS \fBexit \fR?\fIreturnCode\fR? .BE .SH DESCRIPTION .PP Terminate the process, returning \fIreturnCode\fR to the system as the exit status. If \fIreturnCode\fR isn't specified then it defaults to 0. .SH "SEE ALSO" exec(n), tclvars(n) .SH KEYWORDS exit, process |
Changes to doc/expr.n.
1 2 | '\" '\" Copyright (c) 1993 The Regents of the University of California. | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-2000 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: expr.n,v 1.2.18.1 2000/08/07 21:29:39 hobbs Exp $ '\" .so man.macros .TH expr n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME expr \- Evaluate an expression .SH SYNOPSIS \fBexpr \fIarg \fR?\fIarg arg ...\fR? .BE |
| ︙ | ︙ | |||
344 345 346 347 348 349 350 | .CE both return 1. The first comparison is done using integer comparison, and the second is done using string comparison after the second operand is converted to the string \fB18\fR. Because of Tcl's tendency to treat values as numbers whenever possible, it isn't generally a good idea to use operators like \fB==\fR when you really want string comparison and the values of the | | | < | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 | .CE both return 1. The first comparison is done using integer comparison, and the second is done using string comparison after the second operand is converted to the string \fB18\fR. Because of Tcl's tendency to treat values as numbers whenever possible, it isn't generally a good idea to use operators like \fB==\fR when you really want string comparison and the values of the operands could be arbitrary; it's better in these cases to use the \fBstring\fR command instead. .SH "PERFORMANCE CONSIDERATIONS" .PP Enclose expressions in braces for the best speed and the smallest storage requirements. This allows the Tcl bytecode compiler to generate the best code. .PP As mentioned above, expressions are substituted twice: once by the Tcl parser and once by the \fBexpr\fR command. |
| ︙ | ︙ | |||
379 380 381 382 383 384 385 | need two rounds of substitutions, the bytecode compiler must emit additional instructions to handle this situation. The most expensive code is required for unbraced expressions that contain command substitutions. These expressions must be implemented by generating new code each time the expression is executed. | < | 378 379 380 381 382 383 384 385 386 387 | need two rounds of substitutions, the bytecode compiler must emit additional instructions to handle this situation. The most expensive code is required for unbraced expressions that contain command substitutions. These expressions must be implemented by generating new code each time the expression is executed. .SH KEYWORDS arithmetic, boolean, compare, expression, fuzzy comparison |
Changes to doc/fblocked.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > | | 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 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: fblocked.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ .so man.macros .TH fblocked n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME fblocked \- Test whether the last input operation exhausted all available input .SH SYNOPSIS \fBfblocked \fIchannelId\fR .BE .SH DESCRIPTION .PP The \fBfblocked\fR command returns 1 if the most recent input operation on \fIchannelId\fR returned less information than requested because all available input was exhausted. For example, if \fBgets\fR is invoked when there are only three characters available for input and no end-of-line sequence, \fBgets\fR returns an empty string and a subsequent call to \fBfblocked\fR will return 1. .PP .SH "SEE ALSO" gets(n), open(n), read(n) .SH KEYWORDS blocking, nonblocking |
Changes to doc/file.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: file.n,v 1.5.2.1 2001/12/10 16:01:43 dgp Exp $ '\" .so man.macros .TH file n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME file \- Manipulate file names and attributes |
| ︙ | ︙ | |||
238 239 240 241 242 243 244 | .TP \fBfile readlink \fIname\fR . Returns the value of the symbolic link given by \fIname\fR (i.e. the name of the file it points to). If \fIname\fR isn't a symbolic link or its value cannot be read, then an error is returned. On systems that don't support symbolic links this option is undefined. | | | | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | .TP \fBfile readlink \fIname\fR . Returns the value of the symbolic link given by \fIname\fR (i.e. the name of the file it points to). If \fIname\fR isn't a symbolic link or its value cannot be read, then an error is returned. On systems that don't support symbolic links this option is undefined. .TP \fBfile rename \fR?\fB\-force\fR? ?\fB\-\|\-\fR? \fIsource\fR \fItarget\fR .TP \fBfile rename \fR?\fB\-force\fR? ?\fB\-\|\-\fR? \fIsource\fR ?\fIsource\fR ...? \fItargetDir\fR .RS The first form takes the file or directory specified by pathname \fIsource\fR and renames it to \fItarget\fR, moving the file if the pathname \fItarget\fR specifies a name in a different directory. If \fItarget\fR is an existing directory, then the second form is used. The second form moves each \fIsource\fR file or directory into the directory |
| ︙ | ︙ |
Changes to doc/fileevent.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: fileevent.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH fileevent n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME fileevent \- Execute a script when a channel becomes readable or writable |
| ︙ | ︙ | |||
98 99 100 101 102 103 104 | .SH CREDITS .PP \fBfileevent\fR is based on the \fBaddinput\fR command created by Mark Diekhans. .SH "SEE ALSO" | | | 98 99 100 101 102 103 104 105 106 107 108 109 | .SH CREDITS .PP \fBfileevent\fR is based on the \fBaddinput\fR command created by Mark Diekhans. .SH "SEE ALSO" bgerror(n), fconfigure(n), gets(n), puts(n), read(n) .SH KEYWORDS asynchronous I/O, blocking, channel, event handler, nonblocking, readable, script, writable. |
Changes to doc/filename.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: filename.n,v 1.3.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH filename n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME filename \- File name conventions supported by Tcl commands |
| ︙ | ︙ | |||
191 192 193 194 195 196 197 | alphanumeric characters only. Also Windows 3.1 only supports file names with a root of no more than 8 characters and an extension of no more than 3 characters. .SH KEYWORDS current directory, absolute file name, relative file name, volume-relative file name, portability | > > > | 191 192 193 194 195 196 197 198 199 200 | alphanumeric characters only. Also Windows 3.1 only supports file names with a root of no more than 8 characters and an extension of no more than 3 characters. .SH KEYWORDS current directory, absolute file name, relative file name, volume-relative file name, portability .SH "SEE ALSO" file(n), glob(n) |
Changes to doc/flush.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: flush.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH flush n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME flush \- Flush buffered output for a channel |
| ︙ | ︙ | |||
25 26 27 28 29 30 31 | If the channel is in blocking mode the command does not return until all the buffered output has been flushed to the channel. If the channel is in nonblocking mode, the command may return before all buffered output has been flushed; the remainder will be flushed in the background as fast as the underlying file or device is able to absorb it. .SH "SEE ALSO" | | | 25 26 27 28 29 30 31 32 33 34 35 | If the channel is in blocking mode the command does not return until all the buffered output has been flushed to the channel. If the channel is in nonblocking mode, the command may return before all buffered output has been flushed; the remainder will be flushed in the background as fast as the underlying file or device is able to absorb it. .SH "SEE ALSO" file(n), open(n), socket(n) .SH KEYWORDS blocking, buffer, channel, flush, nonblocking, output |
Changes to doc/for.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: for.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH for n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME for \- ``For'' loop |
| ︙ | ︙ | |||
52 53 54 55 56 57 58 59 60 |
around \fB$x<10\fR:
.CS
for {set x 0} {$x<10} {incr x} {
puts "x is $x"
}
.CE
.SH KEYWORDS
for, iteration, looping
| > > > | 52 53 54 55 56 57 58 59 60 61 62 63 |
around \fB$x<10\fR:
.CS
for {set x 0} {$x<10} {incr x} {
puts "x is $x"
}
.CE
.SH "SEE ALSO"
break, continue, foreach, while
.SH KEYWORDS
for, iteration, looping
|
Changes to doc/foreach.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: foreach.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH foreach n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME foreach \- Iterate over all elements in one or more lists |
| ︙ | ︙ | |||
78 79 80 81 82 83 84 85 86 |
set x {}
foreach i {a b c} {j k} {d e f g} {
lappend x $i $j $k
}
# The value of x is "a d e b f g c {} {}"
# There are 3 iterations of the loop.
.DE
.SH KEYWORDS
foreach, iteration, list, looping
| > > > > | 78 79 80 81 82 83 84 85 86 87 88 89 90 |
set x {}
foreach i {a b c} {j k} {d e f g} {
lappend x $i $j $k
}
# The value of x is "a d e b f g c {} {}"
# There are 3 iterations of the loop.
.DE
.SH "SEE ALSO"
for(n), while(n), break(n), continue(n)
.SH KEYWORDS
foreach, iteration, list, looping
|
Changes to doc/format.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: format.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH format n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME format \- Format a string in the style of sprintf |
| ︙ | ︙ | |||
206 207 208 209 210 211 212 213 214 | The \fBl\fR modifier is ignored; integer values are always converted as if there were no modifier present and real values are always converted as if the \fBl\fR modifier were present (i.e. type \fBdouble\fR is used for the internal representation). If the \fBh\fR modifier is specified then integer values are truncated to \fBshort\fR before conversion. .SH KEYWORDS conversion specifier, format, sprintf, string, substitution | > > > | 206 207 208 209 210 211 212 213 214 215 216 217 | The \fBl\fR modifier is ignored; integer values are always converted as if there were no modifier present and real values are always converted as if the \fBl\fR modifier were present (i.e. type \fBdouble\fR is used for the internal representation). If the \fBh\fR modifier is specified then integer values are truncated to \fBshort\fR before conversion. .SH "SEE ALSO" sprintf(3), string(n) .SH KEYWORDS conversion specifier, format, sprintf, string, substitution |
Changes to doc/gets.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: gets.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH gets n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME gets \- Read a line from a channel |
| ︙ | ︙ | |||
40 41 42 43 44 45 46 | and no-full-line-available cases can produce the same results as if there were an input line consisting only of the end-of-line character(s). The \fBeof\fR and \fBfblocked\fR commands can be used to distinguish these three cases. .SH "SEE ALSO" | | | 40 41 42 43 44 45 46 47 48 49 50 | and no-full-line-available cases can produce the same results as if there were an input line consisting only of the end-of-line character(s). The \fBeof\fR and \fBfblocked\fR commands can be used to distinguish these three cases. .SH "SEE ALSO" file(n), eof(n), fblocked(n) .SH KEYWORDS blocking, channel, end of file, end of line, line, nonblocking, read |
Changes to doc/glob.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: glob.n,v 1.7.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH glob n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME glob \- Return names of files that match patterns |
| ︙ | ︙ | |||
150 151 152 153 154 155 156 157 158 159 | \fBMacintosh\fR . When using the options, \fB\-dir\fR, \fB\-join\fR or \fB\-path\fR, glob assumes the directory separator for the entire pattern is the standard ``:''. When not using these options, glob examines each pattern argument and uses ``/'' unless the pattern contains a ``:''. .SH KEYWORDS exist, file, glob, pattern | > > | 150 151 152 153 154 155 156 157 158 159 160 161 | \fBMacintosh\fR . When using the options, \fB\-dir\fR, \fB\-join\fR or \fB\-path\fR, glob assumes the directory separator for the entire pattern is the standard ``:''. When not using these options, glob examines each pattern argument and uses ``/'' unless the pattern contains a ``:''. .SH "SEE ALSO" file(n) .SH KEYWORDS exist, file, glob, pattern |
Changes to doc/global.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: global.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH global n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME global \- Access global variables |
| ︙ | ︙ | |||
23 24 25 26 27 28 29 30 31 | If so then it declares the given \fIvarname\fR's to be global variables rather than local ones. Global variables are variables in the global namespace. For the duration of the current procedure (and only while executing in the current procedure), any reference to any of the \fIvarname\fRs will refer to the global variable by the same name. .SH "SEE ALSO" | > > > > | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | If so then it declares the given \fIvarname\fR's to be global variables rather than local ones. Global variables are variables in the global namespace. For the duration of the current procedure (and only while executing in the current procedure), any reference to any of the \fIvarname\fRs will refer to the global variable by the same name. .PP Please note that this is done by creating local variables that are linked to the global variables, and therefore that these variables will be listed by \fBinfo locals\fR like all other local variables. .SH "SEE ALSO" namespace(n), upvar(n), variable(n) .SH KEYWORDS global, namespace, procedure, variable |
Changes to doc/http.n.
1 2 | '\" '\" Copyright (c) 1995-1997 Sun Microsystems, Inc. | | | | > > > > | 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 | '\" '\" Copyright (c) 1995-1997 Sun Microsystems, Inc. '\" Copyright (c) 1998-2000 by Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: http.n,v 1.10.2.4 2001/09/07 02:43:39 dgp Exp $ '\" .so man.macros .TH "Http" n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Http \- Client-side implementation of the HTTP/1.0 protocol. .SH SYNOPSIS \fBpackage require http ?2.4?\fP .sp \fB::http::config \fI?options?\fR .sp \fB::http::geturl \fIurl ?options?\fR .sp \fB::http::formatQuery \fIlist\fR .sp \fB::http::reset \fItoken\fR .sp \fB::http::wait \fItoken\fR .sp \fB::http::status \fItoken\fR .sp \fB::http::size \fItoken\fR .sp \fB::http::code \fItoken\fR .sp \fB::http::ncode \fItoken\fR .sp \fB::http::data \fItoken\fR .sp \fB::http::error \fItoken\fR .sp \fB::http::cleanup \fItoken\fR .sp \fB::http::register \fIproto port command\fR .sp \fB::http::unregister \fIproto\fR .BE |
| ︙ | ︙ | |||
53 54 55 56 57 58 59 | a custom \fBsocket\fR command, via \fBhttp::register\fR. .PP The \fB::http::geturl\fR procedure does a HTTP transaction. Its \fIoptions \fR determine whether a GET, POST, or HEAD transaction is performed. The return value of \fB::http::geturl\fR is a token for the transaction. The value is also the name of an array in the ::http namespace | < | | | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | a custom \fBsocket\fR command, via \fBhttp::register\fR. .PP The \fB::http::geturl\fR procedure does a HTTP transaction. Its \fIoptions \fR determine whether a GET, POST, or HEAD transaction is performed. The return value of \fB::http::geturl\fR is a token for the transaction. The value is also the name of an array in the ::http namespace that contains state information about the transaction. The elements of this array are described in the STATE ARRAY section. .PP If the \fB-command\fP option is specified, then the HTTP operation is done in the background. \fB::http::geturl\fR returns immediately after generating the HTTP request and the callback is invoked when the transaction completes. For this to work, the Tcl event loop must be active. In Tk applications this is always true. For pure-Tcl |
| ︙ | ︙ | |||
107 108 109 110 111 112 113 | .TP \fB\-useragent\fP \fIstring\fP The value of the User-Agent header in the HTTP request. The default is \fB"Tcl http client package 2.2."\fR .RE .TP \fB::http::geturl\fP \fIurl\fP ?\fIoptions\fP? | | > > > > > > < < | < | | 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 | .TP \fB\-useragent\fP \fIstring\fP The value of the User-Agent header in the HTTP request. The default is \fB"Tcl http client package 2.2."\fR .RE .TP \fB::http::geturl\fP \fIurl\fP ?\fIoptions\fP? The \fB::http::geturl\fR command is the main procedure in the package. The \fB\-query\fR option causes a POST operation and the \fB\-validate\fR option causes a HEAD operation; otherwise, a GET operation is performed. The \fB::http::geturl\fR command returns a \fItoken\fR value that can be used to get information about the transaction. See the STATE ARRAY and ERRORS section for details. The \fB::http::geturl\fR command blocks until the operation completes, unless the \fB\-command\fR option specifies a callback that is invoked when the HTTP transaction completes. \fB::http::geturl\fR takes several options: .RS .TP \fB\-binary\fP \fIboolean\fP Specifies whether to force interpreting the url data as binary. Normally this is auto-detected (anything not beginning with a \fBtext\fR content type or whose content encoding is \fBgzip\fR or \fBcompress\fR is considered binary data). .TP \fB\-blocksize\fP \fIsize\fP The blocksize used when reading the URL. At most \fIsize\fR bytes are read at once. After each block, a call to the \fB\-progress\fR callback is made (if that option is specified). .TP \fB\-channel\fP \fIname\fP Copy the URL contents to channel \fIname\fR instead of saving it in \fBstate(body)\fR. .TP \fB\-command\fP \fIcallback\fP Invoke \fIcallback\fP after the HTTP transaction completes. |
| ︙ | ︙ | |||
258 259 260 261 262 263 264 | \fB::http::reset\fP \fItoken\fP ?\fIwhy\fP? This command resets the HTTP transaction identified by \fItoken\fR, if any. This sets the \fBstate(status)\fP value to \fIwhy\fP, which defaults to \fBreset\fR, and then calls the registered \fB\-command\fR callback. .TP \fB::http::wait\fP \fItoken\fP This is a convenience procedure that blocks and waits for the transaction to complete. This only works in trusted code because it | | > > > > > > > > > > > > | > | > > > > | 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 | \fB::http::reset\fP \fItoken\fP ?\fIwhy\fP? This command resets the HTTP transaction identified by \fItoken\fR, if any. This sets the \fBstate(status)\fP value to \fIwhy\fP, which defaults to \fBreset\fR, and then calls the registered \fB\-command\fR callback. .TP \fB::http::wait\fP \fItoken\fP This is a convenience procedure that blocks and waits for the transaction to complete. This only works in trusted code because it uses \fBvwait\fR. Also, it's not useful for the case where \fB::http::geturl\fP is called \fIwithout\fP the \fB-command\fP option because in this case the \fB::http::geturl\fP call doesn't return until the HTTP transaction is complete, and thus there's nothing to wait for. .TP \fB::http::data\fP \fItoken\fP This is a convenience procedure that returns the \fBbody\fP element (i.e., the URL data) of the state array. .TP \fB::http::error\fP \fItoken\fP This is a convenience procedure that returns the \fBerror\fP element of the state array. .TP \fB::http::status\fP \fItoken\fP This is a convenience procedure that returns the \fBstatus\fP element of the state array. .TP \fB::http::code\fP \fItoken\fP This is a convenience procedure that returns the \fBhttp\fP element of the state array. .TP \fB::http::ncode\fP \fItoken\fP This is a convenience procedure that returns just the numeric return code (200, 404, etc.) from the \fBhttp\fP element of the state array. .TP \fB::http::size\fP \fItoken\fP This is a convenience procedure that returns the \fBcurrentsize\fP element of the state array, which represents the number of bytes received from the URL in the \fB::http::geturl\fP call. .TP \fB::http::cleanup\fP \fItoken\fP This procedure cleans up the state associated with the connection identified by \fItoken\fP. After this call, the procedures like \fB::http::data\fP cannot be used to get information about the operation. It is \fIstrongly\fP recommended that you call this function after you're done with a given HTTP request. Not doing so will result in memory not being freed, and if your app calls \fB::http::geturl\fP enough times, the memory leak could cause a performance hit...or worse. .TP \fB::http::register\fP \fIproto port command\fP This procedure allows one to provide custom HTTP transport types such as HTTPS, by registering a prefix, the default port, and the command to execute to create the Tcl \fBchannel\fR. E.g.: .RS .CS |
| ︙ | ︙ | |||
305 306 307 308 309 310 311 | This procedure unregisters a protocol handler that was previously registered via \fBhttp::register\fR. .SH "ERRORS" The \fBhttp::geturl\fP procedure will raise errors in the following cases: invalid command line options, an invalid URL, | | > > > > > > > < > > > | | > > > > > > > | < > > | | | < | | 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 | This procedure unregisters a protocol handler that was previously registered via \fBhttp::register\fR. .SH "ERRORS" The \fBhttp::geturl\fP procedure will raise errors in the following cases: invalid command line options, an invalid URL, a URL on a non-existent host, or a URL at a bad port on an existing host. These errors mean that it cannot even start the network transaction. It will also raise an error if it gets an I/O error while writing out the HTTP request header. For synchronous \fB::http::geturl\fP calls (where \fB-command\fP is not specified), it will raise an error if it gets an I/O error while reading the HTTP reply headers or data. Because \fB::http::geturl\fP doesn't return a token in these cases, it does all the required cleanup and there's no issue of your app having to call \fB::http::cleanup\fP. .PP For asynchronous \fB::http::geturl\fP calls, all of the above error situations apply, except that if there's any error while reading the HTTP reply headers or data, no exception is thrown. This is because after writing the HTTP headers, \fB::http::geturl\fP returns, and the rest of the HTTP transaction occurs in the background. The command callback can check if any error occurred during the read by calling \fB::http::status\fP to check the status and if it's \fIerror\fP, calling \fB::http::error\fP to get the error message. .PP Alternatively, if the main program flow reaches a point where it needs to know the result of the asynchronous HTTP request, it can call \fB::http::wait\fP and then check status and error, just as the callback does. .PP In any case, you must still call \fBhttp::cleanup\fP to delete the state array when you're done. .PP There are other possible results of the HTTP transaction determined by examining the status from \fBhttp::status\fP. These are described below. .TP ok If the HTTP transaction completes entirely, then status will be \fBok\fP. However, you should still check the \fBhttp::code\fP value to get the HTTP status. The \fBhttp::ncode\fP procedure provides just the numeric error (e.g., 200, 404 or 500) while the \fBhttp::code\fP procedure returns a value like "HTTP 404 File not found". .TP eof If the server closes the socket without replying, then no error is raised, but the status of the transaction will be \fBeof\fP. .TP error The error message will also be stored in the \fBerror\fP status array element, accessible via \fB::http::error\fP. .PP Another error possibility is that \fBhttp::geturl\fP is unable to write all the post query data to the server before the server responds and closes the socket. The error message is saved in the \fBposterror\fP status array element and then \fBhttp::geturl\fP attempts to complete the transaction. |
| ︙ | ︙ | |||
367 368 369 370 371 372 373 374 375 376 377 378 379 380 | the array are supported: .RS .TP \fBbody\fR The contents of the URL. This will be empty if the \fB\-channel\fR option has been specified. This value is returned by the \fB::http::data\fP command. .TP \fBcurrentsize\fR The current number of bytes fetched from the URL. This value is returned by the \fB::http::size\fP command. .TP \fBerror\fR If defined, this is the error string seen when the HTTP transaction was aborted. | > > > > > > > > > | 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 | the array are supported: .RS .TP \fBbody\fR The contents of the URL. This will be empty if the \fB\-channel\fR option has been specified. This value is returned by the \fB::http::data\fP command. .TP \fBcharset\fR The value of the charset attribute from the \fBContent-Type\fR meta-data value. If none was specified, this defaults to the RFC standard \fBiso8859-1\fR, or the value of \fB$::http::defaultCharset\fR. Incoming text data will be automatically converted from this charset to utf-8. .TP \fBcoding\fR A copy of the \fBContent-Encoding\fR meta-data value. .TP \fBcurrentsize\fR The current number of bytes fetched from the URL. This value is returned by the \fB::http::size\fP command. .TP \fBerror\fR If defined, this is the error string seen when the HTTP transaction was aborted. |
| ︙ | ︙ | |||
420 421 422 423 424 425 426 | .TP \fBposterror\fR The error, if any, that occurred while writing the post query data to the server. .TP \fBstatus\fR Either \fBok\fR, for successful completion, \fBreset\fR for | > | | 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 | .TP \fBposterror\fR The error, if any, that occurred while writing the post query data to the server. .TP \fBstatus\fR Either \fBok\fR, for successful completion, \fBreset\fR for user-reset, \fBtimeout\fP if a timeout occurred before the transaction could complete, or \fBerror\fR for an error condition. During the transaction this value is the empty string. .TP \fBtotalsize\fR A copy of the \fBContent-Length\fR meta-data value. .TP \fBtype\fR A copy of the \fBContent-Type\fR meta-data value. |
| ︙ | ︙ | |||
464 465 466 467 468 469 470 |
}
return $token
}
proc ::http::Progress {args} {
puts -nonewline stderr . ; flush stderr
}
| < > > < < | 513 514 515 516 517 518 519 520 521 522 523 524 525 526 |
}
return $token
}
proc ::http::Progress {args} {
puts -nonewline stderr . ; flush stderr
}
.DE
.SH "SEE ALSO"
safe(n), socket(n), safesock(n)
.SH KEYWORDS
security policy, socket
|
Changes to doc/if.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: if.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH if n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME if \- Execute scripts conditionally |
| ︙ | ︙ | |||
35 36 37 38 39 40 41 42 43 | ``noise words'' to make the command easier to read. There may be any number of \fBelseif\fR clauses, including zero. \fIBodyN\fR may also be omitted as long as \fBelse\fR is omitted too. The return value from the command is the result of the body script that was executed, or an empty string if none of the expressions was non-zero and there was no \fIbodyN\fR. .SH KEYWORDS boolean, conditional, else, false, if, true | > > > | 35 36 37 38 39 40 41 42 43 44 45 46 | ``noise words'' to make the command easier to read. There may be any number of \fBelseif\fR clauses, including zero. \fIBodyN\fR may also be omitted as long as \fBelse\fR is omitted too. The return value from the command is the result of the body script that was executed, or an empty string if none of the expressions was non-zero and there was no \fIbodyN\fR. .SH "SEE ALSO" expr(n), for(n), foreach(n) .SH KEYWORDS boolean, conditional, else, false, if, true |
Changes to doc/incr.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > > > | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: incr.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH incr n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME incr \- Increment the value of a variable .SH SYNOPSIS \fBincr \fIvarName \fR?\fIincrement\fR? .BE .SH DESCRIPTION .PP Increments the value stored in the variable whose name is \fIvarName\fR. The value of the variable must be an integer. If \fIincrement\fR is supplied then its value (which must be an integer) is added to the value of variable \fIvarName\fR; otherwise 1 is added to \fIvarName\fR. The new value is stored as a decimal string in variable \fIvarName\fR and also returned as result. .SH "SEE ALSO" expr(n) .SH KEYWORDS add, increment, variable, value |
Changes to doc/join.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > > > | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: join.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH join n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME join \- Create a string by joining together list elements .SH SYNOPSIS \fBjoin \fIlist \fR?\fIjoinString\fR? .BE .SH DESCRIPTION .PP The \fIlist\fR argument must be a valid Tcl list. This command returns the string formed by joining all of the elements of \fIlist\fR together with \fIjoinString\fR separating each adjacent pair of elements. The \fIjoinString\fR argument defaults to a space character. .SH "SEE ALSO" list(n), lappend(n) .SH KEYWORDS element, join, list, separator |
Changes to doc/lappend.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: lappend.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lappend n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME lappend \- Append list elements onto a variable |
| ︙ | ︙ | |||
27 28 29 30 31 32 33 34 35 | \fBLappend\fR is similar to \fBappend\fR except that the \fIvalue\fRs are appended as list elements rather than raw text. This command provides a relatively efficient way to build up large lists. For example, ``\fBlappend a $b\fR'' is much more efficient than ``\fBset a [concat $a [list $b]]\fR'' when \fB$a\fR is long. .SH KEYWORDS append, element, list, variable | > > > | 27 28 29 30 31 32 33 34 35 36 37 38 | \fBLappend\fR is similar to \fBappend\fR except that the \fIvalue\fRs are appended as list elements rather than raw text. This command provides a relatively efficient way to build up large lists. For example, ``\fBlappend a $b\fR'' is much more efficient than ``\fBset a [concat $a [list $b]]\fR'' when \fB$a\fR is long. .SH "SEE ALSO" list(n), lindex(n), linsert(n), llength(n), lsort(n), lrange(n) .SH KEYWORDS append, element, list, variable |
Changes to doc/library.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1991-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1991-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: library.n,v 1.11.2.3 2001/08/24 16:19:09 dgp Exp $ .so man.macros .TH library n "8.0" Tcl "Tcl Built-In Commands" .BS .SH NAME auto_execok, auto_import, auto_load, auto_mkindex, auto_mkindex_old, auto_qualify, auto_reset, tcl_findLibrary, parray, tcl_endOfWord, tcl_startOfNextWord, tcl_startOfPreviousWord, tcl_wordBreakAfter, tcl_wordBreakBefore \- standard library of Tcl procedures .SH SYNOPSIS .nf |
| ︙ | ︙ | |||
77 78 79 80 81 82 83 | .TP \fBauto_import \fIpattern\fR \fBAuto_import\fR is invoked during \fBnamespace import\fR to see if the imported commands specified by \fIpattern\fR reside in an autoloaded library. If so, the commands are loaded so that they will be available to the interpreter for creating the import links. If the commands do not reside in an autoloaded library, \fBauto_import\fR | | > | 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | .TP \fBauto_import \fIpattern\fR \fBAuto_import\fR is invoked during \fBnamespace import\fR to see if the imported commands specified by \fIpattern\fR reside in an autoloaded library. If so, the commands are loaded so that they will be available to the interpreter for creating the import links. If the commands do not reside in an autoloaded library, \fBauto_import\fR does nothing. The pattern matching is performed according to the matching rules of \fBnamespace import\fR. .TP \fBauto_load \fIcmd\fR This command attempts to load the definition for a Tcl command named \fIcmd\fR. To do this, it searches an \fIauto-load path\fR, which is a list of one or more directories. The auto-load path is given by the global variable \fB$auto_path\fR if it exists. If there is no \fB$auto_path\fR variable, then the TCLLIBPATH environment variable is |
| ︙ | ︙ | |||
300 301 302 303 304 305 306 | Used by \fBunknown\fR to record the command(s) for which it is searching. It is used to detect errors where \fBunknown\fR recurses on itself infinitely. The variable is unset before \fBunknown\fR returns. .SH "SEE ALSO" | | | 301 302 303 304 305 306 307 308 309 310 311 | Used by \fBunknown\fR to record the command(s) for which it is searching. It is used to detect errors where \fBunknown\fR recurses on itself infinitely. The variable is unset before \fBunknown\fR returns. .SH "SEE ALSO" info(n), re_syntax(n) .SH KEYWORDS auto-exec, auto-load, library, unknown, word, whitespace |
Changes to doc/lindex.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: lindex.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lindex n 8.2 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME lindex \- Retrieve an element from a list |
| ︙ | ︙ | |||
28 29 30 31 32 33 34 35 36 37 | If \fIindex\fR is negative or greater than or equal to the number of elements in \fIvalue\fR, then an empty string is returned. If \fIindex\fR has the value \fBend\fR, it refers to the last element in the list, and \fBend\-\fIinteger\fR refers to the last element in the list minus the specified integer offset. .SH KEYWORDS element, index, list | > > > | 28 29 30 31 32 33 34 35 36 37 38 39 40 | If \fIindex\fR is negative or greater than or equal to the number of elements in \fIvalue\fR, then an empty string is returned. If \fIindex\fR has the value \fBend\fR, it refers to the last element in the list, and \fBend\-\fIinteger\fR refers to the last element in the list minus the specified integer offset. .SH "SEE ALSO" list(n), lappend(n), linsert(n), llength(n), lsearch(n), lsort(n), lrange(n), lreplace(n) .SH KEYWORDS element, index, list |
Changes to doc/linsert.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: linsert.n,v 1.3.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH linsert n 8.2 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME linsert \- Insert elements into a list |
| ︙ | ︙ | |||
25 26 27 28 29 30 31 32 33 | the new list. If \fIindex\fR is less than or equal to zero, then the new elements are inserted at the beginning of the list. If \fIindex\fR has the value \fBend\fR, or if it is greater than or equal to the number of elements in the list, then the new elements are appended to the list. \fBend\-\fIinteger\fR refers to the last element in the list minus the specified integer offset. .SH KEYWORDS element, insert, list | > > > | 25 26 27 28 29 30 31 32 33 34 35 36 | the new list. If \fIindex\fR is less than or equal to zero, then the new elements are inserted at the beginning of the list. If \fIindex\fR has the value \fBend\fR, or if it is greater than or equal to the number of elements in the list, then the new elements are appended to the list. \fBend\-\fIinteger\fR refers to the last element in the list minus the specified integer offset. .SH "SEE ALSO" list(n), lappend(n), llength(n) .SH KEYWORDS element, insert, list |
Changes to doc/list.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | > > > > | 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 |
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\" RCS: @(#) $Id: list.n,v 1.2.18.2 2001/12/05 22:27:25 dgp Exp $
'\"
.so man.macros
.TH list n "" Tcl "Tcl Built-In Commands"
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
list \- Create a list
.SH SYNOPSIS
\fBlist \fR?\fIarg arg ...\fR?
.BE
.SH DESCRIPTION
.PP
This command returns a list comprised of all the \fIarg\fRs,
or an empty string if no \fIarg\fRs are specified.
Braces and backslashes get added as necessary, so that the \fBlindex\fR command
may be used on the result to re-extract the original arguments, and also
so that \fBeval\fR may be used to execute the resulting list, with
\fIarg1\fR comprising the command's name and the other \fIarg\fRs comprising
its arguments. \fBList\fR produces slightly different results than
\fBconcat\fR: \fBconcat\fR removes one level of grouping before forming
the list, while \fBlist\fR works directly from the original arguments.
For example, the command
.CS
\fBlist a b {c d e} {f {g h}}\fR
.CE
will return
.CS
\fBa b {c d e} {f {g h}}\fR
.CE
while \fBconcat\fR with the same arguments will return
.CS
\fBa b c d e f {g h}\fR
.CE
.SH "SEE ALSO"
lappend(n), lindex(n), linsert(n), llength(n), lsearch(n), lsort(n),
lrange(n), lreplace(n)
.SH KEYWORDS
element, list
|
Changes to doc/llength.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > > > | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: llength.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH llength n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME llength \- Count the number of elements in a list .SH SYNOPSIS \fBllength \fIlist\fR .BE .SH DESCRIPTION .PP Treats \fIlist\fR as a list and returns a decimal string giving the number of elements in it. .SH "SEE ALSO" list(n), lindex(n), lrange(n) .SH KEYWORDS element, list, length |
Changes to doc/load.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: load.n,v 1.5.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH load n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME load \- Load machine code and initialize new commands. |
| ︙ | ︙ | |||
125 126 127 128 129 130 131 | .PP If the same file is \fBload\fRed by different \fIfileName\fRs, it will be loaded into the process's address space multiple times. The behavior of this varies from system to system (some systems may detect the redundant loads, others may not). .SH "SEE ALSO" | | | 125 126 127 128 129 130 131 132 133 134 135 | .PP If the same file is \fBload\fRed by different \fIfileName\fRs, it will be loaded into the process's address space multiple times. The behavior of this varies from system to system (some systems may detect the redundant loads, others may not). .SH "SEE ALSO" \fBinfo sharedlibextension\fR, Tcl_StaticPackage(3), safe(n) .SH KEYWORDS binary code, loading, safe interpreter, shared library |
Changes to doc/lrange.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: lrange.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lrange n 7.4 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME lrange \- Return one or more adjacent elements from a list |
| ︙ | ︙ | |||
31 32 33 34 35 36 37 38 39 | If \fIfirst\fR is greater than \fIlast\fR then an empty string is returned. Note: ``\fBlrange \fIlist first first\fR'' does not always produce the same result as ``\fBlindex \fIlist first\fR'' (although it often does for simple fields that aren't enclosed in braces); it does, however, produce exactly the same results as ``\fBlist [lindex \fIlist first\fB]\fR'' .SH KEYWORDS element, list, range, sublist | > > > | 31 32 33 34 35 36 37 38 39 40 41 42 | If \fIfirst\fR is greater than \fIlast\fR then an empty string is returned. Note: ``\fBlrange \fIlist first first\fR'' does not always produce the same result as ``\fBlindex \fIlist first\fR'' (although it often does for simple fields that aren't enclosed in braces); it does, however, produce exactly the same results as ``\fBlist [lindex \fIlist first\fB]\fR'' .SH "SEE ALSO" lappend(n), lindex(n), linsert(n), list(n), llength(n), lreplace(n) .SH KEYWORDS element, list, range, sublist |
Changes to doc/lreplace.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: lreplace.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lreplace n 7.4 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME lreplace \- Replace elements in a list with new elements |
| ︙ | ︙ | |||
39 40 41 42 43 44 45 46 47 | The \fIelement\fR arguments specify zero or more new arguments to be added to the list in place of those that were deleted. Each \fIelement\fR argument will become a separate element of the list. If no \fIelement\fR arguments are specified, then the elements between \fIfirst\fR and \fIlast\fR are simply deleted. If \fIlist\fR is empty, any \fIelement\fR arguments are added to the end of the list. .SH KEYWORDS element, list, replace | > > > > | 39 40 41 42 43 44 45 46 47 48 49 50 51 | The \fIelement\fR arguments specify zero or more new arguments to be added to the list in place of those that were deleted. Each \fIelement\fR argument will become a separate element of the list. If no \fIelement\fR arguments are specified, then the elements between \fIfirst\fR and \fIlast\fR are simply deleted. If \fIlist\fR is empty, any \fIelement\fR arguments are added to the end of the list. .SH "SEE ALSO" lappend(n), lindex(n), linsert(n), list(n), llength(n), lrange(n), lsearch(n), lsort(n) .SH KEYWORDS element, list, replace |
Changes to doc/lsort.n.
1 2 3 4 5 6 7 8 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 1999 Scriptics Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 1999 Scriptics Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: lsort.n,v 1.5.2.2 2001/10/08 15:50:24 dkf Exp $ '\" .so man.macros .TH lsort n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME lsort \- Sort the elements of a list |
| ︙ | ︙ | |||
61 62 63 64 65 66 67 | This is the default. .TP 20 \fB\-decreasing\fR Sort the list in decreasing order (``largest'' items first). .TP 20 \fB\-index\0\fIindex\fR If this option is specified, each of the elements of \fIlist\fR must | | | | | > > > > > > | > > > > > > > > > < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
This is the default.
.TP 20
\fB\-decreasing\fR
Sort the list in decreasing order (``largest'' items first).
.TP 20
\fB\-index\0\fIindex\fR
If this option is specified, each of the elements of \fIlist\fR must
itself be a proper Tcl sublist. Instead of sorting based on whole
sublists, \fBlsort\fR will extract the \fIindex\fR'th element from
each sublist and sort based on the given element. The keyword
\fBend\fP is allowed for the \fIindex\fP to sort on the last sublist
element,
.VS 8.3.4
and \fBend-\fIindex\fR sorts on a sublist element offset from
the end.
.VE
For example,
.RS
.CS
lsort -integer -index 1 {{First 24} {Second 18} {Third 30}}
.CE
returns \fB{Second 18} {First 24} {Third 30}\fR, and
.VS 8.3.4
'\"
'\" This example is from the test suite!
'\"
.CS
lsort -index end-1 {{a 1 e i} {b 2 3 f g} {c 4 5 6 d h}}
.CE
returns \fB{c 4 5 6 d h} {a 1 e i} {b 2 3 f g}\fR.
.VE
This option is much more efficient than using \fB\-command\fR
to achieve the same effect.
.RE
.TP 20
\fB\-unique\fR
If this option is specified, then only the last set of duplicate
elements found in the list will be retained. Note that duplicates are
determined relative to the comparison used in the sort. Thus if
\fI-index 0\fR is used, \fB{1 a}\fR and \fB{1 b}\fR would be
considered duplicates and only the second element, \fB{1 b}\fR, would
be retained.
.SH "NOTES"
.PP
The options to \fBlsort\fR only control what sort of comparison is
used, and do not necessarily constrain what the values themselves
actually are. This distinction is only noticeable when the list to be
sorted has fewer than two elements.
.PP
The \fBlsort\fR command is reentrant, meaning it is safe to use as
part of the implementation of a command used in the \fB\-command\fR
option.
.SH "EXAMPLES"
.PP
Sorting a list using ASCII sorting:
.CS
% lsort {a10 B2 b1 a1 a2}
B2 a1 a10 a2 b1
.CE
.PP
Sorting a list using Dictionary sorting:
.CS
% lsort -dictionary {a10 B2 b1 a1 a2}
a1 a2 a10 b1 B2
.CE
.PP
Sorting lists of integers:
.CS
% lsort -integer {5 3 1 2 11 4}
1 2 3 4 5 11
% lsort -integer {1 2 0x5 7 0 4 -1}
-1 0 1 2 4 0x5 7
.CE
.PP
Sorting lists of floating-point numbers:
.CS
% lsort -real {5 3 1 2 11 4}
1 2 3 4 5 11
% lsort -real {.5 0.07e1 0.4 6e-1}
0.4 .5 6e-1 0.07e1
.CE
.PP
Sorting using indices:
.CS
% # Note the space character before the c
% lsort {{a 5} { c 3} {b 4} {e 1} {d 2}}
{ c 3} {a 5} {b 4} {d 2} {e 1}
% lsort -index 0 {{a 5} { c 3} {b 4} {e 1} {d 2}}
{a 5} {b 4} { c 3} {d 2} {e 1}
% lsort -index 1 {{a 5} { c 3} {b 4} {e 1} {d 2}}
{e 1} {d 2} { c 3} {b 4} {a 5}
.CE
.PP
Stripping duplicate values using sorting:
.CS
% lsort -unique {a b c a b c a b c}
a b c
.CE
.PP
More complex sorting using a comparison function:
.CS
% proc compare {a b} {
set a0 [lindex $a 0]
set b0 [lindex $b 0]
if {$a0 < $b0} {
return -1
} elseif {$a0 > $b0} {
return 1
}
return [string compare [lindex $a 1] [lindex $b 1]]
}
% lsort -command compare \\
{{3 apple} {0x2 carrot} {1 dingo} {2 banana}}
{1 dingo} {2 banana} {0x2 carrot} {3 apple}
.CE
.SH "SEE ALSO"
lappend(n), lindex(n), linsert(n), list(n), llength(n), lrange(n),
lreplace(n), lsearch(n)
.SH KEYWORDS
element, list, order, sort
|
Changes to doc/man.macros.
| ︙ | ︙ | |||
55 56 57 58 59 60 61 | '\" option's name as specified in the class command, dbName gives '\" the option's name in the option database, and dbClass gives '\" the option's class in the option database. '\" '\" .UL arg1 arg2 '\" Print arg1 underlined, then print arg2 normally. '\" | | | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | '\" option's name as specified in the class command, dbName gives '\" the option's name in the option database, and dbClass gives '\" the option's class in the option database. '\" '\" .UL arg1 arg2 '\" Print arg1 underlined, then print arg2 normally. '\" '\" RCS: @(#) $Id: man.macros,v 1.3.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" '\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages. .if t .wh -1.3i ^B .nr ^l \n(.l .ad b '\" # Start an argument description .de AP |
| ︙ | ︙ | |||
195 196 197 198 199 200 201 | .sp .. '\" # SO - start of list of standard options .de SO .SH "STANDARD OPTIONS" .LP .nf | | | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | .sp .. '\" # SO - start of list of standard options .de SO .SH "STANDARD OPTIONS" .LP .nf .ta 5.5c 11c .ft B .. '\" # SE - end of list of standard options .de SE .fi .ft R .LP |
| ︙ | ︙ |
Changes to doc/memory.n.
1 2 3 4 5 | '\" '\" Copyright (c) 1992-1999 by Karl Lehenbauer and Mark Diekhans '\" Copyright (c) 2000 by Scriptics Corporation. '\" All rights reserved. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | '\" '\" Copyright (c) 1992-1999 by Karl Lehenbauer and Mark Diekhans '\" Copyright (c) 2000 by Scriptics Corporation. '\" All rights reserved. '\" '\" RCS: @(#) $Id: memory.n,v 1.2.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH memory n 8.1 Tcl "Tcl Built-In Commands" .BS .SH NAME memory \- Control Tcl memory debugging capabilities. .SH SYNOPSIS |
| ︙ | ︙ | |||
74 75 76 77 78 79 80 | Write a list of all currently allocated memory to the specified file. .SH "SEE ALSO" ckalloc, ckfree, Tcl_ValidateAllMemory, Tcl_DumpActiveMemory, TCL_MEM_DEBUG .SH KEYWORDS memory, debug | < < | 74 75 76 77 78 79 80 | Write a list of all currently allocated memory to the specified file. .SH "SEE ALSO" ckalloc, ckfree, Tcl_ValidateAllMemory, Tcl_DumpActiveMemory, TCL_MEM_DEBUG .SH KEYWORDS memory, debug |
Changes to doc/open.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: open.n,v 1.9.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH open n 7.6 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME open \- Open a file-based or command pipeline channel |
| ︙ | ︙ | |||
104 105 106 107 108 109 110 111 112 113 114 115 116 117 | \fBTRUNC\fR If the file exists it is truncated to zero length. .PP If a new file is created as part of opening it, \fIpermissions\fR (an integer) is used to set the permissions for the new file in conjunction with the process's file mode creation mask. \fIPermissions\fR defaults to 0666. .SH "COMMAND PIPELINES" .PP If the first character of \fIfileName\fR is ``|'' then the remaining characters of \fIfileName\fR are treated as a list of arguments that describe a command pipeline to invoke, in the same style as the arguments for \fBexec\fR. In this case, the channel identifier returned by \fBopen\fR may be used | > > > > > > > > > > > > | 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 | \fBTRUNC\fR If the file exists it is truncated to zero length. .PP If a new file is created as part of opening it, \fIpermissions\fR (an integer) is used to set the permissions for the new file in conjunction with the process's file mode creation mask. \fIPermissions\fR defaults to 0666. .PP '\" Not versioned as advice applies to all recent versions of Tcl. '\" Prior to that, Tcl didn't really support binary files anyway... .VS Note that if you are going to be reading or writing binary data from the channel created by this command, you should use the \fBfconfigure\fR command to change the \fB-translation\fR option of the channel to \fBbinary\fR before transferring any binary data. This is in contrast to the ``b'' character passed as part of the equivalent of the \fIaccess\fR parameter to some versions of the C library \fIfopen()\fR function. .VE .SH "COMMAND PIPELINES" .PP If the first character of \fIfileName\fR is ``|'' then the remaining characters of \fIfileName\fR are treated as a list of arguments that describe a command pipeline to invoke, in the same style as the arguments for \fBexec\fR. In this case, the channel identifier returned by \fBopen\fR may be used |
| ︙ | ︙ | |||
247 248 249 250 251 252 253 254 | same time. If the command pipeline is started from a script, so that Tcl is not accessing the console, or if the command pipeline does not use standard input, but is redirected from a file, then the above problem does not occur. .LP See the PORTABILITY ISSUES section of the \fBexec\fR command for additional information not specific to command pipelines about executing applications on the various platforms .SH "SEE ALSO" | > > | | | 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | same time. If the command pipeline is started from a script, so that Tcl is not accessing the console, or if the command pipeline does not use standard input, but is redirected from a file, then the above problem does not occur. .LP See the PORTABILITY ISSUES section of the \fBexec\fR command for additional information not specific to command pipelines about executing applications on the various platforms .SH "SEE ALSO" file(n), close(n), filename(n), fconfigure(n), gets(n), read(n), puts(n), exec(n), fopen(1) .SH KEYWORDS access mode, append, create, file, non-blocking, open, permissions, pipeline, process, serial |
Changes to doc/package.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: package.n,v 1.3.14.2 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH package n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME package \- Facilities for package loading and version control .SH SYNOPSIS .nf \fBpackage forget ?\fIpackage package ...\fR? \fBpackage ifneeded \fIpackage version\fR ?\fIscript\fR? \fBpackage names\fR \fBpackage present \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? \fBpackage provide \fIpackage \fR?\fIversion\fR? \fBpackage require \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? \fBpackage unknown \fR?\fIcommand\fR? \fBpackage vcompare \fIversion1 version2\fR |
| ︙ | ︙ | |||
39 40 41 42 43 44 45 | Typically, only the \fBpackage require\fR and \fBpackage provide\fR commands are invoked in normal Tcl scripts; the other commands are used primarily by system scripts that maintain the package database. .PP The behavior of the \fBpackage\fR command is determined by its first argument. The following forms are permitted: .TP | | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | Typically, only the \fBpackage require\fR and \fBpackage provide\fR commands are invoked in normal Tcl scripts; the other commands are used primarily by system scripts that maintain the package database. .PP The behavior of the \fBpackage\fR command is determined by its first argument. The following forms are permitted: .TP \fBpackage forget ?\fIpackage package ...\fR? Removes all information about each specified package from this interpreter, including information provided by both \fBpackage ifneeded\fR and \fBpackage provide\fR. .TP \fBpackage ifneeded \fIpackage version\fR ?\fIscript\fR? This command typically appears only in system configuration scripts to set up the package database. It indicates that a particular version of |
| ︙ | ︙ | |||
185 186 187 188 189 190 191 192 193 | The recommended way to use packages in Tcl is to invoke \fBpackage require\fR and \fBpackage provide\fR commands in scripts, and use the procedure \fBpkg_mkIndex\fR to create package index files. Once you've done this, packages will be loaded automatically in response to \fBpackage require\fR commands. See the documentation for \fBpkg_mkIndex\fR for details. .SH KEYWORDS package, version | > > > | 185 186 187 188 189 190 191 192 193 194 195 196 | The recommended way to use packages in Tcl is to invoke \fBpackage require\fR and \fBpackage provide\fR commands in scripts, and use the procedure \fBpkg_mkIndex\fR to create package index files. Once you've done this, packages will be loaded automatically in response to \fBpackage require\fR commands. See the documentation for \fBpkg_mkIndex\fR for details. .SH "SEE ALSO" msgcat(n), packagens(n), pkgMkIndex(n) .SH KEYWORDS package, version |
Changes to doc/packagens.n.
1 2 3 4 | '\" '\" Copyright (c) 1998-2000 by Scriptics Corporation. '\" All rights reserved. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 | '\" '\" Copyright (c) 1998-2000 by Scriptics Corporation. '\" All rights reserved. '\" '\" RCS: @(#) $Id: packagens.n,v 1.2.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH pkg::create n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME pkg::create \- Construct an appropriate \fBpackage ifneeded\fR |
| ︙ | ︙ | |||
43 44 45 46 47 48 49 50 51 52 | \fB\-source\fR\0\fIfilespec\fR This parameter is similar to the \fB\-load\fR parameter, except that it specifies a Tcl library that must be loaded with the \fBsource\fR command. Any number of \fB\-source\fR parameters may be specified. .PP At least one \fB\-load\fR or \fB\-source\fR paramter must be given. .SH KEYWORDS auto-load, index, package, version | > > > | 43 44 45 46 47 48 49 50 51 52 53 54 55 | \fB\-source\fR\0\fIfilespec\fR This parameter is similar to the \fB\-load\fR parameter, except that it specifies a Tcl library that must be loaded with the \fBsource\fR command. Any number of \fB\-source\fR parameters may be specified. .PP At least one \fB\-load\fR or \fB\-source\fR paramter must be given. .SH "SEE ALSO" package(n) .SH KEYWORDS auto-load, index, package, version |
Changes to doc/pid.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: pid.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH pid n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME pid \- Retrieve process id(s) |
| ︙ | ︙ | |||
26 27 28 29 30 31 32 33 34 | in order. The list will be empty if \fIfileId\fR refers to an open file that isn't a process pipeline. If no \fIfileId\fR argument is given then \fBpid\fR returns the process identifier of the current process. All process identifiers are returned as decimal strings. .SH KEYWORDS file, pipeline, process identifier | > > > | 26 27 28 29 30 31 32 33 34 35 36 37 | in order. The list will be empty if \fIfileId\fR refers to an open file that isn't a process pipeline. If no \fIfileId\fR argument is given then \fBpid\fR returns the process identifier of the current process. All process identifiers are returned as decimal strings. .SH "SEE ALSO" exec(n), open(n) .SH KEYWORDS file, pipeline, process identifier |
Changes to doc/pkgMkIndex.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | | 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 | '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: pkgMkIndex.n,v 1.9.2.2 2001/08/24 16:19:09 dgp Exp $ '\" .so man.macros .TH pkg_mkIndex n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME pkg_mkIndex \- Build an index for automatic loading of packages .SH SYNOPSIS .nf .VS 8.3.0 \fBpkg_mkIndex ?\fI\-direct\fR? ?\fI\-lazy\fR? ?\fI\-load pkgPat\fR? ?\fI\-verbose\fR? \fIdir\fR ?\fIpattern pattern ...\fR? .VE .fi .BE .SH DESCRIPTION .PP \fBPkg_mkIndex\fR is a utility procedure that is part of the standard |
| ︙ | ︙ | |||
98 99 100 101 102 103 104 105 106 107 108 109 110 111 | interpreter, based on the first call to \fBpackage require\fR. Different versions of a package may be loaded in different interpreters. .SH OPTIONS The optional switches are: .TP 15 \fB\-lazy\fR The generated index will manage to delay loading the package until the use of one of the commands provided by the package, instead of loading it immediately upon \fBpackage require\fR. .TP 15 \fB\-load \fIpkgPat\fR The index process will pre-load any packages that exist in the | > > > > | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | interpreter, based on the first call to \fBpackage require\fR. Different versions of a package may be loaded in different interpreters. .SH OPTIONS The optional switches are: .TP 15 \fB\-direct\fR The generated index will implement direct loading of the package upon \fBpackage require\fR. This is the default. .TP 15 \fB\-lazy\fR The generated index will manage to delay loading the package until the use of one of the commands provided by the package, instead of loading it immediately upon \fBpackage require\fR. .TP 15 \fB\-load \fIpkgPat\fR The index process will pre-load any packages that exist in the |
| ︙ | ︙ | |||
227 228 229 230 231 232 233 234 235 236 | If you have a package that is split across scripts and a binary file, then you should avoid the \fB\-load\fP flag. The problem is that if you load a package before computing the index it masks any other files that provide part of the same package. If you must use \fB\-load\fP, then you must specify the scripts first; otherwise the package loaded from the binary file may mask the package defined by the scripts. .SH KEYWORDS auto-load, index, package, version | > > > | 231 232 233 234 235 236 237 238 239 240 241 242 243 | If you have a package that is split across scripts and a binary file, then you should avoid the \fB\-load\fP flag. The problem is that if you load a package before computing the index it masks any other files that provide part of the same package. If you must use \fB\-load\fP, then you must specify the scripts first; otherwise the package loaded from the binary file may mask the package defined by the scripts. .SH "SEE ALSO" package(n) .SH KEYWORDS auto-load, index, package, version |
Changes to doc/proc.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: proc.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH proc n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME proc \- Create a Tcl procedure |
| ︙ | ︙ | |||
66 67 68 69 70 71 72 73 74 | invoked, the procedure's return value is the value specified in a \fBreturn\fR command. If the procedure doesn't execute an explicit \fBreturn\fR, then its return value is the value of the last command executed in the procedure's body. If an error occurs while executing the procedure body, then the procedure-as-a-whole will return that same error. .SH KEYWORDS argument, procedure | > > > | 66 67 68 69 70 71 72 73 74 75 76 77 | invoked, the procedure's return value is the value specified in a \fBreturn\fR command. If the procedure doesn't execute an explicit \fBreturn\fR, then its return value is the value of the last command executed in the procedure's body. If an error occurs while executing the procedure body, then the procedure-as-a-whole will return that same error. .SH "SEE ALSO" info(n), unknown(n) .SH KEYWORDS argument, procedure |
Changes to doc/puts.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: puts.n,v 1.3.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH puts n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME puts \- Write to a channel |
| ︙ | ︙ | |||
59 60 61 62 63 64 65 | large amount of memory. To avoid wasting memory, nonblocking I/O should normally be used in an event-driven fashion with the \fBfileevent\fR command (don't invoke \fBputs\fR unless you have recently been notified via a file event that the channel is ready for more output data). .SH "SEE ALSO" | | | 59 60 61 62 63 64 65 66 67 68 69 | large amount of memory. To avoid wasting memory, nonblocking I/O should normally be used in an event-driven fashion with the \fBfileevent\fR command (don't invoke \fBputs\fR unless you have recently been notified via a file event that the channel is ready for more output data). .SH "SEE ALSO" file(n), fileevent(n) .SH KEYWORDS channel, newline, output, write |
Changes to doc/pwd.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | > > > | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: pwd.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH pwd n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME pwd \- Return the current working directory .SH SYNOPSIS \fBpwd\fR .BE .SH DESCRIPTION .PP Returns the path name of the current working directory. .SH "SEE ALSO" file(n), cd(n), glob(n), filename(n) .SH KEYWORDS working directory |
Changes to doc/read.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: read.n,v 1.4.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH read n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME read \- Read from a channel |
| ︙ | ︙ | |||
48 49 50 51 52 53 54 | \fBRead\fR translates end-of-line sequences in the input into newline characters according to the \fB\-translation\fR option for the channel. See the \fBfconfigure\fR manual entry for a discussion on ways in which \fBfconfigure\fR will alter input. .SH "SEE ALSO" | | | 48 49 50 51 52 53 54 55 56 57 58 | \fBRead\fR translates end-of-line sequences in the input into newline characters according to the \fB\-translation\fR option for the channel. See the \fBfconfigure\fR manual entry for a discussion on ways in which \fBfconfigure\fR will alter input. .SH "SEE ALSO" file(n), eof(n), fblocked(n), fconfigure(n) .SH KEYWORDS blocking, channel, end of line, end of file, nonblocking, read, translation, encoding |
Changes to doc/regexp.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: regexp.n,v 1.9.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH regexp n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME regexp \- Match a regular expression against a string |
| ︙ | ︙ | |||
123 124 125 126 127 128 129 | subexpressions within \fIexp\fR, or if a particular subexpression in \fIexp\fR doesn't match the string (e.g. because it was in a portion of the expression that wasn't matched), then the corresponding \fIsubMatchVar\fR will be set to ``\fB\-1 \-1\fR'' if \fB\-indices\fR has been specified or to an empty string otherwise. .SH "SEE ALSO" | | | 123 124 125 126 127 128 129 130 131 132 133 | subexpressions within \fIexp\fR, or if a particular subexpression in \fIexp\fR doesn't match the string (e.g. because it was in a portion of the expression that wasn't matched), then the corresponding \fIsubMatchVar\fR will be set to ``\fB\-1 \-1\fR'' if \fB\-indices\fR has been specified or to an empty string otherwise. .SH "SEE ALSO" re_syntax(n), regsub(n) .SH KEYWORDS match, regular expression, string |
Changes to doc/regsub.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: regsub.n,v 1.4.2.2 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH regsub n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME regsub \- Perform substitutions based on regular expression pattern matching |
| ︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | All ranges in \fIstring\fR that match \fIexp\fR are found and substitution is performed for each of these ranges. Without this switch only the first matching range is found and substituted. If \fB\-all\fR is specified, then ``&'' and ``\e\fIn\fR'' sequences are handled for each substitution using the information from the corresponding match. .TP 10 \fB\-nocase\fR Upper-case characters in \fIstring\fR will be converted to lower-case before matching against \fIexp\fR; however, substitutions specified by \fIsubSpec\fR use the original unconverted form of \fIstring\fR. .VS 8.3 .TP 10 \fB\-start\fR \fIindex\fR Specifies a character index offset into the string to start matching the regular expression at. When using this switch, `^' will not match the beginning of the line, and \\A will still | > > > > > > > > > > > > > > > > > > > > > > > > > | < < > > > | 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 | All ranges in \fIstring\fR that match \fIexp\fR are found and substitution is performed for each of these ranges. Without this switch only the first matching range is found and substituted. If \fB\-all\fR is specified, then ``&'' and ``\e\fIn\fR'' sequences are handled for each substitution using the information from the corresponding match. .TP 15 \fB\-expanded\fR Enables use of the expanded regular expression syntax where whitespace and comments are ignored. This is the same as specifying the \fB(?x)\fR embedded option (see METASYNTAX, below). .TP 15 \fB\-line\fR Enables newline-sensitive matching. By default, newline is a completely ordinary character with no special meaning. With this flag, `[^' bracket expressions and `.' never match newline, `^' matches an empty string after any newline in addition to its normal function, and `$' matches an empty string before any newline in addition to its normal function. This flag is equivalent to specifying both \fB\-linestop\fR and \fB\-lineanchor\fR, or the \fB(?n)\fR embedded option (see METASYNTAX, below). .TP 15 \fB\-linestop\fR Changes the behavior of `[^' bracket expressions and `.' so that they stop at newlines. This is the same as specifying the \fB(?p)\fR embedded option (see METASYNTAX, below). .TP 15 \fB\-lineanchor\fR Changes the behavior of `^' and `$' (the ``anchors'') so they match the beginning and end of a line respectively. This is the same as specifying the \fB(?w)\fR embedded option (see METASYNTAX, below). .TP 10 \fB\-nocase\fR Upper-case characters in \fIstring\fR will be converted to lower-case before matching against \fIexp\fR; however, substitutions specified by \fIsubSpec\fR use the original unconverted form of \fIstring\fR. .VS 8.3 .TP 10 \fB\-start\fR \fIindex\fR Specifies a character index offset into the string to start matching the regular expression at. When using this switch, `^' will not match the beginning of the line, and \\A will still match the start of the string at \fIindex\fR. \fIindex\fR will be constrained to the bounds of the input string. .VE 8.3 .TP 10 \fB\-\|\-\fR Marks the end of switches. The argument following this one will be treated as \fIexp\fR even if it starts with a \fB\-\fR. .PP The command returns a count of the number of matching ranges that were found and replaced. See the manual entry for \fBregexp\fR for details on the interpretation of regular expressions. .SH "SEE ALSO" regexp(n), re_syntax(n) .SH KEYWORDS match, pattern, regular expression, substitute |
Changes to doc/rename.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: rename.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH rename n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME rename \- Rename or delete a command |
| ︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 | If \fInewName\fR is an empty string then \fIoldName\fR is deleted. \fIoldName\fR and \fInewName\fR may include namespace qualifiers (names of containing namespaces). If a command is renamed into a different namespace, future invocations of it will execute in the new namespace. The \fBrename\fR command returns an empty string as result. .SH KEYWORDS command, delete, namespace, rename | > > > | 24 25 26 27 28 29 30 31 32 33 34 35 | If \fInewName\fR is an empty string then \fIoldName\fR is deleted. \fIoldName\fR and \fInewName\fR may include namespace qualifiers (names of containing namespaces). If a command is renamed into a different namespace, future invocations of it will execute in the new namespace. The \fBrename\fR command returns an empty string as result. .SH "SEE ALSO" namespace(n), proc(n) .SH KEYWORDS command, delete, namespace, rename |
Changes to doc/resource.n.
1 2 3 4 5 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" RCS: @(#) $Id: resource.n,v 1.5.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH resource n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME resource \- Manipulate Macintosh resources |
| ︙ | ︙ | |||
145 146 147 148 149 150 151 | the \fBresource list\fR command will return names if they exist or numbers if the name is NULL. .SH "PORTABILITY ISSUES" The resource command is only available on Macintosh. .SH "SEE ALSO" | | | 145 146 147 148 149 150 151 152 153 154 155 | the \fBresource list\fR command will return names if they exist or numbers if the name is NULL. .SH "PORTABILITY ISSUES" The resource command is only available on Macintosh. .SH "SEE ALSO" open(n) .SH KEYWORDS open, resource |
Changes to doc/return.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: return.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH return n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME return \- Return from a procedure |
| ︙ | ︙ | |||
81 82 83 84 85 86 87 88 89 | the procedure. .PP If the \fB\-errorcode\fR option is specified then \fIcode\fR provides a value for the \fBerrorCode\fR variable. If the option is not specified then \fBerrorCode\fR will default to \fBNONE\fR. .SH KEYWORDS break, continue, error, procedure, return | > > > | 81 82 83 84 85 86 87 88 89 90 91 92 | the procedure. .PP If the \fB\-errorcode\fR option is specified then \fIcode\fR provides a value for the \fBerrorCode\fR variable. If the option is not specified then \fBerrorCode\fR will default to \fBNONE\fR. .SH "SEE ALSO" break(n), continue(n), error(n), proc(n) .SH KEYWORDS break, continue, error, procedure, return |
Changes to doc/scan.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | > | | | 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 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: scan.n,v 1.4.2.3 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH scan n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME scan \- Parse string using conversion specifiers in the style of sscanf .SH SYNOPSIS \fBscan \fIstring format \fR?\fIvarName varName ...\fR? .BE .SH INTRODUCTION .PP This command parses fields from an input string in the same fashion as the ANSI C \fBsscanf\fR procedure and returns a count of the number of conversions performed, or -1 if the end of the input string is reached |
| ︙ | ︙ | |||
43 44 45 46 47 48 49 | zero). Otherwise, if it isn't a \fB%\fR character then it must match the next character of \fIstring\fR. When a \fB%\fR is encountered in \fIformat\fR, it indicates the start of a conversion specifier. A conversion specifier contains up to four fields after the \fB%\fR: a \fB*\fR, which indicates that the converted value is to be discarded | < < < < > > > > > | > > > > < | 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 | zero). Otherwise, if it isn't a \fB%\fR character then it must match the next character of \fIstring\fR. When a \fB%\fR is encountered in \fIformat\fR, it indicates the start of a conversion specifier. A conversion specifier contains up to four fields after the \fB%\fR: a \fB*\fR, which indicates that the converted value is to be discarded instead of assigned to a variable; a XPG3 position specifier; a number indicating a maximum field width; and a conversion character. All of these fields are optional except for the conversion character. The fields that are present must appear in the order given above. .PP When \fBscan\fR finds a conversion specifier in \fIformat\fR, it first skips any white-space characters in \fIstring\fR (unless the specifier is \fB[\fR or \fBc\fR). Then it converts the next input characters according to the conversion specifier and stores the result in the variable given by the next argument to \fBscan\fR. .PP If the \fB%\fR is followed by a decimal number and a \fB$\fR, as in ``\fB%2$d\fR'', then the variable to use is not taken from the next sequential argument. Instead, it is taken from the argument indicated by the number, where 1 corresponds to the first \fIvarName\fR. If there are any positional specifiers in \fIformat\fR then all of the specifiers must be positional. Every \fIvarName\fR on the argument list must correspond to exactly one conversion specifier or an error is generated, or in the inline case, any position can be specified at most once and the empty positions will be filled in with empty strings. .PP The following conversion characters are supported: .TP 10 \fBd\fR The input field must be a decimal integer. It is read in and the value is stored in the variable as a decimal string. .TP 10 \fBo\fR The input field must be an octal integer. It is read in and the value is stored in the variable as a decimal string. .VS 8.4 If the value exceeds MAX_INT (017777777777 on platforms using 32-bit integers), it will be truncated to a signed integer. Hence, 037777777777 will appear as -1 on a 32-bit machine. .VE 8.4 .TP 10 \fBx\fR The input field must be a hexadecimal integer. It is read in and the value is stored in the variable as a decimal string. .VS 8.4 If the value exceeds MAX_INT (0x7FFFFFFF on platforms using 32-bit integers), it will be truncated to a signed integer. Hence, 0xFFFFFFFF will appear as -1 on a 32-bit machine. .VE 8.4 .TP 10 \fBu\fR The input field must be a decimal integer. The value is stored in the variable as an unsigned decimal integer string. .TP 10 \fBi\fR The input field must be an integer. The base (i.e. decimal, octal, or hexadecimal) is determined in the same fashion as described in \fBexpr\fR. The value is stored in the variable as a decimal string. .TP 10 \fBc\fR A single character is read in and its binary value is stored in the variable as a decimal string. Initial white space is not skipped in this case, so the input field may be a white-space character. This conversion is different from the ANSI standard in that the |
| ︙ | ︙ | |||
122 123 124 125 126 127 128 | \fB[\fIchars\fB]\fR The input field consists of any number of characters in \fIchars\fR. The matching string is stored in the variable. If the first character between the brackets is a \fB]\fR then it is treated as part of \fIchars\fR rather than the closing bracket for the set. | < < < < < < < > > > > | 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 | \fB[\fIchars\fB]\fR The input field consists of any number of characters in \fIchars\fR. The matching string is stored in the variable. If the first character between the brackets is a \fB]\fR then it is treated as part of \fIchars\fR rather than the closing bracket for the set. If \fIchars\fR contains a sequence of the form \fIa\fB\-\fIb\fR then any character between \fIa\fR and \fIb\fR (inclusive) will match. If the first or last character between the brackets is a \fB\-\fR, then it is treated as part of \fIchars\fR rather than indicating a range. .TP 10 \fB[^\fIchars\fB]\fR The input field consists of any number of characters not in \fIchars\fR. The matching string is stored in the variable. If the character immediately following the \fB^\fR is a \fB]\fR then it is treated as part of the set rather than the closing bracket for the set. If \fIchars\fR contains a sequence of the form \fIa\fB\-\fIb\fR then any character between \fIa\fR and \fIb\fR (inclusive) will be excluded from the set. If the first or last character between the brackets is a \fB\-\fR, then it is treated as part of \fIchars\fR rather than indicating a range. .TP 10 \fBn\fR No input is consumed from the input string. Instead, the total number of chacters scanned from the input string so far is stored in the variable. .LP The number of characters read from the input for a conversion is the largest number that makes sense for that particular conversion (e.g. as many decimal digits as possible for \fB%d\fR, as many octal digits as possible for \fB%o\fR, and so on). The input field for a given conversion terminates either when a white-space character is encountered or when the maximum field width has been reached, whichever comes first. If a \fB*\fR is present in the conversion specifier then no variable is assigned and the next scan argument is not consumed. .SH "DIFFERENCES FROM ANSI SSCANF" .PP The behavior of the \fBscan\fR command is the same as the behavior of the ANSI C \fBsscanf\fR procedure except for the following differences: .IP [1] \fB%p\fR conversion specifier is not currently supported. .IP [2] For \fB%c\fR conversions a single character value is converted to a decimal string, which is then assigned to the corresponding \fIvarName\fR; no field width may be specified for this conversion. .IP [3] The \fBl\fR, \fBh\fR, and \fBL\fR modifiers are ignored; integer values are always converted as if there were no modifier present and real values are always converted as if the \fBl\fR modifier were present (i.e. type \fBdouble\fR is used for the internal representation). .IP [4] .VS 8.3 If the end of the input string is reached before any conversions have been performed and no variables are given, and empty string is returned. .VE 8.3 .SH "SEE ALSO" format(n), sscanf(3) .SH KEYWORDS conversion specifier, parse, scan |
Changes to doc/seek.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: seek.n,v 1.3.12.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH seek n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME seek \- Change the access position for an open channel |
| ︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 | .PP .VS 8.1 Note that \fIoffset\fR values are byte offsets, not character offsets. Both \fBseek\fR and \fBtell\fR operate in terms of bytes, not characters, unlike \fBread\fR. .VE 8.1 .SH KEYWORDS access position, file, seek | > > > | 53 54 55 56 57 58 59 60 61 62 63 64 | .PP .VS 8.1 Note that \fIoffset\fR values are byte offsets, not character offsets. Both \fBseek\fR and \fBtell\fR operate in terms of bytes, not characters, unlike \fBread\fR. .VE 8.1 .SH "SEE ALSO" file(n), open(n), close(n), gets(n), tell(n) .SH KEYWORDS access position, file, seek |
Changes to doc/set.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: set.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH set n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME set \- Read and write variables |
| ︙ | ︙ | |||
40 41 42 43 44 45 46 47 48 | (global variable if the current namespace is the global namespace). If a procedure is active, then \fIvarName\fR refers to a parameter or local variable of the procedure unless the \fBglobal\fR command was invoked to declare \fIvarName\fR to be global, or unless a \fBvariable\fR command was invoked to declare \fIvarName\fR to be a namespace variable. .SH KEYWORDS read, write, variable | > > > | 40 41 42 43 44 45 46 47 48 49 50 51 | (global variable if the current namespace is the global namespace). If a procedure is active, then \fIvarName\fR refers to a parameter or local variable of the procedure unless the \fBglobal\fR command was invoked to declare \fIvarName\fR to be global, or unless a \fBvariable\fR command was invoked to declare \fIvarName\fR to be a namespace variable. .SH "SEE ALSO" expr(n), proc(n), trace(n), unset(n) .SH KEYWORDS read, write, variable |
Changes to doc/split.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: split.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH split n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME split \- Split a string into a proper Tcl list |
| ︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 |
.CE
returns \fB"comp unix misc"\fR and
.CS
\fBsplit "Hello world" {}\fR
.CE
returns \fB"H e l l o { } w o r l d"\fR.
.SH KEYWORDS
list, split, string
| > > > | 36 37 38 39 40 41 42 43 44 45 46 47 |
.CE
returns \fB"comp unix misc"\fR and
.CS
\fBsplit "Hello world" {}\fR
.CE
returns \fB"H e l l o { } w o r l d"\fR.
.SH "SEE ALSO"
join(n), list(n), string(n)
.SH KEYWORDS
list, split, string
|
Changes to doc/string.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: string.n,v 1.13.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH string n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME string \- Manipulate strings |
| ︙ | ︙ | |||
330 331 332 333 334 335 336 337 338 | character \fIcharIndex\fR of \fIstring\fR. \fIcharIndex\fR may be specified as for the \fBindex\fR method. A word is considered to be any contiguous range of alphanumeric (Unicode letters or decimal digits) or underscore (Unicode connector punctuation) characters, or any single character other than these. .VE 8.1 .SH KEYWORDS case conversion, compare, index, match, pattern, string, word, equal, ctype | > > > | 330 331 332 333 334 335 336 337 338 339 340 341 | character \fIcharIndex\fR of \fIstring\fR. \fIcharIndex\fR may be specified as for the \fBindex\fR method. A word is considered to be any contiguous range of alphanumeric (Unicode letters or decimal digits) or underscore (Unicode connector punctuation) characters, or any single character other than these. .VE 8.1 .SH "SEE ALSO" expr(n), list(n) .SH KEYWORDS case conversion, compare, index, match, pattern, string, word, equal, ctype |
Changes to doc/subst.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: subst.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH subst n 7.4 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME subst \- Perform backslash, command, and variable substitutions |
| ︙ | ︙ | |||
39 40 41 42 43 44 45 46 47 48 |
give any special treatment to double quotes or curly braces. For
example, the script
.CS
\fBset a 44
subst {xyz {$a}}\fR
.CE
returns ``\fBxyz {44}\fR'', not ``\fBxyz {$a}\fR''.
.SH KEYWORDS
backslash substitution, command substitution, variable substitution
| > > > | 39 40 41 42 43 44 45 46 47 48 49 50 51 |
give any special treatment to double quotes or curly braces. For
example, the script
.CS
\fBset a 44
subst {xyz {$a}}\fR
.CE
returns ``\fBxyz {44}\fR'', not ``\fBxyz {$a}\fR''.
.SH "SEE ALSO"
eval(n)
.SH KEYWORDS
backslash substitution, command substitution, variable substitution
|
Changes to doc/switch.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: switch.n,v 1.4.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH switch n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME switch \- Evaluate one of several scripts, depending on a given value |
| ︙ | ︙ | |||
106 107 108 109 110 111 112 113 114 |
{format 2}
default
{format 3}
}\fR
.CE
will return \fB3\fR.
.SH KEYWORDS
switch, match, regular expression
| > > > | 106 107 108 109 110 111 112 113 114 115 116 117 |
{format 2}
default
{format 3}
}\fR
.CE
will return \fB3\fR.
.SH "SEE ALSO"
for(n), if(n), regexp(n)
.SH KEYWORDS
switch, match, regular expression
|
Changes to doc/tclsh.1.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: tclsh.1,v 1.3.10.1 2001/08/24 16:19:09 dgp Exp $ '\" .so man.macros .TH tclsh 1 "" Tcl "Tcl Applications" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME tclsh \- Simple shell containing Tcl interpreter |
| ︙ | ︙ | |||
76 77 78 79 80 81 82 83 84 85 86 87 88 89 | \fBsh\fR processes the script first; it treats the second line as a comment and executes the third line. The \fBexec\fR statement cause the shell to stop processing and instead to start up \fBtclsh\fR to reprocess the entire script. When \fBtclsh\fR starts up, it treats all three lines as comments, since the backslash at the end of the second line causes the third line to be treated as part of the comment on the second line. .SH "VARIABLES" .PP \fBTclsh\fR sets the following Tcl variables: .TP 15 \fBargc\fR Contains a count of the number of \fIarg\fR arguments (0 if none), | > > > > > > > > | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | \fBsh\fR processes the script first; it treats the second line as a comment and executes the third line. The \fBexec\fR statement cause the shell to stop processing and instead to start up \fBtclsh\fR to reprocess the entire script. When \fBtclsh\fR starts up, it treats all three lines as comments, since the backslash at the end of the second line causes the third line to be treated as part of the comment on the second line. .PP .VS You should note that it is also common practise to install tclsh with its version number as part of the name. This has the advantage of allowing multiple versions of Tcl to exist on the same system at once, but also the disadvantage of making it harder to write scripts that start up uniformly across different versions of Tcl. .VE .SH "VARIABLES" .PP \fBTclsh\fR sets the following Tcl variables: .TP 15 \fBargc\fR Contains a count of the number of \fIarg\fR arguments (0 if none), |
| ︙ | ︙ |
Changes to doc/tclvars.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: tclvars.n,v 1.7.2.2 2001/10/17 19:29:24 das Exp $ '\" .so man.macros .TH tclvars n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME tclvars \- Variables used by Tcl |
| ︙ | ︙ | |||
83 84 85 86 87 88 89 | .TP \fBTRASH_FOLDER\fR The path to the trash directory. .TP \fBSTART_UP_FOLDER\fR The path to the start up directory. .TP | | | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | .TP \fBTRASH_FOLDER\fR The path to the trash directory. .TP \fBSTART_UP_FOLDER\fR The path to the start up directory. .TP \fBHOME\fR The path to the application's default directory. .PP You can also create your own environment variables for the Macintosh. A file named \fITcl Environment Variables\fR may be placed in the preferences folder in the Mac system folder. Each line of this file should be of the form \fIVAR_NAME=var_data\fR. .PP |
| ︙ | ︙ | |||
389 390 391 392 393 394 395 396 397 398 | When an interpreter is created Tcl initializes this variable to hold the version number for this version of Tcl in the form \fIx.y\fR. Changes to \fIx\fR represent major changes with probable incompatibilities and changes to \fIy\fR represent small enhancements and bug fixes that retain backward compatibility. The value of this variable is returned by the \fBinfo tclversion\fR command. .SH KEYWORDS arithmetic, bytecode, compiler, error, environment, POSIX, precision, subprocess, variables | > > > | 389 390 391 392 393 394 395 396 397 398 399 400 401 | When an interpreter is created Tcl initializes this variable to hold the version number for this version of Tcl in the form \fIx.y\fR. Changes to \fIx\fR represent major changes with probable incompatibilities and changes to \fIy\fR represent small enhancements and bug fixes that retain backward compatibility. The value of this variable is returned by the \fBinfo tclversion\fR command. .SH "SEE ALSO" eval(n) .SH KEYWORDS arithmetic, bytecode, compiler, error, environment, POSIX, precision, subprocess, variables |
Changes to doc/tell.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: tell.n,v 1.3.12.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH tell n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME tell \- Return current access position for an open channel |
| ︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 | \fIchannelId\fR. This value returned is a byte offset that can be passed to \fBseek\fR in order to set the channel to a particular position. Note that this value is in terms of bytes, not characters like \fBread\fR. .VE 8.1 The value returned is -1 for channels that do not support seeking. .SH KEYWORDS access position, channel, seeking | > > > | 24 25 26 27 28 29 30 31 32 33 34 35 | \fIchannelId\fR. This value returned is a byte offset that can be passed to \fBseek\fR in order to set the channel to a particular position. Note that this value is in terms of bytes, not characters like \fBread\fR. .VE 8.1 The value returned is -1 for channels that do not support seeking. .SH "SEE ALSO" file(n), open(n), close(n), gets(n), seek(n) .SH KEYWORDS access position, channel, seeking |
Changes to doc/time.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: time.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH time n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME time \- Time the execution of a script |
| ︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 | specified). It will then return a string of the form .CS \fB503 microseconds per iteration\fR .CE which indicates the average amount of time required per iteration, in microseconds. Time is measured in elapsed time, not CPU time. .SH KEYWORDS script, time | > > > | 24 25 26 27 28 29 30 31 32 33 34 35 36 | specified). It will then return a string of the form .CS \fB503 microseconds per iteration\fR .CE which indicates the average amount of time required per iteration, in microseconds. Time is measured in elapsed time, not CPU time. .SH "SEE ALSO" clock(n) .SH KEYWORDS script, time |
Changes to doc/unknown.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: unknown.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH unknown n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME unknown \- Handle attempts to use non-existent commands |
| ︙ | ︙ | |||
67 68 69 70 71 72 73 74 75 | step is skipped. If the global variable \fBauto_noexec\fR is defined then the auto-exec step is skipped. Under normal circumstances the return value from \fBunknown\fR is the return value from the command that was eventually executed. .SH KEYWORDS error, non-existent command | > > > | 67 68 69 70 71 72 73 74 75 76 77 78 | step is skipped. If the global variable \fBauto_noexec\fR is defined then the auto-exec step is skipped. Under normal circumstances the return value from \fBunknown\fR is the return value from the command that was eventually executed. .SH "SEE ALSO" info(n), proc(n) .SH KEYWORDS error, non-existent command |
Changes to doc/update.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1990-1992 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1990-1992 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: update.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH update n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME update \- Process pending events and idle callbacks |
| ︙ | ︙ | |||
40 41 42 43 44 45 46 47 48 | .PP The \fBupdate\fR command with no options is useful in scripts where you are performing a long-running computation but you still want the application to respond to events such as user interactions; if you occasionally call \fBupdate\fR then user input will be processed during the next call to \fBupdate\fR. .SH KEYWORDS event, flush, handler, idle, update | > > > | 40 41 42 43 44 45 46 47 48 49 50 51 | .PP The \fBupdate\fR command with no options is useful in scripts where you are performing a long-running computation but you still want the application to respond to events such as user interactions; if you occasionally call \fBupdate\fR then user input will be processed during the next call to \fBupdate\fR. .SH "SEE ALSO" after(n), bgerror(n) .SH KEYWORDS event, flush, handler, idle, update |
Changes to doc/uplevel.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: uplevel.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH uplevel n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME uplevel \- Execute a script in a different stack frame |
| ︙ | ︙ | |||
70 71 72 73 74 75 76 | For example, \fBinfo level 1\fR will return a list describing a command that is either the outermost procedure call or the outermost \fBnamespace eval\fR command. Also, \fBuplevel #0\fR evaluates a script at top-level in the outermost namespace (the global namespace). .SH "SEE ALSO" | | | 70 71 72 73 74 75 76 77 78 79 80 | For example, \fBinfo level 1\fR will return a list describing a command that is either the outermost procedure call or the outermost \fBnamespace eval\fR command. Also, \fBuplevel #0\fR evaluates a script at top-level in the outermost namespace (the global namespace). .SH "SEE ALSO" namespace(n), upvar(n) .SH KEYWORDS context, level, namespace, stack frame, variables |
Changes to doc/upvar.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: upvar.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH upvar n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME upvar \- Create link to variable in a different stack frame |
| ︙ | ︙ | |||
102 103 104 105 106 107 108 | traces set for the entire array will not be invoked when \fImyVar\fR is accessed (but traces on the particular element will still be invoked). In particular, if the array is \fBenv\fR, then changes made to \fImyVar\fR will not be passed to subprocesses correctly. .VE .SH "SEE ALSO" | | | 102 103 104 105 106 107 108 109 110 111 112 | traces set for the entire array will not be invoked when \fImyVar\fR is accessed (but traces on the particular element will still be invoked). In particular, if the array is \fBenv\fR, then changes made to \fImyVar\fR will not be passed to subprocesses correctly. .VE .SH "SEE ALSO" global(n), namespace(n), uplevel(n), variable(n) .SH KEYWORDS context, frame, global, level, namespace, procedure, variable |
Changes to doc/variable.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993-1997 Bell Labs Innovations for Lucent Technologies '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993-1997 Bell Labs Innovations for Lucent Technologies '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: variable.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH variable n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME variable \- create and initialize a namespace variable |
| ︙ | ︙ | |||
38 39 40 41 42 43 44 | If \fIname\fR includes any namespace qualifiers, the variable is created in the specified namespace. If the variable is not defined, it will be visible to the \fBnamespace which\fR command, but not to the \fBinfo exists\fR command. .PP If the \fBvariable\fR command is executed inside a Tcl procedure, it creates local variables | | > | | 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 | If \fIname\fR includes any namespace qualifiers, the variable is created in the specified namespace. If the variable is not defined, it will be visible to the \fBnamespace which\fR command, but not to the \fBinfo exists\fR command. .PP If the \fBvariable\fR command is executed inside a Tcl procedure, it creates local variables linked to the corresponding namespace variables (and therefore these variables are listed by \fBinfo locals\fR.) In this way the \fBvariable\fR command resembles the \fBglobal\fR command, although the \fBglobal\fR command only links to variables in the global namespace. If any \fIvalue\fRs are given, they are used to modify the values of the associated namespace variables. If a namespace variable does not exist, it is created and optionally initialized. .PP A \fIname\fR argument cannot reference an element within an array. Instead, \fIname\fR should reference the entire array, and the initialization \fIvalue\fR should be left off. After the variable has been declared, elements within the array can be set using ordinary \fBset\fR or \fBarray\fR commands. .SH "SEE ALSO" global(n), namespace(n), upvar(n) .SH KEYWORDS global, namespace, procedure, variable |
Changes to doc/vwait.n.
1 2 3 4 5 6 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: vwait.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH vwait n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME vwait \- Process events until a variable is written |
| ︙ | ︙ | |||
31 32 33 34 35 36 37 38 39 40 | after \fIvarName\fR is set. This can happen if the event handler that sets \fIvarName\fR does not complete immediately. For example, if an event handler sets \fIvarName\fR and then itself calls \fBvwait\fR to wait for a different variable, then it may not return for a long time. During this time the top-level \fBvwait\fR is blocked waiting for the event handler to complete, so it cannot return either. .SH KEYWORDS event, variable, wait | > > > | 31 32 33 34 35 36 37 38 39 40 41 42 43 | after \fIvarName\fR is set. This can happen if the event handler that sets \fIvarName\fR does not complete immediately. For example, if an event handler sets \fIvarName\fR and then itself calls \fBvwait\fR to wait for a different variable, then it may not return for a long time. During this time the top-level \fBvwait\fR is blocked waiting for the event handler to complete, so it cannot return either. .SH "SEE ALSO" global(n) .SH KEYWORDS event, variable, wait |
Changes to doc/while.n.
1 2 3 4 5 6 7 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: while.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH while n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME while \- Execute script repeatedly as long as a condition is met |
| ︙ | ︙ | |||
47 48 49 50 51 52 53 54 55 |
set x 0
while {$x<10} {
puts "x is $x"
incr x
}
.CE
.SH KEYWORDS
boolean value, loop, test, while
| > > > | 47 48 49 50 51 52 53 54 55 56 57 58 |
set x 0
while {$x<10} {
puts "x is $x"
incr x
}
.CE
.SH "SEE ALSO"
break(n), continue(n), for(n), foreach(n)
.SH KEYWORDS
boolean value, loop, test, while
|
Changes to generic/tcl.decls.
1 2 3 4 5 6 7 8 9 10 11 12 | # tcl.decls -- # # This file contains the declarations for all supported public # functions that are exported by the Tcl library via the stubs table. # This file is used to generate the tclDecls.h, tclPlatDecls.h, # tclStub.c, and tclPlatStub.c files. # # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # tcl.decls -- # # This file contains the declarations for all supported public # functions that are exported by the Tcl library via the stubs table. # This file is used to generate the tclDecls.h, tclPlatDecls.h, # tclStub.c, and tclPlatStub.c files. # # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: tcl.decls,v 1.33.2.2 2001/08/28 00:12:43 hobbs Exp $ library tcl # Define the tcl interface with several sub interfaces: # tclPlat - platform specific public # tclInt - generic private # tclPlatInt - platform specific private |
| ︙ | ︙ | |||
983 984 985 986 987 988 989 |
declare 281 generic {
Tcl_Channel Tcl_StackChannel(Tcl_Interp *interp, \
Tcl_ChannelType *typePtr, ClientData instanceData, \
int mask, Tcl_Channel prevChan)
}
declare 282 generic {
| | | > | > > | > | 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 |
declare 281 generic {
Tcl_Channel Tcl_StackChannel(Tcl_Interp *interp, \
Tcl_ChannelType *typePtr, ClientData instanceData, \
int mask, Tcl_Channel prevChan)
}
declare 282 generic {
int Tcl_UnstackChannel(Tcl_Interp *interp, Tcl_Channel chan)
}
declare 283 generic {
Tcl_Channel Tcl_GetStackedChannel(Tcl_Channel chan)
}
# added in 8.3.4/8.4a2
declare 284 generic {
void Tcl_SetMainLoop(Tcl_MainLoopProc *proc)
}
# Reserved for future use (8.0.x vs. 8.1)
# declare 285 generic {
# }
# Added in 8.1:
declare 286 generic {
|
| ︙ | ︙ | |||
1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 |
declare 392 generic {
void Tcl_MutexFinalize (Tcl_Mutex *mutex)
}
declare 393 generic {
int Tcl_CreateThread (Tcl_ThreadId *idPtr, Tcl_ThreadCreateProc proc, \
ClientData clientData, int stackSize, int flags)
}
##############################################################################
# Define the platform specific public Tcl interface. These functions are
# only available on the designated platform.
interface tclPlat
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
declare 392 generic {
void Tcl_MutexFinalize (Tcl_Mutex *mutex)
}
declare 393 generic {
int Tcl_CreateThread (Tcl_ThreadId *idPtr, Tcl_ThreadCreateProc proc, \
ClientData clientData, int stackSize, int flags)
}
declare 394 generic {
int Tcl_ReadRaw (Tcl_Channel chan, char *dst, int bytesToRead)
}
declare 395 generic {
int Tcl_WriteRaw (Tcl_Channel chan, char *src, int srcLen)
}
declare 396 generic {
Tcl_Channel Tcl_GetTopChannel (Tcl_Channel chan)
}
declare 397 generic {
int Tcl_ChannelBuffered (Tcl_Channel chan)
}
declare 398 generic {
char * Tcl_ChannelName(Tcl_ChannelType *chanTypePtr)
}
declare 399 generic {
Tcl_ChannelTypeVersion Tcl_ChannelVersion(Tcl_ChannelType *chanTypePtr)
}
declare 400 generic {
Tcl_DriverBlockModeProc * Tcl_ChannelBlockModeProc(Tcl_ChannelType \
*chanTypePtr)
}
declare 401 generic {
Tcl_DriverCloseProc * Tcl_ChannelCloseProc(Tcl_ChannelType *chanTypePtr)
}
declare 402 generic {
Tcl_DriverClose2Proc * Tcl_ChannelClose2Proc(Tcl_ChannelType *chanTypePtr)
}
declare 403 generic {
Tcl_DriverInputProc * Tcl_ChannelInputProc(Tcl_ChannelType *chanTypePtr)
}
declare 404 generic {
Tcl_DriverOutputProc * Tcl_ChannelOutputProc(Tcl_ChannelType *chanTypePtr)
}
declare 405 generic {
Tcl_DriverSeekProc * Tcl_ChannelSeekProc(Tcl_ChannelType *chanTypePtr)
}
declare 406 generic {
Tcl_DriverSetOptionProc * Tcl_ChannelSetOptionProc(Tcl_ChannelType \
*chanTypePtr)
}
declare 407 generic {
Tcl_DriverGetOptionProc * Tcl_ChannelGetOptionProc(Tcl_ChannelType \
*chanTypePtr)
}
declare 408 generic {
Tcl_DriverWatchProc * Tcl_ChannelWatchProc(Tcl_ChannelType *chanTypePtr)
}
declare 409 generic {
Tcl_DriverGetHandleProc * Tcl_ChannelGetHandleProc(Tcl_ChannelType \
*chanTypePtr)
}
declare 410 generic {
Tcl_DriverFlushProc * Tcl_ChannelFlushProc(Tcl_ChannelType *chanTypePtr)
}
declare 411 generic {
Tcl_DriverHandlerProc * Tcl_ChannelHandlerProc(Tcl_ChannelType \
*chanTypePtr)
}
## Introduced in 8.4a2
#declare 412 generic {
# int Tcl_JoinThread (Tcl_ThreadId id, int* result)
#}
#declare 413 generic {
# int Tcl_IsChannelShared (Tcl_Channel channel)
#}
#declare 414 generic {
# int Tcl_IsChannelRegistered (Tcl_Interp* interp, Tcl_Channel channel)
#}
#declare 415 generic {
# void Tcl_CutChannel (Tcl_Channel channel)
#}
#declare 416 generic {
# void Tcl_SpliceChannel (Tcl_Channel channel)
#}
#declare 417 generic {
# void Tcl_ClearChannelHandlers (Tcl_Channel channel)
#}
#declare 418 generic {
# int Tcl_IsChannelExisting (CONST char* channelName)
#}
#
#declare 419 generic {
# int Tcl_UniCharNcasecmp(CONST Tcl_UniChar *cs, CONST Tcl_UniChar *ct,\
# unsigned long n)
#}
#declare 420 generic {
# int Tcl_UniCharCaseMatch(CONST Tcl_UniChar *ustr, \
# CONST Tcl_UniChar *pattern, int nocase)
#}
#
#declare 421 generic {
# Tcl_HashEntry *Tcl_FindHashEntry(Tcl_HashTable *tablePtr, \
# CONST char *key)
#}
#
#declare 422 generic {
# Tcl_HashEntry *Tcl_CreateHashEntry(Tcl_HashTable *tablePtr, \
# CONST char *key, int *newPtr)
#}
#
#declare 423 generic {
# void Tcl_InitCustomHashTable(Tcl_HashTable *tablePtr, int keyType, \
# Tcl_HashKeyType *typePtr)
#}
#
#declare 424 generic {
# void Tcl_InitObjHashTable(Tcl_HashTable *tablePtr)
#}
#declare 425 generic {
# ClientData Tcl_CommandTraceInfo(Tcl_Interp *interp, char *varName, \
# int flags, Tcl_CommandTraceProc *procPtr, ClientData prevClientData)
#}
#declare 426 generic {
# int Tcl_TraceCommand(Tcl_Interp *interp, char *varName, int flags, \
# Tcl_CommandTraceProc *proc, ClientData clientData)
#}
#declare 427 generic {
# void Tcl_UntraceCommand(Tcl_Interp *interp, char *varName, int flags, \
# Tcl_CommandTraceProc *proc, ClientData clientData)
#}
#declare 428 generic {
# char * Tcl_AttemptAlloc(unsigned int size)
#}
#declare 429 generic {
# char * Tcl_AttemptDbCkalloc(unsigned int size, char *file, int line)
#}
#declare 430 generic {
# char * Tcl_AttemptRealloc(char *ptr, unsigned int size)
#}
#declare 431 generic {
# char * Tcl_AttemptDbCkrealloc(char *ptr, unsigned int size, char *file,
# int line)
#}
#declare 432 generic {
# int Tcl_AttemptSetObjLength(Tcl_Obj *objPtr, int length)
#}
#declare 433 generic {
# Tcl_ThreadId Tcl_GetChannelThread(Tcl_Channel channel)
#}
## introduced in 8.4a3
#declare 434 generic {
# Tcl_UniChar * Tcl_GetUnicodeFromObj (Tcl_Obj *objPtr, int *lengthPtr)
#}
#declare 435 generic {
# int Tcl_GetMathFuncInfo(Tcl_Interp *interp, CONST char *name,
# int *numArgsPtr, Tcl_ValueType **argTypesPtr,
# Tcl_MathProc **procPtr, ClientData *clientDataPtr)
#}
#declare 436 generic {
# Tcl_Obj * Tcl_ListMathFuncs(Tcl_Interp *interp, CONST char *pattern)
#}
#declare 437 generic {
# Tcl_Obj * Tcl_SubstObj(Tcl_Interp *interp, Tcl_Obj *objPtr, int flags)
#}
#declare 438 generic {
# int Tcl_DetachChannel(Tcl_Interp* interp, Tcl_Channel channel)
#}
#declare 439 generic {
# int Tcl_IsStandardChannel(Tcl_Channel channel)
#}
#declare 440 generic {
# int Tcl_FSCopyFile(Tcl_Obj *srcPathPtr, Tcl_Obj *destPathPtr)
#}
#declare 441 generic {
# int Tcl_FSCopyDirectory(Tcl_Obj *srcPathPtr, \
# Tcl_Obj *destPathPtr, Tcl_Obj **errorPtr)
#}
#declare 442 generic {
# int Tcl_FSCreateDirectory(Tcl_Obj *pathPtr)
#}
#declare 443 generic {
# int Tcl_FSDeleteFile(Tcl_Obj *pathPtr)
#}
#declare 444 generic {
# int Tcl_FSLoadFile(Tcl_Interp * interp, \
# Tcl_Obj *pathPtr, char * sym1, char * sym2, \
# Tcl_PackageInitProc ** proc1Ptr, \
# Tcl_PackageInitProc ** proc2Ptr, \
# ClientData * clientDataPtr, \
# Tcl_FSUnloadFileProc **unloadProcPtr)
#}
#declare 445 generic {
# int Tcl_FSMatchInDirectory(Tcl_Interp *interp, Tcl_Obj * result, \
# Tcl_Obj *pathPtr, \
# char * pattern, Tcl_GlobTypeData * types)
#}
#declare 446 generic {
# Tcl_Obj* Tcl_FSLink(Tcl_Obj *pathPtr, Tcl_Obj *toPtr)
#}
#declare 447 generic {
# int Tcl_FSRemoveDirectory(Tcl_Obj *pathPtr, \
# int recursive, Tcl_Obj **errorPtr)
#}
#declare 448 generic {
# int Tcl_FSRenameFile(Tcl_Obj *srcPathPtr, Tcl_Obj *destPathPtr)
#}
#declare 449 generic {
# int Tcl_FSLstat(Tcl_Obj *pathPtr, struct stat *buf)
#}
#declare 450 generic {
# int Tcl_FSUtime(Tcl_Obj *pathPtr, struct utimbuf *tval)
#}
#declare 451 generic {
# int Tcl_FSFileAttrsGet(Tcl_Interp *interp, \
# int index, Tcl_Obj *pathPtr, \
# Tcl_Obj **objPtrRef)
#}
#declare 452 generic {
# int Tcl_FSFileAttrsSet(Tcl_Interp *interp, \
# int index, Tcl_Obj *pathPtr, \
# Tcl_Obj *objPtr)
#}
#declare 453 generic {
# char** Tcl_FSFileAttrStrings(Tcl_Obj *pathPtr, Tcl_Obj **objPtrRef)
#}
#declare 454 generic {
# int Tcl_FSStat(Tcl_Obj *pathPtr, struct stat *buf)
#}
#declare 455 generic {
# int Tcl_FSAccess(Tcl_Obj *pathPtr, int mode)
#}
#declare 456 generic {
# Tcl_Channel Tcl_FSOpenFileChannel(Tcl_Interp *interp, Tcl_Obj *pathPtr, \
# char *modeString, int permissions)
#}
#declare 457 generic {
# Tcl_Obj* Tcl_FSGetCwd(Tcl_Interp *interp)
#}
#declare 458 generic {
# int Tcl_FSChdir(Tcl_Obj *pathPtr)
#}
#declare 459 generic {
# int Tcl_FSConvertToPathType(Tcl_Interp *interp, Tcl_Obj *pathPtr)
#}
#declare 460 generic {
# Tcl_Obj* Tcl_FSJoinPath(Tcl_Obj *listObj, int elements)
#}
#declare 461 generic {
# Tcl_Obj* Tcl_FSSplitPath(Tcl_Obj* pathPtr, int *lenPtr)
#}
#declare 462 generic {
# int Tcl_FSEqualPaths(Tcl_Obj* firstPtr, Tcl_Obj* secondPtr)
#}
#declare 463 generic {
# Tcl_Obj* Tcl_FSGetNormalizedPath(Tcl_Interp *interp, Tcl_Obj* pathObjPtr)
#}
#declare 464 generic {
# Tcl_Obj* Tcl_FSJoinToPath(Tcl_Obj *basePtr, int objc, Tcl_Obj *CONST objv[])
#}
#declare 465 generic {
# ClientData Tcl_FSGetInternalRep(Tcl_Obj* pathObjPtr, Tcl_Filesystem *fsPtr
#
#}
#declare 466 generic {
# Tcl_Obj* Tcl_FSGetTranslatedPath(Tcl_Interp *interp, Tcl_Obj* pathPtr)
#}
#declare 467 generic {
# int Tcl_FSEvalFile(Tcl_Interp *interp, Tcl_Obj *fileName)
#}
#declare 468 generic {
# Tcl_Obj* Tcl_FSNewNativePath(Tcl_Obj* fromFilesystem, ClientData clientData)
#}
#declare 469 generic {
# char* Tcl_FSGetNativePath(Tcl_Obj* pathObjPtr)
#}
#declare 470 generic {
# Tcl_Obj* Tcl_FSFileSystemInfo(Tcl_Obj* pathObjPtr)
#}
#declare 471 generic {
# Tcl_Obj* Tcl_FSPathSeparator(Tcl_Obj* pathObjPtr)
#}
#declare 472 generic {
# Tcl_Obj* Tcl_FSListVolumes(void)
#}
#declare 473 generic {
# int Tcl_FSRegister(ClientData clientData, Tcl_Filesystem *fsPtr)
#}
#declare 474 generic {
# int Tcl_FSUnregister(Tcl_Filesystem *fsPtr)
#}
#declare 475 generic {
# ClientData Tcl_FSData(Tcl_Filesystem *fsPtr)
#}
#declare 476 generic {
# char* Tcl_FSGetTranslatedStringPath(Tcl_Interp *interp, Tcl_Obj* pathPtr)
#}
##############################################################################
# Define the platform specific public Tcl interface. These functions are
# only available on the designated platform.
interface tclPlat
|
| ︙ | ︙ |
Changes to generic/tcl.h.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * Copyright (c) 1993-1996 Lucent Technologies. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * Copyright (c) 1993-1996 Lucent Technologies. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tcl.h,v 1.70.2.9 2001/10/17 19:29:24 das Exp $ */ #ifndef _TCL #define _TCL /* * For C++ compilers, use extern "C" |
| ︙ | ︙ | |||
55 56 57 58 59 60 61 | * tools/tcl.wse.in (for windows installer) * tools/tclSplash.bmp (not patchlevel) */ #define TCL_MAJOR_VERSION 8 #define TCL_MINOR_VERSION 3 #define TCL_RELEASE_LEVEL TCL_FINAL_RELEASE | | | | > > > < < < < < < < < > | 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 | * tools/tcl.wse.in (for windows installer) * tools/tclSplash.bmp (not patchlevel) */ #define TCL_MAJOR_VERSION 8 #define TCL_MINOR_VERSION 3 #define TCL_RELEASE_LEVEL TCL_FINAL_RELEASE #define TCL_RELEASE_SERIAL 4 #define TCL_VERSION "8.3" #define TCL_PATCH_LEVEL "8.3.4" /* * The following definitions set up the proper options for Windows * compilers. We use this method because there is no autoconf equivalent. */ #ifndef __WIN32__ # if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__) # define __WIN32__ # ifndef WIN32 # define WIN32 # endif # endif #endif #ifdef __WIN32__ # ifndef STRICT # define STRICT # endif # ifndef USE_PROTOTYPE # define USE_PROTOTYPE 1 # endif # ifndef HAS_STDARG # define HAS_STDARG 1 # endif # ifndef USE_PROTOTYPE # define USE_PROTOTYPE 1 # endif #endif /* __WIN32__ */ /* * The following definitions set up the proper options for Macintosh * compilers. We use this method because there is no autoconf equivalent. */ #ifdef MAC_TCL #include <ConditionalMacros.h> # ifndef HAS_STDARG # define HAS_STDARG 1 # endif # ifndef USE_TCLALLOC # define USE_TCLALLOC 1 # endif # ifndef NO_STRERROR |
| ︙ | ︙ | |||
221 222 223 224 225 226 227 | * macro STATIC_BUILD should be defined. */ #ifdef STATIC_BUILD # define DLLIMPORT # define DLLEXPORT #else | | | 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | * macro STATIC_BUILD should be defined. */ #ifdef STATIC_BUILD # define DLLIMPORT # define DLLEXPORT #else # if (defined(__WIN32__) && (defined(_MSC_VER) || (defined(__GNUC__) && defined(__declspec)))) || (defined(MAC_TCL) && FUNCTION_DECLSPEC) # define DLLIMPORT __declspec(dllimport) # define DLLEXPORT __declspec(dllexport) # else # define DLLIMPORT # define DLLEXPORT # endif #endif |
| ︙ | ︙ | |||
243 244 245 246 247 248 249 | * class. If the symbol is beind declared for a static build or for use from a * stub library, then the storage class should be empty. * * The convention is that a macro called BUILD_xxxx, where xxxx is the * name of a library we are building, is set on the compile line for sources * that are to be placed in the library. When this macro is set, the * storage class will be set to DLLEXPORT. At the end of the header file, the | | | 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | * class. If the symbol is beind declared for a static build or for use from a * stub library, then the storage class should be empty. * * The convention is that a macro called BUILD_xxxx, where xxxx is the * name of a library we are building, is set on the compile line for sources * that are to be placed in the library. When this macro is set, the * storage class will be set to DLLEXPORT. At the end of the header file, the * storage class will be reset to DLLIMPORT. */ #undef TCL_STORAGE_CLASS #ifdef BUILD_tcl # define TCL_STORAGE_CLASS DLLEXPORT #else # ifdef USE_TCL_STUBS |
| ︙ | ︙ | |||
382 383 384 385 386 387 388 389 390 391 392 393 394 395 | typedef struct Tcl_Pid_ *Tcl_Pid; typedef struct Tcl_RegExp_ *Tcl_RegExp; typedef struct Tcl_ThreadDataKey_ *Tcl_ThreadDataKey; typedef struct Tcl_ThreadId_ *Tcl_ThreadId; typedef struct Tcl_TimerToken_ *Tcl_TimerToken; typedef struct Tcl_Trace_ *Tcl_Trace; typedef struct Tcl_Var_ *Tcl_Var; /* * Definition of the interface to procedures implementing threads. * A procedure following this definition is given to each call of * 'Tcl_CreateThread' and will be called as the main fuction of * the new thread created by that call. */ | > | 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | typedef struct Tcl_Pid_ *Tcl_Pid; typedef struct Tcl_RegExp_ *Tcl_RegExp; typedef struct Tcl_ThreadDataKey_ *Tcl_ThreadDataKey; typedef struct Tcl_ThreadId_ *Tcl_ThreadId; typedef struct Tcl_TimerToken_ *Tcl_TimerToken; typedef struct Tcl_Trace_ *Tcl_Trace; typedef struct Tcl_Var_ *Tcl_Var; typedef struct Tcl_ChannelTypeVersion_ *Tcl_ChannelTypeVersion; /* * Definition of the interface to procedures implementing threads. * A procedure following this definition is given to each call of * 'Tcl_CreateThread' and will be called as the main fuction of * the new thread created by that call. */ |
| ︙ | ︙ | |||
580 581 582 583 584 585 586 | typedef void (Tcl_IdleProc) _ANSI_ARGS_((ClientData clientData)); typedef void (Tcl_InterpDeleteProc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp)); typedef int (Tcl_MathProc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, Tcl_Value *args, Tcl_Value *resultPtr)); typedef void (Tcl_NamespaceDeleteProc) _ANSI_ARGS_((ClientData clientData)); typedef int (Tcl_ObjCmdProc) _ANSI_ARGS_((ClientData clientData, | | > | 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 |
typedef void (Tcl_IdleProc) _ANSI_ARGS_((ClientData clientData));
typedef void (Tcl_InterpDeleteProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp));
typedef int (Tcl_MathProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, Tcl_Value *args, Tcl_Value *resultPtr));
typedef void (Tcl_NamespaceDeleteProc) _ANSI_ARGS_((ClientData clientData));
typedef int (Tcl_ObjCmdProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, struct Tcl_Obj * CONST * objv));
typedef int (Tcl_PackageInitProc) _ANSI_ARGS_((Tcl_Interp *interp));
typedef void (Tcl_PanicProc) _ANSI_ARGS_(TCL_VARARGS(char *, format));
typedef void (Tcl_TcpAcceptProc) _ANSI_ARGS_((ClientData callbackData,
Tcl_Channel chan, char *address, int port));
typedef void (Tcl_TimerProc) _ANSI_ARGS_((ClientData clientData));
typedef int (Tcl_SetFromAnyProc) _ANSI_ARGS_((Tcl_Interp *interp,
struct Tcl_Obj *objPtr));
typedef void (Tcl_UpdateStringProc) _ANSI_ARGS_((struct Tcl_Obj *objPtr));
typedef char *(Tcl_VarTraceProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, char *part1, char *part2, int flags));
typedef void (Tcl_CreateFileHandlerProc) _ANSI_ARGS_((int fd, int mask,
Tcl_FileProc *proc, ClientData clientData));
typedef void (Tcl_DeleteFileHandlerProc) _ANSI_ARGS_((int fd));
typedef void (Tcl_MainLoopProc) _ANSI_ARGS_((void));
/*
* The following structure represents a type of object, which is a
* particular internal representation for an object plus a set of
* procedures that provide standard operations on objects of that type.
*/
|
| ︙ | ︙ | |||
1136 1137 1138 1139 1140 1141 1142 | /* * Bits passed to Tcl_DriverClose2Proc to indicate which side of a channel * should be closed. */ #define TCL_CLOSE_READ (1<<1) | | > > > > > > > | 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 | /* * Bits passed to Tcl_DriverClose2Proc to indicate which side of a channel * should be closed. */ #define TCL_CLOSE_READ (1<<1) #define TCL_CLOSE_WRITE (1<<2) /* * Value to use as the closeProc for a channel that supports the * close2Proc interface. */ #define TCL_CLOSE2PROC ((Tcl_DriverCloseProc *)1) /* * Channel version tag. This was introduced in 8.3.2/8.4. */ #define TCL_CHANNEL_VERSION_1 ((Tcl_ChannelTypeVersion) 0x1) #define TCL_CHANNEL_VERSION_2 ((Tcl_ChannelTypeVersion) 0x2) /* * Typedefs for the various operations in a channel type: */ typedef int (Tcl_DriverBlockModeProc) _ANSI_ARGS_(( ClientData instanceData, int mode)); typedef int (Tcl_DriverCloseProc) _ANSI_ARGS_((ClientData instanceData, |
| ︙ | ︙ | |||
1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 | ClientData instanceData, Tcl_Interp *interp, char *optionName, Tcl_DString *dsPtr)); typedef void (Tcl_DriverWatchProc) _ANSI_ARGS_(( ClientData instanceData, int mask)); typedef int (Tcl_DriverGetHandleProc) _ANSI_ARGS_(( ClientData instanceData, int direction, ClientData *handlePtr)); /* * The following declarations either map ckalloc and ckfree to * malloc and free, or they map them to procedures with all sorts * of debugging hooks defined in tclCkalloc.c. */ | > > > > | 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 | ClientData instanceData, Tcl_Interp *interp, char *optionName, Tcl_DString *dsPtr)); typedef void (Tcl_DriverWatchProc) _ANSI_ARGS_(( ClientData instanceData, int mask)); typedef int (Tcl_DriverGetHandleProc) _ANSI_ARGS_(( ClientData instanceData, int direction, ClientData *handlePtr)); typedef int (Tcl_DriverFlushProc) _ANSI_ARGS_(( ClientData instanceData)); typedef int (Tcl_DriverHandlerProc) _ANSI_ARGS_(( ClientData instanceData, int interestMask)); /* * The following declarations either map ckalloc and ckfree to * malloc and free, or they map them to procedures with all sorts * of debugging hooks defined in tclCkalloc.c. */ |
| ︙ | ︙ | |||
1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 |
/*
* struct Tcl_ChannelType:
*
* One such structure exists for each type (kind) of channel.
* It collects together in one place all the functions that are
* part of the specific channel type.
*/
typedef struct Tcl_ChannelType {
char *typeName; /* The name of the channel type in Tcl
| > > > | | < < | | | | | | | | | | | | > > > > > > > > > > > | | | 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 |
/*
* struct Tcl_ChannelType:
*
* One such structure exists for each type (kind) of channel.
* It collects together in one place all the functions that are
* part of the specific channel type.
*
* It is recommend that the Tcl_Channel* functions are used to access
* elements of this structure, instead of direct accessing.
*/
typedef struct Tcl_ChannelType {
char *typeName; /* The name of the channel type in Tcl
* commands. This storage is owned by
* channel type. */
Tcl_ChannelTypeVersion version; /* Version of the channel type. */
Tcl_DriverCloseProc *closeProc; /* Procedure to call to close the
* channel, or TCL_CLOSE2PROC if the
* close2Proc should be used
* instead. */
Tcl_DriverInputProc *inputProc; /* Procedure to call for input
* on channel. */
Tcl_DriverOutputProc *outputProc; /* Procedure to call for output
* on channel. */
Tcl_DriverSeekProc *seekProc; /* Procedure to call to seek
* on the channel. May be NULL. */
Tcl_DriverSetOptionProc *setOptionProc;
/* Set an option on a channel. */
Tcl_DriverGetOptionProc *getOptionProc;
/* Get an option from a channel. */
Tcl_DriverWatchProc *watchProc; /* Set up the notifier to watch
* for events on this channel. */
Tcl_DriverGetHandleProc *getHandleProc;
/* Get an OS handle from the channel
* or NULL if not supported. */
Tcl_DriverClose2Proc *close2Proc; /* Procedure to call to close the
* channel if the device supports
* closing the read & write sides
* independently. */
Tcl_DriverBlockModeProc *blockModeProc;
/* Set blocking mode for the
* raw channel. May be NULL. */
/*
* Only valid in TCL_CHANNEL_VERSION_2 channels
*/
Tcl_DriverFlushProc *flushProc; /* Procedure to call to flush a
* channel. May be NULL. */
Tcl_DriverHandlerProc *handlerProc; /* Procedure to call to handle a
* channel event. This will be passed
* up the stacked channel chain. */
} Tcl_ChannelType;
/*
* The following flags determine whether the blockModeProc above should
* set the channel into blocking or nonblocking mode. They are passed
* as arguments to the blockModeProc procedure in the above structure.
*/
#define TCL_MODE_BLOCKING 0 /* Put channel into blocking mode. */
#define TCL_MODE_NONBLOCKING 1 /* Put channel into nonblocking
* mode. */
/*
* Enum for different types of file paths.
*/
typedef enum Tcl_PathType {
|
| ︙ | ︙ |
Changes to generic/tclAsync.c.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > > > > > > > > > > > | | > | < | | | < < | | | | | | | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
*
* Copyright (c) 1993 The Regents of the University of California.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclAsync.c,v 1.4.12.1 2001/09/01 22:53:45 davygrvy Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
/* Forward declaration */
struct ThreadSpecificData;
/*
* One of the following structures exists for each asynchronous
* handler:
*/
typedef struct AsyncHandler {
int ready; /* Non-zero means this handler should
* be invoked in the next call to
* Tcl_AsyncInvoke. */
struct AsyncHandler *nextPtr; /* Next in list of all handlers for
* the process. */
Tcl_AsyncProc *proc; /* Procedure to call when handler
* is invoked. */
ClientData clientData; /* Value to pass to handler when it
* is invoked. */
struct ThreadSpecificData *originTsd;
/* Used in Tcl_AsyncMark to modify thread-
* specific data from outside the thread
* it is associated to. */
Tcl_ThreadId originThrdId; /* Origin thread where this token was
* created and where it will be
* yielded. */
} AsyncHandler;
typedef struct ThreadSpecificData {
/*
* The variables below maintain a list of all existing handlers
* specific to the calling thread.
*/
AsyncHandler *firstHandler; /* First handler defined for process,
* or NULL if none. */
AsyncHandler *lastHandler; /* Last handler or NULL. */
/*
* The variable below is set to 1 whenever a handler becomes ready and
* it is cleared to zero whenever Tcl_AsyncInvoke is called. It can be
* checked elsewhere in the application by calling Tcl_AsyncReady to see
* if Tcl_AsyncInvoke should be invoked.
*/
int asyncReady;
/*
* The variable below indicates whether Tcl_AsyncInvoke is currently
* working. If so then we won't set asyncReady again until
* Tcl_AsyncInvoke returns.
*/
int asyncActive;
Tcl_Mutex asyncMutex; /* Thread-specific AsyncHandler linked-list lock */
} ThreadSpecificData;
static Tcl_ThreadDataKey dataKey;
/*
*----------------------------------------------------------------------
*
* TclFinalizeAsync --
*
* Finalizes the mutex in the thread local data structure for the
* async subsystem.
*
* Results:
* None.
*
* Side effects:
* Forgets knowledge of the mutex should it have been created.
*
*----------------------------------------------------------------------
*/
void
TclFinalizeAsync()
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
if (tsdPtr->asyncMutex != NULL) {
Tcl_MutexFinalize(&tsdPtr->asyncMutex);
}
}
/*
*----------------------------------------------------------------------
*
* Tcl_AsyncCreate --
*
* This procedure creates the data structures for an asynchronous
|
| ︙ | ︙ | |||
84 85 86 87 88 89 90 91 92 93 94 95 96 |
Tcl_AsyncHandler
Tcl_AsyncCreate(proc, clientData)
Tcl_AsyncProc *proc; /* Procedure to call when handler
* is invoked. */
ClientData clientData; /* Argument to pass to handler. */
{
AsyncHandler *asyncPtr;
asyncPtr = (AsyncHandler *) ckalloc(sizeof(AsyncHandler));
asyncPtr->ready = 0;
asyncPtr->nextPtr = NULL;
asyncPtr->proc = proc;
asyncPtr->clientData = clientData;
| > > > > | | | | | | | 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 |
Tcl_AsyncHandler
Tcl_AsyncCreate(proc, clientData)
Tcl_AsyncProc *proc; /* Procedure to call when handler
* is invoked. */
ClientData clientData; /* Argument to pass to handler. */
{
AsyncHandler *asyncPtr;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
asyncPtr = (AsyncHandler *) ckalloc(sizeof(AsyncHandler));
asyncPtr->ready = 0;
asyncPtr->nextPtr = NULL;
asyncPtr->proc = proc;
asyncPtr->clientData = clientData;
asyncPtr->originTsd = tsdPtr;
asyncPtr->originThrdId = Tcl_GetCurrentThread();
Tcl_MutexLock(&tsdPtr->asyncMutex);
if (tsdPtr->firstHandler == NULL) {
tsdPtr->firstHandler = asyncPtr;
} else {
tsdPtr->lastHandler->nextPtr = asyncPtr;
}
tsdPtr->lastHandler = asyncPtr;
Tcl_MutexUnlock(&tsdPtr->asyncMutex);
return (Tcl_AsyncHandler) asyncPtr;
}
/*
*----------------------------------------------------------------------
*
* Tcl_AsyncMark --
|
| ︙ | ︙ | |||
124 125 126 127 128 129 130 |
*----------------------------------------------------------------------
*/
void
Tcl_AsyncMark(async)
Tcl_AsyncHandler async; /* Token for handler. */
{
| > > | | | | | | | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
*----------------------------------------------------------------------
*/
void
Tcl_AsyncMark(async)
Tcl_AsyncHandler async; /* Token for handler. */
{
AsyncHandler *token = (AsyncHandler *) async;
Tcl_MutexLock(&token->originTsd->asyncMutex);
token->ready = 1;
if (!token->originTsd->asyncActive) {
token->originTsd->asyncReady = 1;
Tcl_ThreadAlert(token->originThrdId);
}
Tcl_MutexUnlock(&token->originTsd->asyncMutex);
}
/*
*----------------------------------------------------------------------
*
* Tcl_AsyncInvoke --
*
|
| ︙ | ︙ | |||
163 164 165 166 167 168 169 |
* interpreter. Otherwise it is
* NULL. */
int code; /* If interp is non-NULL, this gives
* completion code from command that
* just completed. */
{
AsyncHandler *asyncPtr;
| > > | | | | | | | | | | | 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 |
* interpreter. Otherwise it is
* NULL. */
int code; /* If interp is non-NULL, this gives
* completion code from command that
* just completed. */
{
AsyncHandler *asyncPtr;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
Tcl_MutexLock(&tsdPtr->asyncMutex);
if (tsdPtr->asyncReady == 0) {
Tcl_MutexUnlock(&tsdPtr->asyncMutex);
return code;
}
tsdPtr->asyncReady = 0;
tsdPtr->asyncActive = 1;
if (interp == NULL) {
code = 0;
}
/*
* Make one or more passes over the list of handlers, invoking
* at most one handler in each pass. After invoking a handler,
* go back to the start of the list again so that (a) if a new
* higher-priority handler gets marked while executing a lower
* priority handler, we execute the higher-priority handler
* next, and (b) if a handler gets deleted during the execution
* of a handler, then the list structure may change so it isn't
* safe to continue down the list anyway.
*/
while (1) {
for (asyncPtr = tsdPtr->firstHandler; asyncPtr != NULL;
asyncPtr = asyncPtr->nextPtr) {
if (asyncPtr->ready) {
break;
}
}
if (asyncPtr == NULL) {
break;
}
asyncPtr->ready = 0;
Tcl_MutexUnlock(&tsdPtr->asyncMutex);
code = (*asyncPtr->proc)(asyncPtr->clientData, interp, code);
Tcl_MutexLock(&tsdPtr->asyncMutex);
}
tsdPtr->asyncActive = 0;
Tcl_MutexUnlock(&tsdPtr->asyncMutex);
return code;
}
/*
*----------------------------------------------------------------------
*
* Tcl_AsyncDelete --
|
| ︙ | ︙ | |||
227 228 229 230 231 232 233 234 235 236 |
*----------------------------------------------------------------------
*/
void
Tcl_AsyncDelete(async)
Tcl_AsyncHandler async; /* Token for handler to delete. */
{
AsyncHandler *asyncPtr = (AsyncHandler *) async;
AsyncHandler *prevPtr;
| > | | | | | | | | | | > | | 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 |
*----------------------------------------------------------------------
*/
void
Tcl_AsyncDelete(async)
Tcl_AsyncHandler async; /* Token for handler to delete. */
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
AsyncHandler *asyncPtr = (AsyncHandler *) async;
AsyncHandler *prevPtr;
Tcl_MutexLock(&tsdPtr->asyncMutex);
if (tsdPtr->firstHandler == asyncPtr) {
tsdPtr->firstHandler = asyncPtr->nextPtr;
if (tsdPtr->firstHandler == NULL) {
tsdPtr->lastHandler = NULL;
}
} else {
prevPtr = tsdPtr->firstHandler;
while (prevPtr->nextPtr != asyncPtr) {
prevPtr = prevPtr->nextPtr;
}
prevPtr->nextPtr = asyncPtr->nextPtr;
if (tsdPtr->lastHandler == asyncPtr) {
tsdPtr->lastHandler = prevPtr;
}
}
Tcl_MutexUnlock(&tsdPtr->asyncMutex);
ckfree((char *) asyncPtr);
}
/*
*----------------------------------------------------------------------
*
* Tcl_AsyncReady --
*
* This procedure can be used to tell whether Tcl_AsyncInvoke
* needs to be called. This procedure is the external interface
* for checking the thread-specific asyncReady variable.
*
* Results:
* The return value is 1 whenever a handler is ready and is 0
* when no handlers are ready.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
int
Tcl_AsyncReady()
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
return tsdPtr->asyncReady;
}
|
Changes to generic/tclCkalloc.c.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This code contributed by Karl Lehenbauer and Mark Diekhans * | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This code contributed by Karl Lehenbauer and Mark Diekhans * * RCS: @(#) $Id: tclCkalloc.c,v 1.7.2.2 2001/04/03 22:54:36 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #define FALSE 0 #define TRUE 1 |
| ︙ | ︙ | |||
1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 |
#ifdef TCL_MEM_DEBUG
Tcl_MutexLock(ckallocMutexPtr);
if (tclMemDumpFileName != NULL) {
Tcl_DumpActiveMemory(tclMemDumpFileName);
}
if (curTagPtr != NULL) {
TclpFree((char *) curTagPtr);
}
allocHead = NULL;
Tcl_MutexUnlock(ckallocMutexPtr);
#endif
#if USE_TCLALLOC
TclFinalizeAllocSubsystem();
#endif
}
| > | 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 |
#ifdef TCL_MEM_DEBUG
Tcl_MutexLock(ckallocMutexPtr);
if (tclMemDumpFileName != NULL) {
Tcl_DumpActiveMemory(tclMemDumpFileName);
}
if (curTagPtr != NULL) {
TclpFree((char *) curTagPtr);
curTagPtr = NULL;
}
allocHead = NULL;
Tcl_MutexUnlock(ckallocMutexPtr);
#endif
#if USE_TCLALLOC
TclFinalizeAllocSubsystem();
#endif
}
|
Changes to generic/tclClock.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclClock.c -- * * Contains the time and date related commands. This code * is derived from the time and date facilities of TclX, * by Mark Diekhans and Karl Lehenbauer. * * Copyright 1991-1995 Karl Lehenbauer and Mark Diekhans. * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclClock.c -- * * Contains the time and date related commands. This code * is derived from the time and date facilities of TclX, * by Mark Diekhans and Karl Lehenbauer. * * Copyright 1991-1995 Karl Lehenbauer and Mark Diekhans. * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclClock.c,v 1.9.2.1 2000/08/07 21:30:56 hobbs Exp $ */ #include "tcl.h" #include "tclInt.h" #include "tclPort.h" /* |
| ︙ | ︙ | |||
254 255 256 257 258 259 260 |
FormatClock(interp, clockVal, useGMT, format)
Tcl_Interp *interp; /* Current interpreter. */
unsigned long clockVal; /* Time in seconds. */
int useGMT; /* Boolean */
char *format; /* Format string */
{
struct tm *timeDataPtr;
| | | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
FormatClock(interp, clockVal, useGMT, format)
Tcl_Interp *interp; /* Current interpreter. */
unsigned long clockVal; /* Time in seconds. */
int useGMT; /* Boolean */
char *format; /* Format string */
{
struct tm *timeDataPtr;
Tcl_DString buffer, uniBuffer;
int bufSize;
char *p;
int result;
time_t tclockVal;
#ifndef HAVE_TM_ZONE
int savedTimeZone = 0; /* lint. */
char *savedTZEnv = NULL; /* lint. */
|
| ︙ | ︙ | |||
356 357 358 359 360 361 362 |
* format string is above.
*/
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"bad format string \"", format, "\"", (char *) NULL);
return TCL_ERROR;
}
| > > > > > > > | > > | 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 |
* format string is above.
*/
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"bad format string \"", format, "\"", (char *) NULL);
return TCL_ERROR;
}
/*
* Convert the time to external encoding, in case we asked for
* a localized return value. [Bug: 3345]
*/
Tcl_DStringInit(&uniBuffer);
Tcl_ExternalToUtfDString(NULL, buffer.string, -1, &uniBuffer);
Tcl_SetStringObj(Tcl_GetObjResult(interp), uniBuffer.string, -1);
Tcl_DStringFree(&uniBuffer);
Tcl_DStringFree(&buffer);
return TCL_OK;
}
|
Changes to generic/tclCmdAH.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclCmdAH.c -- * * This file contains the top-level command routines for most of * the Tcl built-in commands whose names begin with the letters * A to H. * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > > | 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 | /* * tclCmdAH.c -- * * This file contains the top-level command routines for most of * the Tcl built-in commands whose names begin with the letters * A to H. * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclCmdAH.c,v 1.12.2.2 2001/10/17 19:29:24 das Exp $ */ #include "tclInt.h" #include "tclPort.h" #ifdef MAC_TCL #include "tclMacInt.h" #endif #include <locale.h> typedef int (StatProc)_ANSI_ARGS_((CONST char *path, struct stat *buf)); /* * Prototypes for local procedures defined in this file: */ |
| ︙ | ︙ | |||
838 839 840 841 842 843 844 845 846 847 848 849 850 851 |
if (objc == 4) {
if (Tcl_GetLongFromObj(interp, objv[3],
(long*)(&buf.st_atime)) != TCL_OK) {
return TCL_ERROR;
}
tval.actime = buf.st_atime;
tval.modtime = buf.st_mtime;
fileName = Tcl_GetString(objv[2]);
if (utime(fileName, &tval) != 0) {
Tcl_AppendStringsToObj(resultPtr,
"could not set access time for file \"",
fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
| > > > > | 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 |
if (objc == 4) {
if (Tcl_GetLongFromObj(interp, objv[3],
(long*)(&buf.st_atime)) != TCL_OK) {
return TCL_ERROR;
}
tval.actime = buf.st_atime;
tval.modtime = buf.st_mtime;
#ifdef MAC_TCL
tval.actime += TclpGetGMTOffset();
tval.modtime += TclpGetGMTOffset();
#endif
fileName = Tcl_GetString(objv[2]);
if (utime(fileName, &tval) != 0) {
Tcl_AppendStringsToObj(resultPtr,
"could not set access time for file \"",
fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
|
| ︙ | ︙ | |||
1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 |
if (objc == 4) {
if (Tcl_GetLongFromObj(interp, objv[3],
(long*)(&buf.st_mtime)) != TCL_OK) {
return TCL_ERROR;
}
tval.actime = buf.st_atime;
tval.modtime = buf.st_mtime;
fileName = Tcl_GetString(objv[2]);
if (utime(fileName, &tval) != 0) {
Tcl_AppendStringsToObj(resultPtr,
"could not set modification time for file \"",
fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
| > > > > | 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 |
if (objc == 4) {
if (Tcl_GetLongFromObj(interp, objv[3],
(long*)(&buf.st_mtime)) != TCL_OK) {
return TCL_ERROR;
}
tval.actime = buf.st_atime;
tval.modtime = buf.st_mtime;
#ifdef MAC_TCL
tval.actime += TclpGetGMTOffset();
tval.modtime += TclpGetGMTOffset();
#endif
fileName = Tcl_GetString(objv[2]);
if (utime(fileName, &tval) != 0) {
Tcl_AppendStringsToObj(resultPtr,
"could not set modification time for file \"",
fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
|
| ︙ | ︙ | |||
1926 1927 1928 1929 1930 1931 1932 |
int width; /* Field width from field specifier, or 0 if
* no width given. */
int precision; /* Field precision from field specifier, or 0
* if no precision given. */
int size; /* Number of bytes needed for result of
* conversion, based on type of conversion
* ("e", "s", etc.), width, and precision. */
| | | 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 |
int width; /* Field width from field specifier, or 0 if
* no width given. */
int precision; /* Field precision from field specifier, or 0
* if no precision given. */
int size; /* Number of bytes needed for result of
* conversion, based on type of conversion
* ("e", "s", etc.), width, and precision. */
long intValue; /* Used to hold value to pass to sprintf, if
* it's a one-word integer or char value */
char *ptrValue = NULL; /* Used to hold value to pass to sprintf, if
* it's a one-word value. */
double doubleValue; /* Used to hold value to pass to sprintf if
* it's a double value. */
int whichValue; /* Indicates which of intValue, ptrValue,
* or doubleValue has the value to pass to
|
| ︙ | ︙ | |||
2162 2163 2164 2165 2166 2167 2168 | case 'i': newPtr[-1] = 'd'; case 'd': case 'o': case 'u': case 'x': case 'X': | | > > > > > > > > > | 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 |
case 'i':
newPtr[-1] = 'd';
case 'd':
case 'o':
case 'u':
case 'x':
case 'X':
if (Tcl_GetLongFromObj(interp, /* INTL: Tcl source. */
objv[objIndex], &intValue) != TCL_OK) {
goto fmtError;
}
if ((unsigned long) intValue > UINT_MAX) {
/*
* Add the 'l' for long format type.
*/
newPtr++;
*newPtr = 0;
newPtr[-1] = newPtr[-2];
newPtr[-2] = 'l';
}
whichValue = INT_VALUE;
size = 40 + precision;
break;
case 's':
/*
* Compute the length of the string in characters and add
|
| ︙ | ︙ | |||
2189 2190 2191 2192 2193 2194 2195 |
}
size = Tcl_UtfAtIndex(ptrValue, stringLen) - ptrValue;
if (width > stringLen) {
size += (width - stringLen);
}
break;
case 'c':
| | | 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 |
}
size = Tcl_UtfAtIndex(ptrValue, stringLen) - ptrValue;
if (width > stringLen) {
size += (width - stringLen);
}
break;
case 'c':
if (Tcl_GetLongFromObj(interp, /* INTL: Tcl source. */
objv[objIndex], &intValue) != TCL_OK) {
goto fmtError;
}
whichValue = CHAR_VALUE;
size = width + TCL_UTF_MAX;
break;
case 'e':
|
| ︙ | ︙ |
Changes to generic/tclCmdIL.c.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | * Copyright (c) 1993-1997 Lucent Technologies. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | * Copyright (c) 1993-1997 Lucent Technologies. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclCmdIL.c,v 1.24.2.3 2001/10/08 15:50:24 dkf Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclCompile.h" #include "tclRegexp.h" |
| ︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #define SORTMODE_ASCII 0 #define SORTMODE_INTEGER 1 #define SORTMODE_REAL 2 #define SORTMODE_COMMAND 3 #define SORTMODE_DICTIONARY 4 /* * Forward declarations for procedures defined in this file: */ static void AppendLocals _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *listPtr, char *pattern, int includeLinks)); | > > > > > > > | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #define SORTMODE_ASCII 0 #define SORTMODE_INTEGER 1 #define SORTMODE_REAL 2 #define SORTMODE_COMMAND 3 #define SORTMODE_DICTIONARY 4 /* * Magic values for the index field of the SortInfo structure. * Note that the index "end-1" will be translated to SORTIDX_END-1, etc. */ #define SORTIDX_NONE -1 /* Not indexed; use whole value. */ #define SORTIDX_END -2 /* Indexed from end. */ /* * Forward declarations for procedures defined in this file: */ static void AppendLocals _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *listPtr, char *pattern, int includeLinks)); |
| ︙ | ︙ | |||
558 559 560 561 562 563 564 |
procPtr = TclFindProc(iPtr, name);
if (procPtr == NULL) {
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"\"", name, "\" isn't a procedure", (char *) NULL);
return TCL_ERROR;
}
| | < | | > | | < | < < < < | < | 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 |
procPtr = TclFindProc(iPtr, name);
if (procPtr == NULL) {
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"\"", name, "\" isn't a procedure", (char *) NULL);
return TCL_ERROR;
}
/*
* Here we used to return procPtr->bodyPtr, except when the body was
* bytecompiled - in that case, the return was a copy of the body's
* string rep. In order to better isolate the implementation details
* of the compiler/engine subsystem, we now always return a copy of
* the string rep. It is important to return a copy so that later
* manipulations of the object do not invalidate the internal rep.
*/
bodyPtr = procPtr->bodyPtr;
resultPtr = Tcl_NewStringObj(bodyPtr->bytes, bodyPtr->length);
Tcl_SetObjResult(interp, resultPtr);
return TCL_OK;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
1502 1503 1504 1505 1506 1507 1508 |
entryPtr = Tcl_FirstHashEntry(&nsPtr->cmdTable, &search);
while (entryPtr != NULL) {
cmdName = Tcl_GetHashKey(&nsPtr->cmdTable, entryPtr);
if ((simplePattern == NULL)
|| Tcl_StringMatch(cmdName, simplePattern)) {
cmdPtr = (Command *) Tcl_GetHashValue(entryPtr);
| < < < < < < < < > > > > > > > > | 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 |
entryPtr = Tcl_FirstHashEntry(&nsPtr->cmdTable, &search);
while (entryPtr != NULL) {
cmdName = Tcl_GetHashKey(&nsPtr->cmdTable, entryPtr);
if ((simplePattern == NULL)
|| Tcl_StringMatch(cmdName, simplePattern)) {
cmdPtr = (Command *) Tcl_GetHashValue(entryPtr);
realCmdPtr = (Command *)
TclGetOriginalCommand((Tcl_Command) cmdPtr);
if (TclIsProc(cmdPtr)
|| ((realCmdPtr != NULL) && TclIsProc(realCmdPtr))) {
if (specificNsInPattern) {
elemObjPtr = Tcl_NewObj();
Tcl_GetCommandFullName(interp, (Tcl_Command) cmdPtr,
elemObjPtr);
} else {
elemObjPtr = Tcl_NewStringObj(cmdName, -1);
}
Tcl_ListObjAppendElement(interp, listPtr, elemObjPtr);
}
}
entryPtr = Tcl_NextHashEntry(&search);
}
/*
|
| ︙ | ︙ | |||
2015 2016 2017 2018 2019 2020 2021 |
int
Tcl_LinsertObjCmd(dummy, interp, objc, objv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
register int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
| | < > > > > > > | > > > | < | < < < < < < < < < < < < < < < < < < < < < < < | | | < > > > | < | < | 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 |
int
Tcl_LinsertObjCmd(dummy, interp, objc, objv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
register int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
Tcl_Obj *listPtr;
int index, isDuplicate, len, result;
if (objc < 4) {
Tcl_WrongNumArgs(interp, 1, objv, "list index element ?element ...?");
return TCL_ERROR;
}
/*
* Get the index first since, if a conversion to int is needed, it
* will invalidate the list's internal representation.
*/
result = Tcl_ListObjLength(interp, objv[1], &len);
if (result != TCL_OK) {
return result;
}
/*
* Get the index. "end" is interpreted to be the index after the last
* element, such that using it will cause any inserted elements to be
* appended to the list.
*/
result = TclGetIntForIndex(interp, objv[2], /*end*/ len, &index);
if (result != TCL_OK) {
return result;
}
if (index > len) {
index = len;
}
/*
* If the list object is unshared we can modify it directly. Otherwise
* we create a copy to modify: this is "copy on write".
*/
listPtr = objv[1];
isDuplicate = 0;
if (Tcl_IsShared(listPtr)) {
listPtr = Tcl_DuplicateObj(listPtr);
isDuplicate = 1;
}
if ((objc == 4) && (index == len)) {
/*
* Special case: insert one element at the end of the list.
*/
result = Tcl_ListObjAppendElement(interp, listPtr, objv[3]);
} else if (objc > 3) {
result = Tcl_ListObjReplace(interp, listPtr, index, 0,
(objc-3), &(objv[3]));
}
if (result != TCL_OK) {
if (isDuplicate) {
Tcl_DecrRefCount(listPtr); /* free unneeded obj */
}
return result;
}
/*
* Set the interpreter's object result.
*/
Tcl_SetObjResult(interp, listPtr);
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ListObjCmd --
|
| ︙ | ︙ | |||
2302 2303 2304 2305 2306 2307 2308 |
Tcl_LreplaceObjCmd(dummy, interp, objc, objv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
register Tcl_Obj *listPtr;
| | < < < < < < < < < < < < < | < < < < | > > | < | < | < | > > > > > > > > | < | < > > > > > > > > > > > > > > | | 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 |
Tcl_LreplaceObjCmd(dummy, interp, objc, objv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
register Tcl_Obj *listPtr;
int isDuplicate, first, last, listLen, numToDelete, result;
if (objc < 4) {
Tcl_WrongNumArgs(interp, 1, objv,
"list first last ?element element ...?");
return TCL_ERROR;
}
result = Tcl_ListObjLength(interp, objv[1], &listLen);
if (result != TCL_OK) {
return result;
}
/*
* Get the first and last indexes. "end" is interpreted to be the index
* for the last element, such that using it will cause that element to
* be included for deletion.
*/
result = TclGetIntForIndex(interp, objv[2], /*end*/ (listLen - 1), &first);
if (result != TCL_OK) {
return result;
}
result = TclGetIntForIndex(interp, objv[3], /*end*/ (listLen - 1), &last);
if (result != TCL_OK) {
return result;
}
if (first < 0) {
first = 0;
}
/*
* Complain if the user asked for a start element that is greater than the
* list length. This won't ever trigger for the "end*" case as that will
* be properly constrained by TclGetIntForIndex because we use listLen-1
* (to allow for replacing the last elem).
*/
if ((first >= listLen) && (listLen > 0)) {
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"list doesn't contain element ",
Tcl_GetString(objv[2]), (int *) NULL);
return TCL_ERROR;
}
if (last >= listLen) {
last = (listLen - 1);
}
if (first <= last) {
numToDelete = (last - first + 1);
} else {
numToDelete = 0;
}
/*
* If the list object is unshared we can modify it directly, otherwise
* we create a copy to modify: this is "copy on write".
*/
listPtr = objv[1];
isDuplicate = 0;
if (Tcl_IsShared(listPtr)) {
listPtr = Tcl_DuplicateObj(listPtr);
isDuplicate = 1;
}
if (objc > 4) {
result = Tcl_ListObjReplace(interp, listPtr, first, numToDelete,
(objc-4), &(objv[4]));
} else {
result = Tcl_ListObjReplace(interp, listPtr, first, numToDelete,
0, NULL);
}
if (result != TCL_OK) {
if (isDuplicate) {
Tcl_DecrRefCount(listPtr); /* free unneeded obj */
}
return result;
}
/*
* Set the interpreter's object result.
*/
Tcl_SetObjResult(interp, listPtr);
|
| ︙ | ︙ | |||
2529 2530 2531 2532 2533 2534 2535 |
/*
* Parse arguments to set up the mode for the sort.
*/
sortInfo.isIncreasing = 1;
sortInfo.sortMode = SORTMODE_ASCII;
| | | 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 |
/*
* Parse arguments to set up the mode for the sort.
*/
sortInfo.isIncreasing = 1;
sortInfo.sortMode = SORTMODE_ASCII;
sortInfo.index = SORTIDX_NONE;
sortInfo.interp = interp;
sortInfo.resultCode = TCL_OK;
cmdPtr = NULL;
unique = 0;
for (i = 1; i < objc-1; i++) {
if (Tcl_GetIndexFromObj(interp, objv[i], switches, "option", 0, &index)
!= TCL_OK) {
|
| ︙ | ︙ | |||
2570 2571 2572 2573 2574 2575 2576 |
case 5: /* -index */
if (i == (objc-2)) {
Tcl_AppendToObj(resultPtr,
"\"-index\" option must be followed by list index",
-1);
return TCL_ERROR;
}
| | | < | 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 |
case 5: /* -index */
if (i == (objc-2)) {
Tcl_AppendToObj(resultPtr,
"\"-index\" option must be followed by list index",
-1);
return TCL_ERROR;
}
if (TclGetIntForIndex(interp, objv[i+1], SORTIDX_END,
&sortInfo.index) != TCL_OK) {
return TCL_ERROR;
}
i++;
break;
case 6: /* -integer */
sortInfo.sortMode = SORTMODE_INTEGER;
break;
case 7: /* -real */
sortInfo.sortMode = SORTMODE_REAL;
|
| ︙ | ︙ | |||
2612 2613 2614 2615 2616 2617 2618 |
}
Tcl_ListObjAppendElement(interp, newCommandPtr, Tcl_NewObj());
sortInfo.compareCmdPtr = newCommandPtr;
}
sortInfo.resultCode = Tcl_ListObjGetElements(interp, objv[objc-1],
&length, &listObjPtrs);
| | < < < | 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 |
}
Tcl_ListObjAppendElement(interp, newCommandPtr, Tcl_NewObj());
sortInfo.compareCmdPtr = newCommandPtr;
}
sortInfo.resultCode = Tcl_ListObjGetElements(interp, objv[objc-1],
&length, &listObjPtrs);
if (sortInfo.resultCode != TCL_OK || length <= 0) {
goto done;
}
elementArray = (SortElement *) ckalloc(length * sizeof(SortElement));
for (i=0; i < length; i++){
elementArray[i].objPtr = listObjPtrs[i];
elementArray[i].count = 0;
elementArray[i].nextPtr = &elementArray[i+1];
}
elementArray[length-1].nextPtr = NULL;
|
| ︙ | ︙ | |||
2828 2829 2830 2831 2832 2833 2834 |
/*
* Once an error has occurred, skip any future comparisons
* so as to preserve the error message in sortInterp->result.
*/
return order;
}
| | | | | | | 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 |
/*
* Once an error has occurred, skip any future comparisons
* so as to preserve the error message in sortInterp->result.
*/
return order;
}
if (infoPtr->index != SORTIDX_NONE) {
/*
* The "-index" option was specified. Treat each object as a
* list, extract the requested element from each list, and
* compare the elements, not the lists. "end"-relative indices
* are signaled here with large negative values.
*/
if (Tcl_ListObjLength(infoPtr->interp, objPtr1, &listLen) != TCL_OK) {
infoPtr->resultCode = TCL_ERROR;
return order;
}
if (infoPtr->index < SORTIDX_NONE) {
index = listLen + infoPtr->index + 1;
} else {
index = infoPtr->index;
}
if (Tcl_ListObjIndex(infoPtr->interp, objPtr1, index, &objPtr)
!= TCL_OK) {
infoPtr->resultCode = TCL_ERROR;
|
| ︙ | ︙ | |||
2867 2868 2869 2870 2871 2872 2873 |
}
objPtr1 = objPtr;
if (Tcl_ListObjLength(infoPtr->interp, objPtr2, &listLen) != TCL_OK) {
infoPtr->resultCode = TCL_ERROR;
return order;
}
| | | | 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 |
}
objPtr1 = objPtr;
if (Tcl_ListObjLength(infoPtr->interp, objPtr2, &listLen) != TCL_OK) {
infoPtr->resultCode = TCL_ERROR;
return order;
}
if (infoPtr->index < SORTIDX_NONE) {
index = listLen + infoPtr->index + 1;
} else {
index = infoPtr->index;
}
if (Tcl_ListObjIndex(infoPtr->interp, objPtr2, index, &objPtr)
!= TCL_OK) {
infoPtr->resultCode = TCL_ERROR;
|
| ︙ | ︙ |
Changes to generic/tclCmdMZ.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclCmdMZ.c -- * * This file contains the top-level command routines for most of * the Tcl built-in commands whose names begin with the letters * M to Z. It contains only commands in the generic core (i.e. * those that don't depend much upon UNIX facilities). * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. | | | < < < < < < < < < < < < < < < < < | 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 |
/*
* tclCmdMZ.c --
*
* This file contains the top-level command routines for most of
* the Tcl built-in commands whose names begin with the letters
* M to Z. It contains only commands in the generic core (i.e.
* those that don't depend much upon UNIX facilities).
*
* Copyright (c) 1987-1993 The Regents of the University of California.
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
* Copyright (c) 1998-2000 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclCmdMZ.c,v 1.26.2.5 2001/11/20 15:14:09 kennykb Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
#include "tclRegexp.h"
/*
* Structure used to hold information about variable traces:
*/
typedef struct {
int flags; /* Operations for which Tcl command is
* to be invoked. */
|
| ︙ | ︙ | |||
145 146 147 148 149 150 151 |
indices = 0;
about = 0;
cflags = TCL_REG_ADVANCED;
eflags = 0;
offset = 0;
all = 0;
doinline = 0;
| | | 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
indices = 0;
about = 0;
cflags = TCL_REG_ADVANCED;
eflags = 0;
offset = 0;
all = 0;
doinline = 0;
for (i = 1; i < objc; i++) {
char *name;
int index;
name = Tcl_GetString(objv[i]);
if (name[0] != '-') {
break;
|
| ︙ | ︙ | |||
231 232 233 234 235 236 237 238 239 240 241 |
* User requested -inline, but specified match variables - a no-no.
*/
Tcl_AppendResult(interp, "regexp match variables not allowed",
" when using -inline", (char *) NULL);
return TCL_ERROR;
}
regExpr = Tcl_GetRegExpFromObj(interp, objv[0], cflags);
if (regExpr == NULL) {
return TCL_ERROR;
}
| > > > > > > > > < | 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 |
* User requested -inline, but specified match variables - a no-no.
*/
Tcl_AppendResult(interp, "regexp match variables not allowed",
" when using -inline", (char *) NULL);
return TCL_ERROR;
}
/*
* Get the length of the string that we are matching against so
* we can do the termination test for -all matches. Do this before
* getting the regexp to avoid shimmering problems.
*/
objPtr = objv[1];
stringLength = Tcl_GetCharLength(objPtr);
regExpr = Tcl_GetRegExpFromObj(interp, objv[0], cflags);
if (regExpr == NULL) {
return TCL_ERROR;
}
if (about) {
if (TclRegAbout(interp, regExpr) < 0) {
return TCL_ERROR;
}
return TCL_OK;
}
|
| ︙ | ︙ | |||
270 271 272 273 274 275 276 |
* Save only enough subexpressions for matches we want to keep,
* expect in the case of -all, where we need to keep at least
* one to know where to move the offset.
*/
numMatchesSaved = (objc == 0) ? all : objc;
}
| < < < < < < | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
* Save only enough subexpressions for matches we want to keep,
* expect in the case of -all, where we need to keep at least
* one to know where to move the offset.
*/
numMatchesSaved = (objc == 0) ? all : objc;
}
/*
* The following loop is to handle multiple matches within the
* same source string; each iteration handles one match. If "-all"
* hasn't been specified then the loop body only gets executed once.
* We terminate the loop when the starting offset is past the end of the
* string.
*/
|
| ︙ | ︙ | |||
333 334 335 336 337 338 339 |
for (i = 0; i < objc; i++) {
Tcl_Obj *newPtr;
if (indices) {
int start, end;
Tcl_Obj *objs[2];
| > > > > | | 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
for (i = 0; i < objc; i++) {
Tcl_Obj *newPtr;
if (indices) {
int start, end;
Tcl_Obj *objs[2];
/*
* Only adjust the match area if there was a match for
* that area. (Scriptics Bug 4391/SF Bug #219232)
*/
if (i <= info.nsubs && info.matches[i].start >= 0) {
start = offset + info.matches[i].start;
end = offset + info.matches[i].end;
/*
* Adjust index so it refers to the last character in the
* match instead of the first character after the match.
*/
|
| ︙ | ︙ | |||
398 399 400 401 402 403 404 405 406 407 408 409 410 411 |
* length of the match is 0, so offset never changes).
*/
if (info.matches[0].end == 0) {
offset++;
}
offset += info.matches[0].end;
all++;
if (offset >= stringLength) {
break;
}
}
/*
* Set the interpreter's object result to an integer object
| > | 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 |
* length of the match is 0, so offset never changes).
*/
if (info.matches[0].end == 0) {
offset++;
}
offset += info.matches[0].end;
all++;
eflags |= TCL_REG_NOTBOL;
if (offset >= stringLength) {
break;
}
}
/*
* Set the interpreter's object result to an integer object
|
| ︙ | ︙ | |||
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 |
Tcl_WrongNumArgs(interp, 1, objv,
"?switches? exp string subSpec varName");
return TCL_ERROR;
}
objv += i;
regExpr = Tcl_GetRegExpFromObj(interp, objv[0], cflags);
if (regExpr == NULL) {
return TCL_ERROR;
}
result = TCL_OK;
resultPtr = Tcl_NewObj();
Tcl_IncrRefCount(resultPtr);
| > > > > > > > > > > > < < < < < < | 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 |
Tcl_WrongNumArgs(interp, 1, objv,
"?switches? exp string subSpec varName");
return TCL_ERROR;
}
objv += i;
/*
* Get the length of the string that we are matching before
* getting the regexp to avoid shimmering problems.
*/
objPtr = objv[1];
wlen = Tcl_GetCharLength(objPtr);
wstring = Tcl_GetUnicode(objPtr);
subspec = Tcl_GetString(objv[2]);
varPtr = objv[3];
regExpr = Tcl_GetRegExpFromObj(interp, objv[0], cflags);
if (regExpr == NULL) {
return TCL_ERROR;
}
result = TCL_OK;
resultPtr = Tcl_NewObj();
Tcl_IncrRefCount(resultPtr);
/*
* The following loop is to handle multiple matches within the
* same source string; each iteration handles one match and its
* corresponding substitution. If "-all" hasn't been specified
* then the loop body only gets executed once.
*/
|
| ︙ | ︙ | |||
904 905 906 907 908 909 910 911 912 913 914 915 916 |
listPtr = Tcl_GetObjResult(interp);
if (stringLen == 0) {
/*
* Do nothing.
*/
} else if (splitCharLen == 0) {
/*
* Handle the special case of splitting on every character.
*/
for ( ; string < end; string += len) {
len = Tcl_UtfToUniChar(string, &ch);
| > > > > > > > > > > > > > | > > > > > > | 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 |
listPtr = Tcl_GetObjResult(interp);
if (stringLen == 0) {
/*
* Do nothing.
*/
} else if (splitCharLen == 0) {
Tcl_HashTable charReuseTable;
Tcl_HashEntry *hPtr;
int isNew;
/*
* Handle the special case of splitting on every character.
*
* Uses a hash table to ensure that each kind of character has
* only one Tcl_Obj instance (multiply-referenced) in the
* final list. This is a *major* win when splitting on a long
* string (especially in the megabyte range!) - DKF
*/
Tcl_InitHashTable(&charReuseTable, TCL_ONE_WORD_KEYS);
for ( ; string < end; string += len) {
len = Tcl_UtfToUniChar(string, &ch);
/* Assume Tcl_UniChar is an integral type... */
hPtr = Tcl_CreateHashEntry(&charReuseTable, (char*)0 + ch, &isNew);
if (isNew) {
objPtr = Tcl_NewStringObj(string, len);
/* Don't need to fiddle with refcount... */
Tcl_SetHashValue(hPtr, (ClientData) objPtr);
} else {
objPtr = (Tcl_Obj*) Tcl_GetHashValue(hPtr);
}
Tcl_ListObjAppendElement(NULL, listPtr, objPtr);
}
Tcl_DeleteHashTable(&charReuseTable);
} else {
char *element, *p, *splitEnd;
int splitLen;
Tcl_UniChar splitChar;
/*
* Normal case: split on any of a given set of characters.
|
| ︙ | ︙ | |||
1017 1018 1019 1020 1021 1022 1023 |
"?-nocase? ?-length int? string1 string2");
return TCL_ERROR;
}
for (i = 2; i < objc-2; i++) {
string2 = Tcl_GetStringFromObj(objv[i], &length2);
if ((length2 > 1)
| | | | 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 |
"?-nocase? ?-length int? string1 string2");
return TCL_ERROR;
}
for (i = 2; i < objc-2; i++) {
string2 = Tcl_GetStringFromObj(objv[i], &length2);
if ((length2 > 1)
&& strncmp(string2, "-nocase", (size_t)length2) == 0) {
nocase = 1;
} else if ((length2 > 1)
&& strncmp(string2, "-length", (size_t)length2) == 0) {
if (i+1 >= objc-2) {
goto str_cmp_args;
}
if (Tcl_GetIntFromObj(interp, objv[++i],
&reqlength) != TCL_OK) {
return TCL_ERROR;
}
|
| ︙ | ︙ | |||
1181 1182 1183 1184 1185 1186 1187 |
match = start + Tcl_NumUtfChars(string2, match);
}
}
Tcl_SetIntObj(resultPtr, match);
break;
}
case STR_INDEX: {
| < < < < | > | | < < | > | < < | | | | > > > | | | | 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 |
match = start + Tcl_NumUtfChars(string2, match);
}
}
Tcl_SetIntObj(resultPtr, match);
break;
}
case STR_INDEX: {
if (objc != 4) {
Tcl_WrongNumArgs(interp, 2, objv, "string charIndex");
return TCL_ERROR;
}
/*
* If we have a ByteArray object, avoid indexing in the
* Utf string since the byte array contains one byte per
* character. Otherwise, use the Unicode string rep to
* get the index'th char.
*/
if (objv[2]->typePtr == &tclByteArrayType) {
string1 = (char *) Tcl_GetByteArrayFromObj(objv[2], &length1);
if (TclGetIntForIndex(interp, objv[3], length1 - 1,
&index) != TCL_OK) {
return TCL_ERROR;
}
if ((index >= 0) && (index < length1)) {
Tcl_SetByteArrayObj(resultPtr,
(unsigned char *)(&string1[index]), 1);
}
} else {
/*
* Get Unicode char length to calulate what 'end' means.
*/
length1 = Tcl_GetCharLength(objv[2]);
if (TclGetIntForIndex(interp, objv[3], length1 - 1,
&index) != TCL_OK) {
return TCL_ERROR;
}
if ((index >= 0) && (index < length1)) {
char buf[TCL_UTF_MAX];
Tcl_UniChar ch;
ch = Tcl_GetUniChar(objv[2], index);
length1 = Tcl_UniCharToUtf(ch, buf);
Tcl_SetStringObj(resultPtr, buf, length1);
}
}
break;
}
case STR_IS: {
char *end;
Tcl_UniChar ch;
|
| ︙ | ︙ | |||
1271 1272 1273 1274 1275 1276 1277 |
if (objc != 4) {
for (i = 3; i < objc-1; i++) {
string2 = Tcl_GetStringFromObj(objv[i], &length2);
if ((length2 > 1) &&
strncmp(string2, "-strict", (size_t) length2) == 0) {
strict = 1;
} else if ((length2 > 1) &&
| | > | 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 |
if (objc != 4) {
for (i = 3; i < objc-1; i++) {
string2 = Tcl_GetStringFromObj(objv[i], &length2);
if ((length2 > 1) &&
strncmp(string2, "-strict", (size_t) length2) == 0) {
strict = 1;
} else if ((length2 > 1) &&
strncmp(string2, "-failindex",
(size_t) length2) == 0) {
if (i+1 >= objc-1) {
Tcl_WrongNumArgs(interp, 3, objv,
"?-strict? ?-failindex var? str");
return TCL_ERROR;
}
failVarObj = objv[++i];
} else {
|
| ︙ | ︙ | |||
1588 1589 1590 1591 1592 1593 1594 |
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "string");
return TCL_ERROR;
}
if ((enum options) index == STR_BYTELENGTH) {
(void) Tcl_GetStringFromObj(objv[2], &length1);
| < < < | > | 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 |
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "string");
return TCL_ERROR;
}
if ((enum options) index == STR_BYTELENGTH) {
(void) Tcl_GetStringFromObj(objv[2], &length1);
} else {
/*
* If we have a ByteArray object, avoid recomputing the
* string since the byte array contains one byte per
* character. Otherwise, use the Unicode string rep to
* calculate the length.
*/
if (objv[2]->typePtr == &tclByteArrayType) {
(void) Tcl_GetByteArrayFromObj(objv[2], &length1);
} else {
length1 = Tcl_GetCharLength(objv[2]);
}
}
Tcl_SetIntObj(resultPtr, length1);
break;
}
case STR_MAP: {
int uselen, mapElemc, len, nocase = 0;
Tcl_Obj **mapElemv;
char *end;
Tcl_UniChar ch;
|
| ︙ | ︙ | |||
1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 |
return TCL_ERROR;
}
if (mapElemc == 0) {
/*
* empty charMap, just return whatever string was given
*/
Tcl_SetObjResult(interp, objv[objc-1]);
} else if (mapElemc & 1) {
/*
* The charMap must be an even number of key/value items
*/
Tcl_SetStringObj(resultPtr, "char map list unbalanced", -1);
return TCL_ERROR;
}
| > | 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 |
return TCL_ERROR;
}
if (mapElemc == 0) {
/*
* empty charMap, just return whatever string was given
*/
Tcl_SetObjResult(interp, objv[objc-1]);
return TCL_OK;
} else if (mapElemc & 1) {
/*
* The charMap must be an even number of key/value items
*/
Tcl_SetStringObj(resultPtr, "char map list unbalanced", -1);
return TCL_ERROR;
}
|
| ︙ | ︙ | |||
1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 |
return TCL_ERROR;
}
if (Tcl_GetIntFromObj(interp, objv[3], &count) != TCL_OK) {
return TCL_ERROR;
}
string1 = Tcl_GetStringFromObj(objv[2], &length1);
if (length1 > 0) {
for (index = 0; index < count; index++) {
| > > > > > > > > > > > > > > | > > > > > > > > > > > | 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 |
return TCL_ERROR;
}
if (Tcl_GetIntFromObj(interp, objv[3], &count) != TCL_OK) {
return TCL_ERROR;
}
if (count == 1) {
Tcl_SetObjResult(interp, objv[2]);
} else if (count > 1) {
string1 = Tcl_GetStringFromObj(objv[2], &length1);
if (length1 > 0) {
/*
* Only build up a string that has data. Instead of
* building it up with repeated appends, we just allocate
* the necessary space once and copy the string value in.
*/
length2 = length1 * count;
/*
* Include space for the NULL
*/
string2 = (char *) ckalloc((size_t) length2+1);
for (index = 0; index < count; index++) {
memcpy(string2 + (length1 * index), string1,
(size_t) length1);
}
string2[length2] = '\0';
/*
* We have to directly assign this instead of using
* Tcl_SetStringObj (and indirectly TclInitStringRep)
* because that makes another copy of the data.
*/
resultPtr = Tcl_NewObj();
resultPtr->bytes = string2;
resultPtr->length = length2;
Tcl_SetObjResult(interp, resultPtr);
}
}
break;
}
case STR_REPLACE: {
int first, last;
if (objc < 5 || objc > 6) {
|
| ︙ | ︙ | |||
2478 2479 2480 2481 2482 2483 2484 |
result = Tcl_EvalObjEx(interp, objPtr, 0);
if (result != TCL_OK) {
return result;
}
}
TclpGetTime(&stop);
| | | | 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 |
result = Tcl_EvalObjEx(interp, objPtr, 0);
if (result != TCL_OK) {
return result;
}
}
TclpGetTime(&stop);
totalMicroSec = ( ( (double) ( stop.sec - start.sec ) ) * 1.0e6
+ ( stop.usec - start.usec ) );
sprintf(buf, "%.0f microseconds per iteration",
((count <= 0) ? 0 : totalMicroSec/count));
Tcl_ResetResult(interp);
Tcl_AppendToObj(Tcl_GetObjResult(interp), buf, -1);
return TCL_OK;
}
|
| ︙ | ︙ |
Changes to generic/tclCompile.c.
1 2 3 4 5 6 7 8 9 10 11 12 |
/*
* tclCompile.c --
*
* This file contains procedures that compile Tcl commands or parts
* of commands (like quoted strings or nested sub-commands) into a
* sequence of instructions ("bytecodes").
*
* Copyright (c) 1996-1998 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
| | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/*
* tclCompile.c --
*
* This file contains procedures that compile Tcl commands or parts
* of commands (like quoted strings or nested sub-commands) into a
* sequence of instructions ("bytecodes").
*
* Copyright (c) 1996-1998 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclCompile.c,v 1.20.2.2 2002/03/15 20:10:01 msofer Exp $
*/
#include "tclInt.h"
#include "tclCompile.h"
/*
* Table of all AuxData types.
|
| ︙ | ︙ | |||
1195 1196 1197 1198 1199 1200 1201 |
TclEmitInstInt4(INST_LOAD_SCALAR4, localVar,
envPtr);
}
} else {
code = TclCompileTokens(interp, tokenPtr+2,
tokenPtr->numComponents-1, envPtr);
if (code != TCL_OK) {
| > | | | 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 |
TclEmitInstInt4(INST_LOAD_SCALAR4, localVar,
envPtr);
}
} else {
code = TclCompileTokens(interp, tokenPtr+2,
tokenPtr->numComponents-1, envPtr);
if (code != TCL_OK) {
char errorBuffer[150];
sprintf(errorBuffer,
"\n (parsing index for array \"%.*s\")",
((nameBytes > 100)? 100 : nameBytes), name);
Tcl_AddObjErrorInfo(interp, errorBuffer, -1);
goto error;
}
depthForVar += envPtr->maxStackDepth;
if (localVar < 0) {
TclEmitOpcode(INST_LOAD_ARRAY_STK, envPtr);
} else if (localVar <= 255) {
TclEmitInstInt1(INST_LOAD_ARRAY1, localVar,
|
| ︙ | ︙ | |||
1891 1892 1893 1894 1895 1896 1897 | * old array is freed. Byte codes are copied from the old array to the * new one. * *---------------------------------------------------------------------- */ void | | | > > | 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 |
* old array is freed. Byte codes are copied from the old array to the
* new one.
*
*----------------------------------------------------------------------
*/
void
TclExpandCodeArray(envArgPtr)
void *envArgPtr; /* Points to the CompileEnv whose code array
* must be enlarged. */
{
CompileEnv *envPtr = (CompileEnv*) envArgPtr; /* Points to the CompileEnv whose code array
* must be enlarged. */
/*
* envPtr->codeNext is equal to envPtr->codeEnd. The currently defined
* code bytes are stored between envPtr->codeStart and
* (envPtr->codeNext - 1) [inclusive].
*/
size_t currBytes = (envPtr->codeNext - envPtr->codeStart);
|
| ︙ | ︙ | |||
2493 2494 2495 2496 2497 2498 2499 | * * Side effects: * None. * *---------------------------------------------------------------------- */ | | | 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 |
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
void * /* == InstructionDesc* == */
TclGetInstructionTable()
{
return &instructionTable[0];
}
/*
*--------------------------------------------------------------
|
| ︙ | ︙ |
Changes to generic/tclCompile.h.
1 2 3 4 5 6 7 8 | /* * tclCompile.h -- * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* * tclCompile.h -- * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclCompile.h,v 1.11.10.1 2001/10/15 20:27:23 andreas_kupries Exp $ */ #ifndef _TCLCOMPILATION #define _TCLCOMPILATION 1 #ifndef _TCLINT #include "tclInt.h" |
| ︙ | ︙ | |||
739 740 741 742 743 744 745 | EXTERN void TclDeleteLiteralTable _ANSI_ARGS_(( Tcl_Interp *interp, LiteralTable *tablePtr)); EXTERN void TclEmitForwardJump _ANSI_ARGS_((CompileEnv *envPtr, TclJumpType jumpType, JumpFixup *jumpFixupPtr)); EXTERN ExceptionRange * TclGetExceptionRangeForPc _ANSI_ARGS_(( unsigned char *pc, int catchOnly, ByteCode* codePtr)); | < < < | 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 |
EXTERN void TclDeleteLiteralTable _ANSI_ARGS_((
Tcl_Interp *interp, LiteralTable *tablePtr));
EXTERN void TclEmitForwardJump _ANSI_ARGS_((CompileEnv *envPtr,
TclJumpType jumpType, JumpFixup *jumpFixupPtr));
EXTERN ExceptionRange * TclGetExceptionRangeForPc _ANSI_ARGS_((
unsigned char *pc, int catchOnly,
ByteCode* codePtr));
EXTERN int TclExecuteByteCode _ANSI_ARGS_((Tcl_Interp *interp,
ByteCode *codePtr));
EXTERN void TclExpandJumpFixupArray _ANSI_ARGS_((
JumpFixupArray *fixupArrayPtr));
EXTERN void TclFinalizeAuxDataTypeTable _ANSI_ARGS_((void));
EXTERN int TclFindCompiledLocal _ANSI_ARGS_((char *name,
int nameChars, int create, int flags,
Proc *procPtr));
EXTERN LiteralEntry * TclLookupLiteralEntry _ANSI_ARGS_((
|
| ︙ | ︙ |
Changes to generic/tclDate.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclDate.c -- * * This file is generated from a yacc grammar defined in * the file tclGetDate.y. It should not be edited directly. * * Copyright (c) 1992-1995 Karl Lehenbauer and Mark Diekhans. * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | | 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 | /* * tclDate.c -- * * This file is generated from a yacc grammar defined in * the file tclGetDate.y. It should not be edited directly. * * Copyright (c) 1992-1995 Karl Lehenbauer and Mark Diekhans. * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclDate.c,v 1.17.2.3 2001/10/18 20:17:17 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #if defined(MAC_TCL) && !defined(TCL_MAC_USE_MSL_EPOCH) # define EPOCH 1904 # define START_OF_TIME 1904 # define END_OF_TIME 2039 #else # define EPOCH 1970 # define START_OF_TIME 1902 # define END_OF_TIME 2037 |
| ︙ | ︙ | |||
575 576 577 578 579 580 581 582 583 584 585 586 587 588 |
tm = TclpGetDate((TclpTime_t)&Start, 0);
Month = 12 * (tm->tm_year + TM_YEAR_BASE) + tm->tm_mon + RelMonth;
Year = Month / 12;
Month = Month % 12 + 1;
result = Convert(Month, (time_t) tm->tm_mday, Year,
(time_t) tm->tm_hour, (time_t) tm->tm_min, (time_t) tm->tm_sec,
MER24, DSTmaybe, &Julian);
/*
* The following iteration takes into account the case were we jump
* into a "short month". Far example, "one month from Jan 31" will
* fail because there is no Feb 31. The code below will reduce the
* day and try converting the date until we succed or the date equals
* 28 (which always works unless the date is bad in another way).
*/
| > > > > > > > > > > > > > > > > > | 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 |
tm = TclpGetDate((TclpTime_t)&Start, 0);
Month = 12 * (tm->tm_year + TM_YEAR_BASE) + tm->tm_mon + RelMonth;
Year = Month / 12;
Month = Month % 12 + 1;
result = Convert(Month, (time_t) tm->tm_mday, Year,
(time_t) tm->tm_hour, (time_t) tm->tm_min, (time_t) tm->tm_sec,
MER24, DSTmaybe, &Julian);
/*
* The Julian time returned above is behind by one day, if "month"
* or "year" is used to specify relative time and the GMT flag is true.
* This problem occurs only when the current time is closer to
* midnight, the difference being not more than its time difference
* with GMT. For example, in US/Pacific time zone, the problem occurs
* whenever the current time is between midnight to 8:00am or 7:00amDST.
* See Bug# 413397 for more details and sample script.
* To resolve this bug, we simply add the number of seconds corresponding
* to timezone difference with GMT to Julian time, if GMT flag is true.
*/
if (TclDateTimezone == 0) {
Julian += TclpGetTimeZone((unsigned long) Start) * 60L;
}
/*
* The following iteration takes into account the case were we jump
* into a "short month". Far example, "one month from Jan 31" will
* fail because there is no Feb 31. The code below will reduce the
* day and try converting the date until we succed or the date equals
* 28 (which always works unless the date is bad in another way).
*/
|
| ︙ | ︙ | |||
923 924 925 926 927 928 929 |
0, -1,
-2, 0,
};
# define YYNPROD 56
# define YYLAST 261
static CONST TclDatetabelem TclDateact[]={
| | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | < | | | | | | | | | | | | | | | | | | | 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 |
0, -1,
-2, 0,
};
# define YYNPROD 56
# define YYLAST 261
static CONST TclDatetabelem TclDateact[]={
24, 40, 23, 36, 54, 81, 41, 28, 53, 26,
37, 42, 58, 38, 56, 28, 27, 26, 28, 33,
26, 32, 61, 50, 27, 80, 76, 27, 51, 75,
74, 73, 30, 72, 71, 70, 69, 52, 49, 48,
47, 45, 39, 62, 78, 46, 79, 68, 25, 65,
60, 67, 66, 55, 44, 21, 63, 11, 10, 9,
8, 35, 7, 6, 5, 4, 3, 43, 2, 1,
20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 57, 0, 0, 59, 77, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 19, 14, 0, 0, 0,
16, 28, 22, 26, 0, 12, 13, 17, 0, 15,
27, 18, 31, 0, 0, 29, 0, 34, 28, 0,
26, 0, 0, 0, 0, 0, 0, 27, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 64,
64 };
static CONST TclDatetabelem TclDatepact[]={
-10000000, -43,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
-10000000,-10000000, -26, -268,-10000000, -259, -226,-10000000, -257, 10,
-227, -212, -228,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
-229,-10000000, -230, -240, -231,-10000000,-10000000, -264,-10000000, 9,
-10000000,-10000000, -249,-10000000,-10000000, -246,-10000000, 4, -2, 2,
7, 6,-10000000,-10000000, -11, -232,-10000000,-10000000,-10000000,-10000000,
-233,-10000000, -234, -235,-10000000, -237, -238, -239, -242,-10000000,
-10000000,-10000000, -1,-10000000,-10000000,-10000000, -12,-10000000, -243, -263,
-10000000,-10000000 };
static CONST TclDatetabelem TclDatepgo[]={
0, 48, 70, 22, 69, 68, 66, 65, 64, 63,
62, 60, 59, 58, 57, 55 };
static CONST TclDatetabelem TclDater1[]={
0, 4, 4, 5, 5, 5, 5, 5, 5, 5,
5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
10, 10, 10, 10, 10, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 9, 9, 12, 12, 12,
13, 11, 11, 15, 15, 15, 15, 15, 2, 2,
1, 1, 1, 14, 3, 3 };
static CONST TclDatetabelem TclDater2[]={
0, 0, 4, 3, 3, 3, 3, 3, 3, 3,
3, 2, 5, 9, 11, 13, 15, 5, 3, 3,
3, 5, 5, 7, 5, 7, 11, 3, 11, 11,
5, 9, 5, 3, 7, 5, 7, 7, 15, 5,
9, 5, 2, 7, 5, 5, 7, 3, 3, 3,
3, 3, 3, 3, 1, 3 };
static CONST TclDatetabelem TclDatechk[]={
-10000000, -4, -5, -6, -7, -8, -9, -10, -11, -12,
-13, -14, 268, 269, 259, 272, 263, 270, 274, 258,
-2, -15, 265, 45, 43, -1, 266, 273, 264, 261,
58, 258, 47, 45, 263, -1, 271, 269, 272, 268,
258, 263, 268, -1, 44, 268, 257, 268, 268, 268,
263, 268, 268, 272, 268, 44, 263, -1, 258, -1,
46, -3, 45, 58, 261, 47, 45, 45, 58, 268,
268, 268, 268, 268, 268, 268, 268, -3, 45, 58,
268, 268 };
static CONST TclDatetabelem TclDatedef[]={
1, -2, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 53, 18, 19, 27, 0, 33, 0, 20,
0, 42, 0, 48, 49, 47, 50, 51, 52, 12,
0, 22, 0, 0, 32, 44, 17, 0, 39, 30,
24, 35, 0, 45, 21, 0, 41, 0, 54, 25,
0, 0, 34, 37, 0, 0, 36, 46, 23, 43,
0, 13, 0, 0, 55, 0, 0, 0, 0, 31,
40, 14, 54, 26, 28, 29, 0, 15, 0, 0,
16, 38 };
typedef struct
#ifdef __cplusplus
TclDatetoktype
#endif
{ char *t_name; int t_val; } TclDatetoktype;
#ifndef YYDEBUG
# define YYDEBUG 0 /* don't allow debugging */
|
| ︙ | ︙ | |||
1080 1081 1082 1083 1084 1085 1086 | "date : tUNUMBER tMONTH tUNUMBER", "ordMonth : tNEXT tMONTH", "ordMonth : tNEXT tUNUMBER tMONTH", "iso : tISOBASE tZONE tISOBASE", "iso : tISOBASE tZONE tUNUMBER ':' tUNUMBER ':' tUNUMBER", "iso : tISOBASE tISOBASE", "trek : tSTARDATE tUNUMBER '.' tUNUMBER", | > > | | | | | < < | 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 | "date : tUNUMBER tMONTH tUNUMBER", "ordMonth : tNEXT tMONTH", "ordMonth : tNEXT tUNUMBER tMONTH", "iso : tISOBASE tZONE tISOBASE", "iso : tISOBASE tZONE tUNUMBER ':' tUNUMBER ':' tUNUMBER", "iso : tISOBASE tISOBASE", "trek : tSTARDATE tUNUMBER '.' tUNUMBER", "relspec : relunits tAGO", "relspec : relunits", "relunits : sign tUNUMBER unit", "relunits : tUNUMBER unit", "relunits : tNEXT unit", "relunits : tNEXT tUNUMBER unit", "relunits : unit", "sign : '-'", "sign : '+'", "unit : tSEC_UNIT", "unit : tDAY_UNIT", "unit : tMONTH_UNIT", "number : tUNUMBER", "o_merid : /* empty */", "o_merid : tMERIDIAN", }; #endif /* YYDEBUG */ /* * Copyright (c) 1993 by Sun Microsystems, Inc. |
| ︙ | ︙ | |||
1808 1809 1810 1811 1812 1813 1814 |
*/
TclDateYear = TclDatepvt[-2].Number/1000 + 2323 - 377;
TclDateDay = 1;
TclDateMonth = 1;
TclDateRelDay += ((TclDatepvt[-2].Number%1000)*(365 + IsLeapYear(TclDateYear)))/1000;
TclDateRelSeconds += TclDatepvt[-0].Number * 144 * 60;
} break;
| | > > > > | > | | | | | | | | < < | 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 |
*/
TclDateYear = TclDatepvt[-2].Number/1000 + 2323 - 377;
TclDateDay = 1;
TclDateMonth = 1;
TclDateRelDay += ((TclDatepvt[-2].Number%1000)*(365 + IsLeapYear(TclDateYear)))/1000;
TclDateRelSeconds += TclDatepvt[-0].Number * 144 * 60;
} break;
case 41:{
TclDateRelSeconds *= -1;
TclDateRelMonth *= -1;
TclDateRelDay *= -1;
} break;
case 43:{ *TclDateRelPointer += TclDatepvt[-2].Number * TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break;
case 44:{ *TclDateRelPointer += TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break;
case 45:{ *TclDateRelPointer += TclDatepvt[-0].Number; } break;
case 46:{ *TclDateRelPointer += TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break;
case 47:{ *TclDateRelPointer += TclDatepvt[-0].Number; } break;
case 48:{ TclDateval.Number = -1; } break;
case 49:{ TclDateval.Number = 1; } break;
case 50:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelSeconds; } break;
case 51:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelDay; } break;
case 52:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelMonth; } break;
case 53:{
if (TclDateHaveTime && TclDateHaveDate && !TclDateHaveRel) {
TclDateYear = TclDatepvt[-0].Number;
} else {
TclDateHaveTime++;
if (TclDatepvt[-0].Number < 100) {
TclDateHour = TclDatepvt[-0].Number;
|
| ︙ | ︙ |
Changes to generic/tclDecls.h.
1 2 3 4 5 6 7 8 9 10 | /* * tclDecls.h -- * * Declarations of functions in the platform independent public Tcl API. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclDecls.h -- * * Declarations of functions in the platform independent public Tcl API. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclDecls.h,v 1.34.2.2 2001/08/28 00:12:43 hobbs Exp $ */ #ifndef _TCLDECLS #define _TCLDECLS /* * WARNING: This file is automatically generated by the tools/genStubs.tcl |
| ︙ | ︙ | |||
905 906 907 908 909 910 911 | EXTERN void Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp * interp)); /* 281 */ EXTERN Tcl_Channel Tcl_StackChannel _ANSI_ARGS_((Tcl_Interp * interp, Tcl_ChannelType * typePtr, ClientData instanceData, int mask, Tcl_Channel prevChan)); /* 282 */ | | | > | 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 | EXTERN void Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp * interp)); /* 281 */ EXTERN Tcl_Channel Tcl_StackChannel _ANSI_ARGS_((Tcl_Interp * interp, Tcl_ChannelType * typePtr, ClientData instanceData, int mask, Tcl_Channel prevChan)); /* 282 */ EXTERN int Tcl_UnstackChannel _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Channel chan)); /* 283 */ EXTERN Tcl_Channel Tcl_GetStackedChannel _ANSI_ARGS_((Tcl_Channel chan)); /* 284 */ EXTERN void Tcl_SetMainLoop _ANSI_ARGS_((Tcl_MainLoopProc * proc)); /* Slot 285 is reserved */ /* 286 */ EXTERN void Tcl_AppendObjToObj _ANSI_ARGS_((Tcl_Obj * objPtr, Tcl_Obj * appendObjPtr)); /* 287 */ EXTERN Tcl_Encoding Tcl_CreateEncoding _ANSI_ARGS_(( Tcl_EncodingType * typePtr)); |
| ︙ | ︙ | |||
1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 |
/* 392 */
EXTERN void Tcl_MutexFinalize _ANSI_ARGS_((Tcl_Mutex * mutex));
/* 393 */
EXTERN int Tcl_CreateThread _ANSI_ARGS_((Tcl_ThreadId * idPtr,
Tcl_ThreadCreateProc proc,
ClientData clientData, int stackSize,
int flags));
typedef struct TclStubHooks {
struct TclPlatStubs *tclPlatStubs;
struct TclIntStubs *tclIntStubs;
struct TclIntPlatStubs *tclIntPlatStubs;
} TclStubHooks;
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
/* 392 */
EXTERN void Tcl_MutexFinalize _ANSI_ARGS_((Tcl_Mutex * mutex));
/* 393 */
EXTERN int Tcl_CreateThread _ANSI_ARGS_((Tcl_ThreadId * idPtr,
Tcl_ThreadCreateProc proc,
ClientData clientData, int stackSize,
int flags));
/* 394 */
EXTERN int Tcl_ReadRaw _ANSI_ARGS_((Tcl_Channel chan,
char * dst, int bytesToRead));
/* 395 */
EXTERN int Tcl_WriteRaw _ANSI_ARGS_((Tcl_Channel chan,
char * src, int srcLen));
/* 396 */
EXTERN Tcl_Channel Tcl_GetTopChannel _ANSI_ARGS_((Tcl_Channel chan));
/* 397 */
EXTERN int Tcl_ChannelBuffered _ANSI_ARGS_((Tcl_Channel chan));
/* 398 */
EXTERN char * Tcl_ChannelName _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 399 */
EXTERN Tcl_ChannelTypeVersion Tcl_ChannelVersion _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 400 */
EXTERN Tcl_DriverBlockModeProc * Tcl_ChannelBlockModeProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 401 */
EXTERN Tcl_DriverCloseProc * Tcl_ChannelCloseProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 402 */
EXTERN Tcl_DriverClose2Proc * Tcl_ChannelClose2Proc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 403 */
EXTERN Tcl_DriverInputProc * Tcl_ChannelInputProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 404 */
EXTERN Tcl_DriverOutputProc * Tcl_ChannelOutputProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 405 */
EXTERN Tcl_DriverSeekProc * Tcl_ChannelSeekProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 406 */
EXTERN Tcl_DriverSetOptionProc * Tcl_ChannelSetOptionProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 407 */
EXTERN Tcl_DriverGetOptionProc * Tcl_ChannelGetOptionProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 408 */
EXTERN Tcl_DriverWatchProc * Tcl_ChannelWatchProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 409 */
EXTERN Tcl_DriverGetHandleProc * Tcl_ChannelGetHandleProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 410 */
EXTERN Tcl_DriverFlushProc * Tcl_ChannelFlushProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
/* 411 */
EXTERN Tcl_DriverHandlerProc * Tcl_ChannelHandlerProc _ANSI_ARGS_((
Tcl_ChannelType * chanTypePtr));
typedef struct TclStubHooks {
struct TclPlatStubs *tclPlatStubs;
struct TclIntStubs *tclIntStubs;
struct TclIntPlatStubs *tclIntPlatStubs;
} TclStubHooks;
|
| ︙ | ︙ | |||
1573 1574 1575 1576 1577 1578 1579 |
#endif /* __WIN32__ */
#ifdef MAC_TCL
void *reserved278;
#endif /* MAC_TCL */
void (*tcl_GetVersion) _ANSI_ARGS_((int * major, int * minor, int * patchLevel, int * type)); /* 279 */
void (*tcl_InitMemory) _ANSI_ARGS_((Tcl_Interp * interp)); /* 280 */
Tcl_Channel (*tcl_StackChannel) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_ChannelType * typePtr, ClientData instanceData, int mask, Tcl_Channel prevChan)); /* 281 */
| | | | 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 |
#endif /* __WIN32__ */
#ifdef MAC_TCL
void *reserved278;
#endif /* MAC_TCL */
void (*tcl_GetVersion) _ANSI_ARGS_((int * major, int * minor, int * patchLevel, int * type)); /* 279 */
void (*tcl_InitMemory) _ANSI_ARGS_((Tcl_Interp * interp)); /* 280 */
Tcl_Channel (*tcl_StackChannel) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_ChannelType * typePtr, ClientData instanceData, int mask, Tcl_Channel prevChan)); /* 281 */
int (*tcl_UnstackChannel) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Channel chan)); /* 282 */
Tcl_Channel (*tcl_GetStackedChannel) _ANSI_ARGS_((Tcl_Channel chan)); /* 283 */
void (*tcl_SetMainLoop) _ANSI_ARGS_((Tcl_MainLoopProc * proc)); /* 284 */
void *reserved285;
void (*tcl_AppendObjToObj) _ANSI_ARGS_((Tcl_Obj * objPtr, Tcl_Obj * appendObjPtr)); /* 286 */
Tcl_Encoding (*tcl_CreateEncoding) _ANSI_ARGS_((Tcl_EncodingType * typePtr)); /* 287 */
void (*tcl_CreateThreadExitHandler) _ANSI_ARGS_((Tcl_ExitProc * proc, ClientData clientData)); /* 288 */
void (*tcl_DeleteThreadExitHandler) _ANSI_ARGS_((Tcl_ExitProc * proc, ClientData clientData)); /* 289 */
void (*tcl_DiscardResult) _ANSI_ARGS_((Tcl_SavedResult * statePtr)); /* 290 */
int (*tcl_EvalEx) _ANSI_ARGS_((Tcl_Interp * interp, char * script, int numBytes, int flags)); /* 291 */
|
| ︙ | ︙ | |||
1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 |
Tcl_Mutex * (*tcl_GetAllocMutex) _ANSI_ARGS_((void)); /* 387 */
int (*tcl_GetChannelNames) _ANSI_ARGS_((Tcl_Interp * interp)); /* 388 */
int (*tcl_GetChannelNamesEx) _ANSI_ARGS_((Tcl_Interp * interp, char * pattern)); /* 389 */
int (*tcl_ProcObjCmd) _ANSI_ARGS_((ClientData clientData, Tcl_Interp * interp, int objc, Tcl_Obj *CONST objv[])); /* 390 */
void (*tcl_ConditionFinalize) _ANSI_ARGS_((Tcl_Condition * condPtr)); /* 391 */
void (*tcl_MutexFinalize) _ANSI_ARGS_((Tcl_Mutex * mutex)); /* 392 */
int (*tcl_CreateThread) _ANSI_ARGS_((Tcl_ThreadId * idPtr, Tcl_ThreadCreateProc proc, ClientData clientData, int stackSize, int flags)); /* 393 */
} TclStubs;
#ifdef __cplusplus
extern "C" {
#endif
extern TclStubs *tclStubsPtr;
#ifdef __cplusplus
| > > > > > > > > > > > > > > > > > > | 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 |
Tcl_Mutex * (*tcl_GetAllocMutex) _ANSI_ARGS_((void)); /* 387 */
int (*tcl_GetChannelNames) _ANSI_ARGS_((Tcl_Interp * interp)); /* 388 */
int (*tcl_GetChannelNamesEx) _ANSI_ARGS_((Tcl_Interp * interp, char * pattern)); /* 389 */
int (*tcl_ProcObjCmd) _ANSI_ARGS_((ClientData clientData, Tcl_Interp * interp, int objc, Tcl_Obj *CONST objv[])); /* 390 */
void (*tcl_ConditionFinalize) _ANSI_ARGS_((Tcl_Condition * condPtr)); /* 391 */
void (*tcl_MutexFinalize) _ANSI_ARGS_((Tcl_Mutex * mutex)); /* 392 */
int (*tcl_CreateThread) _ANSI_ARGS_((Tcl_ThreadId * idPtr, Tcl_ThreadCreateProc proc, ClientData clientData, int stackSize, int flags)); /* 393 */
int (*tcl_ReadRaw) _ANSI_ARGS_((Tcl_Channel chan, char * dst, int bytesToRead)); /* 394 */
int (*tcl_WriteRaw) _ANSI_ARGS_((Tcl_Channel chan, char * src, int srcLen)); /* 395 */
Tcl_Channel (*tcl_GetTopChannel) _ANSI_ARGS_((Tcl_Channel chan)); /* 396 */
int (*tcl_ChannelBuffered) _ANSI_ARGS_((Tcl_Channel chan)); /* 397 */
char * (*tcl_ChannelName) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 398 */
Tcl_ChannelTypeVersion (*tcl_ChannelVersion) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 399 */
Tcl_DriverBlockModeProc * (*tcl_ChannelBlockModeProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 400 */
Tcl_DriverCloseProc * (*tcl_ChannelCloseProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 401 */
Tcl_DriverClose2Proc * (*tcl_ChannelClose2Proc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 402 */
Tcl_DriverInputProc * (*tcl_ChannelInputProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 403 */
Tcl_DriverOutputProc * (*tcl_ChannelOutputProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 404 */
Tcl_DriverSeekProc * (*tcl_ChannelSeekProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 405 */
Tcl_DriverSetOptionProc * (*tcl_ChannelSetOptionProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 406 */
Tcl_DriverGetOptionProc * (*tcl_ChannelGetOptionProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 407 */
Tcl_DriverWatchProc * (*tcl_ChannelWatchProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 408 */
Tcl_DriverGetHandleProc * (*tcl_ChannelGetHandleProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 409 */
Tcl_DriverFlushProc * (*tcl_ChannelFlushProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 410 */
Tcl_DriverHandlerProc * (*tcl_ChannelHandlerProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 411 */
} TclStubs;
#ifdef __cplusplus
extern "C" {
#endif
extern TclStubs *tclStubsPtr;
#ifdef __cplusplus
|
| ︙ | ︙ | |||
2872 2873 2874 2875 2876 2877 2878 | #define Tcl_UnstackChannel \ (tclStubsPtr->tcl_UnstackChannel) /* 282 */ #endif #ifndef Tcl_GetStackedChannel #define Tcl_GetStackedChannel \ (tclStubsPtr->tcl_GetStackedChannel) /* 283 */ #endif | > > | > | 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 | #define Tcl_UnstackChannel \ (tclStubsPtr->tcl_UnstackChannel) /* 282 */ #endif #ifndef Tcl_GetStackedChannel #define Tcl_GetStackedChannel \ (tclStubsPtr->tcl_GetStackedChannel) /* 283 */ #endif #ifndef Tcl_SetMainLoop #define Tcl_SetMainLoop \ (tclStubsPtr->tcl_SetMainLoop) /* 284 */ #endif /* Slot 285 is reserved */ #ifndef Tcl_AppendObjToObj #define Tcl_AppendObjToObj \ (tclStubsPtr->tcl_AppendObjToObj) /* 286 */ #endif #ifndef Tcl_CreateEncoding #define Tcl_CreateEncoding \ |
| ︙ | ︙ | |||
3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 | #define Tcl_MutexFinalize \ (tclStubsPtr->tcl_MutexFinalize) /* 392 */ #endif #ifndef Tcl_CreateThread #define Tcl_CreateThread \ (tclStubsPtr->tcl_CreateThread) /* 393 */ #endif #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #endif /* _TCLDECLS */ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | #define Tcl_MutexFinalize \ (tclStubsPtr->tcl_MutexFinalize) /* 392 */ #endif #ifndef Tcl_CreateThread #define Tcl_CreateThread \ (tclStubsPtr->tcl_CreateThread) /* 393 */ #endif #ifndef Tcl_ReadRaw #define Tcl_ReadRaw \ (tclStubsPtr->tcl_ReadRaw) /* 394 */ #endif #ifndef Tcl_WriteRaw #define Tcl_WriteRaw \ (tclStubsPtr->tcl_WriteRaw) /* 395 */ #endif #ifndef Tcl_GetTopChannel #define Tcl_GetTopChannel \ (tclStubsPtr->tcl_GetTopChannel) /* 396 */ #endif #ifndef Tcl_ChannelBuffered #define Tcl_ChannelBuffered \ (tclStubsPtr->tcl_ChannelBuffered) /* 397 */ #endif #ifndef Tcl_ChannelName #define Tcl_ChannelName \ (tclStubsPtr->tcl_ChannelName) /* 398 */ #endif #ifndef Tcl_ChannelVersion #define Tcl_ChannelVersion \ (tclStubsPtr->tcl_ChannelVersion) /* 399 */ #endif #ifndef Tcl_ChannelBlockModeProc #define Tcl_ChannelBlockModeProc \ (tclStubsPtr->tcl_ChannelBlockModeProc) /* 400 */ #endif #ifndef Tcl_ChannelCloseProc #define Tcl_ChannelCloseProc \ (tclStubsPtr->tcl_ChannelCloseProc) /* 401 */ #endif #ifndef Tcl_ChannelClose2Proc #define Tcl_ChannelClose2Proc \ (tclStubsPtr->tcl_ChannelClose2Proc) /* 402 */ #endif #ifndef Tcl_ChannelInputProc #define Tcl_ChannelInputProc \ (tclStubsPtr->tcl_ChannelInputProc) /* 403 */ #endif #ifndef Tcl_ChannelOutputProc #define Tcl_ChannelOutputProc \ (tclStubsPtr->tcl_ChannelOutputProc) /* 404 */ #endif #ifndef Tcl_ChannelSeekProc #define Tcl_ChannelSeekProc \ (tclStubsPtr->tcl_ChannelSeekProc) /* 405 */ #endif #ifndef Tcl_ChannelSetOptionProc #define Tcl_ChannelSetOptionProc \ (tclStubsPtr->tcl_ChannelSetOptionProc) /* 406 */ #endif #ifndef Tcl_ChannelGetOptionProc #define Tcl_ChannelGetOptionProc \ (tclStubsPtr->tcl_ChannelGetOptionProc) /* 407 */ #endif #ifndef Tcl_ChannelWatchProc #define Tcl_ChannelWatchProc \ (tclStubsPtr->tcl_ChannelWatchProc) /* 408 */ #endif #ifndef Tcl_ChannelGetHandleProc #define Tcl_ChannelGetHandleProc \ (tclStubsPtr->tcl_ChannelGetHandleProc) /* 409 */ #endif #ifndef Tcl_ChannelFlushProc #define Tcl_ChannelFlushProc \ (tclStubsPtr->tcl_ChannelFlushProc) /* 410 */ #endif #ifndef Tcl_ChannelHandlerProc #define Tcl_ChannelHandlerProc \ (tclStubsPtr->tcl_ChannelHandlerProc) /* 411 */ #endif #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #endif /* _TCLDECLS */ |
Changes to generic/tclEncoding.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclEncoding.c -- * * Contains the implementation of the encoding conversion package. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclEncoding.c -- * * Contains the implementation of the encoding conversion package. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclEncoding.c,v 1.5.2.1 2001/04/03 22:54:36 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" typedef size_t (LengthProc)_ANSI_ARGS_((CONST char *src)); |
| ︙ | ︙ | |||
1324 1325 1326 1327 1328 1329 1330 |
char *line;
int i, hi, lo, numPages, symbol, fallback;
unsigned char used[256];
unsigned int size;
TableEncodingData *dataPtr;
unsigned short *pageMemPtr;
Tcl_EncodingType encType;
| | > > > > > > > > | | > > > > > > > > > > > < < | 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 |
char *line;
int i, hi, lo, numPages, symbol, fallback;
unsigned char used[256];
unsigned int size;
TableEncodingData *dataPtr;
unsigned short *pageMemPtr;
Tcl_EncodingType encType;
/*
* Speed over memory. Use a full 256 character table to decode hex
* sequences in the encoding files.
*/
static char staticHex[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0 ... 15 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 16 ... 31 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 32 ... 47 */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 48 ... 63 */
0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 64 ... 79 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 ... 95 */
0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 96 ... 111 */
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 112 ... 127 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 128 ... 143 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 144 ... 159 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 160 ... 175 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 176 ... 191 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 192 ... 207 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 208 ... 223 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 224 ... 239 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 240 ... 255 */
};
Tcl_DStringInit(&lineString);
Tcl_Gets(chan, &lineString);
line = Tcl_DStringValue(&lineString);
fallback = (int) strtol(line, &line, 16);
symbol = (int) strtol(line, &line, 10);
numPages = (int) strtol(line, &line, 10);
|
| ︙ | ︙ | |||
1379 1380 1381 1382 1383 1384 1385 |
}
for (i = 0; i < numPages; i++) {
int ch;
char *p;
Tcl_ReadChars(chan, objPtr, 3 + 16 * (16 * 4 + 1), 0);
p = Tcl_GetString(objPtr);
| | | | | 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 |
}
for (i = 0; i < numPages; i++) {
int ch;
char *p;
Tcl_ReadChars(chan, objPtr, 3 + 16 * (16 * 4 + 1), 0);
p = Tcl_GetString(objPtr);
hi = (staticHex[(unsigned int)p[0]] << 4) + staticHex[(unsigned int)p[1]];
dataPtr->toUnicode[hi] = pageMemPtr;
p += 2;
for (lo = 0; lo < 256; lo++) {
if ((lo & 0x0f) == 0) {
p++;
}
ch = (staticHex[(unsigned int)p[0]] << 12) + (staticHex[(unsigned int)p[1]] << 8)
+ (staticHex[(unsigned int)p[2]] << 4) + staticHex[(unsigned int)p[3]];
if (ch != 0) {
used[ch >> 8] = 1;
}
*pageMemPtr = (unsigned short) ch;
pageMemPtr++;
p += 4;
}
|
| ︙ | ︙ | |||
1506 1507 1508 1509 1510 1511 1512 |
encType.encodingName = name;
encType.toUtfProc = TableToUtfProc;
encType.fromUtfProc = TableFromUtfProc;
encType.freeProc = TableFreeProc;
encType.nullSize = (type == ENCODING_DOUBLEBYTE) ? 2 : 1;
encType.clientData = (ClientData) dataPtr;
return Tcl_CreateEncoding(&encType);
| < | 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 |
encType.encodingName = name;
encType.toUtfProc = TableToUtfProc;
encType.fromUtfProc = TableFromUtfProc;
encType.freeProc = TableFreeProc;
encType.nullSize = (type == ENCODING_DOUBLEBYTE) ? 2 : 1;
encType.clientData = (ClientData) dataPtr;
return Tcl_CreateEncoding(&encType);
}
/*
*-------------------------------------------------------------------------
*
* LoadEscapeEncoding --
*
|
| ︙ | ︙ |
Changes to generic/tclEnv.c.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclEnv.c,v 1.7.2.2 2001/04/03 22:54:37 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" TCL_DECLARE_MUTEX(envMutex) /* To serialize access to environ */ |
| ︙ | ︙ | |||
352 353 354 355 356 357 358 |
*/
void
TclUnsetEnv(name)
CONST char *name; /* Name of variable to remove (UTF-8). */
{
char *oldValue;
| | > | 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 |
*/
void
TclUnsetEnv(name)
CONST char *name; /* Name of variable to remove (UTF-8). */
{
char *oldValue;
int length;
int index;
#ifdef USE_PUTENV
Tcl_DString envString;
char *string;
#else
char **envPtr;
#endif
|
| ︙ | ︙ |
Changes to generic/tclEvent.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclEvent.c -- * * This file implements some general event related interfaces including * background errors, exit handlers, and the "vwait" and "update" * command procedures. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclEvent.c -- * * This file implements some general event related interfaces including * background errors, exit handlers, and the "vwait" and "update" * command procedures. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclEvent.c,v 1.8.2.5 2001/10/03 18:30:45 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * The data structure below is used to report background errors. One |
| ︙ | ︙ | |||
94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
int inExit; /* True when this thread is exiting. This
* is used as a hack to decide to close
* the standard channels. */
Tcl_Obj *tclLibraryPath; /* Path(s) to the Tcl library */
} ThreadSpecificData;
static Tcl_ThreadDataKey dataKey;
/*
* Prototypes for procedures referenced only in this file:
*/
static void BgErrorDeleteProc _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp));
static void HandleBgErrors _ANSI_ARGS_((ClientData clientData));
| > > > > > | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
int inExit; /* True when this thread is exiting. This
* is used as a hack to decide to close
* the standard channels. */
Tcl_Obj *tclLibraryPath; /* Path(s) to the Tcl library */
} ThreadSpecificData;
static Tcl_ThreadDataKey dataKey;
/*
* Common string for the library path for sharing across threads.
*/
char *tclLibraryPathStr;
/*
* Prototypes for procedures referenced only in this file:
*/
static void BgErrorDeleteProc _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp));
static void HandleBgErrors _ANSI_ARGS_((ClientData clientData));
|
| ︙ | ︙ | |||
592 593 594 595 596 597 598 599 600 601 602 603 604 605 |
if (pathPtr != NULL) {
Tcl_IncrRefCount(pathPtr);
}
if (tsdPtr->tclLibraryPath != NULL) {
Tcl_DecrRefCount(tsdPtr->tclLibraryPath);
}
tsdPtr->tclLibraryPath = pathPtr;
}
/*
*-------------------------------------------------------------------------
*
* TclGetLibraryPath --
*
| > > > > > > | 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 |
if (pathPtr != NULL) {
Tcl_IncrRefCount(pathPtr);
}
if (tsdPtr->tclLibraryPath != NULL) {
Tcl_DecrRefCount(tsdPtr->tclLibraryPath);
}
tsdPtr->tclLibraryPath = pathPtr;
/*
* No mutex locking is needed here as up the stack we're within
* TclpInitLock().
*/
tclLibraryPathStr = Tcl_GetStringFromObj(pathPtr, NULL);
}
/*
*-------------------------------------------------------------------------
*
* TclGetLibraryPath --
*
|
| ︙ | ︙ | |||
615 616 617 618 619 620 621 622 623 624 625 626 627 628 |
*-------------------------------------------------------------------------
*/
Tcl_Obj *
TclGetLibraryPath()
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
return tsdPtr->tclLibraryPath;
}
/*
*-------------------------------------------------------------------------
*
* TclInitSubsystems --
| > > > > > > > > > > > | 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 |
*-------------------------------------------------------------------------
*/
Tcl_Obj *
TclGetLibraryPath()
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
if (tsdPtr->tclLibraryPath == NULL) {
/*
* Grab the shared string and place it into a new thread specific
* Tcl_Obj.
*/
tsdPtr->tclLibraryPath = Tcl_NewStringObj(tclLibraryPathStr, -1);
/* take ownership */
Tcl_IncrRefCount(tsdPtr->tclLibraryPath);
}
return tsdPtr->tclLibraryPath;
}
/*
*-------------------------------------------------------------------------
*
* TclInitSubsystems --
|
| ︙ | ︙ | |||
740 741 742 743 744 745 746 |
void
Tcl_Finalize()
{
ExitHandler *exitPtr;
ThreadSpecificData *tsdPtr;
TclpInitLock();
| < > > | 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 |
void
Tcl_Finalize()
{
ExitHandler *exitPtr;
ThreadSpecificData *tsdPtr;
TclpInitLock();
if (subsystemsInitialized != 0) {
subsystemsInitialized = 0;
tsdPtr = TCL_TSD_INIT(&dataKey);
/*
* Invoke exit handlers first.
*/
Tcl_MutexLock(&exitMutex);
inFinalize = 1;
|
| ︙ | ︙ | |||
767 768 769 770 771 772 773 | (*exitPtr->proc)(exitPtr->clientData); ckfree((char *) exitPtr); Tcl_MutexLock(&exitMutex); } firstExitPtr = NULL; Tcl_MutexUnlock(&exitMutex); | < < < < < < < < < | 790 791 792 793 794 795 796 797 798 799 800 801 802 803 | (*exitPtr->proc)(exitPtr->clientData); ckfree((char *) exitPtr); Tcl_MutexLock(&exitMutex); } firstExitPtr = NULL; Tcl_MutexUnlock(&exitMutex); /* * Clean up after the current thread now, after exit handlers. * In particular, the testexithandler command sets up something * that writes to standard output, which gets closed. * Note that there is no thread-local storage after this call. */ |
| ︙ | ︙ | |||
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 |
if (tsdPtr != NULL) {
/*
* Invoke thread exit handlers first.
*/
tsdPtr->inExit = 1;
for (exitPtr = tsdPtr->firstExitPtr; exitPtr != NULL;
exitPtr = tsdPtr->firstExitPtr) {
/*
* Be careful to remove the handler from the list before invoking
* its callback. This protects us against double-freeing if the
* callback should call Tcl_DeleteThreadExitHandler on itself.
*/
tsdPtr->firstExitPtr = exitPtr->nextPtr;
(*exitPtr->proc)(exitPtr->clientData);
ckfree((char *) exitPtr);
}
TclFinalizeIOSubsystem();
TclFinalizeNotifier();
/*
* Blow away all thread local storage blocks.
*/
TclFinalizeThreadData();
}
| > > > > > > > > > > > > | 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 |
if (tsdPtr != NULL) {
/*
* Invoke thread exit handlers first.
*/
tsdPtr->inExit = 1;
/*
* Clean up the library path now, before we invalidate thread-local
* storage or calling thread exit handlers.
*/
if (tsdPtr->tclLibraryPath != NULL) {
Tcl_DecrRefCount(tsdPtr->tclLibraryPath);
tsdPtr->tclLibraryPath = NULL;
}
for (exitPtr = tsdPtr->firstExitPtr; exitPtr != NULL;
exitPtr = tsdPtr->firstExitPtr) {
/*
* Be careful to remove the handler from the list before invoking
* its callback. This protects us against double-freeing if the
* callback should call Tcl_DeleteThreadExitHandler on itself.
*/
tsdPtr->firstExitPtr = exitPtr->nextPtr;
(*exitPtr->proc)(exitPtr->clientData);
ckfree((char *) exitPtr);
}
TclFinalizeIOSubsystem();
TclFinalizeNotifier();
TclFinalizeAsync();
/*
* Blow away all thread local storage blocks.
*/
TclFinalizeThreadData();
}
|
| ︙ | ︙ | |||
908 909 910 911 912 913 914 |
*
*----------------------------------------------------------------------
*/
int
TclInExit()
{
| | > > > | > | 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 |
*
*----------------------------------------------------------------------
*/
int
TclInExit()
{
ThreadSpecificData *tsdPtr = TclThreadDataKeyGet(&dataKey);
if (tsdPtr == NULL) {
return inFinalize;
} else {
return tsdPtr->inExit;
}
}
/*
*----------------------------------------------------------------------
*
* Tcl_VwaitObjCmd --
*
|
| ︙ | ︙ |
Changes to generic/tclExecute.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclExecute.c -- * * This file contains procedures that execute byte-compiled Tcl * commands. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclExecute.c -- * * This file contains procedures that execute byte-compiled Tcl * commands. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclExecute.c,v 1.10.2.2 2001/08/07 15:41:20 msofer Exp $ */ #include "tclInt.h" #include "tclCompile.h" #ifdef NO_FLOAT_H # include "../compat/float.h" |
| ︙ | ︙ | |||
108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
#ifdef TCL_COMPILE_DEBUG
static char *resultStrings[] = {
"TCL_OK", "TCL_ERROR", "TCL_RETURN", "TCL_BREAK", "TCL_CONTINUE"
};
#endif
/*
* Macros for testing floating-point values for certain special cases. Test
* for not-a-number by comparing a value against itself; test for infinity
* by comparing against the largest floating-point value.
*/
#define IS_NAN(v) ((v) != (v))
| > > > > > > > > > > > | 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 |
#ifdef TCL_COMPILE_DEBUG
static char *resultStrings[] = {
"TCL_OK", "TCL_ERROR", "TCL_RETURN", "TCL_BREAK", "TCL_CONTINUE"
};
#endif
/*
* These are used by evalstats to monitor object usage in Tcl.
*/
#ifdef TCL_COMPILE_STATS
long tclObjsAlloced = 0;
long tclObjsFreed = 0;
#define TCL_MAX_SHARED_OBJ_STATS 5
long tclObjsShared[TCL_MAX_SHARED_OBJ_STATS] = { 0, 0, 0, 0, 0 };
#endif /* TCL_COMPILE_STATS */
/*
* Macros for testing floating-point values for certain special cases. Test
* for not-a-number by comparing a value against itself; test for infinity
* by comparing against the largest floating-point value.
*/
#define IS_NAN(v) ((v) != (v))
|
| ︙ | ︙ | |||
421 422 423 424 425 426 427 |
*----------------------------------------------------------------------
*/
void
TclDeleteExecEnv(eePtr)
ExecEnv *eePtr; /* Execution environment to free. */
{
| | | 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 |
*----------------------------------------------------------------------
*/
void
TclDeleteExecEnv(eePtr)
ExecEnv *eePtr; /* Execution environment to free. */
{
Tcl_EventuallyFree((ClientData)eePtr->stackPtr, TCL_DYNAMIC);
ckfree((char *) eePtr);
}
/*
*----------------------------------------------------------------------
*
* TclFinalizeExecution --
|
| ︙ | ︙ | |||
491 492 493 494 495 496 497 |
/*
* Copy the existing stack items to the new stack space, free the old
* storage if appropriate, and mark new space as malloc'ed.
*/
memcpy((VOID *) newStackPtr, (VOID *) eePtr->stackPtr,
(size_t) currBytes);
| | | 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 |
/*
* Copy the existing stack items to the new stack space, free the old
* storage if appropriate, and mark new space as malloc'ed.
*/
memcpy((VOID *) newStackPtr, (VOID *) eePtr->stackPtr,
(size_t) currBytes);
Tcl_EventuallyFree((ClientData)eePtr->stackPtr, TCL_DYNAMIC);
eePtr->stackPtr = newStackPtr;
eePtr->stackEnd = (newElems - 1); /* i.e. index of last usable item */
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
618 619 620 621 622 623 624 |
* Pop the topmost object from the stack, set the interpreter's
* object result to point to it, and return.
*/
valuePtr = POP_OBJECT();
Tcl_SetObjResult(interp, valuePtr);
TclDecrRefCount(valuePtr);
if (stackTop != initStackTop) {
| > > > > | | | 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 |
* Pop the topmost object from the stack, set the interpreter's
* object result to point to it, and return.
*/
valuePtr = POP_OBJECT();
Tcl_SetObjResult(interp, valuePtr);
TclDecrRefCount(valuePtr);
if (stackTop != initStackTop) {
/*
* if extra items in the stack, clean up the stack before return
*/
if (stackTop > initStackTop) goto abnormalReturn;
fprintf(stderr, "\nTclExecuteByteCode: done instruction at pc %u: stack top %d < entry stack top %d\n",
(unsigned int)(pc - codePtr->codeStart),
(unsigned int) stackTop,
(unsigned int) initStackTop);
panic("TclExecuteByteCode execution failure: end stack top < start stack top");
}
TRACE_WITH_OBJ(("=> return code=%d, result=", result),
iPtr->objResultPtr);
#ifdef TCL_COMPILE_DEBUG
if (traceInstructions) {
fprintf(stdout, "\n");
}
|
| ︙ | ︙ | |||
728 729 730 731 732 733 734 735 736 737 738 |
doInvocation:
{
int objc = opnd; /* The number of arguments. */
Tcl_Obj **objv; /* The array of argument objects. */
Command *cmdPtr; /* Points to command's Command struct. */
int newPcOffset; /* New inst offset for break, continue. */
#ifdef TCL_COMPILE_DEBUG
int isUnknownCmd = 0;
char cmdNameBuf[21];
#endif /* TCL_COMPILE_DEBUG */
| > > > > | | | | 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 |
doInvocation:
{
int objc = opnd; /* The number of arguments. */
Tcl_Obj **objv; /* The array of argument objects. */
Command *cmdPtr; /* Points to command's Command struct. */
int newPcOffset; /* New inst offset for break, continue. */
Tcl_Obj **preservedStack;
/* Reference to memory block containing
* objv array (must be kept live throughout
* trace and command invokations.) */
#ifdef TCL_COMPILE_DEBUG
int isUnknownCmd = 0;
char cmdNameBuf[21];
#endif /* TCL_COMPILE_DEBUG */
/*
* If the interpreter was deleted, return an error.
*/
if (iPtr->flags & DELETED) {
Tcl_ResetResult(interp);
Tcl_AppendToObj(Tcl_GetObjResult(interp),
"attempt to call eval in deleted interpreter", -1);
Tcl_SetErrorCode(interp, "CORE", "IDELETE",
"attempt to call eval in deleted interpreter",
(char *) NULL);
result = TCL_ERROR;
goto checkForCatch;
}
/*
* Find the procedure to execute this command. If the
* command is not found, handle it with the "unknown" proc.
*/
objv = &(stackPtr[stackTop - (objc-1)]);
cmdPtr = (Command *) Tcl_GetCommandFromObj(interp, objv[0]);
|
| ︙ | ︙ | |||
779 780 781 782 783 784 785 |
for (i = objc-1; i >= 0; i--) {
objv[i+1] = objv[i];
}
objc++;
objv[0] = Tcl_NewStringObj("unknown", -1);
Tcl_IncrRefCount(objv[0]);
}
| | > > > > > > > > > > > > | | | | 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 |
for (i = objc-1; i >= 0; i--) {
objv[i+1] = objv[i];
}
objc++;
objv[0] = Tcl_NewStringObj("unknown", -1);
Tcl_IncrRefCount(objv[0]);
}
/*
* A reference to part of the stack vector itself
* escapes our control, so must use preserve/release
* to stop it from being deallocated by a recursive
* call to ourselves. The extra variable is needed
* because all others are liable to change due to the
* trace procedures.
*/
Tcl_Preserve((ClientData)stackPtr);
preservedStack = stackPtr;
/*
* Call any trace procedures.
*/
if (iPtr->tracePtr != NULL) {
Trace *tracePtr, *nextTracePtr;
for (tracePtr = iPtr->tracePtr; tracePtr != NULL;
tracePtr = nextTracePtr) {
nextTracePtr = tracePtr->nextPtr;
if (iPtr->numLevels <= tracePtr->level) {
int numChars;
char *cmd = GetSrcInfoForPc(pc, codePtr,
&numChars);
if (cmd != NULL) {
DECACHE_STACK_INFO();
CallTraceProcedure(interp, tracePtr, cmdPtr,
cmd, numChars, objc, objv);
CACHE_STACK_INFO();
}
}
}
}
/*
* Finally, invoke the command's Tcl_ObjCmdProc. First reset
* the interpreter's string and object results to their
* default empty values since they could have gotten changed
* by earlier invocations.
*/
Tcl_ResetResult(interp);
if (tclTraceExec >= 2) {
#ifdef TCL_COMPILE_DEBUG
if (traceInstructions) {
strncpy(cmdNameBuf, Tcl_GetString(objv[0]), 20);
TRACE(("%u => call ", (isUnknownCmd? objc-1:objc)));
} else {
|
| ︙ | ︙ | |||
845 846 847 848 849 850 851 852 853 854 855 856 857 858 |
result = (*cmdPtr->objProc)(cmdPtr->objClientData, interp,
objc, objv);
if (Tcl_AsyncReady()) {
result = Tcl_AsyncInvoke(interp, result);
}
CACHE_STACK_INFO();
/*
* If the interpreter has a non-empty string result, the
* result object is either empty or stale because some
* procedure set interp->result directly. If so, move the
* string result to the result object, then reset the
* string result.
*/
| > > > > > > > > | 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 |
result = (*cmdPtr->objProc)(cmdPtr->objClientData, interp,
objc, objv);
if (Tcl_AsyncReady()) {
result = Tcl_AsyncInvoke(interp, result);
}
CACHE_STACK_INFO();
/*
* If the old stack is going to be released, it is
* safe to do so now, since no references to objv are
* going to be used from now on.
*/
Tcl_Release((ClientData)preservedStack);
/*
* If the interpreter has a non-empty string result, the
* result object is either empty or stale because some
* procedure set interp->result directly. If so, move the
* string result to the result object, then reset the
* string result.
*/
|
| ︙ | ︙ | |||
2303 2304 2305 2306 2307 2308 2309 |
}
ADJUST_PC(1);
case INST_UMINUS:
case INST_LNOT:
{
/*
| | > | | | > | > | > > > > > | | | 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 |
}
ADJUST_PC(1);
case INST_UMINUS:
case INST_LNOT:
{
/*
* The operand must be numeric or a boolean string as
* accepted by Tcl_GetBooleanFromObj(). If the operand
* object is unshared modify it directly, otherwise
* create a copy to modify: this is "copy on write".
* Free any old string representation since it is now
* invalid.
*/
double d;
int boolvar;
Tcl_ObjType *tPtr;
valuePtr = POP_OBJECT();
tPtr = valuePtr->typePtr;
if ((tPtr != &tclIntType) && ((tPtr != &tclDoubleType)
|| (valuePtr->bytes != NULL))) {
if ((tPtr == &tclBooleanType)
&& (valuePtr->bytes == NULL)) {
valuePtr->typePtr = &tclIntType;
} else {
char *s = Tcl_GetStringFromObj(valuePtr, &length);
if (TclLooksLikeInt(s, length)) {
result = Tcl_GetLongFromObj((Tcl_Interp *) NULL,
valuePtr, &i);
} else {
result = Tcl_GetDoubleFromObj((Tcl_Interp *) NULL,
valuePtr, &d);
}
if (result == TCL_ERROR && *pc == INST_LNOT) {
result = Tcl_GetBooleanFromObj((Tcl_Interp *)NULL,
valuePtr, &boolvar);
i = (long)boolvar; /* i is long, not int! */
}
if (result != TCL_OK) {
TRACE(("\"%.20s\" => ILLEGAL TYPE %s\n",
s, (tPtr? tPtr->name : "null")));
IllegalExprOperandType(interp, pc, valuePtr);
Tcl_DecrRefCount(valuePtr);
goto checkForCatch;
}
}
tPtr = valuePtr->typePtr;
}
if (Tcl_IsShared(valuePtr)) {
/*
* Create a new object.
*/
if ((tPtr == &tclIntType) || (tPtr == &tclBooleanType)) {
i = valuePtr->internalRep.longValue;
objPtr = Tcl_NewLongObj(
(*pc == INST_UMINUS)? -i : !i);
TRACE_WITH_OBJ(("%ld => ", i), objPtr);
} else {
d = valuePtr->internalRep.doubleValue;
if (*pc == INST_UMINUS) {
|
| ︙ | ︙ | |||
2367 2368 2369 2370 2371 2372 2373 |
}
PUSH_OBJECT(objPtr);
TclDecrRefCount(valuePtr);
} else {
/*
* valuePtr is unshared. Modify it directly.
*/
| | | 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 |
}
PUSH_OBJECT(objPtr);
TclDecrRefCount(valuePtr);
} else {
/*
* valuePtr is unshared. Modify it directly.
*/
if ((tPtr == &tclIntType) || (tPtr == &tclBooleanType)) {
i = valuePtr->internalRep.longValue;
Tcl_SetLongObj(valuePtr,
(*pc == INST_UMINUS)? -i : !i);
TRACE_WITH_OBJ(("%ld => ", i), valuePtr);
} else {
d = valuePtr->internalRep.doubleValue;
if (*pc == INST_UMINUS) {
|
| ︙ | ︙ | |||
3840 3841 3842 3843 3844 3845 3846 |
* the function. */
ClientData clientData; /* Ignored. */
{
Tcl_Obj **stackPtr; /* Cached evaluation stack base pointer. */
register int stackTop; /* Cached top index of evaluation stack. */
Interp *iPtr = (Interp *) interp;
double dResult;
| | > > > > > > > > > > | > > > > | > | > > > > | < < < < < < < < | | < < < < | 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 |
* the function. */
ClientData clientData; /* Ignored. */
{
Tcl_Obj **stackPtr; /* Cached evaluation stack base pointer. */
register int stackTop; /* Cached top index of evaluation stack. */
Interp *iPtr = (Interp *) interp;
double dResult;
long tmp; /* Algorithm assumes at least 32 bits.
* Only long guarantees that. See below. */
if (!(iPtr->flags & RAND_SEED_INITIALIZED)) {
iPtr->flags |= RAND_SEED_INITIALIZED;
iPtr->randSeed = TclpGetClicks();
/*
* Make sure 1 <= randSeed <= (2^31) - 2. See below.
*/
iPtr->randSeed &= (unsigned long) 0x7fffffff;
if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) {
iPtr->randSeed ^= 123459876;
}
}
/*
* Set stackPtr and stackTop from eePtr.
*/
CACHE_STACK_INFO();
/*
* Generate the random number using the linear congruential
* generator defined by the following recurrence:
* seed = ( IA * seed ) mod IM
* where IA is 16807 and IM is (2^31) - 1. The recurrence maps
* a seed in the range [1, IM - 1] to a new seed in that same range.
* The recurrence maps IM to 0, and maps 0 back to 0, so those two
* values must not be allowed as initial values of seed.
*
* In order to avoid potential problems with integer overflow, the
* recurrence is implemented in terms of additional constants
* IQ and IR such that
* IM = IA*IQ + IR
* None of the operations in the implementation overflows a 32-bit
* signed integer, and the C type long is guaranteed to be at least
* 32 bits wide.
*
* For more details on how this algorithm works, refer to the following
* papers:
*
* S.K. Park & K.W. Miller, "Random number generators: good ones
* are hard to find," Comm ACM 31(10):1192-1201, Oct 1988
*
* W.H. Press & S.A. Teukolsky, "Portable random number
* generators," Computers in Physics 6(5):522-524, Sep/Oct 1992.
*/
#define RAND_IA 16807
#define RAND_IM 2147483647
#define RAND_IQ 127773
#define RAND_IR 2836
#define RAND_MASK 123459876
tmp = iPtr->randSeed/RAND_IQ;
iPtr->randSeed = RAND_IA*(iPtr->randSeed - tmp*RAND_IQ) - RAND_IR*tmp;
if (iPtr->randSeed < 0) {
iPtr->randSeed += RAND_IM;
}
/*
* Since the recurrence keeps seed values in the range [1, RAND_IM - 1],
* dividing by RAND_IM yields a double in the range (0, 1).
*/
dResult = iPtr->randSeed * (1.0/RAND_IM);
/*
* Push a Tcl object with the result.
*/
PUSH_OBJECT(Tcl_NewDoubleObj(dResult));
|
| ︙ | ︙ | |||
4046 4047 4048 4049 4050 4051 4052 |
badValue:
Tcl_DecrRefCount(valuePtr);
DECACHE_STACK_INFO();
return TCL_ERROR;
}
/*
| | > > > > > | 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 |
badValue:
Tcl_DecrRefCount(valuePtr);
DECACHE_STACK_INFO();
return TCL_ERROR;
}
/*
* Reset the seed. Make sure 1 <= randSeed <= 2^31 - 2.
* See comments in ExprRandFunc() for more details.
*/
iPtr->flags |= RAND_SEED_INITIALIZED;
iPtr->randSeed = i;
iPtr->randSeed &= (unsigned long) 0x7fffffff;
if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) {
iPtr->randSeed ^= 123459876;
}
/*
* To avoid duplicating the random number generation code we simply
* clean up our state and call the real random number function. That
* function will always succeed.
*/
|
| ︙ | ︙ | |||
4445 4446 4447 4448 4449 4450 4451 |
statsPtr->numLiteralsCreated * sizeof(Tcl_Obj),
statsPtr->totalLitStringBytes);
fprintf(stdout, " Mean code/compile %.1f\n",
totalCodeBytes / statsPtr->numCompilations);
fprintf(stdout, " Mean code/source %.1f\n",
totalCodeBytes / statsPtr->totalSrcBytes);
| | | 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 |
statsPtr->numLiteralsCreated * sizeof(Tcl_Obj),
statsPtr->totalLitStringBytes);
fprintf(stdout, " Mean code/compile %.1f\n",
totalCodeBytes / statsPtr->numCompilations);
fprintf(stdout, " Mean code/source %.1f\n",
totalCodeBytes / statsPtr->totalSrcBytes);
fprintf(stdout, "\nCurrent (active) ByteCodes %ld\n",
numCurrentByteCodes);
fprintf(stdout, " Source bytes %.6g\n",
statsPtr->currentSrcBytes);
fprintf(stdout, " Code bytes %.6g\n",
currentCodeBytes);
fprintf(stdout, " ByteCode bytes %.6g\n",
statsPtr->currentByteCodeBytes);
|
| ︙ | ︙ | |||
4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 |
statsPtr->currentLitStringBytes);
fprintf(stdout, " Mean code/source %.1f\n",
currentCodeBytes / statsPtr->currentSrcBytes);
fprintf(stdout, " Code + source bytes %.6g (%0.1f mean code/src)\n",
(currentCodeBytes + statsPtr->currentSrcBytes),
(currentCodeBytes / statsPtr->currentSrcBytes) + 1.0);
/*
* Literal table statistics.
*/
numByteCodeLits = 0;
refCountSum = 0;
numSharedMultX = 0;
| > > > > > > > > > > > > > > > > > > > > > > > | 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 |
statsPtr->currentLitStringBytes);
fprintf(stdout, " Mean code/source %.1f\n",
currentCodeBytes / statsPtr->currentSrcBytes);
fprintf(stdout, " Code + source bytes %.6g (%0.1f mean code/src)\n",
(currentCodeBytes + statsPtr->currentSrcBytes),
(currentCodeBytes / statsPtr->currentSrcBytes) + 1.0);
/*
* Tcl_IsShared statistics check
*
* This gives the refcount of each obj as Tcl_IsShared was called
* for it. Shared objects must be duplicated before they can be
* modified.
*/
numSharedMultX = 0;
fprintf(stdout, "\nTcl_IsShared object check (all objects):\n");
fprintf(stdout, " Object had refcount <=1 (not shared) %ld\n",
tclObjsShared[1]);
for (i = 2; i < TCL_MAX_SHARED_OBJ_STATS; i++) {
fprintf(stdout, " refcount ==%d %ld\n",
i, tclObjsShared[i]);
numSharedMultX += tclObjsShared[i];
}
fprintf(stdout, " refcount >=%d %ld\n",
i, tclObjsShared[0]);
numSharedMultX += tclObjsShared[0];
fprintf(stdout, " Total shared objects %d\n",
numSharedMultX);
/*
* Literal table statistics.
*/
numByteCodeLits = 0;
refCountSum = 0;
numSharedMultX = 0;
|
| ︙ | ︙ | |||
4507 4508 4509 4510 4511 4512 4513 |
fprintf(stdout, "\nTotal objects (all interps) %ld\n",
tclObjsAlloced);
fprintf(stdout, "Current objects %ld\n",
(tclObjsAlloced - tclObjsFreed));
fprintf(stdout, "Total literal objects %ld\n",
statsPtr->numLiteralsCreated);
| | | 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 |
fprintf(stdout, "\nTotal objects (all interps) %ld\n",
tclObjsAlloced);
fprintf(stdout, "Current objects %ld\n",
(tclObjsAlloced - tclObjsFreed));
fprintf(stdout, "Total literal objects %ld\n",
statsPtr->numLiteralsCreated);
fprintf(stdout, "\nCurrent literal objects %d (%0.1f%% of current objects)\n",
globalTablePtr->numEntries,
(globalTablePtr->numEntries * 100.0) / (tclObjsAlloced-tclObjsFreed));
fprintf(stdout, " ByteCode literals %ld (%0.1f%% of current literals)\n",
numByteCodeLits,
(numByteCodeLits * 100.0) / globalTablePtr->numEntries);
fprintf(stdout, " Literals reused > 1x %d\n",
|
| ︙ | ︙ | |||
4658 4659 4660 4661 4662 4663 4664 |
for (i = minSizeDecade; i <= maxSizeDecade; i++) {
decadeHigh = (1 << (i+1)) - 1;
sum += statsPtr->byteCodeCount[i];
fprintf(stdout, " %10d %8.0f%%\n",
decadeHigh, (sum * 100.0) / statsPtr->numCompilations);
}
| | | 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 |
for (i = minSizeDecade; i <= maxSizeDecade; i++) {
decadeHigh = (1 << (i+1)) - 1;
sum += statsPtr->byteCodeCount[i];
fprintf(stdout, " %10d %8.0f%%\n",
decadeHigh, (sum * 100.0) / statsPtr->numCompilations);
}
fprintf(stdout, "\nByteCode longevity (excludes Current ByteCodes):\n");
fprintf(stdout, " Up to ms Percentage\n");
minSizeDecade = maxSizeDecade = 0;
for (i = 0; i < 31; i++) {
if (statsPtr->lifetimeCount[i] > 0) {
minSizeDecade = i;
break;
}
|
| ︙ | ︙ |
Changes to generic/tclFileName.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclFileName.c -- * * This file contains routines for converting file names betwen * native and network form. * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < < < < < < < < | 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 | /* * tclFileName.c -- * * This file contains routines for converting file names betwen * native and network form. * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclFileName.c,v 1.13.2.2 2001/10/10 00:47:41 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclRegexp.h" /* * The following regular expression matches the root portion of a Macintosh * absolute path. It will match degenerate Unix-style paths, tilde paths, * Unix-style paths, and Mac paths. */ #define MAC_ROOT_PATTERN "^((/+([.][.]?/+)*([.][.]?)?)|(~[^:/]*)(/[^:]*)?|(~[^:]*)(:.*)?|/+([.][.]?/+)*([^:/]+)(/[^:]*)?|([^:]+):.*)$" |
| ︙ | ︙ | |||
157 158 159 160 161 162 163 |
ExtractWinRoot(path, resultPtr, offset, typePtr)
CONST char *path; /* Path to parse. */
Tcl_DString *resultPtr; /* Buffer to hold result. */
int offset; /* Offset in buffer where result should be
* stored. */
Tcl_PathType *typePtr; /* Where to store pathType result */
{
| < < < | | > > > > > > > > > > > > | | | | | | | | | 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 |
ExtractWinRoot(path, resultPtr, offset, typePtr)
CONST char *path; /* Path to parse. */
Tcl_DString *resultPtr; /* Buffer to hold result. */
int offset; /* Offset in buffer where result should be
* stored. */
Tcl_PathType *typePtr; /* Where to store pathType result */
{
if (path[0] == '/' || path[0] == '\\') {
/* Might be a UNC or Vol-Relative path */
char *host, *share, *tail;
int hlen, slen;
if (path[1] != '/' && path[1] != '\\') {
Tcl_DStringSetLength(resultPtr, offset);
*typePtr = TCL_PATH_VOLUME_RELATIVE;
Tcl_DStringAppend(resultPtr, "/", 1);
return &path[1];
}
host = (char *)&path[2];
/* Skip separators */
while (host[0] == '/' || host[0] == '\\') host++;
for (hlen = 0; host[hlen];hlen++) {
if (host[hlen] == '/' || host[hlen] == '\\')
break;
}
if (host[hlen] == 0 || host[hlen+1] == 0) {
/*
* The path given is simply of the form
* '/foo', '//foo', '/////foo' or the same
* with backslashes. If there is exactly
* one leading '/' the path is volume relative
* (see filename man page). If there are more
* than one, we are simply assuming they
* are superfluous and we trim them away.
* (An alternative interpretation would
* be that it is a host name, but we have
* been documented that that is not the case).
*/
*typePtr = TCL_PATH_VOLUME_RELATIVE;
Tcl_DStringAppend(resultPtr, "/", 1);
return &path[2];
}
Tcl_DStringSetLength(resultPtr, offset);
share = &host[hlen];
/* Skip separators */
while (share[0] == '/' || share[0] == '\\') share++;
for (slen = 0; share[slen];slen++) {
if (share[slen] == '/' || share[slen] == '\\')
break;
}
Tcl_DStringAppend(resultPtr, "//", 2);
Tcl_DStringAppend(resultPtr, host, hlen);
Tcl_DStringAppend(resultPtr, "/", 1);
Tcl_DStringAppend(resultPtr, share, slen);
tail = &share[slen];
/* Skip separators */
while (tail[0] == '/' || tail[0] == '\\') tail++;
*typePtr = TCL_PATH_ABSOLUTE;
return tail;
} else if (*path && path[1] == ':') {
/* Might be a drive sep */
Tcl_DStringSetLength(resultPtr, offset);
if (path[2] != '/' && path[2] != '\\') {
*typePtr = TCL_PATH_VOLUME_RELATIVE;
Tcl_DStringAppend(resultPtr, path, 2);
return &path[2];
} else {
char *tail = (char*)&path[3];
/* Skip separators */
while (*tail && (tail[0] == '/' || tail[0] == '\\')) tail++;
*typePtr = TCL_PATH_ABSOLUTE;
Tcl_DStringAppend(resultPtr, path, 2);
Tcl_DStringAppend(resultPtr, "/", 1);
return tail;
}
} else {
*typePtr = TCL_PATH_RELATIVE;
return path;
}
}
|
| ︙ | ︙ |
Changes to generic/tclGetDate.y.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclGetDate.y -- * * Contains yacc grammar for parsing date and time strings. * The output of this file should be the file tclDate.c which * is used directly in the Tcl sources. * * Copyright (c) 1992-1995 Karl Lehenbauer and Mark Diekhans. * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/*
* tclGetDate.y --
*
* Contains yacc grammar for parsing date and time strings.
* The output of this file should be the file tclDate.c which
* is used directly in the Tcl sources.
*
* Copyright (c) 1992-1995 Karl Lehenbauer and Mark Diekhans.
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclGetDate.y,v 1.15.2.3 2001/10/18 20:17:17 hobbs Exp $
*/
%{
/*
* tclDate.c --
*
* This file is generated from a yacc grammar defined in
|
| ︙ | ︙ | |||
29 30 31 32 33 34 35 | * * SCCSID */ #include "tclInt.h" #include "tclPort.h" | | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | * * SCCSID */ #include "tclInt.h" #include "tclPort.h" #if defined(MAC_TCL) && !defined(TCL_MAC_USE_MSL_EPOCH) # define EPOCH 1904 # define START_OF_TIME 1904 # define END_OF_TIME 2039 #else # define EPOCH 1970 # define START_OF_TIME 1902 # define END_OF_TIME 2037 |
| ︙ | ︙ | |||
143 144 145 146 147 148 149 | %token tAGO tDAY tDAYZONE tID tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT %token tSTARDATE tSEC_UNIT tSNUMBER tUNUMBER tZONE tEPOCH tDST tISOBASE %token tDAY_UNIT tNEXT %type <Number> tDAY tDAYZONE tMINUTE_UNIT tMONTH tMONTH_UNIT tDST %type <Number> tSEC_UNIT tSNUMBER tUNUMBER tZONE tISOBASE tDAY_UNIT | | | 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
%token tAGO tDAY tDAYZONE tID tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT
%token tSTARDATE tSEC_UNIT tSNUMBER tUNUMBER tZONE tEPOCH tDST tISOBASE
%token tDAY_UNIT tNEXT
%type <Number> tDAY tDAYZONE tMINUTE_UNIT tMONTH tMONTH_UNIT tDST
%type <Number> tSEC_UNIT tSNUMBER tUNUMBER tZONE tISOBASE tDAY_UNIT
%type <Number> unit sign tNEXT tSTARDATE
%type <Meridian> tMERIDIAN o_merid
%%
spec : /* NULL */
| spec item
;
|
| ︙ | ︙ | |||
353 354 355 356 357 358 359 |
yyDay = 1;
yyMonth = 1;
yyRelDay += (($2%1000)*(365 + IsLeapYear(yyYear)))/1000;
yyRelSeconds += $4 * 144 * 60;
}
;
| > > > > > > > | | | | | < < < | 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 |
yyDay = 1;
yyMonth = 1;
yyRelDay += (($2%1000)*(365 + IsLeapYear(yyYear)))/1000;
yyRelSeconds += $4 * 144 * 60;
}
;
relspec : relunits tAGO {
yyRelSeconds *= -1;
yyRelMonth *= -1;
yyRelDay *= -1;
}
| relunits
;
relunits : sign tUNUMBER unit { *yyRelPointer += $1 * $2 * $3; }
| tUNUMBER unit { *yyRelPointer += $1 * $2; }
| tNEXT unit { *yyRelPointer += $2; }
| tNEXT tUNUMBER unit { *yyRelPointer += $2 * $3; }
| unit { *yyRelPointer += $1; }
;
sign : '-' { $$ = -1; }
| '+' { $$ = 1; }
;
unit : tSEC_UNIT { $$ = $1; yyRelPointer = &yyRelSeconds; }
| tDAY_UNIT { $$ = $1; yyRelPointer = &yyRelDay; }
| tMONTH_UNIT { $$ = $1; yyRelPointer = &yyRelMonth; }
;
number : tUNUMBER
{
if (yyHaveTime && yyHaveDate && !yyHaveRel) {
yyYear = $1;
} else {
yyHaveTime++;
|
| ︙ | ︙ | |||
790 791 792 793 794 795 796 797 798 799 800 801 802 803 |
tm = TclpGetDate((TclpTime_t)&Start, 0);
Month = 12 * (tm->tm_year + TM_YEAR_BASE) + tm->tm_mon + RelMonth;
Year = Month / 12;
Month = Month % 12 + 1;
result = Convert(Month, (time_t) tm->tm_mday, Year,
(time_t) tm->tm_hour, (time_t) tm->tm_min, (time_t) tm->tm_sec,
MER24, DSTmaybe, &Julian);
/*
* The following iteration takes into account the case were we jump
* into a "short month". Far example, "one month from Jan 31" will
* fail because there is no Feb 31. The code below will reduce the
* day and try converting the date until we succed or the date equals
* 28 (which always works unless the date is bad in another way).
*/
| > > > > > > > > > > > > > > > > > | 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 |
tm = TclpGetDate((TclpTime_t)&Start, 0);
Month = 12 * (tm->tm_year + TM_YEAR_BASE) + tm->tm_mon + RelMonth;
Year = Month / 12;
Month = Month % 12 + 1;
result = Convert(Month, (time_t) tm->tm_mday, Year,
(time_t) tm->tm_hour, (time_t) tm->tm_min, (time_t) tm->tm_sec,
MER24, DSTmaybe, &Julian);
/*
* The Julian time returned above is behind by one day, if "month"
* or "year" is used to specify relative time and the GMT flag is true.
* This problem occurs only when the current time is closer to
* midnight, the difference being not more than its time difference
* with GMT. For example, in US/Pacific time zone, the problem occurs
* whenever the current time is between midnight to 8:00am or 7:00amDST.
* See Bug# 413397 for more details and sample script.
* To resolve this bug, we simply add the number of seconds corresponding
* to timezone difference with GMT to Julian time, if GMT flag is true.
*/
if (TclDateTimezone == 0) {
Julian += TclpGetTimeZone((unsigned long) Start) * 60L;
}
/*
* The following iteration takes into account the case were we jump
* into a "short month". Far example, "one month from Jan 31" will
* fail because there is no Feb 31. The code below will reduce the
* day and try converting the date until we succed or the date equals
* 28 (which always works unless the date is bad in another way).
*/
|
| ︙ | ︙ |
Changes to generic/tclIO.c.
1 2 3 4 5 6 | /* * tclIO.c -- * * This file provides the generic portions (those that are the same on * all platforms and for all channel types) of Tcl's IO facilities. * | | | | < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < | < < < | < < < < | | | | | | | | | > > > | > | | | | | | | | | | | | | | | > | | | | | > > | | | | | | | | | | 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 |
/*
* tclIO.c --
*
* This file provides the generic portions (those that are the same on
* all platforms and for all channel types) of Tcl's IO facilities.
*
* Copyright (c) 1998-2000 Ajuba Solutions
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclIO.c,v 1.20.2.15 2002/03/02 05:00:59 hobbs Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
#include "tclIO.h"
#include <assert.h>
/*
* All static variables used in this file are collected into a single
* instance of the following structure. For multi-threaded implementations,
* there is one instance of this structure for each thread.
*
* Notice that different structures with the same name appear in other
* files. The structure defined below is used in this file only.
*/
typedef struct ThreadSpecificData {
/*
* This variable holds the list of nested ChannelHandlerEventProc
* invocations.
*/
NextChannelHandler *nestedHandlerPtr;
/*
* List of all channels currently open, indexed by ChannelState,
* as only one ChannelState exists per set of stacked channels.
*/
ChannelState *firstCSPtr;
/*
* Static variables to hold channels for stdin, stdout and stderr.
*/
Tcl_Channel stdinChannel;
int stdinInitialized;
Tcl_Channel stdoutChannel;
int stdoutInitialized;
Tcl_Channel stderrChannel;
int stderrInitialized;
} ThreadSpecificData;
static Tcl_ThreadDataKey dataKey;
/*
* Static functions in this file:
*/
static ChannelBuffer * AllocChannelBuffer _ANSI_ARGS_((int length));
static void ChannelTimerProc _ANSI_ARGS_((
ClientData clientData));
static int CheckChannelErrors _ANSI_ARGS_((ChannelState *statePtr,
int direction));
static int CheckFlush _ANSI_ARGS_((Channel *chanPtr,
ChannelBuffer *bufPtr, int newlineFlag));
static int CheckForDeadChannel _ANSI_ARGS_((Tcl_Interp *interp,
ChannelState *statePtr));
static void CheckForStdChannelsBeingClosed _ANSI_ARGS_((
Tcl_Channel chan));
static void CleanupChannelHandlers _ANSI_ARGS_((
Tcl_Interp *interp, Channel *chanPtr));
static int CloseChannel _ANSI_ARGS_((Tcl_Interp *interp,
Channel *chanPtr, int errorCode));
static void CommonGetsCleanup _ANSI_ARGS_((Channel *chanPtr,
Tcl_Encoding encoding));
static int CopyAndTranslateBuffer _ANSI_ARGS_((
ChannelState *statePtr, char *result,
int space));
static int CopyBuffer _ANSI_ARGS_((
Channel *chanPtr, char *result,
int space));
static int CopyData _ANSI_ARGS_((CopyState *csPtr, int mask));
static void CopyEventProc _ANSI_ARGS_((ClientData clientData,
int mask));
static void CreateScriptRecord _ANSI_ARGS_((
Tcl_Interp *interp, Channel *chanPtr,
int mask, Tcl_Obj *scriptPtr));
static void DeleteChannelTable _ANSI_ARGS_((
ClientData clientData, Tcl_Interp *interp));
static void DeleteScriptRecord _ANSI_ARGS_((Tcl_Interp *interp,
Channel *chanPtr, int mask));
static void DiscardInputQueued _ANSI_ARGS_((ChannelState *statePtr,
int discardSavedBuffers));
static void DiscardOutputQueued _ANSI_ARGS_((
ChannelState *chanPtr));
static int DoRead _ANSI_ARGS_((Channel *chanPtr, char *srcPtr,
int slen));
static int DoWrite _ANSI_ARGS_((Channel *chanPtr, char *src,
int srcLen));
static int FilterInputBytes _ANSI_ARGS_((Channel *chanPtr,
GetsState *statePtr));
static int FlushChannel _ANSI_ARGS_((Tcl_Interp *interp,
Channel *chanPtr, int calledFromAsyncFlush));
static Tcl_HashTable * GetChannelTable _ANSI_ARGS_((Tcl_Interp *interp));
static int GetInput _ANSI_ARGS_((Channel *chanPtr));
static void PeekAhead _ANSI_ARGS_((Channel *chanPtr,
char **dstEndPtr, GetsState *gsPtr));
static int ReadBytes _ANSI_ARGS_((ChannelState *statePtr,
Tcl_Obj *objPtr, int charsLeft,
int *offsetPtr));
static int ReadChars _ANSI_ARGS_((ChannelState *statePtr,
Tcl_Obj *objPtr, int charsLeft, int *offsetPtr,
int *factorPtr));
static void RecycleBuffer _ANSI_ARGS_((ChannelState *statePtr,
ChannelBuffer *bufPtr, int mustDiscard));
static int StackSetBlockMode _ANSI_ARGS_((Channel *chanPtr,
int mode));
static int SetBlockMode _ANSI_ARGS_((Tcl_Interp *interp,
Channel *chanPtr, int mode));
static void StopCopy _ANSI_ARGS_((CopyState *csPtr));
static int TranslateInputEOL _ANSI_ARGS_((ChannelState *statePtr,
char *dst, CONST char *src, int *dstLenPtr,
int *srcLenPtr));
static int TranslateOutputEOL _ANSI_ARGS_((ChannelState *statePtr,
char *dst, CONST char *src, int *dstLenPtr,
int *srcLenPtr));
static void UpdateInterest _ANSI_ARGS_((Channel *chanPtr));
static int WriteBytes _ANSI_ARGS_((Channel *chanPtr,
CONST char *src, int srcLen));
static int WriteChars _ANSI_ARGS_((Channel *chanPtr,
CONST char *src, int srcLen));
/*
*---------------------------------------------------------------------------
*
* TclInitIOSubsystem --
*
|
| ︙ | ︙ | |||
518 519 520 521 522 523 524 |
/* ARGSUSED */
void
TclFinalizeIOSubsystem()
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
Channel *chanPtr; /* Iterates over open channels. */
| | | | | | > | | | 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 |
/* ARGSUSED */
void
TclFinalizeIOSubsystem()
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
Channel *chanPtr; /* Iterates over open channels. */
ChannelState *nextCSPtr; /* Iterates over open channels. */
ChannelState *statePtr; /* state of channel stack */
for (statePtr = tsdPtr->firstCSPtr; statePtr != (ChannelState *) NULL;
statePtr = nextCSPtr) {
chanPtr = statePtr->topChanPtr;
nextCSPtr = statePtr->nextCSPtr;
/*
* Set the channel back into blocking mode to ensure that we wait
* for all data to flush out.
*/
(void) Tcl_SetChannelOption(NULL, (Tcl_Channel) chanPtr,
"-blocking", "on");
if ((chanPtr == (Channel *) tsdPtr->stdinChannel) ||
(chanPtr == (Channel *) tsdPtr->stdoutChannel) ||
(chanPtr == (Channel *) tsdPtr->stderrChannel)) {
/*
* Decrement the refcount which was earlier artificially bumped
* up to keep the channel from being closed.
*/
statePtr->refCount--;
}
if (statePtr->refCount <= 0) {
/*
* Close it only if the refcount indicates that the channel is not
* referenced from any interpreter. If it is, that interpreter will
* close the channel when it gets destroyed.
*/
|
| ︙ | ︙ | |||
584 585 586 587 588 589 590 |
* Finally, we clean up the fields in the channel data structure
* since all of them have been deleted already. We mark the
* channel with CHANNEL_DEAD to prevent any further IO operations
* on it.
*/
chanPtr->instanceData = (ClientData) NULL;
| | | 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
* Finally, we clean up the fields in the channel data structure
* since all of them have been deleted already. We mark the
* channel with CHANNEL_DEAD to prevent any further IO operations
* on it.
*/
chanPtr->instanceData = (ClientData) NULL;
statePtr->flags |= CHANNEL_DEAD;
}
}
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
733 734 735 736 737 738 739 |
Tcl_Channel chan; /* The channel for which to create the
* close callback. */
Tcl_CloseProc *proc; /* The callback routine to call when the
* channel will be closed. */
ClientData clientData; /* Arbitrary data to pass to the
* close callback. */
{
| | | | | | 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 |
Tcl_Channel chan; /* The channel for which to create the
* close callback. */
Tcl_CloseProc *proc; /* The callback routine to call when the
* channel will be closed. */
ClientData clientData; /* Arbitrary data to pass to the
* close callback. */
{
ChannelState *statePtr;
CloseCallback *cbPtr;
statePtr = ((Channel *) chan)->state;
cbPtr = (CloseCallback *) ckalloc((unsigned) sizeof(CloseCallback));
cbPtr->proc = proc;
cbPtr->clientData = clientData;
cbPtr->nextPtr = statePtr->closeCbPtr;
statePtr->closeCbPtr = cbPtr;
}
/*
*----------------------------------------------------------------------
*
* Tcl_DeleteCloseHandler --
*
|
| ︙ | ︙ | |||
774 775 776 777 778 779 780 |
Tcl_Channel chan; /* The channel for which to cancel the
* close callback. */
Tcl_CloseProc *proc; /* The procedure for the callback to
* remove. */
ClientData clientData; /* The callback data for the callback
* to remove. */
{
| | | | | | | | 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 |
Tcl_Channel chan; /* The channel for which to cancel the
* close callback. */
Tcl_CloseProc *proc; /* The procedure for the callback to
* remove. */
ClientData clientData; /* The callback data for the callback
* to remove. */
{
ChannelState *statePtr;
CloseCallback *cbPtr, *cbPrevPtr;
statePtr = ((Channel *) chan)->state;
for (cbPtr = statePtr->closeCbPtr, cbPrevPtr = (CloseCallback *) NULL;
cbPtr != (CloseCallback *) NULL;
cbPtr = cbPtr->nextPtr) {
if ((cbPtr->proc == proc) && (cbPtr->clientData == clientData)) {
if (cbPrevPtr == (CloseCallback *) NULL) {
statePtr->closeCbPtr = cbPtr->nextPtr;
}
ckfree((char *) cbPtr);
break;
} else {
cbPrevPtr = cbPtr;
}
}
|
| ︙ | ︙ | |||
883 884 885 886 887 888 889 |
DeleteChannelTable(clientData, interp)
ClientData clientData; /* The per-interpreter data structure. */
Tcl_Interp *interp; /* The interpreter being deleted. */
{
Tcl_HashTable *hTblPtr; /* The hash table. */
Tcl_HashSearch hSearch; /* Search variable. */
Tcl_HashEntry *hPtr; /* Search variable. */
| | > | | | > | | | | | | | | | 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 |
DeleteChannelTable(clientData, interp)
ClientData clientData; /* The per-interpreter data structure. */
Tcl_Interp *interp; /* The interpreter being deleted. */
{
Tcl_HashTable *hTblPtr; /* The hash table. */
Tcl_HashSearch hSearch; /* Search variable. */
Tcl_HashEntry *hPtr; /* Search variable. */
Channel *chanPtr; /* Channel being deleted. */
ChannelState *statePtr; /* State of Channel being deleted. */
EventScriptRecord *sPtr, *prevPtr, *nextPtr;
/* Variables to loop over all channel events
* registered, to delete the ones that refer
* to the interpreter being deleted. */
/*
* Delete all the registered channels - this will close channels whose
* refcount reaches zero.
*/
hTblPtr = (Tcl_HashTable *) clientData;
for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch);
hPtr != (Tcl_HashEntry *) NULL;
hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch)) {
chanPtr = (Channel *) Tcl_GetHashValue(hPtr);
statePtr = chanPtr->state;
/*
* Remove any fileevents registered in this interpreter.
*/
for (sPtr = statePtr->scriptRecordPtr,
prevPtr = (EventScriptRecord *) NULL;
sPtr != (EventScriptRecord *) NULL;
sPtr = nextPtr) {
nextPtr = sPtr->nextPtr;
if (sPtr->interp == interp) {
if (prevPtr == (EventScriptRecord *) NULL) {
statePtr->scriptRecordPtr = nextPtr;
} else {
prevPtr->nextPtr = nextPtr;
}
Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr,
TclChannelEventScriptInvoker, (ClientData) sPtr);
Tcl_DecrRefCount(sPtr->scriptPtr);
ckfree((char *) sPtr);
} else {
prevPtr = sPtr;
}
}
/*
* Cannot call Tcl_UnregisterChannel because that procedure calls
* Tcl_GetAssocData to get the channel table, which might already
* be inaccessible from the interpreter structure. Instead, we
* emulate the behavior of Tcl_UnregisterChannel directly here.
*/
Tcl_DeleteHashEntry(hPtr);
statePtr->refCount--;
if (statePtr->refCount <= 0) {
if (!(statePtr->flags & BG_FLUSH_SCHEDULED)) {
(void) Tcl_Close(interp, (Tcl_Channel) chanPtr);
}
}
}
Tcl_DeleteHashTable(hTblPtr);
ckfree((char *) hTblPtr);
}
|
| ︙ | ︙ | |||
972 973 974 975 976 977 978 |
*----------------------------------------------------------------------
*/
static void
CheckForStdChannelsBeingClosed(chan)
Tcl_Channel chan;
{
| | | | | > | | | > | | | 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 |
*----------------------------------------------------------------------
*/
static void
CheckForStdChannelsBeingClosed(chan)
Tcl_Channel chan;
{
ChannelState *statePtr = ((Channel *) chan)->state;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
if ((chan == tsdPtr->stdinChannel) && (tsdPtr->stdinInitialized)) {
if (statePtr->refCount < 2) {
statePtr->refCount = 0;
tsdPtr->stdinChannel = NULL;
return;
}
} else if ((chan == tsdPtr->stdoutChannel)
&& (tsdPtr->stdoutInitialized)) {
if (statePtr->refCount < 2) {
statePtr->refCount = 0;
tsdPtr->stdoutChannel = NULL;
return;
}
} else if ((chan == tsdPtr->stderrChannel)
&& (tsdPtr->stderrInitialized)) {
if (statePtr->refCount < 2) {
statePtr->refCount = 0;
tsdPtr->stderrChannel = NULL;
return;
}
}
}
/*
|
| ︙ | ︙ | |||
1024 1025 1026 1027 1028 1029 1030 1031 |
Tcl_Channel chan; /* The channel to add to this interpreter
* channel table. */
{
Tcl_HashTable *hTblPtr; /* Hash table of channels. */
Tcl_HashEntry *hPtr; /* Search variable. */
int new; /* Is the hash entry new or does it exist? */
Channel *chanPtr; /* The actual channel. */
| > > > > > > | > | | < < < < < < < < < < < < < | | | 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 |
Tcl_Channel chan; /* The channel to add to this interpreter
* channel table. */
{
Tcl_HashTable *hTblPtr; /* Hash table of channels. */
Tcl_HashEntry *hPtr; /* Search variable. */
int new; /* Is the hash entry new or does it exist? */
Channel *chanPtr; /* The actual channel. */
ChannelState *statePtr; /* State of the actual channel. */
/*
* Always (un)register bottom-most channel in the stack. This makes
* management of the channel list easier because no manipulation is
* necessary during (un)stack operation.
*/
chanPtr = ((Channel *) chan)->state->bottomChanPtr;
statePtr = chanPtr->state;
if (statePtr->channelName == (char *) NULL) {
panic("Tcl_RegisterChannel: channel without name");
}
if (interp != (Tcl_Interp *) NULL) {
hTblPtr = GetChannelTable(interp);
hPtr = Tcl_CreateHashEntry(hTblPtr, statePtr->channelName, &new);
if (new == 0) {
if (chan == (Tcl_Channel) Tcl_GetHashValue(hPtr)) {
return;
}
panic("Tcl_RegisterChannel: duplicate channel names");
}
Tcl_SetHashValue(hPtr, (ClientData) chanPtr);
}
statePtr->refCount++;
}
/*
*----------------------------------------------------------------------
*
* Tcl_UnregisterChannel --
*
|
| ︙ | ︙ | |||
1084 1085 1086 1087 1088 1089 1090 1091 |
Tcl_UnregisterChannel(interp, chan)
Tcl_Interp *interp; /* Interpreter in which channel is defined. */
Tcl_Channel chan; /* Channel to delete. */
{
Tcl_HashTable *hTblPtr; /* Hash table of channels. */
Tcl_HashEntry *hPtr; /* Search variable. */
Channel *chanPtr; /* The real IO channel. */
| > > > > > > | > | | | | | | | | | | | 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 |
Tcl_UnregisterChannel(interp, chan)
Tcl_Interp *interp; /* Interpreter in which channel is defined. */
Tcl_Channel chan; /* Channel to delete. */
{
Tcl_HashTable *hTblPtr; /* Hash table of channels. */
Tcl_HashEntry *hPtr; /* Search variable. */
Channel *chanPtr; /* The real IO channel. */
ChannelState *statePtr; /* State of the real channel. */
/*
* Always (un)register bottom-most channel in the stack. This makes
* management of the channel list easier because no manipulation is
* necessary during (un)stack operation.
*/
chanPtr = ((Channel *) chan)->state->bottomChanPtr;
statePtr = chanPtr->state;
if (interp != (Tcl_Interp *) NULL) {
hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL);
if (hTblPtr == (Tcl_HashTable *) NULL) {
return TCL_OK;
}
hPtr = Tcl_FindHashEntry(hTblPtr, statePtr->channelName);
if (hPtr == (Tcl_HashEntry *) NULL) {
return TCL_OK;
}
if ((Channel *) Tcl_GetHashValue(hPtr) != chanPtr) {
return TCL_OK;
}
Tcl_DeleteHashEntry(hPtr);
/*
* Remove channel handlers that refer to this interpreter, so that they
* will not be present if the actual close is delayed and more events
* happen on the channel. This may occur if the channel is shared
* between several interpreters, or if the channel has async
* flushing active.
*/
CleanupChannelHandlers(interp, chanPtr);
}
statePtr->refCount--;
/*
* Perform special handling for standard channels being closed. If the
* refCount is now 1 it means that the last reference to the standard
* channel is being explicitly closed, so bump the refCount down
* artificially to 0. This will ensure that the channel is actually
* closed, below. Also set the static pointer to NULL for the channel.
*/
CheckForStdChannelsBeingClosed(chan);
/*
* If the refCount reached zero, close the actual channel.
*/
if (statePtr->refCount <= 0) {
/*
* Ensure that if there is another buffer, it gets flushed
* whether or not we are doing a background flush.
*/
if ((statePtr->curOutPtr != NULL) &&
(statePtr->curOutPtr->nextAdded >
statePtr->curOutPtr->nextRemoved)) {
statePtr->flags |= BUFFER_READY;
}
statePtr->flags |= CHANNEL_CLOSED;
if (!(statePtr->flags & BG_FLUSH_SCHEDULED)) {
if (Tcl_Close(interp, chan) != TCL_OK) {
return TCL_ERROR;
}
}
}
return TCL_OK;
}
|
| ︙ | ︙ | |||
1197 1198 1199 1200 1201 1202 1203 |
* have access to the standard channels.
*/
name = chanName;
if ((chanName[0] == 's') && (chanName[1] == 't')) {
chanPtr = NULL;
if (strcmp(chanName, "stdin") == 0) {
| | | | | | > > > > > > > | | 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 |
* have access to the standard channels.
*/
name = chanName;
if ((chanName[0] == 's') && (chanName[1] == 't')) {
chanPtr = NULL;
if (strcmp(chanName, "stdin") == 0) {
chanPtr = (Channel *) Tcl_GetStdChannel(TCL_STDIN);
} else if (strcmp(chanName, "stdout") == 0) {
chanPtr = (Channel *) Tcl_GetStdChannel(TCL_STDOUT);
} else if (strcmp(chanName, "stderr") == 0) {
chanPtr = (Channel *) Tcl_GetStdChannel(TCL_STDERR);
}
if (chanPtr != NULL) {
name = chanPtr->state->channelName;
}
}
hTblPtr = GetChannelTable(interp);
hPtr = Tcl_FindHashEntry(hTblPtr, name);
if (hPtr == (Tcl_HashEntry *) NULL) {
Tcl_AppendResult(interp, "can not find channel named \"",
chanName, "\"", (char *) NULL);
return NULL;
}
/*
* Always return bottom-most channel in the stack. This one lives
* the longest - other channels may go away unnoticed.
* The other APIs compensate where necessary to retrieve the
* topmost channel again.
*/
chanPtr = (Channel *) Tcl_GetHashValue(hPtr);
chanPtr = chanPtr->state->bottomChanPtr;
if (modePtr != NULL) {
*modePtr = (chanPtr->state->flags & (TCL_READABLE|TCL_WRITABLE));
}
return (Tcl_Channel) chanPtr;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 |
Tcl_ChannelType *typePtr; /* The channel type record. */
char *chanName; /* Name of channel to record. */
ClientData instanceData; /* Instance specific data. */
int mask; /* TCL_READABLE & TCL_WRITABLE to indicate
* if the channel is readable, writable. */
{
Channel *chanPtr; /* The channel structure newly created. */
CONST char *name;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
| > > > > > > > > > > > > > > | > > | > > > > > > > > | | | | | | | | | | | | | | < < | | | | | | | | | | | | | | < | | | | > > > > > > > > > > | | | > | | > | | > | | 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 |
Tcl_ChannelType *typePtr; /* The channel type record. */
char *chanName; /* Name of channel to record. */
ClientData instanceData; /* Instance specific data. */
int mask; /* TCL_READABLE & TCL_WRITABLE to indicate
* if the channel is readable, writable. */
{
Channel *chanPtr; /* The channel structure newly created. */
ChannelState *statePtr; /* The stack-level independent state info
* for the channel. */
CONST char *name;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
/*
* With the change of the Tcl_ChannelType structure to use a version in
* 8.3.2+, we have to make sure that our assumption that the structure
* remains a binary compatible size is true.
*
* If this assertion fails on some system, then it can be removed
* only if the user recompiles code with older channel drivers in
* the new system as well.
*/
assert(sizeof(Tcl_ChannelTypeVersion) == sizeof(Tcl_DriverBlockModeProc*));
chanPtr = (Channel *) ckalloc((unsigned) sizeof(Channel));
statePtr = (ChannelState *) ckalloc((unsigned) sizeof(ChannelState));
chanPtr->state = statePtr;
chanPtr->instanceData = instanceData;
chanPtr->typePtr = typePtr;
/*
* Set all the bits that are part of the stack-independent state
* information for the channel.
*/
if (chanName != (char *) NULL) {
statePtr->channelName = ckalloc((unsigned) (strlen(chanName) + 1));
strcpy(statePtr->channelName, chanName);
} else {
panic("Tcl_CreateChannel: NULL channel name");
}
statePtr->flags = mask;
/*
* Set the channel to system default encoding.
*/
statePtr->encoding = NULL;
name = Tcl_GetEncodingName(NULL);
if (strcmp(name, "binary") != 0) {
statePtr->encoding = Tcl_GetEncoding(NULL, name);
}
statePtr->inputEncodingState = NULL;
statePtr->inputEncodingFlags = TCL_ENCODING_START;
statePtr->outputEncodingState = NULL;
statePtr->outputEncodingFlags = TCL_ENCODING_START;
/*
* Set the channel up initially in AUTO input translation mode to
* accept "\n", "\r" and "\r\n". Output translation mode is set to
* a platform specific default value. The eofChar is set to 0 for both
* input and output, so that Tcl does not look for an in-file EOF
* indicator (e.g. ^Z) and does not append an EOF indicator to files.
*/
statePtr->inputTranslation = TCL_TRANSLATE_AUTO;
statePtr->outputTranslation = TCL_PLATFORM_TRANSLATION;
statePtr->inEofChar = 0;
statePtr->outEofChar = 0;
statePtr->unreportedError = 0;
statePtr->refCount = 0;
statePtr->closeCbPtr = (CloseCallback *) NULL;
statePtr->curOutPtr = (ChannelBuffer *) NULL;
statePtr->outQueueHead = (ChannelBuffer *) NULL;
statePtr->outQueueTail = (ChannelBuffer *) NULL;
statePtr->saveInBufPtr = (ChannelBuffer *) NULL;
statePtr->inQueueHead = (ChannelBuffer *) NULL;
statePtr->inQueueTail = (ChannelBuffer *) NULL;
statePtr->chPtr = (ChannelHandler *) NULL;
statePtr->interestMask = 0;
statePtr->scriptRecordPtr = (EventScriptRecord *) NULL;
statePtr->bufSize = CHANNELBUFFER_DEFAULT_SIZE;
statePtr->timer = NULL;
statePtr->csPtr = NULL;
statePtr->outputStage = NULL;
if ((statePtr->encoding != NULL) && (statePtr->flags & TCL_WRITABLE)) {
statePtr->outputStage = (char *)
ckalloc((unsigned) (statePtr->bufSize + 2));
}
/*
* As we are creating the channel, it is obviously the top for now
*/
statePtr->topChanPtr = chanPtr;
statePtr->bottomChanPtr = chanPtr;
chanPtr->downChanPtr = (Channel *) NULL;
chanPtr->upChanPtr = (Channel *) NULL;
chanPtr->inQueueHead = (ChannelBuffer*) NULL;
chanPtr->inQueueTail = (ChannelBuffer*) NULL;
/*
* Link the channel into the list of all channels; create an on-exit
* handler if there is not one already, to close off all the channels
* in the list on exit.
*/
statePtr->nextCSPtr = tsdPtr->firstCSPtr;
tsdPtr->firstCSPtr = statePtr;
/*
* Install this channel in the first empty standard channel slot, if
* the channel was previously closed explicitly.
*/
if ((tsdPtr->stdinChannel == NULL) &&
(tsdPtr->stdinInitialized == 1)) {
Tcl_SetStdChannel((Tcl_Channel) chanPtr, TCL_STDIN);
Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr);
} else if ((tsdPtr->stdoutChannel == NULL) &&
(tsdPtr->stdoutInitialized == 1)) {
Tcl_SetStdChannel((Tcl_Channel) chanPtr, TCL_STDOUT);
Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr);
} else if ((tsdPtr->stderrChannel == NULL) &&
(tsdPtr->stderrInitialized == 1)) {
Tcl_SetStdChannel((Tcl_Channel) chanPtr, TCL_STDERR);
Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr);
}
return (Tcl_Channel) chanPtr;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
1375 1376 1377 1378 1379 1380 1381 | * replaced by the new typePtr. * *---------------------------------------------------------------------- */ Tcl_Channel Tcl_StackChannel(interp, typePtr, instanceData, mask, prevChan) | | | | | | | | < < < < < < | > < < < < < < < < < | < < | > | | < | < | < > > > > | > > > > > > | > > > > > > > > > > > > > > > | > > > > > > > > > > | > > > > > > | > > > | | | | > > > < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < | | < < | | < < < < | | < < < < < < < < | < < | < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < > > | | | > > > | > > > | > | | < < < < < < < < < < < < > | < < < > > > | < | < < < < < | | < < > | > > | | < > | < < < | | < < < | < < < < < < < < < < < < < < | < < > | < < < < > | < < > | > | | | < < < | > > > > < < < < | < < < < | < < | < < | < < < < < | < < < > > | < < > | < < > | < < > | | > > < < < < < | < < < < < | < < < < < | | < | > | < | < < > < < | < | < < < | < | > > > | > | | | > | | > > > | | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
* replaced by the new typePtr.
*
*----------------------------------------------------------------------
*/
Tcl_Channel
Tcl_StackChannel(interp, typePtr, instanceData, mask, prevChan)
Tcl_Interp *interp; /* The interpreter we are working in */
Tcl_ChannelType *typePtr; /* The channel type record for the new
* channel. */
ClientData instanceData; /* Instance specific data for the new
* channel. */
int mask; /* TCL_READABLE & TCL_WRITABLE to indicate
* if the channel is readable, writable. */
Tcl_Channel prevChan; /* The channel structure to replace */
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
Channel *chanPtr, *prevChanPtr;
ChannelState *statePtr;
/*
* Find the given channel in the list of all channels.
* If we don't find it, then it was never registered correctly.
*
* This operation should occur at the top of a channel stack.
*/
statePtr = (ChannelState *) tsdPtr->firstCSPtr;
prevChanPtr = ((Channel *) prevChan)->state->topChanPtr;
while (statePtr->topChanPtr != prevChanPtr) {
statePtr = statePtr->nextCSPtr;
}
if (statePtr == NULL) {
Tcl_AppendResult(interp, "couldn't find state for channel \"",
Tcl_GetChannelName(prevChan), "\"", (char *) NULL);
return (Tcl_Channel) NULL;
}
/*
* Here we check if the given "mask" matches the "flags"
* of the already existing channel.
*
* | - | R | W | RW |
* --+---+---+---+----+ <=> 0 != (chan->mask & prevChan->mask)
* - | | | | |
* R | | + | | + | The superceding channel is allowed to
* W | | | + | + | restrict the capabilities of the
* RW| | + | + | + | superceded one !
* --+---+---+---+----+
*/
if ((mask & (statePtr->flags & (TCL_READABLE | TCL_WRITABLE))) == 0) {
Tcl_AppendResult(interp,
"reading and writing both disallowed for channel \"",
Tcl_GetChannelName(prevChan), "\"", (char *) NULL);
return (Tcl_Channel) NULL;
}
/*
* Flush the buffers. This ensures that any data still in them
* at this time is not handled by the new transformation. Restrict
* this to writable channels. Take care to hide a possible bg-copy
* in progress from Tcl_Flush and the CheckForChannelErrors inside.
*/
if ((mask & TCL_WRITABLE) != 0) {
CopyState *csPtr;
csPtr = statePtr->csPtr;
statePtr->csPtr = (CopyState*) NULL;
if (Tcl_Flush((Tcl_Channel) prevChanPtr) != TCL_OK) {
statePtr->csPtr = csPtr;
Tcl_AppendResult(interp, "could not flush channel \"",
Tcl_GetChannelName(prevChan), "\"", (char *) NULL);
return (Tcl_Channel) NULL;
}
statePtr->csPtr = csPtr;
}
/*
* Discard any input in the buffers. They are not yet read by the
* user of the channel, so they have to go through the new
* transformation before reading. As the buffers contain the
* untransformed form their contents are not only useless but actually
* distorts our view of the system.
*
* To preserve the information without having to read them again and
* to avoid problems with the location in the channel (seeking might
* be impossible) we move the buffers from the common state structure
* into the channel itself. We use the buffers in the channel below
* the new transformation to hold the data. In the future this allows
* us to write transformations which pre-read data and push the unused
* part back when they are going away.
*/
if (((mask & TCL_READABLE) != 0) &&
(statePtr->inQueueHead != (ChannelBuffer*) NULL)) {
/*
* Remark: It is possible that the channel buffers contain data from
* some earlier push-backs.
*/
statePtr->inQueueTail->nextPtr = prevChanPtr->inQueueHead;
prevChanPtr->inQueueHead = statePtr->inQueueHead;
if (prevChanPtr->inQueueTail == (ChannelBuffer*) NULL) {
prevChanPtr->inQueueTail = statePtr->inQueueTail;
}
statePtr->inQueueHead = (ChannelBuffer*) NULL;
statePtr->inQueueTail = (ChannelBuffer*) NULL;
}
chanPtr = (Channel *) ckalloc((unsigned) sizeof(Channel));
/*
* Save some of the current state into the new structure,
* reinitialize the parts which will stay with the transformation.
*
* Remarks:
*/
chanPtr->state = statePtr;
chanPtr->instanceData = instanceData;
chanPtr->typePtr = typePtr;
chanPtr->downChanPtr = prevChanPtr;
chanPtr->upChanPtr = (Channel *) NULL;
chanPtr->inQueueHead = (ChannelBuffer*) NULL;
chanPtr->inQueueTail = (ChannelBuffer*) NULL;
/*
* Place new block at the head of a possibly existing list of previously
* stacked channels.
*/
prevChanPtr->upChanPtr = chanPtr;
statePtr->topChanPtr = chanPtr;
return (Tcl_Channel) chanPtr;
}
/*
*----------------------------------------------------------------------
*
* Tcl_UnstackChannel --
*
* Unstacks an entry in the hash table for a Tcl_Channel
* record. This is the reverse to 'Tcl_StackChannel'.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* If TCL_ERROR is returned, the posix error code will be set
* with Tcl_SetErrno.
*
*----------------------------------------------------------------------
*/
int
Tcl_UnstackChannel (interp, chan)
Tcl_Interp *interp; /* The interpreter we are working in */
Tcl_Channel chan; /* The channel to unstack */
{
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state;
int result = 0;
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
if (chanPtr->downChanPtr != (Channel *) NULL) {
/*
* Instead of manipulating the per-thread / per-interp list/hashtable
* of registered channels we wind down the state of the transformation,
* and then restore the state of underlying channel into the old
* structure.
*/
Channel *downChanPtr = chanPtr->downChanPtr;
/*
* Flush the buffers. This ensures that any data still in them
* at this time _is_ handled by the transformation we are unstacking
* right now. Restrict this to writable channels. Take care to hide
* a possible bg-copy in progress from Tcl_Flush and the
* CheckForChannelErrors inside.
*/
if (statePtr->flags & TCL_WRITABLE) {
CopyState* csPtr;
csPtr = statePtr->csPtr;
statePtr->csPtr = (CopyState*) NULL;
if (Tcl_Flush((Tcl_Channel) chanPtr) != TCL_OK) {
statePtr->csPtr = csPtr;
Tcl_AppendResult(interp, "could not flush channel \"",
Tcl_GetChannelName((Tcl_Channel) chanPtr), "\"",
(char *) NULL);
return TCL_ERROR;
}
statePtr->csPtr = csPtr;
}
/*
* Anything in the input queue and the push-back buffers of
* the transformation going away is transformed data, but not
* yet read. As unstacking means that the caller does not want
* to see transformed data any more we have to discard these
* bytes. To avoid writing an analogue to 'DiscardInputQueued'
* we move the information in the push back buffers to the
* input queue and then call 'DiscardInputQueued' on that.
*/
if (((statePtr->flags & TCL_READABLE) != 0) &&
((statePtr->inQueueHead != (ChannelBuffer*) NULL) ||
(chanPtr->inQueueHead != (ChannelBuffer*) NULL))) {
if ((statePtr->inQueueHead != (ChannelBuffer*) NULL) &&
(chanPtr->inQueueHead != (ChannelBuffer*) NULL)) {
statePtr->inQueueTail->nextPtr = chanPtr->inQueueHead;
statePtr->inQueueTail = chanPtr->inQueueTail;
statePtr->inQueueHead = statePtr->inQueueTail;
} else if (chanPtr->inQueueHead != (ChannelBuffer*) NULL) {
statePtr->inQueueHead = chanPtr->inQueueHead;
statePtr->inQueueTail = chanPtr->inQueueTail;
}
chanPtr->inQueueHead = (ChannelBuffer*) NULL;
chanPtr->inQueueTail = (ChannelBuffer*) NULL;
DiscardInputQueued (statePtr, 0);
}
statePtr->topChanPtr = downChanPtr;
downChanPtr->upChanPtr = (Channel *) NULL;
/*
* Leave this link intact for closeproc
* chanPtr->downChanPtr = (Channel *) NULL;
*/
/*
* Close and free the channel driver state.
*/
if (chanPtr->typePtr->closeProc != TCL_CLOSE2PROC) {
result = (chanPtr->typePtr->closeProc)(chanPtr->instanceData,
interp);
} else {
result = (chanPtr->typePtr->close2Proc)(chanPtr->instanceData,
interp, 0);
}
chanPtr->typePtr = NULL;
/*
* AK: Tcl_NotifyChannel may hold a reference to this block of memory
*/
Tcl_EventuallyFree((ClientData) chanPtr, TCL_DYNAMIC);
UpdateInterest(downChanPtr);
if (result != 0) {
Tcl_SetErrno(result);
return TCL_ERROR;
}
} else {
/*
* This channel does not cover another one.
* Simply do a close, if necessary.
*/
if (statePtr->refCount <= 0) {
if (Tcl_Close(interp, chan) != TCL_OK) {
return TCL_ERROR;
}
}
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetStackedChannel --
*
* Determines whether the specified channel is stacked upon another.
*
* Results:
* NULL if the channel is not stacked upon another one, or a reference
* to the channel it is stacked upon. This reference can be used in
* queries, but modification is not allowed.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_Channel
Tcl_GetStackedChannel(chan)
Tcl_Channel chan;
{
Channel *chanPtr = (Channel *) chan; /* The actual channel. */
return (Tcl_Channel) chanPtr->downChanPtr;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetTopChannel --
*
* Returns the top channel of a channel stack.
*
* Results:
* NULL if the channel is not stacked upon another one, or a reference
* to the channel it is stacked upon. This reference can be used in
* queries, but modification is not allowed.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_Channel
Tcl_GetTopChannel(chan)
Tcl_Channel chan;
{
Channel *chanPtr = (Channel *) chan; /* The actual channel. */
return (Tcl_Channel) chanPtr->state->topChanPtr;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetChannelInstanceData --
*
* Returns the client data associated with a channel.
*
* Results:
* The client data.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
ClientData
Tcl_GetChannelInstanceData(chan)
Tcl_Channel chan; /* Channel for which to return client data. */
{
Channel *chanPtr = (Channel *) chan; /* The actual channel. */
return chanPtr->instanceData;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetChannelType --
*
* Given a channel structure, returns the channel type structure.
*
* Results:
* Returns a pointer to the channel type structure.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_ChannelType *
Tcl_GetChannelType(chan)
Tcl_Channel chan; /* The channel to return type for. */
{
Channel *chanPtr = (Channel *) chan; /* The actual channel. */
return chanPtr->typePtr;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetChannelMode --
*
|
| ︙ | ︙ | |||
1886 1887 1888 1889 1890 1891 1892 |
*/
int
Tcl_GetChannelMode(chan)
Tcl_Channel chan; /* The channel for which the mode is
* being computed. */
{
| > | < | | 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 |
*/
int
Tcl_GetChannelMode(chan)
Tcl_Channel chan; /* The channel for which the mode is
* being computed. */
{
ChannelState *statePtr = ((Channel *) chan)->state;
/* State of actual channel. */
return (statePtr->flags & (TCL_READABLE | TCL_WRITABLE));
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetChannelName --
*
|
| ︙ | ︙ | |||
1914 1915 1916 1917 1918 1919 1920 |
*----------------------------------------------------------------------
*/
char *
Tcl_GetChannelName(chan)
Tcl_Channel chan; /* The channel for which to return the name. */
{
| | | | < < < < < < < < < < < < < < < < < < < < < < < < < < | 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 |
*----------------------------------------------------------------------
*/
char *
Tcl_GetChannelName(chan)
Tcl_Channel chan; /* The channel for which to return the name. */
{
ChannelState *statePtr; /* State of actual channel. */
statePtr = ((Channel *) chan)->state;
return statePtr->channelName;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetChannelHandle --
*
|
| ︙ | ︙ | |||
1973 1974 1975 1976 1977 1978 1979 |
int direction; /* TCL_WRITABLE or TCL_READABLE. */
ClientData *handlePtr; /* Where to store handle */
{
Channel *chanPtr; /* The actual channel. */
ClientData handle;
int result;
| | < < < < < < < < < < < < < < < < < < < < < < < < < < | 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 |
int direction; /* TCL_WRITABLE or TCL_READABLE. */
ClientData *handlePtr; /* Where to store handle */
{
Channel *chanPtr; /* The actual channel. */
ClientData handle;
int result;
chanPtr = ((Channel *) chan)->state->bottomChanPtr;
result = (chanPtr->typePtr->getHandleProc)(chanPtr->instanceData,
direction, &handle);
if (handlePtr) {
*handlePtr = handle;
}
return result;
}
/*
*---------------------------------------------------------------------------
*
* AllocChannelBuffer --
*
* A channel buffer has BUFFER_PADDING bytes extra at beginning to
|
| ︙ | ︙ | |||
2070 2071 2072 2073 2074 2075 2076 | * Side effects: * May free a buffer to the OS. * *---------------------------------------------------------------------- */ static void | | | | > > > > > > > > > > > | | | | | | | | | | | 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 |
* Side effects:
* May free a buffer to the OS.
*
*----------------------------------------------------------------------
*/
static void
RecycleBuffer(statePtr, bufPtr, mustDiscard)
ChannelState *statePtr; /* ChannelState in which to recycle buffers. */
ChannelBuffer *bufPtr; /* The buffer to recycle. */
int mustDiscard; /* If nonzero, free the buffer to the
* OS, always. */
{
/*
* Do we have to free the buffer to the OS?
*/
if (mustDiscard) {
ckfree((char *) bufPtr);
return;
}
/*
* Only save buffers which are at least as big as the requested
* buffersize for the channel. This is to honor dynamic changes
* of the buffersize made by the user.
*/
if ((bufPtr->bufLength - BUFFER_PADDING) < statePtr->bufSize) {
ckfree((char *) bufPtr);
return;
}
/*
* Only save buffers for the input queue if the channel is readable.
*/
if (statePtr->flags & TCL_READABLE) {
if (statePtr->inQueueHead == (ChannelBuffer *) NULL) {
statePtr->inQueueHead = bufPtr;
statePtr->inQueueTail = bufPtr;
goto keepit;
}
if (statePtr->saveInBufPtr == (ChannelBuffer *) NULL) {
statePtr->saveInBufPtr = bufPtr;
goto keepit;
}
}
/*
* Only save buffers for the output queue if the channel is writable.
*/
if (statePtr->flags & TCL_WRITABLE) {
if (statePtr->curOutPtr == (ChannelBuffer *) NULL) {
statePtr->curOutPtr = bufPtr;
goto keepit;
}
}
/*
* If we reached this code we return the buffer to the OS.
*/
ckfree((char *) bufPtr);
return;
keepit:
bufPtr->nextRemoved = BUFFER_PADDING;
bufPtr->nextAdded = BUFFER_PADDING;
bufPtr->nextPtr = (ChannelBuffer *) NULL;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
2142 2143 2144 2145 2146 2147 2148 | * Side effects: * Recycles buffers. * *---------------------------------------------------------------------- */ static void | | | | | | | | | | | | | | | 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 |
* Side effects:
* Recycles buffers.
*
*----------------------------------------------------------------------
*/
static void
DiscardOutputQueued(statePtr)
ChannelState *statePtr; /* ChannelState for which to discard output. */
{
ChannelBuffer *bufPtr;
while (statePtr->outQueueHead != (ChannelBuffer *) NULL) {
bufPtr = statePtr->outQueueHead;
statePtr->outQueueHead = bufPtr->nextPtr;
RecycleBuffer(statePtr, bufPtr, 0);
}
statePtr->outQueueHead = (ChannelBuffer *) NULL;
statePtr->outQueueTail = (ChannelBuffer *) NULL;
}
/*
*----------------------------------------------------------------------
*
* CheckForDeadChannel --
*
* This function checks is a given channel is Dead.
* (A channel that has been closed but not yet deallocated.)
*
* Results:
* True (1) if channel is Dead, False (0) if channel is Ok
*
* Side effects:
* None
*
*----------------------------------------------------------------------
*/
static int
CheckForDeadChannel(interp, statePtr)
Tcl_Interp *interp; /* For error reporting (can be NULL) */
ChannelState *statePtr; /* The channel state to check. */
{
if (statePtr->flags & CHANNEL_DEAD) {
Tcl_SetErrno(EINVAL);
if (interp) {
Tcl_AppendResult(interp,
"unable to access channel: invalid channel",
(char *) NULL);
}
return 1;
}
return 0;
}
/*
|
| ︙ | ︙ | |||
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 |
FlushChannel(interp, chanPtr, calledFromAsyncFlush)
Tcl_Interp *interp; /* For error reporting during close. */
Channel *chanPtr; /* The channel to flush on. */
int calledFromAsyncFlush; /* If nonzero then we are being
* called from an asynchronous
* flush callback. */
{
ChannelBuffer *bufPtr; /* Iterates over buffered output
* queue. */
int toWrite; /* Amount of output data in current
* buffer available to be written. */
int written; /* Amount of output data actually
* written in current round. */
int errorCode = 0; /* Stores POSIX error codes from
* channel driver operations. */
int wroteSome = 0; /* Set to one if any data was
* written to the driver. */
/*
* Prevent writing on a dead channel -- a channel that has been closed
* but not yet deallocated. This can occur if the exit handler for the
* channel deallocation runs before all channels are deregistered in
* all interpreters.
*/
| > > | | | | | | | | | | | | | | | | | | 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 |
FlushChannel(interp, chanPtr, calledFromAsyncFlush)
Tcl_Interp *interp; /* For error reporting during close. */
Channel *chanPtr; /* The channel to flush on. */
int calledFromAsyncFlush; /* If nonzero then we are being
* called from an asynchronous
* flush callback. */
{
ChannelState *statePtr = chanPtr->state;
/* State of the channel stack. */
ChannelBuffer *bufPtr; /* Iterates over buffered output
* queue. */
int toWrite; /* Amount of output data in current
* buffer available to be written. */
int written; /* Amount of output data actually
* written in current round. */
int errorCode = 0; /* Stores POSIX error codes from
* channel driver operations. */
int wroteSome = 0; /* Set to one if any data was
* written to the driver. */
/*
* Prevent writing on a dead channel -- a channel that has been closed
* but not yet deallocated. This can occur if the exit handler for the
* channel deallocation runs before all channels are deregistered in
* all interpreters.
*/
if (CheckForDeadChannel(interp, statePtr)) return -1;
/*
* Loop over the queued buffers and attempt to flush as
* much as possible of the queued output to the channel.
*/
while (1) {
/*
* If the queue is empty and there is a ready current buffer, OR if
* the current buffer is full, then move the current buffer to the
* queue.
*/
if (((statePtr->curOutPtr != (ChannelBuffer *) NULL) &&
(statePtr->curOutPtr->nextAdded == statePtr->curOutPtr->bufLength))
|| ((statePtr->flags & BUFFER_READY) &&
(statePtr->outQueueHead == (ChannelBuffer *) NULL))) {
statePtr->flags &= (~(BUFFER_READY));
statePtr->curOutPtr->nextPtr = (ChannelBuffer *) NULL;
if (statePtr->outQueueHead == (ChannelBuffer *) NULL) {
statePtr->outQueueHead = statePtr->curOutPtr;
} else {
statePtr->outQueueTail->nextPtr = statePtr->curOutPtr;
}
statePtr->outQueueTail = statePtr->curOutPtr;
statePtr->curOutPtr = (ChannelBuffer *) NULL;
}
bufPtr = statePtr->outQueueHead;
/*
* If we are not being called from an async flush and an async
* flush is active, we just return without producing any output.
*/
if ((!calledFromAsyncFlush) &&
(statePtr->flags & BG_FLUSH_SCHEDULED)) {
return 0;
}
/*
* If the output queue is still empty, break out of the while loop.
*/
if (bufPtr == (ChannelBuffer *) NULL) {
break; /* Out of the "while (1)". */
}
/*
* Produce the output on the channel.
*/
toWrite = bufPtr->nextAdded - bufPtr->nextRemoved;
written = (chanPtr->typePtr->outputProc) (chanPtr->instanceData,
(char *) bufPtr->buf + bufPtr->nextRemoved, toWrite,
&errorCode);
/*
* If the write failed completely attempt to start the asynchronous
* flush mechanism and break out of this loop - do not attempt to
* write any more output at this time.
*/
if (written < 0) {
|
| ︙ | ︙ | |||
2324 2325 2326 2327 2328 2329 2330 |
if ((errorCode == EWOULDBLOCK) || (errorCode == EAGAIN)) {
/*
* This used to check for CHANNEL_NONBLOCKING, and panic
* if the channel was blocking. However, it appears
* that setting stdin to -blocking 0 has some effect on
* the stdout when it's a tty channel (dup'ed underneath)
*/
| | | | | | | | | | | | | | | | | | | | | < > > > > > > > | > | | > > | | | | | | | | < < < < < < < < < < | | | < | | | | | | > > > > > > > | | > | > | | | > | | > | | | < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < | > > > > > > > > > > > > > > > > > > > | 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 |
if ((errorCode == EWOULDBLOCK) || (errorCode == EAGAIN)) {
/*
* This used to check for CHANNEL_NONBLOCKING, and panic
* if the channel was blocking. However, it appears
* that setting stdin to -blocking 0 has some effect on
* the stdout when it's a tty channel (dup'ed underneath)
*/
if (!(statePtr->flags & BG_FLUSH_SCHEDULED)) {
statePtr->flags |= BG_FLUSH_SCHEDULED;
UpdateInterest(chanPtr);
}
errorCode = 0;
break;
}
/*
* Decide whether to report the error upwards or defer it.
*/
if (calledFromAsyncFlush) {
if (statePtr->unreportedError == 0) {
statePtr->unreportedError = errorCode;
}
} else {
Tcl_SetErrno(errorCode);
if (interp != NULL) {
Tcl_SetResult(interp,
Tcl_PosixError(interp), TCL_VOLATILE);
}
}
/*
* When we get an error we throw away all the output
* currently queued.
*/
DiscardOutputQueued(statePtr);
continue;
} else {
wroteSome = 1;
}
bufPtr->nextRemoved += written;
/*
* If this buffer is now empty, recycle it.
*/
if (bufPtr->nextRemoved == bufPtr->nextAdded) {
statePtr->outQueueHead = bufPtr->nextPtr;
if (statePtr->outQueueHead == (ChannelBuffer *) NULL) {
statePtr->outQueueTail = (ChannelBuffer *) NULL;
}
RecycleBuffer(statePtr, bufPtr, 0);
}
} /* Closes "while (1)". */
/*
* If we wrote some data while flushing in the background, we are done.
* We can't finish the background flush until we run out of data and
* the channel becomes writable again. This ensures that all of the
* pending data has been flushed at the system level.
*/
if (statePtr->flags & BG_FLUSH_SCHEDULED) {
if (wroteSome) {
return errorCode;
} else if (statePtr->outQueueHead == (ChannelBuffer *) NULL) {
statePtr->flags &= (~(BG_FLUSH_SCHEDULED));
(chanPtr->typePtr->watchProc)(chanPtr->instanceData,
statePtr->interestMask);
}
}
/*
* If the channel is flagged as closed, delete it when the refCount
* drops to zero, the output queue is empty and there is no output
* in the current output buffer.
*/
if ((statePtr->flags & CHANNEL_CLOSED) && (statePtr->refCount <= 0) &&
(statePtr->outQueueHead == (ChannelBuffer *) NULL) &&
((statePtr->curOutPtr == (ChannelBuffer *) NULL) ||
(statePtr->curOutPtr->nextAdded ==
statePtr->curOutPtr->nextRemoved))) {
return CloseChannel(interp, chanPtr, errorCode);
}
return errorCode;
}
/*
*----------------------------------------------------------------------
*
* CloseChannel --
*
* Utility procedure to close a channel and free associated resources.
*
* If the channel was stacked, then the it will copy the necessary
* elements of the NEXT channel into the TOP channel, in essence
* unstacking the channel. The NEXT channel will then be freed.
*
* If the channel was not stacked, then we will free all the bits
* for the TOP channel, including the data structure itself.
*
* Results:
* 1 if the channel was stacked, 0 otherwise.
*
* Side effects:
* May close the actual channel; may free memory.
* May change the value of errno.
*
*----------------------------------------------------------------------
*/
static int
CloseChannel(interp, chanPtr, errorCode)
Tcl_Interp *interp; /* For error reporting. */
Channel *chanPtr; /* The channel to close. */
int errorCode; /* Status of operation so far. */
{
int result = 0; /* Of calling driver close
* operation. */
ChannelState *prevCSPtr; /* Preceding channel state in list of
* all states - used to splice a
* channel out of the list on close. */
ChannelState *statePtr; /* state of the channel stack. */
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
if (chanPtr == NULL) {
return result;
}
statePtr = chanPtr->state;
/*
* No more input can be consumed so discard any leftover input.
*/
DiscardInputQueued(statePtr, 1);
/*
* Discard a leftover buffer in the current output buffer field.
*/
if (statePtr->curOutPtr != (ChannelBuffer *) NULL) {
ckfree((char *) statePtr->curOutPtr);
statePtr->curOutPtr = (ChannelBuffer *) NULL;
}
/*
* The caller guarantees that there are no more buffers
* queued for output.
*/
if (statePtr->outQueueHead != (ChannelBuffer *) NULL) {
panic("TclFlush, closed channel: queued output left");
}
/*
* If the EOF character is set in the channel, append that to the
* output device.
*/
if ((statePtr->outEofChar != 0) && (statePtr->flags & TCL_WRITABLE)) {
int dummy;
char c;
c = (char) statePtr->outEofChar;
(chanPtr->typePtr->outputProc) (chanPtr->instanceData, &c, 1, &dummy);
}
/*
* Splice this channel out of the list of all channels.
*/
if (tsdPtr->firstCSPtr && (statePtr == tsdPtr->firstCSPtr)) {
tsdPtr->firstCSPtr = statePtr->nextCSPtr;
} else {
for (prevCSPtr = tsdPtr->firstCSPtr;
prevCSPtr && (prevCSPtr->nextCSPtr != statePtr);
prevCSPtr = prevCSPtr->nextCSPtr) {
/* Empty loop body. */
}
if (prevCSPtr == (ChannelState *) NULL) {
panic("FlushChannel: damaged channel list");
}
prevCSPtr->nextCSPtr = statePtr->nextCSPtr;
}
/*
* Close and free the channel driver state.
*/
if (chanPtr->typePtr->closeProc != TCL_CLOSE2PROC) {
result = (chanPtr->typePtr->closeProc)(chanPtr->instanceData, interp);
} else {
result = (chanPtr->typePtr->close2Proc)(chanPtr->instanceData, interp,
0);
}
/*
* Some resources can be cleared only if the bottom channel
* in a stack is closed. All the other channels in the stack
* are not allowed to remove.
*/
if (chanPtr == statePtr->bottomChanPtr) {
if (statePtr->channelName != (char *) NULL) {
ckfree(statePtr->channelName);
statePtr->channelName = NULL;
}
Tcl_FreeEncoding(statePtr->encoding);
if (statePtr->outputStage != NULL) {
ckfree((char *) statePtr->outputStage);
statePtr->outputStage = (char *) NULL;
}
}
/*
* If we are being called synchronously, report either
* any latent error on the channel or the current error.
*/
if (statePtr->unreportedError != 0) {
errorCode = statePtr->unreportedError;
}
if (errorCode == 0) {
errorCode = result;
if (errorCode != 0) {
Tcl_SetErrno(errorCode);
}
}
/*
* Cancel any outstanding timer.
*/
Tcl_DeleteTimerHandler(statePtr->timer);
/*
* Mark the channel as deleted by clearing the type structure.
*/
if (chanPtr->downChanPtr != (Channel *) NULL) {
Channel *downChanPtr = chanPtr->downChanPtr;
statePtr->nextCSPtr = tsdPtr->firstCSPtr;
tsdPtr->firstCSPtr = statePtr;
statePtr->topChanPtr = downChanPtr;
downChanPtr->upChanPtr = (Channel *) NULL;
chanPtr->typePtr = NULL;
Tcl_EventuallyFree((ClientData) chanPtr, TCL_DYNAMIC);
return Tcl_Close(interp, (Tcl_Channel) downChanPtr);
}
/*
* There is only the TOP Channel, so we free the remaining
* pointers we have and then ourselves.
*/
chanPtr->typePtr = NULL;
Tcl_EventuallyFree((ClientData) statePtr, TCL_DYNAMIC);
Tcl_EventuallyFree((ClientData) chanPtr, TCL_DYNAMIC);
return errorCode;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 |
* interpreter. */
{
ChannelHandler *chPtr, *chNext; /* Iterate over channel handlers. */
CloseCallback *cbPtr; /* Iterate over close callbacks
* for this channel. */
EventScriptRecord *ePtr, *eNextPtr; /* Iterate over eventscript records. */
Channel *chanPtr; /* The real IO channel. */
int result; /* Of calling FlushChannel. */
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
NextChannelHandler *nhPtr;
if (chan == (Tcl_Channel) NULL) {
return TCL_OK;
}
| > | > > > > | > > > | | | | | | | | | < | | | | | | | | | | | | | | 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 |
* interpreter. */
{
ChannelHandler *chPtr, *chNext; /* Iterate over channel handlers. */
CloseCallback *cbPtr; /* Iterate over close callbacks
* for this channel. */
EventScriptRecord *ePtr, *eNextPtr; /* Iterate over eventscript records. */
Channel *chanPtr; /* The real IO channel. */
ChannelState *statePtr; /* State of real IO channel. */
int result; /* Of calling FlushChannel. */
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
NextChannelHandler *nhPtr;
if (chan == (Tcl_Channel) NULL) {
return TCL_OK;
}
/*
* Perform special handling for standard channels being closed. If the
* refCount is now 1 it means that the last reference to the standard
* channel is being explicitly closed, so bump the refCount down
* artificially to 0. This will ensure that the channel is actually
* closed, below. Also set the static pointer to NULL for the channel.
*/
CheckForStdChannelsBeingClosed(chan);
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = (Channel *) chan;
statePtr = chanPtr->state;
chanPtr = statePtr->topChanPtr;
if (statePtr->refCount > 0) {
panic("called Tcl_Close on channel with refCount > 0");
}
/*
* Remove any references to channel handlers for this channel that
* may be about to be invoked.
*/
for (nhPtr = tsdPtr->nestedHandlerPtr;
nhPtr != (NextChannelHandler *) NULL;
nhPtr = nhPtr->nestedHandlerPtr) {
if (nhPtr->nextHandlerPtr &&
(nhPtr->nextHandlerPtr->chanPtr == chanPtr)) {
nhPtr->nextHandlerPtr = NULL;
}
}
/*
* Remove all the channel handler records attached to the channel
* itself.
*/
for (chPtr = statePtr->chPtr;
chPtr != (ChannelHandler *) NULL;
chPtr = chNext) {
chNext = chPtr->nextPtr;
ckfree((char *) chPtr);
}
statePtr->chPtr = (ChannelHandler *) NULL;
/*
* Cancel any pending copy operation.
*/
StopCopy(statePtr->csPtr);
/*
* Must set the interest mask now to 0, otherwise infinite loops
* will occur if Tcl_DoOneEvent is called before the channel is
* finally deleted in FlushChannel. This can happen if the channel
* has a background flush active.
*/
statePtr->interestMask = 0;
/*
* Remove any EventScript records for this channel.
*/
for (ePtr = statePtr->scriptRecordPtr;
ePtr != (EventScriptRecord *) NULL;
ePtr = eNextPtr) {
eNextPtr = ePtr->nextPtr;
Tcl_DecrRefCount(ePtr->scriptPtr);
ckfree((char *) ePtr);
}
statePtr->scriptRecordPtr = (EventScriptRecord *) NULL;
/*
* Invoke the registered close callbacks and delete their records.
*/
while (statePtr->closeCbPtr != (CloseCallback *) NULL) {
cbPtr = statePtr->closeCbPtr;
statePtr->closeCbPtr = cbPtr->nextPtr;
(cbPtr->proc) (cbPtr->clientData);
ckfree((char *) cbPtr);
}
/*
* Ensure that the last output buffer will be flushed.
*/
if ((statePtr->curOutPtr != (ChannelBuffer *) NULL) &&
(statePtr->curOutPtr->nextAdded > statePtr->curOutPtr->nextRemoved)) {
statePtr->flags |= BUFFER_READY;
}
/*
* If this channel supports it, close the read side, since we don't need it
* anymore and this will help avoid deadlocks on some channel types.
*/
if (chanPtr->typePtr->closeProc == TCL_CLOSE2PROC) {
result = (chanPtr->typePtr->close2Proc)(chanPtr->instanceData, interp,
TCL_CLOSE_READ);
} else {
result = 0;
}
/*
* The call to FlushChannel will flush any queued output and invoke
* the close function of the channel driver, or it will set up the
* channel to be flushed and closed asynchronously.
*/
statePtr->flags |= CHANNEL_CLOSED;
if ((FlushChannel(interp, chanPtr, 0) != 0) || (result != 0)) {
return TCL_ERROR;
}
return TCL_OK;
}
/*
|
| ︙ | ︙ | |||
2781 2782 2783 2784 2785 2786 2787 2788 2789 |
int
Tcl_Write(chan, src, srcLen)
Tcl_Channel chan; /* The channel to buffer output for. */
char *src; /* Data to queue in output buffer. */
int srcLen; /* Length of data in bytes, or < 0 for
* strlen(). */
{
Channel *chanPtr;
| > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
int
Tcl_Write(chan, src, srcLen)
Tcl_Channel chan; /* The channel to buffer output for. */
char *src; /* Data to queue in output buffer. */
int srcLen; /* Length of data in bytes, or < 0 for
* strlen(). */
{
/*
* Always use the topmost channel of the stack
*/
Channel *chanPtr;
ChannelState *statePtr; /* state info for channel */
statePtr = ((Channel *) chan)->state;
chanPtr = statePtr->topChanPtr;
if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) {
return -1;
}
if (srcLen < 0) {
srcLen = strlen(src);
}
return DoWrite(chanPtr, src, srcLen);
}
/*
*----------------------------------------------------------------------
*
* Tcl_WriteRaw --
*
* Puts a sequence of bytes into an output buffer, may queue the
* buffer for output if it gets full, and also remembers whether the
* current buffer is ready e.g. if it contains a newline and we are in
* line buffering mode.
*
* Results:
* The number of bytes written or -1 in case of error. If -1,
* Tcl_GetErrno will return the error code.
*
* Side effects:
* May buffer up output and may cause output to be produced on the
* channel.
*
*----------------------------------------------------------------------
*/
int
Tcl_WriteRaw(chan, src, srcLen)
Tcl_Channel chan; /* The channel to buffer output for. */
char *src; /* Data to queue in output buffer. */
int srcLen; /* Length of data in bytes, or < 0 for
* strlen(). */
{
Channel *chanPtr = ((Channel *) chan);
ChannelState *statePtr = chanPtr->state; /* state info for channel */
int errorCode, written;
if (CheckChannelErrors(statePtr, TCL_WRITABLE | CHANNEL_RAW_MODE) != 0) {
return -1;
}
if (srcLen < 0) {
srcLen = strlen(src);
}
/*
* Go immediately to the driver, do all the error handling by ourselves.
* The code was stolen from 'FlushChannel'.
*/
written = (chanPtr->typePtr->outputProc) (chanPtr->instanceData,
src, srcLen, &errorCode);
if (written < 0) {
Tcl_SetErrno(errorCode);
}
return written;
}
/*
*---------------------------------------------------------------------------
*
* Tcl_WriteChars --
*
* Takes a sequence of UTF-8 characters and converts them for output
|
| ︙ | ︙ | |||
2822 2823 2824 2825 2826 2827 2828 2829 2830 |
int
Tcl_WriteChars(chan, src, len)
Tcl_Channel chan; /* The channel to buffer output for. */
CONST char *src; /* UTF-8 characters to queue in output buffer. */
int len; /* Length of string in bytes, or < 0 for
* strlen(). */
{
Channel *chanPtr;
| > > > > | > > | | | 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 |
int
Tcl_WriteChars(chan, src, len)
Tcl_Channel chan; /* The channel to buffer output for. */
CONST char *src; /* UTF-8 characters to queue in output buffer. */
int len; /* Length of string in bytes, or < 0 for
* strlen(). */
{
/*
* Always use the topmost channel of the stack
*/
Channel *chanPtr;
ChannelState *statePtr; /* state info for channel */
statePtr = ((Channel *) chan)->state;
chanPtr = statePtr->topChanPtr;
if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) {
return -1;
}
if (len < 0) {
len = strlen(src);
}
if (statePtr->encoding == NULL) {
/*
* Inefficient way to convert UTF-8 to byte-array, but the
* code parallels the way it is done for objects.
*/
Tcl_Obj *objPtr;
int result;
|
| ︙ | ︙ | |||
2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 |
*/
int
Tcl_WriteObj(chan, objPtr)
Tcl_Channel chan; /* The channel to buffer output for. */
Tcl_Obj *objPtr; /* The object to write. */
{
Channel *chanPtr;
char *src;
int srcLen;
| > > > > | > > | | | 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 |
*/
int
Tcl_WriteObj(chan, objPtr)
Tcl_Channel chan; /* The channel to buffer output for. */
Tcl_Obj *objPtr; /* The object to write. */
{
/*
* Always use the topmost channel of the stack
*/
Channel *chanPtr;
ChannelState *statePtr; /* state info for channel */
char *src;
int srcLen;
statePtr = ((Channel *) chan)->state;
chanPtr = statePtr->topChanPtr;
if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) {
return -1;
}
if (statePtr->encoding == NULL) {
src = (char *) Tcl_GetByteArrayFromObj(objPtr, &srcLen);
return WriteBytes(chanPtr, src, srcLen);
} else {
src = Tcl_GetStringFromObj(objPtr, &srcLen);
return WriteChars(chanPtr, src, srcLen);
}
}
|
| ︙ | ︙ | |||
2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 |
static int
WriteBytes(chanPtr, src, srcLen)
Channel *chanPtr; /* The channel to buffer output for. */
CONST char *src; /* Bytes to write. */
int srcLen; /* Number of bytes to write. */
{
ChannelBuffer *bufPtr;
char *dst;
int dstLen, dstMax, sawLF, savedLF, total, toWrite;
total = 0;
sawLF = 0;
savedLF = 0;
/*
* Loop over all bytes in src, storing them in output buffer with
* proper EOL translation.
*/
while (srcLen + savedLF > 0) {
| > | | | | 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 |
static int
WriteBytes(chanPtr, src, srcLen)
Channel *chanPtr; /* The channel to buffer output for. */
CONST char *src; /* Bytes to write. */
int srcLen; /* Number of bytes to write. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
char *dst;
int dstLen, dstMax, sawLF, savedLF, total, toWrite;
total = 0;
sawLF = 0;
savedLF = 0;
/*
* Loop over all bytes in src, storing them in output buffer with
* proper EOL translation.
*/
while (srcLen + savedLF > 0) {
bufPtr = statePtr->curOutPtr;
if (bufPtr == NULL) {
bufPtr = AllocChannelBuffer(statePtr->bufSize);
statePtr->curOutPtr = bufPtr;
}
dst = bufPtr->buf + bufPtr->nextAdded;
dstMax = bufPtr->bufLength - bufPtr->nextAdded;
dstLen = dstMax;
toWrite = dstLen;
if (toWrite > srcLen) {
|
| ︙ | ︙ | |||
2962 2963 2964 2965 2966 2967 2968 | * line-based, we will need to flush it. */ *dst++ = '\n'; dstLen--; sawLF++; } | | | 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 |
* line-based, we will need to flush it.
*/
*dst++ = '\n';
dstLen--;
sawLF++;
}
sawLF += TranslateOutputEOL(statePtr, dst, src, &dstLen, &toWrite);
dstLen += savedLF;
savedLF = 0;
if (dstLen > dstMax) {
savedLF = 1;
dstLen = dstMax;
}
|
| ︙ | ︙ | |||
3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 |
static int
WriteChars(chanPtr, src, srcLen)
Channel *chanPtr; /* The channel to buffer output for. */
CONST char *src; /* UTF-8 string to write. */
int srcLen; /* Length of UTF-8 string in bytes. */
{
ChannelBuffer *bufPtr;
char *dst, *stage;
int saved, savedLF, sawLF, total, toWrite, flags;
int dstWrote, dstLen, stageLen, stageMax, stageRead;
Tcl_Encoding encoding;
char safe[BUFFER_PADDING];
total = 0;
sawLF = 0;
savedLF = 0;
saved = 0;
| > | | | | | | | | | > > > > > > > > > > > > > > > > > > | 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 |
static int
WriteChars(chanPtr, src, srcLen)
Channel *chanPtr; /* The channel to buffer output for. */
CONST char *src; /* UTF-8 string to write. */
int srcLen; /* Length of UTF-8 string in bytes. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
char *dst, *stage;
int saved, savedLF, sawLF, total, toWrite, flags;
int dstWrote, dstLen, stageLen, stageMax, stageRead;
Tcl_Encoding encoding;
char safe[BUFFER_PADDING];
total = 0;
sawLF = 0;
savedLF = 0;
saved = 0;
encoding = statePtr->encoding;
/*
* Loop over all UTF-8 characters in src, storing them in staging buffer
* with proper EOL translation.
*/
while (srcLen + savedLF > 0) {
stage = statePtr->outputStage;
stageMax = statePtr->bufSize;
stageLen = stageMax;
toWrite = stageLen;
if (toWrite > srcLen) {
toWrite = srcLen;
}
if (savedLF) {
/*
* A '\n' was left over from last call to TranslateOutputEOL()
* and we need to store it in the staging buffer. If the
* channel is line-based, we will need to flush the output
* buffer (after translating the staging buffer).
*/
*stage++ = '\n';
stageLen--;
sawLF++;
}
sawLF += TranslateOutputEOL(statePtr, stage, src, &stageLen, &toWrite);
stage -= savedLF;
stageLen += savedLF;
savedLF = 0;
if (stageLen > stageMax) {
savedLF = 1;
stageLen = stageMax;
}
src += toWrite;
srcLen -= toWrite;
flags = statePtr->outputEncodingFlags;
if (srcLen == 0) {
flags |= TCL_ENCODING_END;
}
/*
* Loop over all UTF-8 characters in staging buffer, converting them
* to external encoding, storing them in output buffer.
*/
while (stageLen + saved > 0) {
bufPtr = statePtr->curOutPtr;
if (bufPtr == NULL) {
bufPtr = AllocChannelBuffer(statePtr->bufSize);
statePtr->curOutPtr = bufPtr;
}
dst = bufPtr->buf + bufPtr->nextAdded;
dstLen = bufPtr->bufLength - bufPtr->nextAdded;
if (saved != 0) {
/*
* Here's some translated bytes left over from the last
* buffer that we need to stick at the beginning of this
* buffer.
*/
memcpy((VOID *) dst, (VOID *) safe, (size_t) saved);
bufPtr->nextAdded += saved;
dst += saved;
dstLen -= saved;
saved = 0;
}
Tcl_UtfToExternal(NULL, encoding, stage, stageLen, flags,
&statePtr->outputEncodingState, dst,
dstLen + BUFFER_PADDING, &stageRead, &dstWrote, NULL);
/* Fix for SF #506297, reported by Martin Forssen <ruric@users.sourceforge.net>.
*
* The encoding chosen in the script exposing the bug
* writes out three intro characters when
* TCL_ENCODING_START is set, but does not consume any
* input as TCL_ENCODING_END is cleared. As some output
* was generated the enclosing loop calls UtfToExternal
* again, again with START set. Three more characters in
* the out and still no use of input ... To break this
* infinite loop we remove TCL_ENCODING_START from the set
* of flags after the first call (no condition is
* required, the later calls remove an unset flag, which
* is a no-op). This causes the subsequent calls to
* UtfToExternal to consume and convert the actual input.
*/
flags &= ~TCL_ENCODING_START;
if (stageRead + dstWrote == 0) {
/*
* We have an incomplete UTF-8 character at the end of the
* staging buffer. It will get moved to the beginning of the
* staging buffer followed by more bytes from src.
*/
|
| ︙ | ︙ | |||
3181 3182 3183 3184 3185 3186 3187 | * buffer), the number of bytes consumed from the source buffer * will be less than the number of bytes stored in the output buffer. * *--------------------------------------------------------------------------- */ static int | | | | | 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 |
* buffer), the number of bytes consumed from the source buffer
* will be less than the number of bytes stored in the output buffer.
*
*---------------------------------------------------------------------------
*/
static int
TranslateOutputEOL(statePtr, dst, src, dstLenPtr, srcLenPtr)
ChannelState *statePtr; /* Channel being read, for translation and
* buffering modes. */
char *dst; /* Output buffer filled with UTF-8 chars by
* applying appropriate EOL translation to
* source characters. */
CONST char *src; /* Source UTF-8 characters. */
int *dstLenPtr; /* On entry, the maximum length of output
* buffer in bytes. On exit, the number of
* bytes actually used in output buffer. */
int *srcLenPtr; /* On entry, the length of source buffer.
* On exit, the number of bytes read from
* the source buffer. */
{
char *dstEnd;
int srcLen, newlineFound;
newlineFound = 0;
srcLen = *srcLenPtr;
switch (statePtr->outputTranslation) {
case TCL_TRANSLATE_LF: {
for (dstEnd = dst + srcLen; dst < dstEnd; ) {
if (*src == '\n') {
newlineFound = 1;
}
*dst++ = *src++;
}
|
| ︙ | ︙ | |||
3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 |
static int
CheckFlush(chanPtr, bufPtr, newlineFlag)
Channel *chanPtr; /* Channel being read, for buffering mode. */
ChannelBuffer *bufPtr; /* Channel buffer to possibly flush. */
int newlineFlag; /* Non-zero if a the channel buffer
* contains a newline. */
{
/*
* The current buffer is ready for output:
* 1. if it is full.
* 2. if it contains a newline and this channel is line-buffered.
* 3. if it contains any output and this channel is unbuffered.
*/
| > | | | | | | | | 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 |
static int
CheckFlush(chanPtr, bufPtr, newlineFlag)
Channel *chanPtr; /* Channel being read, for buffering mode. */
ChannelBuffer *bufPtr; /* Channel buffer to possibly flush. */
int newlineFlag; /* Non-zero if a the channel buffer
* contains a newline. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
/*
* The current buffer is ready for output:
* 1. if it is full.
* 2. if it contains a newline and this channel is line-buffered.
* 3. if it contains any output and this channel is unbuffered.
*/
if ((statePtr->flags & BUFFER_READY) == 0) {
if (bufPtr->nextAdded == bufPtr->bufLength) {
statePtr->flags |= BUFFER_READY;
} else if (statePtr->flags & CHANNEL_LINEBUFFERED) {
if (newlineFlag != 0) {
statePtr->flags |= BUFFER_READY;
}
} else if (statePtr->flags & CHANNEL_UNBUFFERED) {
statePtr->flags |= BUFFER_READY;
}
}
if (statePtr->flags & BUFFER_READY) {
if (FlushChannel(NULL, chanPtr, 0) != 0) {
return -1;
}
}
return 0;
}
|
| ︙ | ︙ | |||
3392 3393 3394 3395 3396 3397 3398 |
int
Tcl_GetsObj(chan, objPtr)
Tcl_Channel chan; /* Channel from which to read. */
Tcl_Obj *objPtr; /* The line read will be appended to this
* object as UTF-8 characters. */
{
GetsState gs;
| | | > > > > > | > | | | | | | 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 |
int
Tcl_GetsObj(chan, objPtr)
Tcl_Channel chan; /* Channel from which to read. */
Tcl_Obj *objPtr; /* The line read will be appended to this
* object as UTF-8 characters. */
{
GetsState gs;
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
int inEofChar, skip, copiedTotal;
Tcl_Encoding encoding;
char *dst, *dstEnd, *eol, *eof;
Tcl_EncodingState oldState;
int oldLength, oldFlags, oldRemoved;
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) {
copiedTotal = -1;
goto done;
}
bufPtr = statePtr->inQueueHead;
encoding = statePtr->encoding;
/*
* Preserved so we can restore the channel's state in case we don't
* find a newline in the available input.
*/
Tcl_GetStringFromObj(objPtr, &oldLength);
oldFlags = statePtr->inputEncodingFlags;
oldState = statePtr->inputEncodingState;
oldRemoved = BUFFER_PADDING;
if (bufPtr != NULL) {
oldRemoved = bufPtr->nextRemoved;
}
/*
* If there is no encoding, use "iso8859-1" -- Tcl_GetsObj() doesn't
|
| ︙ | ︙ | |||
3452 3453 3454 3455 3456 3457 3458 |
gs.totalChars = 0;
dst = objPtr->bytes + oldLength;
dstEnd = dst;
skip = 0;
eof = NULL;
| | | 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 |
gs.totalChars = 0;
dst = objPtr->bytes + oldLength;
dstEnd = dst;
skip = 0;
eof = NULL;
inEofChar = statePtr->inEofChar;
while (1) {
if (dst >= dstEnd) {
if (FilterInputBytes(chanPtr, &gs) != 0) {
goto restore;
}
dstEnd = dst + gs.bytesWrote;
|
| ︙ | ︙ | |||
3483 3484 3485 3486 3487 3488 3489 | /* * On EOL, leave current file position pointing after the EOL, but * don't store the EOL in the output string. */ eol = dst; | | | 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 |
/*
* On EOL, leave current file position pointing after the EOL, but
* don't store the EOL in the output string.
*/
eol = dst;
switch (statePtr->inputTranslation) {
case TCL_TRANSLATE_LF: {
for (eol = dst; eol < dstEnd; eol++) {
if (*eol == '\n') {
skip = 1;
goto goteol;
}
}
|
| ︙ | ︙ | |||
3532 3533 3534 3535 3536 3537 3538 |
}
}
}
break;
}
case TCL_TRANSLATE_AUTO: {
skip = 1;
| | | | | 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 |
}
}
}
break;
}
case TCL_TRANSLATE_AUTO: {
skip = 1;
if (statePtr->flags & INPUT_SAW_CR) {
statePtr->flags &= ~INPUT_SAW_CR;
if (*eol == '\n') {
/*
* Skip the raw bytes that make up the '\n'.
*/
char tmp[1 + TCL_UTF_MAX];
int rawRead;
bufPtr = gs.bufPtr;
Tcl_ExternalToUtf(NULL, gs.encoding,
bufPtr->buf + bufPtr->nextRemoved,
gs.rawRead, statePtr->inputEncodingFlags,
&gs.state, tmp, 1 + TCL_UTF_MAX, &rawRead,
NULL, NULL);
bufPtr->nextRemoved += rawRead;
gs.rawRead -= rawRead;
gs.bytesWrote--;
gs.charsWrote--;
memmove(dst, dst + 1, (size_t) (dstEnd - dst));
|
| ︙ | ︙ | |||
3573 3574 3575 3576 3577 3578 3579 |
offset = eol - objPtr->bytes;
dst = dstEnd;
PeekAhead(chanPtr, &dstEnd, &gs);
eol = objPtr->bytes + offset;
if (eol >= dstEnd) {
eol--;
| | | 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 |
offset = eol - objPtr->bytes;
dst = dstEnd;
PeekAhead(chanPtr, &dstEnd, &gs);
eol = objPtr->bytes + offset;
if (eol >= dstEnd) {
eol--;
statePtr->flags |= INPUT_SAW_CR;
goto goteol;
}
}
if (*eol == '\n') {
skip++;
}
eol--;
|
| ︙ | ︙ | |||
3596 3597 3598 3599 3600 3601 3602 | /* * EOF character was seen. On EOF, leave current file position * pointing at the EOF character, but don't store the EOF * character in the output string. */ dstEnd = eof; | | | | | 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 |
/*
* EOF character was seen. On EOF, leave current file position
* pointing at the EOF character, but don't store the EOF
* character in the output string.
*/
dstEnd = eof;
statePtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF);
statePtr->inputEncodingFlags |= TCL_ENCODING_END;
}
if (statePtr->flags & CHANNEL_EOF) {
skip = 0;
eol = dstEnd;
if (eol == objPtr->bytes) {
/*
* If we didn't produce any bytes before encountering EOF,
* caller needs to see -1.
*/
|
| ︙ | ︙ | |||
3628 3629 3630 3631 3632 3633 3634 |
* the number of UTF-8 characters we want, plus how many raw bytes
* correspond to the character(s) making up EOL (if any), so we can
* remove the correct number of bytes from the channel buffer.
*/
goteol:
bufPtr = gs.bufPtr;
| | | | | | | | | | 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 |
* the number of UTF-8 characters we want, plus how many raw bytes
* correspond to the character(s) making up EOL (if any), so we can
* remove the correct number of bytes from the channel buffer.
*/
goteol:
bufPtr = gs.bufPtr;
statePtr->inputEncodingState = gs.state;
Tcl_ExternalToUtf(NULL, gs.encoding, bufPtr->buf + bufPtr->nextRemoved,
gs.rawRead, statePtr->inputEncodingFlags,
&statePtr->inputEncodingState, dst, eol - dst + skip + TCL_UTF_MAX,
&gs.rawRead, NULL, &gs.charsWrote);
bufPtr->nextRemoved += gs.rawRead;
/*
* Recycle all the emptied buffers.
*/
Tcl_SetObjLength(objPtr, eol - objPtr->bytes);
CommonGetsCleanup(chanPtr, encoding);
statePtr->flags &= ~CHANNEL_BLOCKED;
copiedTotal = gs.totalChars + gs.charsWrote - skip;
goto done;
/*
* Couldn't get a complete line. This only happens if we get a error
* reading from the channel or we are non-blocking and there wasn't
* an EOL or EOF in the data available.
*/
restore:
bufPtr = statePtr->inQueueHead;
bufPtr->nextRemoved = oldRemoved;
for (bufPtr = bufPtr->nextPtr; bufPtr != NULL; bufPtr = bufPtr->nextPtr) {
bufPtr->nextRemoved = BUFFER_PADDING;
}
CommonGetsCleanup(chanPtr, encoding);
statePtr->inputEncodingState = oldState;
statePtr->inputEncodingFlags = oldFlags;
Tcl_SetObjLength(objPtr, oldLength);
/*
* We didn't get a complete line so we need to indicate to UpdateInterest
* that the gets blocked. It will wait for more data instead of firing
* a timer, avoiding a busy wait. This is where we are assuming that the
* next operation is a gets. No more file events will be delivered on
* this channel until new data arrives or some operation is performed
* on the channel (e.g. gets, read, fconfigure) that changes the blocking
* state. Note that this means a file event will not be delivered even
* though a read would be able to consume the buffered data.
*/
statePtr->flags |= CHANNEL_NEED_MORE_DATA;
copiedTotal = -1;
done:
/*
* Update the notifier state so we don't block while there is still
* data in the buffers.
*/
|
| ︙ | ︙ | |||
3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 |
*/
static int
FilterInputBytes(chanPtr, gsPtr)
Channel *chanPtr; /* Channel to read. */
GetsState *gsPtr; /* Current state of gets operation. */
{
ChannelBuffer *bufPtr;
char *raw, *rawStart, *rawEnd;
char *dst;
int offset, toRead, dstNeeded, spaceLeft, result, rawLen, length;
Tcl_Obj *objPtr;
| > | | 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 |
*/
static int
FilterInputBytes(chanPtr, gsPtr)
Channel *chanPtr; /* Channel to read. */
GetsState *gsPtr; /* Current state of gets operation. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
char *raw, *rawStart, *rawEnd;
char *dst;
int offset, toRead, dstNeeded, spaceLeft, result, rawLen, length;
Tcl_Obj *objPtr;
#define ENCODING_LINESIZE 50 /* Lower bound on how many bytes to convert
* at a time. Since we don't know a priori
* how many bytes of storage this many source
* bytes will use, we actually need at least
* ENCODING_LINESIZE * TCL_MAX_UTF bytes of
* room. */
objPtr = gsPtr->objPtr;
|
| ︙ | ︙ | |||
3753 3754 3755 3756 3757 3758 3759 | /* * All channel buffers were exhausted and the caller still hasn't * seen EOL. Need to read more bytes from the channel device. * Side effect is to allocate another channel buffer. */ read: | | | | | | 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 |
/*
* All channel buffers were exhausted and the caller still hasn't
* seen EOL. Need to read more bytes from the channel device.
* Side effect is to allocate another channel buffer.
*/
read:
if (statePtr->flags & CHANNEL_BLOCKED) {
if (statePtr->flags & CHANNEL_NONBLOCKING) {
gsPtr->charsWrote = 0;
gsPtr->rawRead = 0;
return -1;
}
statePtr->flags &= ~CHANNEL_BLOCKED;
}
if (GetInput(chanPtr) != 0) {
gsPtr->charsWrote = 0;
gsPtr->rawRead = 0;
return -1;
}
bufPtr = statePtr->inQueueTail;
gsPtr->bufPtr = bufPtr;
}
/*
* Convert some of the bytes from the channel buffer to UTF-8. Space in
* objPtr's string rep is used to hold the UTF-8 characters. Grow the
* string rep if we need more space.
|
| ︙ | ︙ | |||
3800 3801 3802 3803 3804 3805 3806 |
}
length += TCL_UTF_MAX + 1;
Tcl_SetObjLength(objPtr, length);
spaceLeft = length - offset;
dst = objPtr->bytes + offset;
*gsPtr->dstPtr = dst;
}
| | | > > > > > > > | | | | | 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 |
}
length += TCL_UTF_MAX + 1;
Tcl_SetObjLength(objPtr, length);
spaceLeft = length - offset;
dst = objPtr->bytes + offset;
*gsPtr->dstPtr = dst;
}
gsPtr->state = statePtr->inputEncodingState;
result = Tcl_ExternalToUtf(NULL, gsPtr->encoding, raw, rawLen,
statePtr->inputEncodingFlags, &statePtr->inputEncodingState,
dst, spaceLeft, &gsPtr->rawRead, &gsPtr->bytesWrote,
&gsPtr->charsWrote);
/*
* Make sure that if we go through 'gets', that we reset the
* TCL_ENCODING_START flag still. [Bug #523988]
*/
statePtr->inputEncodingFlags &= ~TCL_ENCODING_START;
if (result == TCL_CONVERT_MULTIBYTE) {
/*
* The last few bytes in this channel buffer were the start of a
* multibyte sequence. If this buffer was full, then move them to
* the next buffer so the bytes will be contiguous.
*/
ChannelBuffer *nextPtr;
int extra;
nextPtr = bufPtr->nextPtr;
if (bufPtr->nextAdded < bufPtr->bufLength) {
if (gsPtr->rawRead > 0) {
/*
* Some raw bytes were converted to UTF-8. Fall through,
* returning those UTF-8 characters because a EOL might be
* present in them.
*/
} else if (statePtr->flags & CHANNEL_EOF) {
/*
* There was a partial character followed by EOF on the
* device. Fall through, returning that nothing was found.
*/
bufPtr->nextRemoved = bufPtr->nextAdded;
} else {
/*
* There are no more cached raw bytes left. See if we can
* get some more.
*/
goto read;
}
} else {
if (nextPtr == NULL) {
nextPtr = AllocChannelBuffer(statePtr->bufSize);
bufPtr->nextPtr = nextPtr;
statePtr->inQueueTail = nextPtr;
}
extra = rawLen - gsPtr->rawRead;
memcpy((VOID *) (nextPtr->buf + BUFFER_PADDING - extra),
(VOID *) (raw + gsPtr->rawRead), (size_t) extra);
nextPtr->nextRemoved -= extra;
bufPtr->nextAdded -= extra;
}
|
| ︙ | ︙ | |||
3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 |
static void
PeekAhead(chanPtr, dstEndPtr, gsPtr)
Channel *chanPtr; /* The channel to read. */
char **dstEndPtr; /* Filled with pointer to end of new range
* of UTF-8 characters. */
GetsState *gsPtr; /* Current state of gets operation. */
{
ChannelBuffer *bufPtr;
Tcl_DriverBlockModeProc *blockModeProc;
int bytesLeft;
bufPtr = gsPtr->bufPtr;
/*
| > | 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 |
static void
PeekAhead(chanPtr, dstEndPtr, gsPtr)
Channel *chanPtr; /* The channel to read. */
char **dstEndPtr; /* Filled with pointer to end of new range
* of UTF-8 characters. */
GetsState *gsPtr; /* Current state of gets operation. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
Tcl_DriverBlockModeProc *blockModeProc;
int bytesLeft;
bufPtr = gsPtr->bufPtr;
/*
|
| ︙ | ︙ | |||
3910 3911 3912 3913 3914 3915 3916 |
if (bufPtr->nextAdded < bufPtr->bufLength) {
/*
* Don't peek ahead if last read was short read.
*/
goto cleanup;
}
| | | | | | 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 |
if (bufPtr->nextAdded < bufPtr->bufLength) {
/*
* Don't peek ahead if last read was short read.
*/
goto cleanup;
}
if ((statePtr->flags & CHANNEL_NONBLOCKING) == 0) {
blockModeProc = Tcl_ChannelBlockModeProc(chanPtr->typePtr);
if (blockModeProc == NULL) {
/*
* Don't peek ahead if cannot set non-blocking mode.
*/
goto cleanup;
}
StackSetBlockMode(chanPtr, TCL_MODE_NONBLOCKING);
}
}
}
if (FilterInputBytes(chanPtr, gsPtr) == 0) {
*dstEndPtr = *gsPtr->dstPtr + gsPtr->bytesWrote;
}
if (blockModeProc != NULL) {
StackSetBlockMode(chanPtr, TCL_MODE_BLOCKING);
}
return;
cleanup:
bufPtr->nextRemoved += gsPtr->rawRead;
gsPtr->rawRead = 0;
gsPtr->totalChars += gsPtr->charsWrote;
|
| ︙ | ︙ | |||
3961 3962 3963 3964 3965 3966 3967 3968 3969 |
*/
static void
CommonGetsCleanup(chanPtr, encoding)
Channel *chanPtr;
Tcl_Encoding encoding;
{
ChannelBuffer *bufPtr, *nextPtr;
| > | | | | | 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 |
*/
static void
CommonGetsCleanup(chanPtr, encoding)
Channel *chanPtr;
Tcl_Encoding encoding;
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr, *nextPtr;
bufPtr = statePtr->inQueueHead;
for ( ; bufPtr != NULL; bufPtr = nextPtr) {
nextPtr = bufPtr->nextPtr;
if (bufPtr->nextRemoved < bufPtr->nextAdded) {
break;
}
RecycleBuffer(statePtr, bufPtr, 0);
}
statePtr->inQueueHead = bufPtr;
if (bufPtr == NULL) {
statePtr->inQueueTail = NULL;
} else {
/*
* If any multi-byte characters were split across channel buffer
* boundaries, the split-up bytes were moved to the next channel
* buffer by FilterInputBytes(). Move the bytes back to their
* original buffer because the caller could change the channel's
* encoding which could change the interpretation of whether those
|
| ︙ | ︙ | |||
3999 4000 4001 4002 4003 4004 4005 |
(size_t) extra);
bufPtr->nextAdded += extra;
nextPtr->nextRemoved = BUFFER_PADDING;
}
bufPtr = nextPtr;
}
}
| | | 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 |
(size_t) extra);
bufPtr->nextAdded += extra;
nextPtr->nextRemoved = BUFFER_PADDING;
}
bufPtr = nextPtr;
}
}
if (statePtr->encoding == NULL) {
Tcl_FreeEncoding(encoding);
}
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
4032 4033 4034 4035 4036 4037 4038 |
int
Tcl_Read(chan, dst, bytesToRead)
Tcl_Channel chan; /* The channel from which to read. */
char *dst; /* Where to store input read. */
int bytesToRead; /* Maximum number of bytes to read. */
{
| | > | > > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
int
Tcl_Read(chan, dst, bytesToRead)
Tcl_Channel chan; /* The channel from which to read. */
char *dst; /* Where to store input read. */
int bytesToRead; /* Maximum number of bytes to read. */
{
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) {
return -1;
}
return DoRead(chanPtr, dst, bytesToRead);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ReadRaw --
*
* Reads a given number of bytes from a channel. EOL and EOF
* translation is done on the bytes being read, so the the number
* of bytes consumed from the channel may not be equal to the
* number of bytes stored in the destination buffer.
*
* No encoding conversions are applied to the bytes being read.
*
* Results:
* The number of bytes read, or -1 on error. Use Tcl_GetErrno()
* to retrieve the error code for the error that occurred.
*
* Side effects:
* May cause input to be buffered.
*
*----------------------------------------------------------------------
*/
int
Tcl_ReadRaw(chan, bufPtr, bytesToRead)
Tcl_Channel chan; /* The channel from which to read. */
char *bufPtr; /* Where to store input read. */
int bytesToRead; /* Maximum number of bytes to read. */
{
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
int nread, result;
int copied, copiedNow;
/*
* The check below does too much because it will reject a call to this
* function with a channel which is part of an 'fcopy'. But we have to
* allow this here or else the chaining in the transformation drivers
* will fail with 'file busy' error instead of retrieving and
* transforming the data to copy.
*
* We let the check procedure now believe that there is no fcopy in
* progress. A better solution than this might be an additional flag
* argument to switch off specific checks.
*/
if (CheckChannelErrors(statePtr, TCL_READABLE | CHANNEL_RAW_MODE) != 0) {
return -1;
}
/*
* Check for information in the push-back buffers. If there is
* some, use it. Go to the driver only if there is none (anymore)
* and the caller requests more bytes.
*/
for (copied = 0; copied < bytesToRead; copied += copiedNow) {
copiedNow = CopyBuffer(chanPtr, bufPtr + copied,
bytesToRead - copied);
if (copiedNow == 0) {
if (statePtr->flags & CHANNEL_EOF) {
goto done;
}
if (statePtr->flags & CHANNEL_BLOCKED) {
if (statePtr->flags & CHANNEL_NONBLOCKING) {
goto done;
}
statePtr->flags &= (~(CHANNEL_BLOCKED));
}
if ((statePtr->flags & CHANNEL_TIMER_FEV) &&
(statePtr->flags & CHANNEL_NONBLOCKING)) {
nread = -1;
result = EWOULDBLOCK;
} else {
/*
* Now go to the driver to get as much as is possible to
* fill the remaining request. Do all the error handling
* by ourselves. The code was stolen from 'GetInput' and
* slightly adapted (different return value here).
*
* The case of 'bytesToRead == 0' at this point cannot happen.
*/
nread = (chanPtr->typePtr->inputProc)(chanPtr->instanceData,
bufPtr + copied, bytesToRead - copied, &result);
}
if (nread > 0) {
/*
* If we get a short read, signal up that we may be
* BLOCKED. We should avoid calling the driver because
* on some platforms we will block in the low level
* reading code even though the channel is set into
* nonblocking mode.
*/
if (nread < (bytesToRead - copied)) {
statePtr->flags |= CHANNEL_BLOCKED;
}
} else if (nread == 0) {
statePtr->flags |= CHANNEL_EOF;
statePtr->inputEncodingFlags |= TCL_ENCODING_END;
} else if (nread < 0) {
if ((result == EWOULDBLOCK) || (result == EAGAIN)) {
if (copied > 0) {
/*
* Information that was copied earlier has precedence
* over EAGAIN/WOULDBLOCK handling.
*/
return copied;
}
statePtr->flags |= CHANNEL_BLOCKED;
result = EAGAIN;
}
Tcl_SetErrno(result);
return -1;
}
return copied + nread;
}
}
done:
return copied;
}
/*
*---------------------------------------------------------------------------
*
* Tcl_ReadChars --
*
* Reads from the channel until the requested number of characters
|
| ︙ | ︙ | |||
4077 4078 4079 4080 4081 4082 4083 |
* or when channel blocks). */
int appendFlag; /* If non-zero, data read from the channel
* will be appended to the object. Otherwise,
* the data will replace the existing contents
* of the object. */
{
| | | > > > > > | > | | | | | | | | | | | | | | | 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 |
* or when channel blocks). */
int appendFlag; /* If non-zero, data read from the channel
* will be appended to the object. Otherwise,
* the data will replace the existing contents
* of the object. */
{
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
int offset, factor, copied, copiedNow, result;
Tcl_Encoding encoding;
#define UTF_EXPANSION_FACTOR 1024
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) {
copied = -1;
goto done;
}
encoding = statePtr->encoding;
factor = UTF_EXPANSION_FACTOR;
if (appendFlag == 0) {
if (encoding == NULL) {
Tcl_SetByteArrayLength(objPtr, 0);
} else {
Tcl_SetObjLength(objPtr, 0);
}
offset = 0;
} else {
if (encoding == NULL) {
Tcl_GetByteArrayFromObj(objPtr, &offset);
} else {
Tcl_GetStringFromObj(objPtr, &offset);
}
}
for (copied = 0; (unsigned) toRead > 0; ) {
copiedNow = -1;
if (statePtr->inQueueHead != NULL) {
if (encoding == NULL) {
copiedNow = ReadBytes(statePtr, objPtr, toRead, &offset);
} else {
copiedNow = ReadChars(statePtr, objPtr, toRead, &offset,
&factor);
}
/*
* If the current buffer is empty recycle it.
*/
bufPtr = statePtr->inQueueHead;
if (bufPtr->nextRemoved == bufPtr->nextAdded) {
ChannelBuffer *nextPtr;
nextPtr = bufPtr->nextPtr;
RecycleBuffer(statePtr, bufPtr, 0);
statePtr->inQueueHead = nextPtr;
if (nextPtr == NULL) {
statePtr->inQueueTail = nextPtr;
}
}
}
if (copiedNow < 0) {
if (statePtr->flags & CHANNEL_EOF) {
break;
}
if (statePtr->flags & CHANNEL_BLOCKED) {
if (statePtr->flags & CHANNEL_NONBLOCKING) {
break;
}
statePtr->flags &= ~CHANNEL_BLOCKED;
}
result = GetInput(chanPtr);
if (result != 0) {
if (result == EAGAIN) {
break;
}
copied = -1;
goto done;
}
} else {
copied += copiedNow;
toRead -= copiedNow;
}
}
statePtr->flags &= ~CHANNEL_BLOCKED;
if (encoding == NULL) {
Tcl_SetByteArrayLength(objPtr, offset);
} else {
Tcl_SetObjLength(objPtr, offset);
}
done:
|
| ︙ | ︙ | |||
4199 4200 4201 4202 4203 4204 4205 | * Side effects: * None. * *--------------------------------------------------------------------------- */ static int | | | | 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 |
* Side effects:
* None.
*
*---------------------------------------------------------------------------
*/
static int
ReadBytes(statePtr, objPtr, bytesToRead, offsetPtr)
ChannelState *statePtr; /* State of the channel to read. */
int bytesToRead; /* Maximum number of characters to store,
* or < 0 to get all available characters.
* Characters are obtained from the first
* buffer in the queue -- even if this number
* is larger than the number of characters
* available in the first buffer, only the
* characters from the first buffer are
|
| ︙ | ︙ | |||
4225 4226 4227 4228 4229 4230 4231 |
{
int toRead, srcLen, srcRead, dstWrote, offset, length;
ChannelBuffer *bufPtr;
char *src, *dst;
offset = *offsetPtr;
| | | 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 |
{
int toRead, srcLen, srcRead, dstWrote, offset, length;
ChannelBuffer *bufPtr;
char *src, *dst;
offset = *offsetPtr;
bufPtr = statePtr->inQueueHead;
src = bufPtr->buf + bufPtr->nextRemoved;
srcLen = bufPtr->nextAdded - bufPtr->nextRemoved;
toRead = bytesToRead;
if ((unsigned) toRead > (unsigned) srcLen) {
toRead = srcLen;
}
|
| ︙ | ︙ | |||
4250 4251 4252 4253 4254 4255 4256 |
if (offset < toRead) {
length = offset + toRead + 1;
}
dst = (char *) Tcl_SetByteArrayLength(objPtr, length);
}
dst += offset;
| | | | | 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 |
if (offset < toRead) {
length = offset + toRead + 1;
}
dst = (char *) Tcl_SetByteArrayLength(objPtr, length);
}
dst += offset;
if (statePtr->flags & INPUT_NEED_NL) {
statePtr->flags &= ~INPUT_NEED_NL;
if ((srcLen == 0) || (*src != '\n')) {
*dst = '\r';
*offsetPtr += 1;
return 1;
}
*dst++ = '\n';
src++;
srcLen--;
toRead--;
}
srcRead = srcLen;
dstWrote = toRead;
if (TranslateInputEOL(statePtr, dst, src, &dstWrote, &srcRead) != 0) {
if (dstWrote == 0) {
return -1;
}
}
bufPtr->nextRemoved += srcRead;
*offsetPtr += dstWrote;
return dstWrote;
|
| ︙ | ︙ | |||
4303 4304 4305 4306 4307 4308 4309 | * Side effects: * None. * *--------------------------------------------------------------------------- */ static int | | | | 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 |
* Side effects:
* None.
*
*---------------------------------------------------------------------------
*/
static int
ReadChars(statePtr, objPtr, charsToRead, offsetPtr, factorPtr)
ChannelState *statePtr; /* State of channel to read. */
int charsToRead; /* Maximum number of characters to store,
* or -1 to get all available characters.
* Characters are obtained from the first
* buffer in the queue -- even if this number
* is larger than the number of characters
* available in the first buffer, only the
* characters from the first buffer are
|
| ︙ | ︙ | |||
4336 4337 4338 4339 4340 4341 4342 |
ChannelBuffer *bufPtr;
char *src, *dst;
Tcl_EncodingState oldState;
factor = *factorPtr;
offset = *offsetPtr;
| | | 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 |
ChannelBuffer *bufPtr;
char *src, *dst;
Tcl_EncodingState oldState;
factor = *factorPtr;
offset = *offsetPtr;
bufPtr = statePtr->inQueueHead;
src = bufPtr->buf + bufPtr->nextRemoved;
srcLen = bufPtr->nextAdded - bufPtr->nextRemoved;
toRead = charsToRead;
if ((unsigned) toRead > (unsigned) srcLen) {
toRead = srcLen;
}
|
| ︙ | ︙ | |||
4381 4382 4383 4384 4385 4386 4387 |
* rather than using the factor.
*/
dstNeeded = spaceLeft;
}
dst = objPtr->bytes + offset;
| | | | | | | | | | | > | | | | > > > > > > > > | | > | | | | | | | | | | | | | | 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 |
* rather than using the factor.
*/
dstNeeded = spaceLeft;
}
dst = objPtr->bytes + offset;
oldState = statePtr->inputEncodingState;
if (statePtr->flags & INPUT_NEED_NL) {
/*
* We want a '\n' because the last character we saw was '\r'.
*/
statePtr->flags &= ~INPUT_NEED_NL;
Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen,
statePtr->inputEncodingFlags, &statePtr->inputEncodingState,
dst, TCL_UTF_MAX + 1, &srcRead, &dstWrote, &numChars);
if ((dstWrote > 0) && (*dst == '\n')) {
/*
* The next char was a '\n'. Consume it and produce a '\n'.
*/
bufPtr->nextRemoved += srcRead;
} else {
/*
* The next char was not a '\n'. Produce a '\r'.
*/
*dst = '\r';
}
statePtr->inputEncodingFlags &= ~TCL_ENCODING_START;
*offsetPtr += 1;
return 1;
}
Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen,
statePtr->inputEncodingFlags, &statePtr->inputEncodingState, dst,
dstNeeded + TCL_UTF_MAX, &srcRead, &dstWrote, &numChars);
if (srcRead == 0) {
/*
* Not enough bytes in src buffer to make a complete char. Copy
* the bytes to the next buffer to make a new contiguous string,
* then tell the caller to fill the buffer with more bytes.
*/
ChannelBuffer *nextPtr;
nextPtr = bufPtr->nextPtr;
if (nextPtr == NULL) {
if (srcLen > 0) {
/*
* There isn't enough data in the buffers to complete the next
* character, so we need to wait for more data before the next
* file event can be delivered.
*
* SF #478856.
*
* The exception to this is if the input buffer was
* completely empty before we tried to convert its
* contents. Nothing in, nothing out, and no incomplete
* character data. The conversion before the current one
* was complete.
*/
statePtr->flags |= CHANNEL_NEED_MORE_DATA;
}
return -1;
}
nextPtr->nextRemoved -= srcLen;
memcpy((VOID *) (nextPtr->buf + nextPtr->nextRemoved), (VOID *) src,
(size_t) srcLen);
RecycleBuffer(statePtr, bufPtr, 0);
statePtr->inQueueHead = nextPtr;
return ReadChars(statePtr, objPtr, charsToRead, offsetPtr, factorPtr);
}
dstRead = dstWrote;
if (TranslateInputEOL(statePtr, dst, dst, &dstWrote, &dstRead) != 0) {
/*
* Hit EOF char. How many bytes of src correspond to where the
* EOF was located in dst?
*/
if (dstWrote == 0) {
return -1;
}
statePtr->inputEncodingState = oldState;
Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen,
statePtr->inputEncodingFlags, &statePtr->inputEncodingState,
dst, dstRead + TCL_UTF_MAX, &srcRead, &dstWrote, &numChars);
TranslateInputEOL(statePtr, dst, dst, &dstWrote, &dstRead);
}
/*
* The number of characters that we got may be less than the number
* that we started with because "\r\n" sequences may have been
* turned into just '\n' in dst.
*/
numChars -= (dstRead - dstWrote);
if ((unsigned) numChars > (unsigned) toRead) {
/*
* Got too many chars.
*/
char *eof;
eof = Tcl_UtfAtIndex(dst, toRead);
statePtr->inputEncodingState = oldState;
Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen,
statePtr->inputEncodingFlags, &statePtr->inputEncodingState,
dst, eof - dst + TCL_UTF_MAX, &srcRead, &dstWrote, &numChars);
dstRead = dstWrote;
TranslateInputEOL(statePtr, dst, dst, &dstWrote, &dstRead);
numChars -= (dstRead - dstWrote);
}
statePtr->inputEncodingFlags &= ~TCL_ENCODING_START;
bufPtr->nextRemoved += srcRead;
if (dstWrote > srcRead + 1) {
*factorPtr = dstWrote * UTF_EXPANSION_FACTOR / srcRead;
}
*offsetPtr += dstWrote;
return numChars;
|
| ︙ | ︙ | |||
4510 4511 4512 4513 4514 4515 4516 | * Side effects: * None. * *--------------------------------------------------------------------------- */ static int | | | | | 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 |
* Side effects:
* None.
*
*---------------------------------------------------------------------------
*/
static int
TranslateInputEOL(statePtr, dstStart, srcStart, dstLenPtr, srcLenPtr)
ChannelState *statePtr; /* Channel being read, for EOL translation
* and EOF character. */
char *dstStart; /* Output buffer filled with chars by
* applying appropriate EOL translation to
* source characters. */
CONST char *srcStart; /* Source characters. */
int *dstLenPtr; /* On entry, the maximum length of output
* buffer in bytes; must be <= *srcLenPtr. On
* exit, the number of bytes actually used in
* output buffer. */
int *srcLenPtr; /* On entry, the length of source buffer.
* On exit, the number of bytes read from
* the source buffer. */
{
int dstLen, srcLen, inEofChar;
CONST char *eof;
dstLen = *dstLenPtr;
eof = NULL;
inEofChar = statePtr->inEofChar;
if (inEofChar != '\0') {
/*
* Find EOF in translated buffer then compress out the EOL. The
* source buffer may be much longer than the destination buffer --
* we only want to return EOF if the EOF has been copied to the
* destination buffer.
*/
|
| ︙ | ︙ | |||
4555 4556 4557 4558 4559 4560 4561 |
dstLen = srcLen;
}
*srcLenPtr = srcLen;
break;
}
}
}
| | | 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 |
dstLen = srcLen;
}
*srcLenPtr = srcLen;
break;
}
}
}
switch (statePtr->inputTranslation) {
case TCL_TRANSLATE_LF: {
if (dstStart != srcStart) {
memcpy((VOID *) dstStart, (VOID *) srcStart, (size_t) dstLen);
}
srcLen = dstLen;
break;
}
|
| ︙ | ︙ | |||
4591 4592 4593 4594 4595 4596 4597 |
srcEnd = srcStart + dstLen;
srcMax = srcStart + *srcLenPtr;
for ( ; src < srcEnd; ) {
if (*src == '\r') {
src++;
if (src >= srcMax) {
| | | 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 |
srcEnd = srcStart + dstLen;
srcMax = srcStart + *srcLenPtr;
for ( ; src < srcEnd; ) {
if (*src == '\r') {
src++;
if (src >= srcMax) {
statePtr->flags |= INPUT_NEED_NL;
} else if (*src == '\n') {
*dst++ = *src++;
} else {
*dst++ = '\r';
}
} else {
*dst++ = *src++;
|
| ︙ | ︙ | |||
4614 4615 4616 4617 4618 4619 4620 | CONST char *src, *srcEnd, *srcMax; dst = dstStart; src = srcStart; srcEnd = srcStart + dstLen; srcMax = srcStart + *srcLenPtr; | | | | | 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 |
CONST char *src, *srcEnd, *srcMax;
dst = dstStart;
src = srcStart;
srcEnd = srcStart + dstLen;
srcMax = srcStart + *srcLenPtr;
if ((statePtr->flags & INPUT_SAW_CR) && (src < srcMax)) {
if (*src == '\n') {
src++;
}
statePtr->flags &= ~INPUT_SAW_CR;
}
for ( ; src < srcEnd; ) {
if (*src == '\r') {
src++;
if (src >= srcMax) {
statePtr->flags |= INPUT_SAW_CR;
} else if (*src == '\n') {
if (srcEnd < srcMax) {
srcEnd++;
}
src++;
}
*dst++ = '\n';
|
| ︙ | ︙ | |||
4653 4654 4655 4656 4657 4658 4659 |
if ((eof != NULL) && (srcStart + srcLen >= eof)) {
/*
* EOF character was seen in EOL translated range. Leave current
* file position pointing at the EOF character, but don't store the
* EOF character in the output string.
*/
| | | | | 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 |
if ((eof != NULL) && (srcStart + srcLen >= eof)) {
/*
* EOF character was seen in EOL translated range. Leave current
* file position pointing at the EOF character, but don't store the
* EOF character in the output string.
*/
statePtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF);
statePtr->inputEncodingFlags |= TCL_ENCODING_END;
statePtr->flags &= ~(INPUT_SAW_CR | INPUT_NEED_NL);
return 1;
}
*srcLenPtr = srcLen;
return 0;
}
|
| ︙ | ︙ | |||
4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 |
Tcl_Channel chan; /* The channel for which to add the input. */
char *str; /* The input itself. */
int len; /* The length of the input. */
int atEnd; /* If non-zero, add at end of queue; otherwise
* add at head of queue. */
{
Channel *chanPtr; /* The real IO channel. */
ChannelBuffer *bufPtr; /* Buffer to contain the data. */
int i, flags;
chanPtr = (Channel *) chan;
| > > | > > > > > > | | | | | | | | | | | | | 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 |
Tcl_Channel chan; /* The channel for which to add the input. */
char *str; /* The input itself. */
int len; /* The length of the input. */
int atEnd; /* If non-zero, add at end of queue; otherwise
* add at head of queue. */
{
Channel *chanPtr; /* The real IO channel. */
ChannelState *statePtr; /* State of actual channel. */
ChannelBuffer *bufPtr; /* Buffer to contain the data. */
int i, flags;
chanPtr = (Channel *) chan;
statePtr = chanPtr->state;
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
/*
* CheckChannelErrors clears too many flag bits in this one case.
*/
flags = statePtr->flags;
if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) {
len = -1;
goto done;
}
statePtr->flags = flags;
/*
* If we have encountered a sticky EOF, just punt without storing.
* (sticky EOF is set if we have seen the input eofChar, to prevent
* reading beyond the eofChar). Otherwise, clear the EOF flags, and
* clear the BLOCKED bit. We want to discover these conditions anew
* in each operation.
*/
if (statePtr->flags & CHANNEL_STICKY_EOF) {
goto done;
}
statePtr->flags &= (~(CHANNEL_BLOCKED | CHANNEL_EOF));
bufPtr = AllocChannelBuffer(len);
for (i = 0; i < len; i++) {
bufPtr->buf[i] = str[i];
}
bufPtr->nextAdded += len;
if (statePtr->inQueueHead == (ChannelBuffer *) NULL) {
bufPtr->nextPtr = (ChannelBuffer *) NULL;
statePtr->inQueueHead = bufPtr;
statePtr->inQueueTail = bufPtr;
} else if (atEnd) {
bufPtr->nextPtr = (ChannelBuffer *) NULL;
statePtr->inQueueTail->nextPtr = bufPtr;
statePtr->inQueueTail = bufPtr;
} else {
bufPtr->nextPtr = statePtr->inQueueHead;
statePtr->inQueueHead = bufPtr;
}
done:
/*
* Update the notifier state so we don't block while there is still
* data in the buffers.
*/
|
| ︙ | ︙ | |||
4768 4769 4770 4771 4772 4773 4774 |
*/
int
Tcl_Flush(chan)
Tcl_Channel chan; /* The Channel to flush. */
{
int result; /* Of calling FlushChannel. */
| | > > > > > | > | | | | | | 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 |
*/
int
Tcl_Flush(chan)
Tcl_Channel chan; /* The Channel to flush. */
{
int result; /* Of calling FlushChannel. */
Channel *chanPtr = (Channel *) chan; /* The actual channel. */
ChannelState *statePtr = chanPtr->state; /* State of actual channel. */
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) {
return -1;
}
/*
* Force current output buffer to be output also.
*/
if ((statePtr->curOutPtr != NULL)
&& (statePtr->curOutPtr->nextAdded > 0)) {
statePtr->flags |= BUFFER_READY;
}
result = FlushChannel(NULL, chanPtr, 0);
if (result != 0) {
return TCL_ERROR;
}
|
| ︙ | ︙ | |||
4811 4812 4813 4814 4815 4816 4817 | * May discard input from the channel. If discardLastBuffer is zero, * leaves one buffer in place for back-filling. * *---------------------------------------------------------------------- */ static void | | | | | | | | | | | 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 |
* May discard input from the channel. If discardLastBuffer is zero,
* leaves one buffer in place for back-filling.
*
*----------------------------------------------------------------------
*/
static void
DiscardInputQueued(statePtr, discardSavedBuffers)
ChannelState *statePtr; /* Channel on which to discard
* the queued input. */
int discardSavedBuffers; /* If non-zero, discard all buffers including
* last one. */
{
ChannelBuffer *bufPtr, *nxtPtr; /* Loop variables. */
bufPtr = statePtr->inQueueHead;
statePtr->inQueueHead = (ChannelBuffer *) NULL;
statePtr->inQueueTail = (ChannelBuffer *) NULL;
for (; bufPtr != (ChannelBuffer *) NULL; bufPtr = nxtPtr) {
nxtPtr = bufPtr->nextPtr;
RecycleBuffer(statePtr, bufPtr, discardSavedBuffers);
}
/*
* If discardSavedBuffers is nonzero, must also discard any previously
* saved buffer in the saveInBufPtr field.
*/
if (discardSavedBuffers) {
if (statePtr->saveInBufPtr != (ChannelBuffer *) NULL) {
ckfree((char *) statePtr->saveInBufPtr);
statePtr->saveInBufPtr = (ChannelBuffer *) NULL;
}
}
}
/*
*---------------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 |
GetInput(chanPtr)
Channel *chanPtr; /* Channel to read input from. */
{
int toRead; /* How much to read? */
int result; /* Of calling driver. */
int nread; /* How much was read from channel? */
ChannelBuffer *bufPtr; /* New buffer to add to input queue. */
/*
* Prevent reading from a dead channel -- a channel that has been closed
* but not yet deallocated, which can happen if the exit handler for
* channel cleanup has run but the channel is still registered in some
* interpreter.
*/
| > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | > > > > > > > > > > > > > | | > > > > > > > > > > > > | > | | | | | | | | > > > > > | | > | | | | | | 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 |
GetInput(chanPtr)
Channel *chanPtr; /* Channel to read input from. */
{
int toRead; /* How much to read? */
int result; /* Of calling driver. */
int nread; /* How much was read from channel? */
ChannelBuffer *bufPtr; /* New buffer to add to input queue. */
ChannelState *statePtr = chanPtr->state; /* state info for channel */
/*
* Prevent reading from a dead channel -- a channel that has been closed
* but not yet deallocated, which can happen if the exit handler for
* channel cleanup has run but the channel is still registered in some
* interpreter.
*/
if (CheckForDeadChannel(NULL, statePtr)) {
return EINVAL;
}
/*
* First check for more buffers in the pushback area of the
* topmost channel in the stack and use them. They can be the
* result of a transformation which went away without reading all
* the information placed in the area when it was stacked.
*
* Two possibilities for the state: No buffers in it, or a single
* empty buffer. In the latter case we can recycle it now.
*/
if (chanPtr->inQueueHead != (ChannelBuffer*) NULL) {
if (statePtr->inQueueHead != (ChannelBuffer*) NULL) {
RecycleBuffer(statePtr, statePtr->inQueueHead, 0);
statePtr->inQueueHead = (ChannelBuffer*) NULL;
}
statePtr->inQueueHead = chanPtr->inQueueHead;
statePtr->inQueueTail = chanPtr->inQueueTail;
chanPtr->inQueueHead = (ChannelBuffer*) NULL;
chanPtr->inQueueTail = (ChannelBuffer*) NULL;
return 0;
}
/*
* Nothing in the pushback area, fall back to the usual handling
* (driver, etc.)
*/
/*
* See if we can fill an existing buffer. If we can, read only
* as much as will fit in it. Otherwise allocate a new buffer,
* add it to the input queue and attempt to fill it to the max.
*/
bufPtr = statePtr->inQueueTail;
if ((bufPtr != NULL) && (bufPtr->nextAdded < bufPtr->bufLength)) {
toRead = bufPtr->bufLength - bufPtr->nextAdded;
} else {
bufPtr = statePtr->saveInBufPtr;
statePtr->saveInBufPtr = NULL;
/*
* Check the actual buffersize against the requested
* buffersize. Buffers which are smaller than requested aare
* squashed. This is done to honor dynamic changes of the
* buffersize made by the user.
*/
if ((bufPtr != NULL) && ((bufPtr->bufLength - BUFFER_PADDING) < statePtr->bufSize)) {
ckfree((char *) bufPtr);
bufPtr = NULL;
}
if (bufPtr == NULL) {
bufPtr = AllocChannelBuffer(statePtr->bufSize);
}
bufPtr->nextPtr = (ChannelBuffer *) NULL;
/* SF #427196: Use the actual size of the buffer to determine
* the number of bytes to read from the channel and not the
* size for new buffers. They can be different if the
* buffersize was changed between reads.
*
* Note: This affects performance negatively if the buffersize
* was extended but this small buffer is reused for all
* subsequent reads. The system never uses buffers with the
* requested bigger size in that case. An adjunct patch could
* try and delete all unused buffers it encounters and which
* are smaller than the formally requested buffersize.
*/
toRead = bufPtr->bufLength - bufPtr->nextAdded;
if (statePtr->inQueueTail == NULL) {
statePtr->inQueueHead = bufPtr;
} else {
statePtr->inQueueTail->nextPtr = bufPtr;
}
statePtr->inQueueTail = bufPtr;
}
/*
* If EOF is set, we should avoid calling the driver because on some
* platforms it is impossible to read from a device after EOF.
*/
if (statePtr->flags & CHANNEL_EOF) {
return 0;
}
if ((statePtr->flags & CHANNEL_TIMER_FEV) &&
(statePtr->flags & CHANNEL_NONBLOCKING)) {
nread = -1;
result = EWOULDBLOCK;
} else {
nread = (chanPtr->typePtr->inputProc)(chanPtr->instanceData,
bufPtr->buf + bufPtr->nextAdded, toRead, &result);
}
if (nread > 0) {
bufPtr->nextAdded += nread;
/*
* If we get a short read, signal up that we may be BLOCKED. We
* should avoid calling the driver because on some platforms we
* will block in the low level reading code even though the
* channel is set into nonblocking mode.
*/
if (nread < toRead) {
statePtr->flags |= CHANNEL_BLOCKED;
}
} else if (nread == 0) {
statePtr->flags |= CHANNEL_EOF;
statePtr->inputEncodingFlags |= TCL_ENCODING_END;
} else if (nread < 0) {
if ((result == EWOULDBLOCK) || (result == EAGAIN)) {
statePtr->flags |= CHANNEL_BLOCKED;
result = EAGAIN;
}
Tcl_SetErrno(result);
return result;
}
return 0;
}
/*
*----------------------------------------------------------------------
*
* Tcl_Seek --
|
| ︙ | ︙ | |||
4966 4967 4968 4969 4970 4971 4972 |
int
Tcl_Seek(chan, offset, mode)
Tcl_Channel chan; /* The channel on which to seek. */
int offset; /* Offset to seek to. */
int mode; /* Relative to which location to seek? */
{
| | > < | | > > > > > > | | | > > > > > > > > > > > | | | | | | | | 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 |
int
Tcl_Seek(chan, offset, mode)
Tcl_Channel chan; /* The channel on which to seek. */
int offset; /* Offset to seek to. */
int mode; /* Relative to which location to seek? */
{
Channel *chanPtr = (Channel *) chan; /* The real IO channel. */
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
int inputBuffered, outputBuffered;
int result; /* Of device driver operations. */
int curPos; /* Position on the device. */
int wasAsync; /* Was the channel nonblocking before the
* seek operation? If so, must restore to
* nonblocking mode after the seek. */
if (CheckChannelErrors(statePtr, TCL_WRITABLE | TCL_READABLE) != 0) {
return -1;
}
/*
* Disallow seek on dead channels -- channels that have been closed but
* not yet been deallocated. Such channels can be found if the exit
* handler for channel cleanup has run but the channel is still
* registered in an interpreter.
*/
if (CheckForDeadChannel(NULL, statePtr)) return -1;
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
/*
* Disallow seek on channels whose type does not have a seek procedure
* defined. This means that the channel does not support seeking.
*/
if (chanPtr->typePtr->seekProc == (Tcl_DriverSeekProc *) NULL) {
Tcl_SetErrno(EINVAL);
return -1;
}
/*
* Compute how much input and output is buffered. If both input and
* output is buffered, cannot compute the current position.
*/
for (bufPtr = statePtr->inQueueHead, inputBuffered = 0;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
inputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
/*
* Don't forget the bytes in the topmost pushback area.
*/
for (bufPtr = statePtr->topChanPtr->inQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
inputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
for (bufPtr = statePtr->outQueueHead, outputBuffered = 0;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
outputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
if ((statePtr->curOutPtr != (ChannelBuffer *) NULL) &&
(statePtr->curOutPtr->nextAdded > statePtr->curOutPtr->nextRemoved)) {
statePtr->flags |= BUFFER_READY;
outputBuffered +=
(statePtr->curOutPtr->nextAdded - statePtr->curOutPtr->nextRemoved);
}
if ((inputBuffered != 0) && (outputBuffered != 0)) {
Tcl_SetErrno(EFAULT);
return -1;
}
|
| ︙ | ︙ | |||
5040 5041 5042 5043 5044 5045 5046 |
}
/*
* Discard any queued input - this input should not be read after
* the seek.
*/
| | | | < < < | < | < | | | | | | 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 |
}
/*
* Discard any queued input - this input should not be read after
* the seek.
*/
DiscardInputQueued(statePtr, 0);
/*
* Reset EOF and BLOCKED flags. We invalidate them by moving the
* access point. Also clear CR related flags.
*/
statePtr->flags &=
(~(CHANNEL_EOF | CHANNEL_STICKY_EOF | CHANNEL_BLOCKED | INPUT_SAW_CR));
/*
* If the channel is in asynchronous output mode, switch it back
* to synchronous mode and cancel any async flush that may be
* scheduled. After the flush, the channel will be put back into
* asynchronous output mode.
*/
wasAsync = 0;
if (statePtr->flags & CHANNEL_NONBLOCKING) {
wasAsync = 1;
result = StackSetBlockMode(chanPtr, TCL_MODE_BLOCKING);
if (result != 0) {
return -1;
}
statePtr->flags &= (~(CHANNEL_NONBLOCKING));
if (statePtr->flags & BG_FLUSH_SCHEDULED) {
statePtr->flags &= (~(BG_FLUSH_SCHEDULED));
}
}
/*
* If the flush fails we cannot recover the original position. In
* that case the seek is not attempted because we do not know where
* the access position is - instead we return the error. FlushChannel
|
| ︙ | ︙ | |||
5107 5108 5109 5110 5111 5112 5113 |
* Restore to nonblocking mode if that was the previous behavior.
*
* NOTE: Even if there was an async flush active we do not restore
* it now because we already flushed all the queued output, above.
*/
if (wasAsync) {
| | < < < | < | < | | | 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 |
* Restore to nonblocking mode if that was the previous behavior.
*
* NOTE: Even if there was an async flush active we do not restore
* it now because we already flushed all the queued output, above.
*/
if (wasAsync) {
statePtr->flags |= CHANNEL_NONBLOCKING;
result = StackSetBlockMode(chanPtr, TCL_MODE_NONBLOCKING);
if (result != 0) {
return -1;
}
}
return curPos;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
5145 5146 5147 5148 5149 5150 5151 |
*----------------------------------------------------------------------
*/
int
Tcl_Tell(chan)
Tcl_Channel chan; /* The channel to return pos for. */
{
| | > < | | > > > > > > | | | | | | | | | | | 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 |
*----------------------------------------------------------------------
*/
int
Tcl_Tell(chan)
Tcl_Channel chan; /* The channel to return pos for. */
{
Channel *chanPtr = (Channel *) chan; /* The real IO channel. */
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *bufPtr;
int inputBuffered, outputBuffered;
int result; /* Of calling device driver. */
int curPos; /* Position on device. */
if (CheckChannelErrors(statePtr, TCL_WRITABLE | TCL_READABLE) != 0) {
return -1;
}
/*
* Disallow tell on dead channels -- channels that have been closed but
* not yet been deallocated. Such channels can be found if the exit
* handler for channel cleanup has run but the channel is still
* registered in an interpreter.
*/
if (CheckForDeadChannel(NULL, statePtr)) {
return -1;
}
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
/*
* Disallow tell on channels whose type does not have a seek procedure
* defined. This means that the channel does not support seeking.
*/
if (chanPtr->typePtr->seekProc == (Tcl_DriverSeekProc *) NULL) {
Tcl_SetErrno(EINVAL);
return -1;
}
/*
* Compute how much input and output is buffered. If both input and
* output is buffered, cannot compute the current position.
*/
for (bufPtr = statePtr->inQueueHead, inputBuffered = 0;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
inputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
for (bufPtr = statePtr->outQueueHead, outputBuffered = 0;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
outputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
if ((statePtr->curOutPtr != (ChannelBuffer *) NULL) &&
(statePtr->curOutPtr->nextAdded > statePtr->curOutPtr->nextRemoved)) {
statePtr->flags |= BUFFER_READY;
outputBuffered +=
(statePtr->curOutPtr->nextAdded - statePtr->curOutPtr->nextRemoved);
}
if ((inputBuffered != 0) && (outputBuffered != 0)) {
Tcl_SetErrno(EFAULT);
return -1;
}
|
| ︙ | ︙ | |||
5240 5241 5242 5243 5244 5245 5246 | * Side effects: * May clear the EOF and/or BLOCKED bits if reading from channel. * *--------------------------------------------------------------------------- */ static int | | | | | > > > > | | | > > > > > > > > > > > | > > > > | | | | | 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 |
* Side effects:
* May clear the EOF and/or BLOCKED bits if reading from channel.
*
*---------------------------------------------------------------------------
*/
static int
CheckChannelErrors(statePtr, flags)
ChannelState *statePtr; /* Channel to check. */
int flags; /* Test if channel supports desired operation:
* TCL_READABLE, TCL_WRITABLE. Also indicates
* Raw read or write for special close
* processing*/
{
int direction = flags & (TCL_READABLE|TCL_WRITABLE);
/*
* Check for unreported error.
*/
if (statePtr->unreportedError != 0) {
Tcl_SetErrno(statePtr->unreportedError);
statePtr->unreportedError = 0;
return -1;
}
/*
* Only the raw read and write operations are allowed during close
* in order to drain data from stacked channels.
*/
if ((statePtr->flags & CHANNEL_CLOSED) &&
((flags & CHANNEL_RAW_MODE) == 0)) {
Tcl_SetErrno(EACCES);
return -1;
}
/*
* Fail if the channel is not opened for desired operation.
*/
if ((statePtr->flags & direction) == 0) {
Tcl_SetErrno(EACCES);
return -1;
}
/*
* Fail if the channel is in the middle of a background copy.
*
* Don't do this tests for raw channels here or else the chaining in the
* transformation drivers will fail with 'file busy' error instead of
* retrieving and transforming the data to copy.
*/
if ((statePtr->csPtr != NULL) && ((flags & CHANNEL_RAW_MODE) == 0)) {
Tcl_SetErrno(EBUSY);
return -1;
}
if (direction == TCL_READABLE) {
/*
* If we have not encountered a sticky EOF, clear the EOF bit
* (sticky EOF is set if we have seen the input eofChar, to prevent
* reading beyond the eofChar). Also, always clear the BLOCKED bit.
* We want to discover these conditions anew in each operation.
*/
if ((statePtr->flags & CHANNEL_STICKY_EOF) == 0) {
statePtr->flags &= ~CHANNEL_EOF;
}
statePtr->flags &= ~(CHANNEL_BLOCKED | CHANNEL_NEED_MORE_DATA);
}
return 0;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
5310 5311 5312 5313 5314 5315 5316 |
*----------------------------------------------------------------------
*/
int
Tcl_Eof(chan)
Tcl_Channel chan; /* Does this channel have EOF? */
{
| > | < | | | | 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 |
*----------------------------------------------------------------------
*/
int
Tcl_Eof(chan)
Tcl_Channel chan; /* Does this channel have EOF? */
{
ChannelState *statePtr = ((Channel *) chan)->state;
/* State of real channel structure. */
return ((statePtr->flags & CHANNEL_STICKY_EOF) ||
((statePtr->flags & CHANNEL_EOF) &&
(Tcl_InputBuffered(chan) == 0))) ? 1 : 0;
}
/*
*----------------------------------------------------------------------
*
* Tcl_InputBlocked --
*
|
| ︙ | ︙ | |||
5338 5339 5340 5341 5342 5343 5344 |
*----------------------------------------------------------------------
*/
int
Tcl_InputBlocked(chan)
Tcl_Channel chan; /* Is this channel blocked? */
{
| > | < | | > > | > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > > > > > | > > > > | | > | 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 |
*----------------------------------------------------------------------
*/
int
Tcl_InputBlocked(chan)
Tcl_Channel chan; /* Is this channel blocked? */
{
ChannelState *statePtr = ((Channel *) chan)->state;
/* State of real channel structure. */
return (statePtr->flags & CHANNEL_BLOCKED) ? 1 : 0;
}
/*
*----------------------------------------------------------------------
*
* Tcl_InputBuffered --
*
* Returns the number of bytes of input currently buffered in the
* common internal buffer of a channel.
*
* Results:
* The number of input bytes buffered, or zero if the channel is not
* open for reading.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
int
Tcl_InputBuffered(chan)
Tcl_Channel chan; /* The channel to query. */
{
ChannelState *statePtr = ((Channel *) chan)->state;
/* State of real channel structure. */
ChannelBuffer *bufPtr;
int bytesBuffered;
for (bytesBuffered = 0, bufPtr = statePtr->inQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
bytesBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
/*
* Don't forget the bytes in the topmost pushback area.
*/
for (bufPtr = statePtr->topChanPtr->inQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
bytesBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
return bytesBuffered;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelBuffered --
*
* Returns the number of bytes of input currently buffered in the
* internal buffer (push back area) of a channel.
*
* Results:
* The number of input bytes buffered, or zero if the channel is not
* open for reading.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
int
Tcl_ChannelBuffered(chan)
Tcl_Channel chan; /* The channel to query. */
{
Channel *chanPtr = (Channel *) chan;
/* real channel structure. */
ChannelBuffer *bufPtr;
int bytesBuffered;
for (bytesBuffered = 0, bufPtr = chanPtr->inQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
bytesBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
return bytesBuffered;
}
/*
*----------------------------------------------------------------------
*
* Tcl_SetChannelBufferSize --
|
| ︙ | ︙ | |||
5402 5403 5404 5405 5406 5407 5408 |
void
Tcl_SetChannelBufferSize(chan, sz)
Tcl_Channel chan; /* The channel whose buffer size
* to set. */
int sz; /* The size to set. */
{
| | | | | | | | | | | 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 |
void
Tcl_SetChannelBufferSize(chan, sz)
Tcl_Channel chan; /* The channel whose buffer size
* to set. */
int sz; /* The size to set. */
{
ChannelState *statePtr; /* State of real channel structure. */
/*
* If the buffer size is smaller than 10 bytes or larger than one MByte,
* do not accept the requested size and leave the current buffer size.
*/
if (sz < 10) {
return;
}
if (sz > (1024 * 1024)) {
return;
}
statePtr = ((Channel *) chan)->state;
statePtr->bufSize = sz;
if (statePtr->outputStage != NULL) {
ckfree((char *) statePtr->outputStage);
statePtr->outputStage = NULL;
}
if ((statePtr->encoding != NULL) && (statePtr->flags & TCL_WRITABLE)) {
statePtr->outputStage = (char *)
ckalloc((unsigned) (statePtr->bufSize + 2));
}
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetChannelBufferSize --
|
| ︙ | ︙ | |||
5450 5451 5452 5453 5454 5455 5456 |
*/
int
Tcl_GetChannelBufferSize(chan)
Tcl_Channel chan; /* The channel for which to find the
* buffer size. */
{
| | > < | | 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 |
*/
int
Tcl_GetChannelBufferSize(chan)
Tcl_Channel chan; /* The channel for which to find the
* buffer size. */
{
ChannelState *statePtr = ((Channel *) chan)->state;
/* State of real channel structure. */
return statePtr->bufSize;
}
/*
*----------------------------------------------------------------------
*
* Tcl_BadChannelOption --
*
|
| ︙ | ︙ | |||
5496 5497 5498 5499 5500 5501 5502 |
* to the standard generic options.
* can be NULL for generic options
* only.
*/
{
if (interp) {
CONST char *genericopt =
| | | | | 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 |
* to the standard generic options.
* can be NULL for generic options
* only.
*/
{
if (interp) {
CONST char *genericopt =
"blocking buffering buffersize encoding eofchar translation";
char **argv;
int argc, i;
Tcl_DString ds;
Tcl_DStringInit(&ds);
Tcl_DStringAppend(&ds, (char *) genericopt, -1);
if (optionList && (*optionList)) {
Tcl_DStringAppend(&ds, " ", 1);
Tcl_DStringAppend(&ds, optionList, -1);
}
if (Tcl_SplitList(interp, Tcl_DStringValue(&ds),
&argc, &argv) != TCL_OK) {
panic("malformed option list in channel driver");
}
Tcl_ResetResult(interp);
Tcl_AppendResult(interp, "bad option \"", optionName,
"\": should be one of ", (char *) NULL);
argc--;
for (i = 0; i < argc; i++) {
Tcl_AppendResult(interp, "-", argv[i], ", ", (char *) NULL);
}
Tcl_AppendResult(interp, "or -", argv[i], (char *) NULL);
Tcl_DStringFree(&ds);
ckfree((char *) argv);
|
| ︙ | ︙ | |||
5556 5557 5558 5559 5560 5561 5562 5563 5564 |
Tcl_Channel chan; /* Channel on which to get option. */
char *optionName; /* Option to get. */
Tcl_DString *dsPtr; /* Where to store value(s). */
{
size_t len; /* Length of optionName string. */
char optionVal[128]; /* Buffer for sprintf. */
Channel *chanPtr = (Channel *) chan;
int flags;
| > < < < < < < < < < < < < < < | > > > > > > > > > > > > > > > > > > > > > > | 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 |
Tcl_Channel chan; /* Channel on which to get option. */
char *optionName; /* Option to get. */
Tcl_DString *dsPtr; /* Where to store value(s). */
{
size_t len; /* Length of optionName string. */
char optionVal[128]; /* Buffer for sprintf. */
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
int flags;
/*
* Disallow options on dead channels -- channels that have been closed but
* not yet been deallocated. Such channels can be found if the exit
* handler for channel cleanup has run but the channel is still
* registered in an interpreter.
*/
if (CheckForDeadChannel(interp, statePtr)) {
return TCL_ERROR;
}
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
/*
* If we are in the middle of a background copy, use the saved flags.
*/
if (statePtr->csPtr) {
if (chanPtr == statePtr->csPtr->readPtr) {
flags = statePtr->csPtr->readFlags;
} else {
flags = statePtr->csPtr->writeFlags;
}
} else {
flags = statePtr->flags;
}
/*
* If the optionName is NULL it means that we want a list of all
* options and values.
*/
if (optionName == (char *) NULL) {
|
| ︙ | ︙ | |||
5624 5625 5626 5627 5628 5629 5630 |
}
}
if ((len == 0) || ((len > 7) && (optionName[1] == 'b') &&
(strncmp(optionName, "-buffersize", len) == 0))) {
if (len == 0) {
Tcl_DStringAppendElement(dsPtr, "-buffersize");
}
| | | | | | | | > > > > | | | | | | > > > > | | 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 |
}
}
if ((len == 0) || ((len > 7) && (optionName[1] == 'b') &&
(strncmp(optionName, "-buffersize", len) == 0))) {
if (len == 0) {
Tcl_DStringAppendElement(dsPtr, "-buffersize");
}
TclFormatInt(optionVal, statePtr->bufSize);
Tcl_DStringAppendElement(dsPtr, optionVal);
if (len > 0) {
return TCL_OK;
}
}
if ((len == 0) ||
((len > 2) && (optionName[1] == 'e') &&
(strncmp(optionName, "-encoding", len) == 0))) {
if (len == 0) {
Tcl_DStringAppendElement(dsPtr, "-encoding");
}
if (statePtr->encoding == NULL) {
Tcl_DStringAppendElement(dsPtr, "binary");
} else {
Tcl_DStringAppendElement(dsPtr,
Tcl_GetEncodingName(statePtr->encoding));
}
if (len > 0) {
return TCL_OK;
}
}
if ((len == 0) ||
((len > 2) && (optionName[1] == 'e') &&
(strncmp(optionName, "-eofchar", len) == 0))) {
if (len == 0) {
Tcl_DStringAppendElement(dsPtr, "-eofchar");
}
if (((flags & (TCL_READABLE|TCL_WRITABLE)) ==
(TCL_READABLE|TCL_WRITABLE)) && (len == 0)) {
Tcl_DStringStartSublist(dsPtr);
}
if (flags & TCL_READABLE) {
if (statePtr->inEofChar == 0) {
Tcl_DStringAppendElement(dsPtr, "");
} else {
char buf[4];
sprintf(buf, "%c", statePtr->inEofChar);
Tcl_DStringAppendElement(dsPtr, buf);
}
}
if (flags & TCL_WRITABLE) {
if (statePtr->outEofChar == 0) {
Tcl_DStringAppendElement(dsPtr, "");
} else {
char buf[4];
sprintf(buf, "%c", statePtr->outEofChar);
Tcl_DStringAppendElement(dsPtr, buf);
}
}
if ( !(flags & (TCL_READABLE|TCL_WRITABLE))) {
/* Not readable or writable (server socket) */
Tcl_DStringAppendElement(dsPtr, "");
}
if (((flags & (TCL_READABLE|TCL_WRITABLE)) ==
(TCL_READABLE|TCL_WRITABLE)) && (len == 0)) {
Tcl_DStringEndSublist(dsPtr);
}
if (len > 0) {
return TCL_OK;
}
}
if ((len == 0) ||
((len > 1) && (optionName[1] == 't') &&
(strncmp(optionName, "-translation", len) == 0))) {
if (len == 0) {
Tcl_DStringAppendElement(dsPtr, "-translation");
}
if (((flags & (TCL_READABLE|TCL_WRITABLE)) ==
(TCL_READABLE|TCL_WRITABLE)) && (len == 0)) {
Tcl_DStringStartSublist(dsPtr);
}
if (flags & TCL_READABLE) {
if (statePtr->inputTranslation == TCL_TRANSLATE_AUTO) {
Tcl_DStringAppendElement(dsPtr, "auto");
} else if (statePtr->inputTranslation == TCL_TRANSLATE_CR) {
Tcl_DStringAppendElement(dsPtr, "cr");
} else if (statePtr->inputTranslation == TCL_TRANSLATE_CRLF) {
Tcl_DStringAppendElement(dsPtr, "crlf");
} else {
Tcl_DStringAppendElement(dsPtr, "lf");
}
}
if (flags & TCL_WRITABLE) {
if (statePtr->outputTranslation == TCL_TRANSLATE_AUTO) {
Tcl_DStringAppendElement(dsPtr, "auto");
} else if (statePtr->outputTranslation == TCL_TRANSLATE_CR) {
Tcl_DStringAppendElement(dsPtr, "cr");
} else if (statePtr->outputTranslation == TCL_TRANSLATE_CRLF) {
Tcl_DStringAppendElement(dsPtr, "crlf");
} else {
Tcl_DStringAppendElement(dsPtr, "lf");
}
}
if ( !(flags & (TCL_READABLE|TCL_WRITABLE))) {
/* Not readable or writable (server socket) */
Tcl_DStringAppendElement(dsPtr, "auto");
}
if (((flags & (TCL_READABLE|TCL_WRITABLE)) ==
(TCL_READABLE|TCL_WRITABLE)) && (len == 0)) {
Tcl_DStringEndSublist(dsPtr);
}
if (len > 0) {
return TCL_OK;
}
}
if (chanPtr->typePtr->getOptionProc != (Tcl_DriverGetOptionProc *) NULL) {
/*
* let the driver specific handle additional options
* and result code and message.
*/
return (chanPtr->typePtr->getOptionProc) (chanPtr->instanceData,
interp, optionName, dsPtr);
} else {
/*
* no driver specific options case.
*/
if (len == 0) {
return TCL_OK;
|
| ︙ | ︙ | |||
5769 5770 5771 5772 5773 5774 5775 |
Tcl_SetChannelOption(interp, chan, optionName, newValue)
Tcl_Interp *interp; /* For error reporting - can be NULL. */
Tcl_Channel chan; /* Channel on which to set mode. */
char *optionName; /* Which option to set? */
char *newValue; /* New value for option. */
{
int newMode; /* New (numeric) mode to sert. */
| | > < < | | | < | > | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 |
Tcl_SetChannelOption(interp, chan, optionName, newValue)
Tcl_Interp *interp; /* For error reporting - can be NULL. */
Tcl_Channel chan; /* Channel on which to set mode. */
char *optionName; /* Which option to set? */
char *newValue; /* New value for option. */
{
int newMode; /* New (numeric) mode to sert. */
Channel *chanPtr = (Channel *) chan; /* The real IO channel. */
ChannelState *statePtr = chanPtr->state; /* state info for channel */
size_t len; /* Length of optionName string. */
int argc;
char **argv;
/*
* If the channel is in the middle of a background copy, fail.
*/
if (statePtr->csPtr) {
if (interp) {
Tcl_AppendResult(interp,
"unable to set channel options: background copy in progress",
(char *) NULL);
}
return TCL_ERROR;
}
/*
* Disallow options on dead channels -- channels that have been closed but
* not yet been deallocated. Such channels can be found if the exit
* handler for channel cleanup has run but the channel is still
* registered in an interpreter.
*/
if (CheckForDeadChannel(NULL, statePtr)) {
return TCL_ERROR;
}
/*
* This operation should occur at the top of a channel stack.
*/
chanPtr = statePtr->topChanPtr;
len = strlen(optionName);
if ((len > 2) && (optionName[1] == 'b') &&
(strncmp(optionName, "-blocking", len) == 0)) {
if (Tcl_GetBoolean(interp, newValue, &newMode) == TCL_ERROR) {
return TCL_ERROR;
}
if (newMode) {
newMode = TCL_MODE_BLOCKING;
} else {
newMode = TCL_MODE_NONBLOCKING;
}
return SetBlockMode(interp, chanPtr, newMode);
} else if ((len > 7) && (optionName[1] == 'b') &&
(strncmp(optionName, "-buffering", len) == 0)) {
len = strlen(newValue);
if ((newValue[0] == 'f') && (strncmp(newValue, "full", len) == 0)) {
statePtr->flags &=
(~(CHANNEL_UNBUFFERED|CHANNEL_LINEBUFFERED));
} else if ((newValue[0] == 'l') &&
(strncmp(newValue, "line", len) == 0)) {
statePtr->flags &= (~(CHANNEL_UNBUFFERED));
statePtr->flags |= CHANNEL_LINEBUFFERED;
} else if ((newValue[0] == 'n') &&
(strncmp(newValue, "none", len) == 0)) {
statePtr->flags &= (~(CHANNEL_LINEBUFFERED));
statePtr->flags |= CHANNEL_UNBUFFERED;
} else {
if (interp) {
Tcl_AppendResult(interp, "bad value for -buffering: ",
"must be one of full, line, or none",
(char *) NULL);
return TCL_ERROR;
}
}
return TCL_OK;
} else if ((len > 7) && (optionName[1] == 'b') &&
(strncmp(optionName, "-buffersize", len) == 0)) {
statePtr->bufSize = atoi(newValue); /* INTL: "C", UTF safe. */
if ((statePtr->bufSize < 10) || (statePtr->bufSize > (1024 * 1024))) {
statePtr->bufSize = CHANNELBUFFER_DEFAULT_SIZE;
}
} else if ((len > 2) && (optionName[1] == 'e') &&
(strncmp(optionName, "-encoding", len) == 0)) {
Tcl_Encoding encoding;
if ((newValue[0] == '\0') || (strcmp(newValue, "binary") == 0)) {
encoding = NULL;
} else {
encoding = Tcl_GetEncoding(interp, newValue);
if (encoding == NULL) {
return TCL_ERROR;
}
}
Tcl_FreeEncoding(statePtr->encoding);
statePtr->encoding = encoding;
statePtr->inputEncodingState = NULL;
statePtr->inputEncodingFlags = TCL_ENCODING_START;
statePtr->outputEncodingState = NULL;
statePtr->outputEncodingFlags = TCL_ENCODING_START;
statePtr->flags &= ~CHANNEL_NEED_MORE_DATA;
UpdateInterest(chanPtr);
} else if ((len > 2) && (optionName[1] == 'e') &&
(strncmp(optionName, "-eofchar", len) == 0)) {
if (Tcl_SplitList(interp, newValue, &argc, &argv) == TCL_ERROR) {
return TCL_ERROR;
}
if (argc == 0) {
statePtr->inEofChar = 0;
statePtr->outEofChar = 0;
} else if (argc == 1) {
if (statePtr->flags & TCL_WRITABLE) {
statePtr->outEofChar = (int) argv[0][0];
}
if (statePtr->flags & TCL_READABLE) {
statePtr->inEofChar = (int) argv[0][0];
}
} else if (argc != 2) {
if (interp) {
Tcl_AppendResult(interp,
"bad value for -eofchar: should be a list of zero,",
" one, or two elements", (char *) NULL);
}
ckfree((char *) argv);
return TCL_ERROR;
} else {
if (statePtr->flags & TCL_READABLE) {
statePtr->inEofChar = (int) argv[0][0];
}
if (statePtr->flags & TCL_WRITABLE) {
statePtr->outEofChar = (int) argv[1][0];
}
}
if (argv != (char **) NULL) {
ckfree((char *) argv);
}
return TCL_OK;
} else if ((len > 1) && (optionName[1] == 't') &&
(strncmp(optionName, "-translation", len) == 0)) {
char *readMode, *writeMode;
if (Tcl_SplitList(interp, newValue, &argc, &argv) == TCL_ERROR) {
return TCL_ERROR;
}
if (argc == 1) {
readMode = (statePtr->flags & TCL_READABLE) ? argv[0] : NULL;
writeMode = (statePtr->flags & TCL_WRITABLE) ? argv[0] : NULL;
} else if (argc == 2) {
readMode = (statePtr->flags & TCL_READABLE) ? argv[0] : NULL;
writeMode = (statePtr->flags & TCL_WRITABLE) ? argv[1] : NULL;
} else {
if (interp) {
Tcl_AppendResult(interp,
"bad value for -translation: must be a one or two",
" element list", (char *) NULL);
}
ckfree((char *) argv);
return TCL_ERROR;
}
if (readMode) {
if (*readMode == '\0') {
newMode = statePtr->inputTranslation;
} else if (strcmp(readMode, "auto") == 0) {
newMode = TCL_TRANSLATE_AUTO;
} else if (strcmp(readMode, "binary") == 0) {
newMode = TCL_TRANSLATE_LF;
statePtr->inEofChar = 0;
Tcl_FreeEncoding(statePtr->encoding);
statePtr->encoding = NULL;
} else if (strcmp(readMode, "lf") == 0) {
newMode = TCL_TRANSLATE_LF;
} else if (strcmp(readMode, "cr") == 0) {
newMode = TCL_TRANSLATE_CR;
} else if (strcmp(readMode, "crlf") == 0) {
newMode = TCL_TRANSLATE_CRLF;
} else if (strcmp(readMode, "platform") == 0) {
|
| ︙ | ︙ | |||
5955 5956 5957 5958 5959 5960 5961 | /* * Reset the EOL flags since we need to look at any buffered * data to see if the new translation mode allows us to * complete the line. */ | | | | | | | | | | | | | | | | | 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 |
/*
* Reset the EOL flags since we need to look at any buffered
* data to see if the new translation mode allows us to
* complete the line.
*/
if (newMode != statePtr->inputTranslation) {
statePtr->inputTranslation = (Tcl_EolTranslation) newMode;
statePtr->flags &= ~(INPUT_SAW_CR);
statePtr->flags &= ~(CHANNEL_NEED_MORE_DATA);
UpdateInterest(chanPtr);
}
}
if (writeMode) {
if (*writeMode == '\0') {
/* Do nothing. */
} else if (strcmp(writeMode, "auto") == 0) {
/*
* This is a hack to get TCP sockets to produce output
* in CRLF mode if they are being set into AUTO mode.
* A better solution for achieving this effect will be
* coded later.
*/
if (strcmp(Tcl_ChannelName(chanPtr->typePtr), "tcp") == 0) {
statePtr->outputTranslation = TCL_TRANSLATE_CRLF;
} else {
statePtr->outputTranslation = TCL_PLATFORM_TRANSLATION;
}
} else if (strcmp(writeMode, "binary") == 0) {
statePtr->outEofChar = 0;
statePtr->outputTranslation = TCL_TRANSLATE_LF;
Tcl_FreeEncoding(statePtr->encoding);
statePtr->encoding = NULL;
} else if (strcmp(writeMode, "lf") == 0) {
statePtr->outputTranslation = TCL_TRANSLATE_LF;
} else if (strcmp(writeMode, "cr") == 0) {
statePtr->outputTranslation = TCL_TRANSLATE_CR;
} else if (strcmp(writeMode, "crlf") == 0) {
statePtr->outputTranslation = TCL_TRANSLATE_CRLF;
} else if (strcmp(writeMode, "platform") == 0) {
statePtr->outputTranslation = TCL_PLATFORM_TRANSLATION;
} else {
if (interp) {
Tcl_AppendResult(interp,
"bad value for -translation: ",
"must be one of auto, binary, cr, lf, crlf,",
" or platform", (char *) NULL);
}
|
| ︙ | ︙ | |||
6015 6016 6017 6018 6019 6020 6021 |
return Tcl_BadChannelOption(interp, optionName, (char *) NULL);
}
/*
* If bufsize changes, need to get rid of old utility buffer.
*/
| | | | | | | | | | | | | | | | | | 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 |
return Tcl_BadChannelOption(interp, optionName, (char *) NULL);
}
/*
* If bufsize changes, need to get rid of old utility buffer.
*/
if (statePtr->saveInBufPtr != NULL) {
RecycleBuffer(statePtr, statePtr->saveInBufPtr, 1);
statePtr->saveInBufPtr = NULL;
}
if (statePtr->inQueueHead != NULL) {
if ((statePtr->inQueueHead->nextPtr == NULL)
&& (statePtr->inQueueHead->nextAdded ==
statePtr->inQueueHead->nextRemoved)) {
RecycleBuffer(statePtr, statePtr->inQueueHead, 1);
statePtr->inQueueHead = NULL;
statePtr->inQueueTail = NULL;
}
}
/*
* If encoding or bufsize changes, need to update output staging buffer.
*/
if (statePtr->outputStage != NULL) {
ckfree((char *) statePtr->outputStage);
statePtr->outputStage = NULL;
}
if ((statePtr->encoding != NULL) && (statePtr->flags & TCL_WRITABLE)) {
statePtr->outputStage = (char *)
ckalloc((unsigned) (statePtr->bufSize + 2));
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 |
*/
static void
CleanupChannelHandlers(interp, chanPtr)
Tcl_Interp *interp;
Channel *chanPtr;
{
EventScriptRecord *sPtr, *prevPtr, *nextPtr;
/*
* Remove fileevent records on this channel that refer to the
* given interpreter.
*/
| > | | | | | | 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 |
*/
static void
CleanupChannelHandlers(interp, chanPtr)
Tcl_Interp *interp;
Channel *chanPtr;
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
EventScriptRecord *sPtr, *prevPtr, *nextPtr;
/*
* Remove fileevent records on this channel that refer to the
* given interpreter.
*/
for (sPtr = statePtr->scriptRecordPtr,
prevPtr = (EventScriptRecord *) NULL;
sPtr != (EventScriptRecord *) NULL;
sPtr = nextPtr) {
nextPtr = sPtr->nextPtr;
if (sPtr->interp == interp) {
if (prevPtr == (EventScriptRecord *) NULL) {
statePtr->scriptRecordPtr = nextPtr;
} else {
prevPtr->nextPtr = nextPtr;
}
Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr,
TclChannelEventScriptInvoker, (ClientData) sPtr);
Tcl_DecrRefCount(sPtr->scriptPtr);
ckfree((char *) sPtr);
} else {
prevPtr = sPtr;
}
}
|
| ︙ | ︙ | |||
6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 |
Tcl_NotifyChannel(channel, mask)
Tcl_Channel channel; /* Channel that detected an event. */
int mask; /* OR'ed combination of TCL_READABLE,
* TCL_WRITABLE, or TCL_EXCEPTION: indicates
* which events were detected. */
{
Channel *chanPtr = (Channel *) channel;
ChannelHandler *chPtr;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
NextChannelHandler nh;
| > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > | > > | > > | > > > > > > > > > > > > | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < < < < < | | | | < < < | 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 |
Tcl_NotifyChannel(channel, mask)
Tcl_Channel channel; /* Channel that detected an event. */
int mask; /* OR'ed combination of TCL_READABLE,
* TCL_WRITABLE, or TCL_EXCEPTION: indicates
* which events were detected. */
{
Channel *chanPtr = (Channel *) channel;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelHandler *chPtr;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
NextChannelHandler nh;
Channel* upChanPtr;
Tcl_ChannelType* upTypePtr;
/*
* In contrast to the other API functions this procedure walks towards
* the top of a stack and not down from it.
*
* The channel calling this procedure is the one who generated the event,
* and thus does not take part in handling it. IOW, its HandlerProc is
* not called, instead we begin with the channel above it.
*
* This behaviour also allows the transformation channels to
* generate their own events and pass them upward.
*/
while (mask && (chanPtr->upChanPtr != ((Channel*) NULL))) {
upChanPtr = chanPtr->upChanPtr;
upTypePtr = upChanPtr->typePtr;
if ((Tcl_ChannelVersion(upTypePtr) == TCL_CHANNEL_VERSION_2) &&
(Tcl_ChannelHandlerProc(upTypePtr) !=
((Tcl_DriverHandlerProc *) NULL))) {
Tcl_DriverHandlerProc* handlerProc =
Tcl_ChannelHandlerProc(upTypePtr);
mask = (*handlerProc) (upChanPtr->instanceData, mask);
}
/* ELSE:
* Ignore transformations which are unable to handle the event
* coming from below. Assume that they don't change the mask and
* pass it on.
*/
chanPtr = upChanPtr;
}
channel = (Tcl_Channel) chanPtr;
/*
* Here we have either reached the top of the stack or the mask is
* empty. We break out of the procedure if it is the latter.
*/
if (!mask) {
return;
}
/*
* We are now above the topmost channel in a stack and have events
* left. Now call the channel handlers as usual.
*
* Preserve the channel struct in case the script closes it.
*/
Tcl_Preserve((ClientData) channel);
Tcl_Preserve((ClientData) statePtr);
/*
* If we are flushing in the background, be sure to call FlushChannel
* for writable events. Note that we have to discard the writable
* event so we don't call any write handlers before the flush is
* complete.
*/
if ((statePtr->flags & BG_FLUSH_SCHEDULED) && (mask & TCL_WRITABLE)) {
FlushChannel(NULL, chanPtr, 1);
mask &= ~TCL_WRITABLE;
}
/*
* Add this invocation to the list of recursive invocations of
* ChannelHandlerEventProc.
*/
nh.nextHandlerPtr = (ChannelHandler *) NULL;
nh.nestedHandlerPtr = tsdPtr->nestedHandlerPtr;
tsdPtr->nestedHandlerPtr = &nh;
for (chPtr = statePtr->chPtr; chPtr != (ChannelHandler *) NULL; ) {
/*
* If this channel handler is interested in any of the events that
* have occurred on the channel, invoke its procedure.
*/
if ((chPtr->mask & mask) != 0) {
nh.nextHandlerPtr = chPtr->nextPtr;
(*(chPtr->proc))(chPtr->clientData, mask);
chPtr = nh.nextHandlerPtr;
} else {
chPtr = chPtr->nextPtr;
}
}
/*
* Update the notifier interest, since it may have changed after
* invoking event handlers. Skip that if the channel was deleted
* in the call to the channel handler.
*/
if (chanPtr->typePtr != NULL) {
UpdateInterest(chanPtr);
}
Tcl_Release((ClientData) statePtr);
Tcl_Release((ClientData) channel);
tsdPtr->nestedHandlerPtr = nh.nestedHandlerPtr;
}
/*
*----------------------------------------------------------------------
*
* UpdateInterest --
*
|
| ︙ | ︙ | |||
6224 6225 6226 6227 6228 6229 6230 |
*----------------------------------------------------------------------
*/
static void
UpdateInterest(chanPtr)
Channel *chanPtr; /* Channel to update. */
{
| > | | | | | | | | | 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 |
*----------------------------------------------------------------------
*/
static void
UpdateInterest(chanPtr)
Channel *chanPtr; /* Channel to update. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
int mask = statePtr->interestMask;
/*
* If there are flushed buffers waiting to be written, then
* we need to watch for the channel to become writable.
*/
if (statePtr->flags & BG_FLUSH_SCHEDULED) {
mask |= TCL_WRITABLE;
}
/*
* If there is data in the input queue, and we aren't waiting for more
* data, then we need to schedule a timer so we don't block in the
* notifier. Also, cancel the read interest so we don't get duplicate
* events.
*/
if (mask & TCL_READABLE) {
if (!(statePtr->flags & CHANNEL_NEED_MORE_DATA)
&& (statePtr->inQueueHead != (ChannelBuffer *) NULL)
&& (statePtr->inQueueHead->nextRemoved <
statePtr->inQueueHead->nextAdded)) {
mask &= ~TCL_READABLE;
if (!statePtr->timer) {
statePtr->timer = Tcl_CreateTimerHandler(0, ChannelTimerProc,
(ClientData) chanPtr);
}
}
}
(chanPtr->typePtr->watchProc)(chanPtr->instanceData, mask);
}
|
| ︙ | ︙ | |||
6279 6280 6281 6282 6283 6284 6285 6286 |
*/
static void
ChannelTimerProc(clientData)
ClientData clientData;
{
Channel *chanPtr = (Channel *) clientData;
| > | | | | | | | > > > > > > > > > > > > > | > > | | | 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 |
*/
static void
ChannelTimerProc(clientData)
ClientData clientData;
{
Channel *chanPtr = (Channel *) clientData;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
if (!(statePtr->flags & CHANNEL_NEED_MORE_DATA)
&& (statePtr->interestMask & TCL_READABLE)
&& (statePtr->inQueueHead != (ChannelBuffer *) NULL)
&& (statePtr->inQueueHead->nextRemoved <
statePtr->inQueueHead->nextAdded)) {
/*
* Restart the timer in case a channel handler reenters the
* event loop before UpdateInterest gets called by Tcl_NotifyChannel.
*/
statePtr->timer = Tcl_CreateTimerHandler(0, ChannelTimerProc,
(ClientData) chanPtr);
/* Set the TIMER flag to notify the higher levels that the
* driver might have no data for us. We do this only if we are
* in non-blocking mode and the driver has no BlockModeProc
* because only then we really don't know if the driver will
* block or not. A similar test is done in "PeekAhead".
*/
if ((statePtr->flags & CHANNEL_NONBLOCKING) &&
(Tcl_ChannelBlockModeProc(chanPtr->typePtr) == NULL)) {
statePtr->flags |= CHANNEL_TIMER_FEV;
}
Tcl_Preserve((ClientData) statePtr);
Tcl_NotifyChannel((Tcl_Channel)chanPtr, TCL_READABLE);
statePtr->flags &= ~CHANNEL_TIMER_FEV;
Tcl_Release((ClientData) statePtr);
} else {
statePtr->timer = NULL;
UpdateInterest(chanPtr);
}
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
6335 6336 6337 6338 6339 6340 6341 |
* proc should be called. Use 0 to
* disable a registered handler. */
Tcl_ChannelProc *proc; /* Procedure to call for each
* selected event. */
ClientData clientData; /* Arbitrary data to pass to proc. */
{
ChannelHandler *chPtr;
| | | < | | | | | | | | | | | 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 |
* proc should be called. Use 0 to
* disable a registered handler. */
Tcl_ChannelProc *proc; /* Procedure to call for each
* selected event. */
ClientData clientData; /* Arbitrary data to pass to proc. */
{
ChannelHandler *chPtr;
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
/*
* Check whether this channel handler is not already registered. If
* it is not, create a new record, else reuse existing record (smash
* current values).
*/
for (chPtr = statePtr->chPtr;
chPtr != (ChannelHandler *) NULL;
chPtr = chPtr->nextPtr) {
if ((chPtr->chanPtr == chanPtr) && (chPtr->proc == proc) &&
(chPtr->clientData == clientData)) {
break;
}
}
if (chPtr == (ChannelHandler *) NULL) {
chPtr = (ChannelHandler *) ckalloc((unsigned) sizeof(ChannelHandler));
chPtr->mask = 0;
chPtr->proc = proc;
chPtr->clientData = clientData;
chPtr->chanPtr = chanPtr;
chPtr->nextPtr = statePtr->chPtr;
statePtr->chPtr = chPtr;
}
/*
* The remainder of the initialization below is done regardless of
* whether or not this is a new record or a modification of an old
* one.
*/
chPtr->mask = mask;
/*
* Recompute the interest mask for the channel - this call may actually
* be disabling an existing handler.
*/
statePtr->interestMask = 0;
for (chPtr = statePtr->chPtr;
chPtr != (ChannelHandler *) NULL;
chPtr = chPtr->nextPtr) {
statePtr->interestMask |= chPtr->mask;
}
UpdateInterest(statePtr->topChanPtr);
}
/*
*----------------------------------------------------------------------
*
* Tcl_DeleteChannelHandler --
*
|
| ︙ | ︙ | |||
6414 6415 6416 6417 6418 6419 6420 6421 |
Tcl_Channel chan; /* The channel for which to remove the
* callback. */
Tcl_ChannelProc *proc; /* The procedure in the callback to delete. */
ClientData clientData; /* The client data in the callback
* to delete. */
{
ChannelHandler *chPtr, *prevChPtr;
| > | | < < | | | | | | | | | | | | | | 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 |
Tcl_Channel chan; /* The channel for which to remove the
* callback. */
Tcl_ChannelProc *proc; /* The procedure in the callback to delete. */
ClientData clientData; /* The client data in the callback
* to delete. */
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
ChannelHandler *chPtr, *prevChPtr;
Channel *chanPtr = (Channel *) chan;
ChannelState *statePtr = chanPtr->state; /* state info for channel */
NextChannelHandler *nhPtr;
/*
* Find the entry and the previous one in the list.
*/
for (prevChPtr = (ChannelHandler *) NULL, chPtr = statePtr->chPtr;
chPtr != (ChannelHandler *) NULL;
chPtr = chPtr->nextPtr) {
if ((chPtr->chanPtr == chanPtr) && (chPtr->clientData == clientData)
&& (chPtr->proc == proc)) {
break;
}
prevChPtr = chPtr;
}
/*
* If not found, return without doing anything.
*/
if (chPtr == (ChannelHandler *) NULL) {
return;
}
/*
* If ChannelHandlerEventProc is about to process this handler, tell it to
* process the next one instead - we are going to delete *this* one.
*/
for (nhPtr = tsdPtr->nestedHandlerPtr;
nhPtr != (NextChannelHandler *) NULL;
nhPtr = nhPtr->nestedHandlerPtr) {
if (nhPtr->nextHandlerPtr == chPtr) {
nhPtr->nextHandlerPtr = chPtr->nextPtr;
}
}
/*
* Splice it out of the list of channel handlers.
*/
if (prevChPtr == (ChannelHandler *) NULL) {
statePtr->chPtr = chPtr->nextPtr;
} else {
prevChPtr->nextPtr = chPtr->nextPtr;
}
ckfree((char *) chPtr);
/*
* Recompute the interest list for the channel, so that infinite loops
* will not result if Tcl_DeleteChannelHandler is called inside an
* event.
*/
statePtr->interestMask = 0;
for (chPtr = statePtr->chPtr;
chPtr != (ChannelHandler *) NULL;
chPtr = chPtr->nextPtr) {
statePtr->interestMask |= chPtr->mask;
}
UpdateInterest(statePtr->topChanPtr);
}
/*
*----------------------------------------------------------------------
*
* DeleteScriptRecord --
*
|
| ︙ | ︙ | |||
6509 6510 6511 6512 6513 6514 6515 6516 6517 |
Tcl_Interp *interp; /* Interpreter in which script was to be
* executed. */
Channel *chanPtr; /* The channel for which to delete the
* script record (if any). */
int mask; /* Events in mask must exactly match mask
* of script to delete. */
{
EventScriptRecord *esPtr, *prevEsPtr;
| > | | | | | | | 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 |
Tcl_Interp *interp; /* Interpreter in which script was to be
* executed. */
Channel *chanPtr; /* The channel for which to delete the
* script record (if any). */
int mask; /* Events in mask must exactly match mask
* of script to delete. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
EventScriptRecord *esPtr, *prevEsPtr;
for (esPtr = statePtr->scriptRecordPtr,
prevEsPtr = (EventScriptRecord *) NULL;
esPtr != (EventScriptRecord *) NULL;
prevEsPtr = esPtr, esPtr = esPtr->nextPtr) {
if ((esPtr->interp == interp) && (esPtr->mask == mask)) {
if (esPtr == statePtr->scriptRecordPtr) {
statePtr->scriptRecordPtr = esPtr->nextPtr;
} else {
prevEsPtr->nextPtr = esPtr->nextPtr;
}
Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr,
TclChannelEventScriptInvoker, (ClientData) esPtr);
Tcl_DecrRefCount(esPtr->scriptPtr);
ckfree((char *) esPtr);
break;
}
}
|
| ︙ | ︙ | |||
6560 6561 6562 6563 6564 6565 6566 6567 6568 |
* the stored script. */
Channel *chanPtr; /* Channel for which script is to
* be stored. */
int mask; /* Set of events for which script
* will be invoked. */
Tcl_Obj *scriptPtr; /* Pointer to script object. */
{
EventScriptRecord *esPtr;
| > | | | | | | | | | | < | | | | | 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 |
* the stored script. */
Channel *chanPtr; /* Channel for which script is to
* be stored. */
int mask; /* Set of events for which script
* will be invoked. */
Tcl_Obj *scriptPtr; /* Pointer to script object. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
EventScriptRecord *esPtr;
for (esPtr = statePtr->scriptRecordPtr;
esPtr != (EventScriptRecord *) NULL;
esPtr = esPtr->nextPtr) {
if ((esPtr->interp == interp) && (esPtr->mask == mask)) {
Tcl_DecrRefCount(esPtr->scriptPtr);
esPtr->scriptPtr = (Tcl_Obj *) NULL;
break;
}
}
if (esPtr == (EventScriptRecord *) NULL) {
esPtr = (EventScriptRecord *) ckalloc((unsigned)
sizeof(EventScriptRecord));
Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask,
TclChannelEventScriptInvoker, (ClientData) esPtr);
esPtr->nextPtr = statePtr->scriptRecordPtr;
statePtr->scriptRecordPtr = esPtr;
}
esPtr->chanPtr = chanPtr;
esPtr->interp = interp;
esPtr->mask = mask;
Tcl_IncrRefCount(scriptPtr);
esPtr->scriptPtr = scriptPtr;
}
/*
*----------------------------------------------------------------------
*
* TclChannelEventScriptInvoker --
*
* Invokes a script scheduled by "fileevent" for when the channel
* becomes ready for IO. This function is invoked by the channel
* handler which was created by the Tcl "fileevent" command.
*
* Results:
* None.
*
* Side effects:
* Whatever the script does.
*
*----------------------------------------------------------------------
*/
void
TclChannelEventScriptInvoker(clientData, mask)
ClientData clientData; /* The script+interp record. */
int mask; /* Not used. */
{
Tcl_Interp *interp; /* Interpreter in which to eval the script. */
Channel *chanPtr; /* The channel for which this handler is
* registered. */
EventScriptRecord *esPtr; /* The event script + interpreter to eval it
* in. */
int result; /* Result of call to eval script. */
esPtr = (EventScriptRecord *) clientData;
chanPtr = esPtr->chanPtr;
mask = esPtr->mask;
interp = esPtr->interp;
/*
* We must preserve the interpreter so we can report errors on it
* later. Note that we do not need to preserve the channel because
* that is done by Tcl_NotifyChannel before calling channel handlers.
*/
Tcl_Preserve((ClientData) interp);
|
| ︙ | ︙ | |||
6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 |
* for which to create the handler
* is found. */
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
Channel *chanPtr; /* The channel to create
* the handler for. */
Tcl_Channel chan; /* The opaque type for the channel. */
char *chanName;
int modeIndex; /* Index of mode argument. */
int mask;
static char *modeOptions[] = {"readable", "writable", NULL};
static int maskArray[] = {TCL_READABLE, TCL_WRITABLE};
| > | 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 |
* for which to create the handler
* is found. */
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
Channel *chanPtr; /* The channel to create
* the handler for. */
ChannelState *statePtr; /* state info for channel */
Tcl_Channel chan; /* The opaque type for the channel. */
char *chanName;
int modeIndex; /* Index of mode argument. */
int mask;
static char *modeOptions[] = {"readable", "writable", NULL};
static int maskArray[] = {TCL_READABLE, TCL_WRITABLE};
|
| ︙ | ︙ | |||
6701 6702 6703 6704 6705 6706 6707 |
mask = maskArray[modeIndex];
chanName = Tcl_GetString(objv[1]);
chan = Tcl_GetChannel(interp, chanName, NULL);
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
| | > | | | 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 |
mask = maskArray[modeIndex];
chanName = Tcl_GetString(objv[1]);
chan = Tcl_GetChannel(interp, chanName, NULL);
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
chanPtr = (Channel *) chan;
statePtr = chanPtr->state;
if ((statePtr->flags & mask) == 0) {
Tcl_AppendResult(interp, "channel is not ",
(mask == TCL_READABLE) ? "readable" : "writable",
(char *) NULL);
return TCL_ERROR;
}
/*
* If we are supposed to return the script, do so.
*/
if (objc == 3) {
EventScriptRecord *esPtr;
for (esPtr = statePtr->scriptRecordPtr;
esPtr != (EventScriptRecord *) NULL;
esPtr = esPtr->nextPtr) {
if ((esPtr->interp == interp) && (esPtr->mask == mask)) {
Tcl_SetObjResult(interp, esPtr->scriptPtr);
break;
}
}
|
| ︙ | ︙ | |||
6749 6750 6751 6752 6753 6754 6755 |
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 |
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* TclCopyChannel --
*
* This routine copies data from one channel to another, either
* synchronously or asynchronously. If a command script is
* supplied, the operation runs in the background. The script
* is invoked when the copy completes. Otherwise the function
* waits until the copy is completed before returning.
|
| ︙ | ︙ | |||
7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 |
Tcl_Channel inChan; /* Channel to read from. */
Tcl_Channel outChan; /* Channel to write to. */
int toRead; /* Amount of data to copy, or -1 for all. */
Tcl_Obj *cmdPtr; /* Pointer to script to execute or NULL. */
{
Channel *inPtr = (Channel *) inChan;
Channel *outPtr = (Channel *) outChan;
int readFlags, writeFlags;
CopyState *csPtr;
int nonBlocking = (cmdPtr) ? CHANNEL_NONBLOCKING : 0;
| > > > > | | | | | 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 |
Tcl_Channel inChan; /* Channel to read from. */
Tcl_Channel outChan; /* Channel to write to. */
int toRead; /* Amount of data to copy, or -1 for all. */
Tcl_Obj *cmdPtr; /* Pointer to script to execute or NULL. */
{
Channel *inPtr = (Channel *) inChan;
Channel *outPtr = (Channel *) outChan;
ChannelState *inStatePtr, *outStatePtr;
int readFlags, writeFlags;
CopyState *csPtr;
int nonBlocking = (cmdPtr) ? CHANNEL_NONBLOCKING : 0;
inStatePtr = inPtr->state;
outStatePtr = outPtr->state;
if (inStatePtr->csPtr) {
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "channel \"",
Tcl_GetChannelName(inChan), "\" is busy", NULL);
return TCL_ERROR;
}
if (outStatePtr->csPtr) {
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "channel \"",
Tcl_GetChannelName(outChan), "\" is busy", NULL);
return TCL_ERROR;
}
readFlags = inStatePtr->flags;
writeFlags = outStatePtr->flags;
/*
* Set up the blocking mode appropriately. Background copies need
* non-blocking channels. Foreground copies need blocking channels.
* If there is an error, restore the old blocking mode.
*/
|
| ︙ | ︙ | |||
7360 7361 7362 7363 7364 7365 7366 |
}
}
/*
* Make sure the output side is unbuffered.
*/
| | | | | | | | | | | | | 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 |
}
}
/*
* Make sure the output side is unbuffered.
*/
outStatePtr->flags = (outStatePtr->flags & ~(CHANNEL_LINEBUFFERED))
| CHANNEL_UNBUFFERED;
/*
* Allocate a new CopyState to maintain info about the current copy in
* progress. This structure will be deallocated when the copy is
* completed.
*/
csPtr = (CopyState*) ckalloc(sizeof(CopyState) + inStatePtr->bufSize);
csPtr->bufSize = inStatePtr->bufSize;
csPtr->readPtr = inPtr;
csPtr->writePtr = outPtr;
csPtr->readFlags = readFlags;
csPtr->writeFlags = writeFlags;
csPtr->toRead = toRead;
csPtr->total = 0;
csPtr->interp = interp;
if (cmdPtr) {
Tcl_IncrRefCount(cmdPtr);
}
csPtr->cmdPtr = cmdPtr;
inStatePtr->csPtr = csPtr;
outStatePtr->csPtr = csPtr;
/*
* Start copying data between the channels.
*/
return CopyData(csPtr, 0);
}
|
| ︙ | ︙ | |||
7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 |
CopyData(csPtr, mask)
CopyState *csPtr; /* State of copy operation. */
int mask; /* Current channel event flags. */
{
Tcl_Interp *interp;
Tcl_Obj *cmdPtr, *errObj = NULL;
Tcl_Channel inChan, outChan;
int result = TCL_OK;
int size;
int total;
| > | > > | | | > > > > | | | | | | | < | | 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 |
CopyData(csPtr, mask)
CopyState *csPtr; /* State of copy operation. */
int mask; /* Current channel event flags. */
{
Tcl_Interp *interp;
Tcl_Obj *cmdPtr, *errObj = NULL;
Tcl_Channel inChan, outChan;
ChannelState *inStatePtr, *outStatePtr;
int result = TCL_OK;
int size;
int total;
inChan = (Tcl_Channel) csPtr->readPtr;
outChan = (Tcl_Channel) csPtr->writePtr;
inStatePtr = csPtr->readPtr->state;
outStatePtr = csPtr->writePtr->state;
interp = csPtr->interp;
cmdPtr = csPtr->cmdPtr;
/*
* Copy the data the slow way, using the translation mechanism.
*
* Note: We have make sure that we use the topmost channel in a stack
* for the copying. The caller uses Tcl_GetChannel to access it, and
* thus gets the bottom of the stack.
*/
while (csPtr->toRead != 0) {
/*
* Check for unreported background errors.
*/
if (inStatePtr->unreportedError != 0) {
Tcl_SetErrno(inStatePtr->unreportedError);
inStatePtr->unreportedError = 0;
goto readError;
}
if (outStatePtr->unreportedError != 0) {
Tcl_SetErrno(outStatePtr->unreportedError);
outStatePtr->unreportedError = 0;
goto writeError;
}
/*
* Read up to bufSize bytes.
*/
if ((csPtr->toRead == -1) || (csPtr->toRead > csPtr->bufSize)) {
size = csPtr->bufSize;
} else {
size = csPtr->toRead;
}
size = DoRead(inStatePtr->topChanPtr, csPtr->buffer, size);
if (size < 0) {
readError:
errObj = Tcl_NewObj();
Tcl_AppendStringsToObj(errObj, "error reading \"",
Tcl_GetChannelName(inChan), "\": ",
Tcl_PosixError(interp), (char *) NULL);
|
| ︙ | ︙ | |||
7490 7491 7492 7493 7494 7495 7496 | return TCL_OK; } /* * Now write the buffer out. */ | | > > > > > > > > > > > > | | < < < < < < < < < | 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 |
return TCL_OK;
}
/*
* Now write the buffer out.
*/
size = DoWrite(outStatePtr->topChanPtr, csPtr->buffer, size);
if (size < 0) {
writeError:
errObj = Tcl_NewObj();
Tcl_AppendStringsToObj(errObj, "error writing \"",
Tcl_GetChannelName(outChan), "\": ",
Tcl_PosixError(interp), (char *) NULL);
break;
}
/*
* Update the current byte count. Do it now so the count is
* valid before a return or break takes us out of the loop.
* The invariant at the top of the loop should be that
* csPtr->toRead holds the number of bytes left to copy.
*/
if (csPtr->toRead != -1) {
csPtr->toRead -= size;
}
csPtr->total += size;
/*
* Check to see if the write is happening in the background. If so,
* stop copying and wait for the channel to become writable again.
*/
if (outStatePtr->flags & BG_FLUSH_SCHEDULED) {
if (!(mask & TCL_WRITABLE)) {
if (mask & TCL_READABLE) {
Tcl_DeleteChannelHandler(inChan, CopyEventProc,
(ClientData) csPtr);
}
Tcl_CreateChannelHandler(outChan, TCL_WRITABLE,
CopyEventProc, (ClientData) csPtr);
}
return TCL_OK;
}
/*
* For background copies, we only do one buffer per invocation so
* we don't starve the rest of the system.
*/
if (cmdPtr) {
/*
|
| ︙ | ︙ | |||
7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 |
static int
DoRead(chanPtr, bufPtr, toRead)
Channel *chanPtr; /* The channel from which to read. */
char *bufPtr; /* Where to store input read. */
int toRead; /* Maximum number of bytes to read. */
{
int copied; /* How many characters were copied into
* the result string? */
int copiedNow; /* How many characters were copied from
* the current input buffer? */
int result; /* Of calling GetInput. */
| > | | | | | | | | | | | 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 |
static int
DoRead(chanPtr, bufPtr, toRead)
Channel *chanPtr; /* The channel from which to read. */
char *bufPtr; /* Where to store input read. */
int toRead; /* Maximum number of bytes to read. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
int copied; /* How many characters were copied into
* the result string? */
int copiedNow; /* How many characters were copied from
* the current input buffer? */
int result; /* Of calling GetInput. */
/*
* If we have not encountered a sticky EOF, clear the EOF bit. Either
* way clear the BLOCKED bit. We want to discover these anew during
* each operation.
*/
if (!(statePtr->flags & CHANNEL_STICKY_EOF)) {
statePtr->flags &= ~CHANNEL_EOF;
}
statePtr->flags &= ~(CHANNEL_BLOCKED | CHANNEL_NEED_MORE_DATA);
for (copied = 0; copied < toRead; copied += copiedNow) {
copiedNow = CopyAndTranslateBuffer(statePtr, bufPtr + copied,
toRead - copied);
if (copiedNow == 0) {
if (statePtr->flags & CHANNEL_EOF) {
goto done;
}
if (statePtr->flags & CHANNEL_BLOCKED) {
if (statePtr->flags & CHANNEL_NONBLOCKING) {
goto done;
}
statePtr->flags &= (~(CHANNEL_BLOCKED));
}
result = GetInput(chanPtr);
if (result != 0) {
if (result != EAGAIN) {
copied = -1;
}
goto done;
}
}
}
statePtr->flags &= (~(CHANNEL_BLOCKED));
done:
/*
* Update the notifier state so we don't block while there is still
* data in the buffers.
*/
|
| ︙ | ︙ | |||
7681 7682 7683 7684 7685 7686 7687 | * Side effects: * Consumes buffered input. May deallocate one buffer. * *---------------------------------------------------------------------- */ static int | | | > < | | | | 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 |
* Side effects:
* Consumes buffered input. May deallocate one buffer.
*
*----------------------------------------------------------------------
*/
static int
CopyAndTranslateBuffer(statePtr, result, space)
ChannelState *statePtr; /* Channel state from which to read input. */
char *result; /* Where to store the copied input. */
int space; /* How many bytes are available in result
* to store the copied input? */
{
ChannelBuffer *bufPtr; /* The buffer from which to copy bytes. */
int bytesInBuffer; /* How many bytes are available to be
* copied in the current input buffer? */
int copied; /* How many characters were already copied
* into the destination space? */
int i; /* Iterates over the copied input looking
* for the input eofChar. */
/*
* If there is no input at all, return zero. The invariant is that either
* there is no buffer in the queue, or if the first buffer is empty, it
* is also the last buffer (and thus there is no input in the queue).
* Note also that if the buffer is empty, we leave it in the queue.
*/
if (statePtr->inQueueHead == (ChannelBuffer *) NULL) {
return 0;
}
bufPtr = statePtr->inQueueHead;
bytesInBuffer = bufPtr->nextAdded - bufPtr->nextRemoved;
copied = 0;
switch (statePtr->inputTranslation) {
case TCL_TRANSLATE_LF: {
if (bytesInBuffer == 0) {
return 0;
}
/*
* Copy the current chunk into the result buffer.
|
| ︙ | ︙ | |||
7766 7767 7768 7769 7770 7771 7772 |
int curByte;
/*
* If there is a held-back "\r" at EOF, produce it now.
*/
if (bytesInBuffer == 0) {
| | | | 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 |
int curByte;
/*
* If there is a held-back "\r" at EOF, produce it now.
*/
if (bytesInBuffer == 0) {
if ((statePtr->flags & (INPUT_SAW_CR | CHANNEL_EOF)) ==
(INPUT_SAW_CR | CHANNEL_EOF)) {
result[0] = '\r';
statePtr->flags &= ~INPUT_SAW_CR;
return 1;
}
return 0;
}
/*
* Copy the current chunk and replace "\r\n" with "\n"
|
| ︙ | ︙ | |||
7794 7795 7796 7797 7798 7799 7800 |
copied = space;
end = result + copied;
dst = result;
for (src = result; src < end; src++) {
curByte = *src;
if (curByte == '\n') {
| | | | | | 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 |
copied = space;
end = result + copied;
dst = result;
for (src = result; src < end; src++) {
curByte = *src;
if (curByte == '\n') {
statePtr->flags &= ~INPUT_SAW_CR;
} else if (statePtr->flags & INPUT_SAW_CR) {
statePtr->flags &= ~INPUT_SAW_CR;
*dst = '\r';
dst++;
}
if (curByte == '\r') {
statePtr->flags |= INPUT_SAW_CR;
} else {
*dst = (char) curByte;
dst++;
}
}
copied = dst - result;
break;
|
| ︙ | ︙ | |||
7837 7838 7839 7840 7841 7842 7843 |
copied = space;
end = result + copied;
dst = result;
for (src = result; src < end; src++) {
curByte = *src;
if (curByte == '\r') {
| | | | | | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 |
copied = space;
end = result + copied;
dst = result;
for (src = result; src < end; src++) {
curByte = *src;
if (curByte == '\r') {
statePtr->flags |= INPUT_SAW_CR;
*dst = '\n';
dst++;
} else {
if ((curByte != '\n') ||
!(statePtr->flags & INPUT_SAW_CR)) {
*dst = (char) curByte;
dst++;
}
statePtr->flags &= ~INPUT_SAW_CR;
}
}
copied = dst - result;
break;
}
default: {
panic("unknown eol translation mode");
}
}
/*
* If an in-stream EOF character is set for this channel, check that
* the input we copied so far does not contain the EOF char. If it does,
* copy only up to and excluding that character.
*/
if (statePtr->inEofChar != 0) {
for (i = 0; i < copied; i++) {
if (result[i] == (char) statePtr->inEofChar) {
/*
* Set sticky EOF so that no further input is presented
* to the caller.
*/
statePtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF);
statePtr->inputEncodingFlags |= TCL_ENCODING_END;
copied = i;
break;
}
}
}
/*
* If the current buffer is empty recycle it.
*/
if (bufPtr->nextRemoved == bufPtr->nextAdded) {
statePtr->inQueueHead = bufPtr->nextPtr;
if (statePtr->inQueueHead == (ChannelBuffer *) NULL) {
statePtr->inQueueTail = (ChannelBuffer *) NULL;
}
RecycleBuffer(statePtr, bufPtr, 0);
}
/*
* Return the number of characters copied into the result buffer.
* This may be different from the number of bytes consumed, because
* of EOL translations.
*/
return copied;
}
/*
*----------------------------------------------------------------------
*
* CopyBuffer --
*
* Copy at most one buffer of input to the result space.
*
* Results:
* Number of bytes stored in the result buffer. May return
* zero if no input is available.
*
* Side effects:
* Consumes buffered input. May deallocate one buffer.
*
*----------------------------------------------------------------------
*/
static int
CopyBuffer(chanPtr, result, space)
Channel *chanPtr; /* Channel from which to read input. */
char *result; /* Where to store the copied input. */
int space; /* How many bytes are available in result
* to store the copied input? */
{
ChannelBuffer *bufPtr; /* The buffer from which to copy bytes. */
int bytesInBuffer; /* How many bytes are available to be
* copied in the current input buffer? */
int copied; /* How many characters were already copied
* into the destination space? */
/*
* If there is no input at all, return zero. The invariant is that
* either there is no buffer in the queue, or if the first buffer
* is empty, it is also the last buffer (and thus there is no
* input in the queue). Note also that if the buffer is empty, we
* don't leave it in the queue, but recycle it.
*/
if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) {
return 0;
}
bufPtr = chanPtr->inQueueHead;
bytesInBuffer = bufPtr->nextAdded - bufPtr->nextRemoved;
copied = 0;
if (bytesInBuffer == 0) {
RecycleBuffer(chanPtr->state, bufPtr, 0);
chanPtr->inQueueHead = (ChannelBuffer*) NULL;
chanPtr->inQueueTail = (ChannelBuffer*) NULL;
return 0;
}
/*
* Copy the current chunk into the result buffer.
*/
if (bytesInBuffer < space) {
space = bytesInBuffer;
}
memcpy((VOID *) result,
(VOID *) (bufPtr->buf + bufPtr->nextRemoved),
(size_t) space);
bufPtr->nextRemoved += space;
copied = space;
/*
* We don't care about in-stream EOF characters here as the data
* read here may still flow through one or more transformations,
* i.e. is not in its final state yet.
*/
/*
* If the current buffer is empty recycle it.
*/
if (bufPtr->nextRemoved == bufPtr->nextAdded) {
chanPtr->inQueueHead = bufPtr->nextPtr;
if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) {
chanPtr->inQueueTail = (ChannelBuffer *) NULL;
}
RecycleBuffer(chanPtr->state, bufPtr, 0);
}
/*
* Return the number of characters copied into the result buffer.
*/
return copied;
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 |
static int
DoWrite(chanPtr, src, srcLen)
Channel *chanPtr; /* The channel to buffer output for. */
char *src; /* Data to write. */
int srcLen; /* Number of bytes to write. */
{
ChannelBuffer *outBufPtr; /* Current output buffer. */
int foundNewline; /* Did we find a newline in output? */
char *dPtr;
char *sPtr; /* Search variables for newline. */
int crsent; /* In CRLF eol translation mode,
* remember the fact that a CR was
* output to the channel without
| > | 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 |
static int
DoWrite(chanPtr, src, srcLen)
Channel *chanPtr; /* The channel to buffer output for. */
char *src; /* Data to write. */
int srcLen; /* Number of bytes to write. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
ChannelBuffer *outBufPtr; /* Current output buffer. */
int foundNewline; /* Did we find a newline in output? */
char *dPtr;
char *sPtr; /* Search variables for newline. */
int crsent; /* In CRLF eol translation mode,
* remember the fact that a CR was
* output to the channel without
|
| ︙ | ︙ | |||
7966 7967 7968 7969 7970 7971 7972 |
while (srcLen > 0) {
/*
* Make sure there is a current output buffer to accept output.
*/
| | | | | | 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 |
while (srcLen > 0) {
/*
* Make sure there is a current output buffer to accept output.
*/
if (statePtr->curOutPtr == (ChannelBuffer *) NULL) {
statePtr->curOutPtr = AllocChannelBuffer(statePtr->bufSize);
}
outBufPtr = statePtr->curOutPtr;
destCopied = outBufPtr->bufLength - outBufPtr->nextAdded;
if (destCopied > srcLen) {
destCopied = srcLen;
}
destPtr = outBufPtr->buf + outBufPtr->nextAdded;
switch (statePtr->outputTranslation) {
case TCL_TRANSLATE_LF:
srcCopied = destCopied;
memcpy((VOID *) destPtr, (VOID *) src, (size_t) destCopied);
break;
case TCL_TRANSLATE_CR:
srcCopied = destCopied;
memcpy((VOID *) destPtr, (VOID *) src, (size_t) destCopied);
|
| ︙ | ︙ | |||
8023 8024 8025 8026 8027 8028 8029 |
/*
* The current buffer is ready for output if it is full, or if it
* contains a newline and this channel is line-buffered, or if it
* contains any output and this channel is unbuffered.
*/
outBufPtr->nextAdded += destCopied;
| | | | | | | | | | | 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 |
/*
* The current buffer is ready for output if it is full, or if it
* contains a newline and this channel is line-buffered, or if it
* contains any output and this channel is unbuffered.
*/
outBufPtr->nextAdded += destCopied;
if (!(statePtr->flags & BUFFER_READY)) {
if (outBufPtr->nextAdded == outBufPtr->bufLength) {
statePtr->flags |= BUFFER_READY;
} else if (statePtr->flags & CHANNEL_LINEBUFFERED) {
for (sPtr = src, i = 0, foundNewline = 0;
(i < srcCopied) && (!foundNewline);
i++, sPtr++) {
if (*sPtr == '\n') {
foundNewline = 1;
break;
}
}
if (foundNewline) {
statePtr->flags |= BUFFER_READY;
}
} else if (statePtr->flags & CHANNEL_UNBUFFERED) {
statePtr->flags |= BUFFER_READY;
}
}
totalDestCopied += srcCopied;
src += srcCopied;
srcLen -= srcCopied;
if (statePtr->flags & BUFFER_READY) {
if (FlushChannel(NULL, chanPtr, 0) != 0) {
return -1;
}
}
} /* Closes "while" */
return totalDestCopied;
|
| ︙ | ︙ | |||
8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 |
*----------------------------------------------------------------------
*/
static void
StopCopy(csPtr)
CopyState *csPtr; /* State for bg copy to stop . */
{
int nonBlocking;
if (!csPtr) {
return;
}
/*
* Restore the old blocking mode and output buffering mode.
*/
nonBlocking = (csPtr->readFlags & CHANNEL_NONBLOCKING);
| > > > > | | > | | | < | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 |
*----------------------------------------------------------------------
*/
static void
StopCopy(csPtr)
CopyState *csPtr; /* State for bg copy to stop . */
{
ChannelState *inStatePtr, *outStatePtr;
int nonBlocking;
if (!csPtr) {
return;
}
inStatePtr = csPtr->readPtr->state;
outStatePtr = csPtr->writePtr->state;
/*
* Restore the old blocking mode and output buffering mode.
*/
nonBlocking = (csPtr->readFlags & CHANNEL_NONBLOCKING);
if (nonBlocking != (inStatePtr->flags & CHANNEL_NONBLOCKING)) {
SetBlockMode(NULL, csPtr->readPtr,
nonBlocking ? TCL_MODE_NONBLOCKING : TCL_MODE_BLOCKING);
}
if (csPtr->readPtr != csPtr->writePtr) {
nonBlocking = (csPtr->writeFlags & CHANNEL_NONBLOCKING);
if (nonBlocking != (outStatePtr->flags & CHANNEL_NONBLOCKING)) {
SetBlockMode(NULL, csPtr->writePtr,
nonBlocking ? TCL_MODE_NONBLOCKING : TCL_MODE_BLOCKING);
}
}
outStatePtr->flags &= ~(CHANNEL_LINEBUFFERED | CHANNEL_UNBUFFERED);
outStatePtr->flags |=
csPtr->writeFlags & (CHANNEL_LINEBUFFERED | CHANNEL_UNBUFFERED);
if (csPtr->cmdPtr) {
Tcl_DeleteChannelHandler((Tcl_Channel)csPtr->readPtr, CopyEventProc,
(ClientData)csPtr);
if (csPtr->readPtr != csPtr->writePtr) {
Tcl_DeleteChannelHandler((Tcl_Channel)csPtr->writePtr,
CopyEventProc, (ClientData)csPtr);
}
Tcl_DecrRefCount(csPtr->cmdPtr);
}
inStatePtr->csPtr = NULL;
outStatePtr->csPtr = NULL;
ckfree((char*) csPtr);
}
/*
*----------------------------------------------------------------------
*
* StackSetBlockMode --
*
* This function sets the blocking mode for a channel, iterating
* through each channel in a stack and updates the state flags.
*
* Results:
* 0 if OK, result code from failed blockModeProc otherwise.
*
* Side effects:
* Modifies the blocking mode of the channel and possibly generates
* an error.
*
*----------------------------------------------------------------------
*/
static int
StackSetBlockMode(chanPtr, mode)
Channel *chanPtr; /* Channel to modify. */
int mode; /* One of TCL_MODE_BLOCKING or
* TCL_MODE_NONBLOCKING. */
{
int result = 0;
Tcl_DriverBlockModeProc *blockModeProc;
/*
* Start at the top of the channel stack
*/
chanPtr = chanPtr->state->topChanPtr;
while (chanPtr != (Channel *) NULL) {
blockModeProc = Tcl_ChannelBlockModeProc(chanPtr->typePtr);
if (blockModeProc != NULL) {
result = (*blockModeProc) (chanPtr->instanceData, mode);
if (result != 0) {
Tcl_SetErrno(result);
return result;
}
}
chanPtr = chanPtr->downChanPtr;
}
return 0;
}
/*
*----------------------------------------------------------------------
*
* SetBlockMode --
*
* This function sets the blocking mode for a channel and updates
|
| ︙ | ︙ | |||
8169 8170 8171 8172 8173 8174 8175 8176 |
static int
SetBlockMode(interp, chanPtr, mode)
Tcl_Interp *interp; /* Interp for error reporting. */
Channel *chanPtr; /* Channel to modify. */
int mode; /* One of TCL_MODE_BLOCKING or
* TCL_MODE_NONBLOCKING. */
{
int result = 0;
| > < < < | > < | | | 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 |
static int
SetBlockMode(interp, chanPtr, mode)
Tcl_Interp *interp; /* Interp for error reporting. */
Channel *chanPtr; /* Channel to modify. */
int mode; /* One of TCL_MODE_BLOCKING or
* TCL_MODE_NONBLOCKING. */
{
ChannelState *statePtr = chanPtr->state; /* state info for channel */
int result = 0;
result = StackSetBlockMode(chanPtr, mode);
if (result != 0) {
if (interp != (Tcl_Interp *) NULL) {
Tcl_AppendResult(interp, "error setting blocking mode: ",
Tcl_PosixError(interp), (char *) NULL);
}
return TCL_ERROR;
}
if (mode == TCL_MODE_BLOCKING) {
statePtr->flags &= (~(CHANNEL_NONBLOCKING | BG_FLUSH_SCHEDULED));
} else {
statePtr->flags |= CHANNEL_NONBLOCKING;
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
8236 8237 8238 8239 8240 8241 8242 |
*/
int
Tcl_GetChannelNamesEx(interp, pattern)
Tcl_Interp *interp; /* Interp for error reporting. */
char *pattern; /* pattern to filter on. */
{
| < > | | > > > > > > > > > > > > | | > | > | > | | | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 |
*/
int
Tcl_GetChannelNamesEx(interp, pattern)
Tcl_Interp *interp; /* Interp for error reporting. */
char *pattern; /* pattern to filter on. */
{
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
ChannelState *statePtr;
char *name; /* name for channel */
Tcl_Obj *resultPtr; /* pointer to result object */
Tcl_HashTable *hTblPtr; /* Hash table of channels. */
Tcl_HashEntry *hPtr; /* Search variable. */
Tcl_HashSearch hSearch; /* Search variable. */
if (interp == (Tcl_Interp *) NULL) {
return TCL_OK;
}
/*
* Get the channel table that stores the channels registered
* for this interpreter.
*/
hTblPtr = GetChannelTable(interp);
resultPtr = Tcl_GetObjResult(interp);
for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch);
hPtr != (Tcl_HashEntry *) NULL;
hPtr = Tcl_NextHashEntry(&hSearch)) {
statePtr = ((Channel *) Tcl_GetHashValue(hPtr))->state;
if (statePtr->topChanPtr == (Channel *) tsdPtr->stdinChannel) {
name = "stdin";
} else if (statePtr->topChanPtr == (Channel *) tsdPtr->stdoutChannel) {
name = "stdout";
} else if (statePtr->topChanPtr == (Channel *) tsdPtr->stderrChannel) {
name = "stderr";
} else {
/*
* This is also stored in Tcl_GetHashKey(hTblPtr, hPtr),
* but it's simpler to just grab the name from the statePtr.
*/
name = statePtr->channelName;
}
if (((pattern == NULL) || Tcl_StringMatch(name, pattern)) &&
(Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(name, -1)) != TCL_OK)) {
return TCL_ERROR;
}
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelName --
*
* Return the name of the channel type.
*
* Results:
* A pointer the name of the channel type.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
char *
Tcl_ChannelName(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->typeName);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelVersion --
*
* Return the of version of the channel type.
*
* Results:
* TCL_CHANNEL_VERSION_2 or TCL_CHANNEL_VERSION_1.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_ChannelTypeVersion
Tcl_ChannelVersion(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
if (chanTypePtr->version == TCL_CHANNEL_VERSION_2) {
return TCL_CHANNEL_VERSION_2;
} else {
/*
* In <v2 channel versions, the version field is occupied
* by the Tcl_DriverBlockModeProc
*/
return TCL_CHANNEL_VERSION_1;
}
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelBlockModeProc --
*
* Return the Tcl_DriverBlockModeProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverBlockModeProc *
Tcl_ChannelBlockModeProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
if (chanTypePtr->version == TCL_CHANNEL_VERSION_2) {
return (chanTypePtr->blockModeProc);
} else {
return (Tcl_DriverBlockModeProc *) (chanTypePtr->version);
}
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelCloseProc --
*
* Return the Tcl_DriverCloseProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverCloseProc *
Tcl_ChannelCloseProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->closeProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelClose2Proc --
*
* Return the Tcl_DriverClose2Proc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverClose2Proc *
Tcl_ChannelClose2Proc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->close2Proc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelInputProc --
*
* Return the Tcl_DriverInputProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverInputProc *
Tcl_ChannelInputProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->inputProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelOutputProc --
*
* Return the Tcl_DriverOutputProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverOutputProc *
Tcl_ChannelOutputProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->outputProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelSeekProc --
*
* Return the Tcl_DriverSeekProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverSeekProc *
Tcl_ChannelSeekProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->seekProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelSetOptionProc --
*
* Return the Tcl_DriverSetOptionProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverSetOptionProc *
Tcl_ChannelSetOptionProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->setOptionProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelGetOptionProc --
*
* Return the Tcl_DriverGetOptionProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverGetOptionProc *
Tcl_ChannelGetOptionProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->getOptionProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelWatchProc --
*
* Return the Tcl_DriverWatchProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverWatchProc *
Tcl_ChannelWatchProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->watchProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelGetHandleProc --
*
* Return the Tcl_DriverGetHandleProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverGetHandleProc *
Tcl_ChannelGetHandleProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->getHandleProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelFlushProc --
*
* Return the Tcl_DriverFlushProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverFlushProc *
Tcl_ChannelFlushProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->flushProc);
}
/*
*----------------------------------------------------------------------
*
* Tcl_ChannelHandlerProc --
*
* Return the Tcl_DriverHandlerProc of the channel type.
*
* Results:
* A pointer to the proc.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
Tcl_DriverHandlerProc *
Tcl_ChannelHandlerProc(chanTypePtr)
Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */
{
return (chanTypePtr->handlerProc);
}
|
Added generic/tclIO.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
/*
* tclIO.h --
*
* This file provides the generic portions (those that are the same on
* all platforms and for all channel types) of Tcl's IO facilities.
*
* Copyright (c) 1998-2000 Ajuba Solutions
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclIO.h,v 1.1.4.2 2001/09/27 02:26:43 andreas_kupries Exp $
*/
/*
* Make sure that both EAGAIN and EWOULDBLOCK are defined. This does not
* compile on systems where neither is defined. We want both defined so
* that we can test safely for both. In the code we still have to test for
* both because there may be systems on which both are defined and have
* different values.
*/
#if ((!defined(EWOULDBLOCK)) && (defined(EAGAIN)))
# define EWOULDBLOCK EAGAIN
#endif
#if ((!defined(EAGAIN)) && (defined(EWOULDBLOCK)))
# define EAGAIN EWOULDBLOCK
#endif
#if ((!defined(EAGAIN)) && (!defined(EWOULDBLOCK)))
error one of EWOULDBLOCK or EAGAIN must be defined
#endif
/*
* The following structure encapsulates the state for a background channel
* copy. Note that the data buffer for the copy will be appended to this
* structure.
*/
typedef struct CopyState {
struct Channel *readPtr; /* Pointer to input channel. */
struct Channel *writePtr; /* Pointer to output channel. */
int readFlags; /* Original read channel flags. */
int writeFlags; /* Original write channel flags. */
int toRead; /* Number of bytes to copy, or -1. */
int total; /* Total bytes transferred (written). */
Tcl_Interp *interp; /* Interp that started the copy. */
Tcl_Obj *cmdPtr; /* Command to be invoked at completion. */
int bufSize; /* Size of appended buffer. */
char buffer[1]; /* Copy buffer, this must be the last
* field. */
} CopyState;
/*
* struct ChannelBuffer:
*
* Buffers data being sent to or from a channel.
*/
typedef struct ChannelBuffer {
int nextAdded; /* The next position into which a character
* will be put in the buffer. */
int nextRemoved; /* Position of next byte to be removed
* from the buffer. */
int bufLength; /* How big is the buffer? */
struct ChannelBuffer *nextPtr;
/* Next buffer in chain. */
char buf[4]; /* Placeholder for real buffer. The real
* buffer occuppies this space + bufSize-4
* bytes. This must be the last field in
* the structure. */
} ChannelBuffer;
#define CHANNELBUFFER_HEADER_SIZE (sizeof(ChannelBuffer) - 4)
/*
* How much extra space to allocate in buffer to hold bytes from previous
* buffer (when converting to UTF-8) or to hold bytes that will go to
* next buffer (when converting from UTF-8).
*/
#define BUFFER_PADDING 16
/*
* The following defines the *default* buffer size for channels.
*/
#define CHANNELBUFFER_DEFAULT_SIZE (1024 * 4)
/*
* Structure to record a close callback. One such record exists for
* each close callback registered for a channel.
*/
typedef struct CloseCallback {
Tcl_CloseProc *proc; /* The procedure to call. */
ClientData clientData; /* Arbitrary one-word data to pass
* to the callback. */
struct CloseCallback *nextPtr; /* For chaining close callbacks. */
} CloseCallback;
/*
* The following structure describes the information saved from a call to
* "fileevent". This is used later when the event being waited for to
* invoke the saved script in the interpreter designed in this record.
*/
typedef struct EventScriptRecord {
struct Channel *chanPtr; /* The channel for which this script is
* registered. This is used only when an
* error occurs during evaluation of the
* script, to delete the handler. */
Tcl_Obj *scriptPtr; /* Script to invoke. */
Tcl_Interp *interp; /* In what interpreter to invoke script? */
int mask; /* Events must overlap current mask for the
* stored script to be invoked. */
struct EventScriptRecord *nextPtr;
/* Next in chain of records. */
} EventScriptRecord;
/*
* struct Channel:
*
* One of these structures is allocated for each open channel. It contains data
* specific to the channel but which belongs to the generic part of the Tcl
* channel mechanism, and it points at an instance specific (and type
* specific) * instance data, and at a channel type structure.
*/
typedef struct Channel {
struct ChannelState *state; /* Split out state information */
ClientData instanceData; /* Instance-specific data provided by
* creator of channel. */
Tcl_ChannelType *typePtr; /* Pointer to channel type structure. */
struct Channel *downChanPtr;/* Refers to channel this one was stacked
* upon. This reference is NULL for normal
* channels. See Tcl_StackChannel. */
struct Channel *upChanPtr; /* Refers to the channel above stacked this
* one. NULL for the top most channel. */
/*
* Intermediate buffers to hold pre-read data for consumption by a
* newly stacked transformation. See 'Tcl_StackChannel'.
*/
ChannelBuffer *inQueueHead; /* Points at first buffer in input queue. */
ChannelBuffer *inQueueTail; /* Points at last buffer in input queue. */
} Channel;
/*
* struct ChannelState:
*
* One of these structures is allocated for each open channel. It contains data
* specific to the channel but which belongs to the generic part of the Tcl
* channel mechanism, and it points at an instance specific (and type
* specific) * instance data, and at a channel type structure.
*/
typedef struct ChannelState {
char *channelName; /* The name of the channel instance in Tcl
* commands. Storage is owned by the generic IO
* code, is dynamically allocated. */
int flags; /* ORed combination of the flags defined
* below. */
Tcl_Encoding encoding; /* Encoding to apply when reading or writing
* data on this channel. NULL means no
* encoding is applied to data. */
Tcl_EncodingState inputEncodingState;
/* Current encoding state, used when converting
* input data bytes to UTF-8. */
int inputEncodingFlags; /* Encoding flags to pass to conversion
* routine when converting input data bytes to
* UTF-8. May be TCL_ENCODING_START before
* converting first byte and TCL_ENCODING_END
* when EOF is seen. */
Tcl_EncodingState outputEncodingState;
/* Current encoding state, used when converting
* UTF-8 to output data bytes. */
int outputEncodingFlags; /* Encoding flags to pass to conversion
* routine when converting UTF-8 to output
* data bytes. May be TCL_ENCODING_START
* before converting first byte and
* TCL_ENCODING_END when EOF is seen. */
Tcl_EolTranslation inputTranslation;
/* What translation to apply for end of line
* sequences on input? */
Tcl_EolTranslation outputTranslation;
/* What translation to use for generating
* end of line sequences in output? */
int inEofChar; /* If nonzero, use this as a signal of EOF
* on input. */
int outEofChar; /* If nonzero, append this to the channel
* when it is closed if it is open for
* writing. */
int unreportedError; /* Non-zero if an error report was deferred
* because it happened in the background. The
* value is the POSIX error code. */
int refCount; /* How many interpreters hold references to
* this IO channel? */
CloseCallback *closeCbPtr; /* Callbacks registered to be called when the
* channel is closed. */
char *outputStage; /* Temporary staging buffer used when
* translating EOL before converting from
* UTF-8 to external form. */
ChannelBuffer *curOutPtr; /* Current output buffer being filled. */
ChannelBuffer *outQueueHead;/* Points at first buffer in output queue. */
ChannelBuffer *outQueueTail;/* Points at last buffer in output queue. */
ChannelBuffer *saveInBufPtr;/* Buffer saved for input queue - eliminates
* need to allocate a new buffer for "gets"
* that crosses buffer boundaries. */
ChannelBuffer *inQueueHead; /* Points at first buffer in input queue. */
ChannelBuffer *inQueueTail; /* Points at last buffer in input queue. */
struct ChannelHandler *chPtr;/* List of channel handlers registered
* for this channel. */
int interestMask; /* Mask of all events this channel has
* handlers for. */
EventScriptRecord *scriptRecordPtr;
/* Chain of all scripts registered for
* event handlers ("fileevent") on this
* channel. */
int bufSize; /* What size buffers to allocate? */
Tcl_TimerToken timer; /* Handle to wakeup timer for this channel. */
CopyState *csPtr; /* State of background copy, or NULL. */
Channel *topChanPtr; /* Refers to topmost channel in a stack.
* Never NULL. */
Channel *bottomChanPtr; /* Refers to bottommost channel in a stack.
* This channel can be relied on to live as
* long as the channel state. Never NULL. */
struct ChannelState *nextCSPtr;
/* Next in list of channels currently open. */
} ChannelState;
/*
* Values for the flags field in Channel. Any ORed combination of the
* following flags can be stored in the field. These flags record various
* options and state bits about the channel. In addition to the flags below,
* the channel can also have TCL_READABLE (1<<1) and TCL_WRITABLE (1<<2) set.
*/
#define CHANNEL_NONBLOCKING (1<<3) /* Channel is currently in
* nonblocking mode. */
#define CHANNEL_LINEBUFFERED (1<<4) /* Output to the channel must be
* flushed after every newline. */
#define CHANNEL_UNBUFFERED (1<<5) /* Output to the channel must always
* be flushed immediately. */
#define BUFFER_READY (1<<6) /* Current output buffer (the
* curOutPtr field in the
* channel structure) should be
* output as soon as possible even
* though it may not be full. */
#define BG_FLUSH_SCHEDULED (1<<7) /* A background flush of the
* queued output buffers has been
* scheduled. */
#define CHANNEL_CLOSED (1<<8) /* Channel has been closed. No
* further Tcl-level IO on the
* channel is allowed. */
#define CHANNEL_EOF (1<<9) /* EOF occurred on this channel.
* This bit is cleared before every
* input operation. */
#define CHANNEL_STICKY_EOF (1<<10) /* EOF occurred on this channel because
* we saw the input eofChar. This bit
* prevents clearing of the EOF bit
* before every input operation. */
#define CHANNEL_BLOCKED (1<<11) /* EWOULDBLOCK or EAGAIN occurred
* on this channel. This bit is
* cleared before every input or
* output operation. */
#define INPUT_SAW_CR (1<<12) /* Channel is in CRLF eol input
* translation mode and the last
* byte seen was a "\r". */
#define INPUT_NEED_NL (1<<15) /* Saw a '\r' at end of last buffer,
* and there should be a '\n' at
* beginning of next buffer. */
#define CHANNEL_DEAD (1<<13) /* The channel has been closed by
* the exit handler (on exit) but
* not deallocated. When any IO
* operation sees this flag on a
* channel, it does not call driver
* level functions to avoid referring
* to deallocated data. */
#define CHANNEL_NEED_MORE_DATA (1<<14) /* The last input operation failed
* because there was not enough data
* to complete the operation. This
* flag is set when gets fails to
* get a complete line or when read
* fails to get a complete character.
* When set, file events will not be
* delivered for buffered data until
* the state of the channel changes. */
#define CHANNEL_RAW_MODE (1<<16) /* When set, notes that the Raw API is
* being used. */
#define CHANNEL_TIMER_FEV (1<<17) /* When set the event we are
* notified by is a fileevent
* generated by a timer. We
* don't know if the driver
* has more data and should
* not try to read from it. If
* the system needs more than
* is in the buffers out read
* routines will simulate a
* short read (0 characters
* read) */
/*
* For each channel handler registered in a call to Tcl_CreateChannelHandler,
* there is one record of the following type. All of records for a specific
* channel are chained together in a singly linked list which is stored in
* the channel structure.
*/
typedef struct ChannelHandler {
Channel *chanPtr; /* The channel structure for this channel. */
int mask; /* Mask of desired events. */
Tcl_ChannelProc *proc; /* Procedure to call in the type of
* Tcl_CreateChannelHandler. */
ClientData clientData; /* Argument to pass to procedure. */
struct ChannelHandler *nextPtr;
/* Next one in list of registered handlers. */
} ChannelHandler;
/*
* This structure keeps track of the current ChannelHandler being invoked in
* the current invocation of ChannelHandlerEventProc. There is a potential
* problem if a ChannelHandler is deleted while it is the current one, since
* ChannelHandlerEventProc needs to look at the nextPtr field. To handle this
* problem, structures of the type below indicate the next handler to be
* processed for any (recursively nested) dispatches in progress. The
* nextHandlerPtr field is updated if the handler being pointed to is deleted.
* The nextPtr field is used to chain together all recursive invocations, so
* that Tcl_DeleteChannelHandler can find all the recursively nested
* invocations of ChannelHandlerEventProc and compare the handler being
* deleted against the NEXT handler to be invoked in that invocation; when it
* finds such a situation, Tcl_DeleteChannelHandler updates the nextHandlerPtr
* field of the structure to the next handler.
*/
typedef struct NextChannelHandler {
ChannelHandler *nextHandlerPtr; /* The next handler to be invoked in
* this invocation. */
struct NextChannelHandler *nestedHandlerPtr;
/* Next nested invocation of
* ChannelHandlerEventProc. */
} NextChannelHandler;
/*
* The following structure describes the event that is added to the Tcl
* event queue by the channel handler check procedure.
*/
typedef struct ChannelHandlerEvent {
Tcl_Event header; /* Standard header for all events. */
Channel *chanPtr; /* The channel that is ready. */
int readyMask; /* Events that have occurred. */
} ChannelHandlerEvent;
/*
* The following structure is used by Tcl_GetsObj() to encapsulates the
* state for a "gets" operation.
*/
typedef struct GetsState {
Tcl_Obj *objPtr; /* The object to which UTF-8 characters
* will be appended. */
char **dstPtr; /* Pointer into objPtr's string rep where
* next character should be stored. */
Tcl_Encoding encoding; /* The encoding to use to convert raw bytes
* to UTF-8. */
ChannelBuffer *bufPtr; /* The current buffer of raw bytes being
* emptied. */
Tcl_EncodingState state; /* The encoding state just before the last
* external to UTF-8 conversion in
* FilterInputBytes(). */
int rawRead; /* The number of bytes removed from bufPtr
* in the last call to FilterInputBytes(). */
int bytesWrote; /* The number of bytes of UTF-8 data
* appended to objPtr during the last call to
* FilterInputBytes(). */
int charsWrote; /* The corresponding number of UTF-8
* characters appended to objPtr during the
* last call to FilterInputBytes(). */
int totalChars; /* The total number of UTF-8 characters
* appended to objPtr so far, just before the
* last call to FilterInputBytes(). */
} GetsState;
|
Changes to generic/tclIOCmd.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclIOCmd.c -- * * Contains the definitions of most of the Tcl commands relating to IO. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclIOCmd.c -- * * Contains the definitions of most of the Tcl commands relating to IO. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclIOCmd.c,v 1.7.2.2 2002/01/17 20:35:39 andreas_kupries Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * Callback structure for accept callback in a TCP server. |
| ︙ | ︙ | |||
224 225 226 227 228 229 230 |
}
if ((mode & TCL_READABLE) == 0) {
Tcl_AppendResult(interp, "channel \"", name,
"\" wasn't opened for reading", (char *) NULL);
return TCL_ERROR;
}
| < < < < < < < | < | > > > | 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 |
}
if ((mode & TCL_READABLE) == 0) {
Tcl_AppendResult(interp, "channel \"", name,
"\" wasn't opened for reading", (char *) NULL);
return TCL_ERROR;
}
linePtr = Tcl_NewObj();
lineLen = Tcl_GetsObj(chan, linePtr);
if (lineLen < 0) {
if (!Tcl_Eof(chan) && !Tcl_InputBlocked(chan)) {
if (objc == 3) {
Tcl_DecrRefCount(linePtr);
}
Tcl_ResetResult(interp);
Tcl_AppendResult(interp, "error reading \"", name, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
}
lineLen = -1;
}
if (objc == 3) {
if (Tcl_ObjSetVar2(interp, objv[2], NULL, linePtr,
TCL_LEAVE_ERR_MSG) == NULL) {
Tcl_DecrRefCount(linePtr);
return TCL_ERROR;
}
resultPtr = Tcl_GetObjResult(interp);
Tcl_SetIntObj(resultPtr, lineLen);
return TCL_OK;
} else {
Tcl_SetObjResult(interp, linePtr);
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ |
Added generic/tclIOGT.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
/*
* tclIOGT.c --
*
* Implements a generic transformation exposing the underlying API
* at the script level. Contributed by Andreas Kupries.
*
* Copyright (c) 2000 Ajuba Solutions
* Copyright (c) 1999-2000 Andreas Kupries (a.kupries@westend.com)
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* CVS: $Id: tclIOGT.c,v 1.1.4.3 2001/04/03 22:54:37 hobbs Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
#include "tclIO.h"
/*
* Forward declarations of internal procedures.
* First the driver procedures of the transformation.
*/
static int TransformBlockModeProc _ANSI_ARGS_ ((
ClientData instanceData, int mode));
static int TransformCloseProc _ANSI_ARGS_ ((
ClientData instanceData, Tcl_Interp* interp));
static int TransformInputProc _ANSI_ARGS_ ((
ClientData instanceData,
char* buf, int toRead, int* errorCodePtr));
static int TransformOutputProc _ANSI_ARGS_ ((
ClientData instanceData,
char* buf, int toWrite, int* errorCodePtr));
static int TransformSeekProc _ANSI_ARGS_ ((
ClientData instanceData, long offset,
int mode, int* errorCodePtr));
static int TransformSetOptionProc _ANSI_ARGS_((
ClientData instanceData, Tcl_Interp *interp,
char *optionName, char *value));
static int TransformGetOptionProc _ANSI_ARGS_((
ClientData instanceData, Tcl_Interp *interp,
char *optionName, Tcl_DString *dsPtr));
static void TransformWatchProc _ANSI_ARGS_ ((
ClientData instanceData, int mask));
static int TransformGetFileHandleProc _ANSI_ARGS_ ((
ClientData instanceData, int direction,
ClientData* handlePtr));
static int TransformNotifyProc _ANSI_ARGS_ ((
ClientData instanceData, int mask));
/*
* Forward declarations of internal procedures.
* Secondly the procedures for handling and generating fileeevents.
*/
static void TransformChannelHandlerTimer _ANSI_ARGS_ ((
ClientData clientData));
/*
* Forward declarations of internal procedures.
* Third, helper procedures encapsulating essential tasks.
*/
typedef struct TransformChannelData TransformChannelData;
static int ExecuteCallback _ANSI_ARGS_ ((
TransformChannelData* ctrl, Tcl_Interp* interp,
unsigned char* op, unsigned char* buf,
int bufLen, int transmit, int preserve));
/*
* Action codes to give to 'ExecuteCallback' (argument 'transmit')
* confering to the procedure what to do with the result of the script
* it calls.
*/
#define TRANSMIT_DONT (0) /* No transfer to do */
#define TRANSMIT_DOWN (1) /* Transfer to the underlying channel */
#define TRANSMIT_SELF (2) /* Transfer into our channel. */
#define TRANSMIT_IBUF (3) /* Transfer to internal input buffer */
#define TRANSMIT_NUM (4) /* Transfer number to 'maxRead' */
/*
* Codes for 'preserve' of 'ExecuteCallback'
*/
#define P_PRESERVE (1)
#define P_NO_PRESERVE (0)
/*
* Strings for the action codes delivered to the script implementing
* a transformation. Argument 'op' of 'ExecuteCallback'.
*/
#define A_CREATE_WRITE (UCHARP ("create/write"))
#define A_DELETE_WRITE (UCHARP ("delete/write"))
#define A_FLUSH_WRITE (UCHARP ("flush/write"))
#define A_WRITE (UCHARP ("write"))
#define A_CREATE_READ (UCHARP ("create/read"))
#define A_DELETE_READ (UCHARP ("delete/read"))
#define A_FLUSH_READ (UCHARP ("flush/read"))
#define A_READ (UCHARP ("read"))
#define A_QUERY_MAXREAD (UCHARP ("query/maxRead"))
#define A_CLEAR_READ (UCHARP ("clear/read"))
/*
* Management of a simple buffer.
*/
typedef struct ResultBuffer ResultBuffer;
static void ResultClear _ANSI_ARGS_ ((ResultBuffer* r));
static void ResultInit _ANSI_ARGS_ ((ResultBuffer* r));
static int ResultLength _ANSI_ARGS_ ((ResultBuffer* r));
static int ResultCopy _ANSI_ARGS_ ((ResultBuffer* r,
unsigned char* buf, int toRead));
static void ResultAdd _ANSI_ARGS_ ((ResultBuffer* r,
unsigned char* buf, int toWrite));
/*
* This structure describes the channel type structure for tcl based
* transformations.
*/
static Tcl_ChannelType transformChannelType = {
"transform", /* Type name. */
TCL_CHANNEL_VERSION_2,
TransformCloseProc, /* Close proc. */
TransformInputProc, /* Input proc. */
TransformOutputProc, /* Output proc. */
TransformSeekProc, /* Seek proc. */
TransformSetOptionProc, /* Set option proc. */
TransformGetOptionProc, /* Get option proc. */
TransformWatchProc, /* Initialize notifier. */
TransformGetFileHandleProc, /* Get OS handles out of channel. */
NULL, /* close2proc */
TransformBlockModeProc, /* Set blocking/nonblocking mode.*/
NULL, /* Flush proc. */
TransformNotifyProc, /* Handling of events bubbling up */
};
/*
* Possible values for 'flags' field in control structure, see below.
*/
#define CHANNEL_ASYNC (1<<0) /* non-blocking mode */
/*
* Definition of the structure containing the information about the
* internal input buffer.
*/
struct ResultBuffer {
unsigned char* buf; /* Reference to the buffer area */
int allocated; /* Allocated size of the buffer area */
int used; /* Number of bytes in the buffer, <= allocated */
};
/*
* Additional bytes to allocate during buffer expansion
*/
#define INCREMENT (512)
/*
* Number of milliseconds to wait before firing an event to flush
* out information waiting in buffers (fileevent support).
*/
#define FLUSH_DELAY (5)
/*
* Convenience macro to make some casts easier to use.
*/
#define UCHARP(x) ((unsigned char*) (x))
#define NO_INTERP ((Tcl_Interp*) NULL)
/*
* Definition of a structure used by all transformations generated here to
* maintain their local state.
*/
struct TransformChannelData {
/*
* General section. Data to integrate the transformation into the channel
* system.
*/
Tcl_Channel self; /* Our own Channel handle */
int readIsFlushed; /* Flag to note wether in.flushProc was called or not
*/
int flags; /* Currently CHANNEL_ASYNC or zero */
int watchMask; /* Current watch/event/interest mask */
int mode; /* mode of parent channel, OR'ed combination of
* TCL_READABLE, TCL_WRITABLE */
Tcl_TimerToken timer; /* Timer for automatic flushing of information
* sitting in an internal buffer. Required for full
* fileevent support */
/*
* Transformation specific data.
*/
int maxRead; /* Maximum allowed number of bytes to read, as
* given to us by the tcl script implementing the
* transformation. */
Tcl_Interp* interp; /* Reference to the interpreter which created the
* transformation. Used to execute the code
* below. */
Tcl_Obj* command; /* Tcl code to execute for a buffer */
ResultBuffer result; /* Internal buffer used to store the result of a
* transformation of incoming data. Additionally
* serves as buffer of all data not yet consumed by
* the reader. */
};
/*
*----------------------------------------------------------------------
*
* TclChannelTransform --
*
* Implements the Tcl "testchannel transform" debugging command.
* This is part of the testing environment. This sets up a tcl
* script (cmdObjPtr) to be used as a transform on the channel.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
TclChannelTransform(interp, chan, cmdObjPtr)
Tcl_Interp *interp; /* Interpreter for result. */
Tcl_Channel chan; /* Channel to transform. */
Tcl_Obj *cmdObjPtr; /* Script to use for transform. */
{
Channel *chanPtr; /* The actual channel. */
ChannelState *statePtr; /* state info for channel */
int mode; /* rw mode of the channel */
TransformChannelData *dataPtr;
int res;
Tcl_DString ds;
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
chanPtr = (Channel *) chan;
statePtr = chanPtr->state;
chanPtr = statePtr->topChanPtr;
chan = (Tcl_Channel) chanPtr;
mode = (statePtr->flags & (TCL_READABLE|TCL_WRITABLE));
/*
* Now initialize the transformation state and stack it upon the
* specified channel. One of the necessary things to do is to
* retrieve the blocking regime of the underlying channel and to
* use the same for us too.
*/
dataPtr = (TransformChannelData*) ckalloc(sizeof(TransformChannelData));
Tcl_DStringInit (&ds);
Tcl_GetChannelOption(interp, chan, "-blocking", &ds);
dataPtr->readIsFlushed = 0;
dataPtr->flags = 0;
if (ds.string[0] == '0') {
dataPtr->flags |= CHANNEL_ASYNC;
}
Tcl_DStringFree (&ds);
dataPtr->self = chan;
dataPtr->watchMask = 0;
dataPtr->mode = mode;
dataPtr->timer = (Tcl_TimerToken) NULL;
dataPtr->maxRead = 4096; /* Initial value not relevant */
dataPtr->interp = interp;
dataPtr->command = cmdObjPtr;
Tcl_IncrRefCount(dataPtr->command);
ResultInit(&dataPtr->result);
dataPtr->self = Tcl_StackChannel(interp, &transformChannelType,
(ClientData) dataPtr, mode, chan);
if (dataPtr->self == (Tcl_Channel) NULL) {
Tcl_AppendResult(interp, "\nfailed to stack channel \"",
Tcl_GetChannelName(chan), "\"", (char *) NULL);
Tcl_DecrRefCount(dataPtr->command);
ResultClear(&dataPtr->result);
ckfree((VOID *) dataPtr);
return TCL_ERROR;
}
/*
* At last initialize the transformation at the script level.
*/
if (dataPtr->mode & TCL_WRITABLE) {
res = ExecuteCallback (dataPtr, NO_INTERP, A_CREATE_WRITE,
NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE);
if (res != TCL_OK) {
Tcl_UnstackChannel(interp, chan);
return TCL_ERROR;
}
}
if (dataPtr->mode & TCL_READABLE) {
res = ExecuteCallback (dataPtr, NO_INTERP, A_CREATE_READ,
NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE);
if (res != TCL_OK) {
ExecuteCallback (dataPtr, NO_INTERP, A_DELETE_WRITE,
NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE);
Tcl_UnstackChannel(interp, chan);
return TCL_ERROR;
}
}
return TCL_OK;
}
/*
*------------------------------------------------------*
*
* ExecuteCallback --
*
* Executes the defined callback for buffer and
* operation.
*
* Sideeffects:
* As of the executed tcl script.
*
* Result:
* A standard TCL error code. In case of an
* error a message is left in the result area
* of the specified interpreter.
*
*------------------------------------------------------*
*/
static int
ExecuteCallback (dataPtr, interp, op, buf, bufLen, transmit, preserve)
TransformChannelData* dataPtr; /* Transformation with the callback */
Tcl_Interp* interp; /* Current interpreter, possibly NULL */
unsigned char* op; /* Operation invoking the callback */
unsigned char* buf; /* Buffer to give to the script. */
int bufLen; /* Ands its length */
int transmit; /* Flag, determines whether the result
* of the callback is sent to the
* underlying channel or not. */
int preserve; /* Flag. If true the procedure will
* preserver the result state of all
* accessed interpreters. */
{
/*
* Step 1, create the complete command to execute. Do this by appending
* operation and buffer to operate upon to a copy of the callback
* definition. We *cannot* create a list containing 3 objects and then use
* 'Tcl_EvalObjv', because the command may contain additional prefixed
* arguments. Feather's curried commands would come in handy here.
*/
Tcl_Obj* resObj; /* See below, switch (transmit) */
int resLen;
unsigned char* resBuf;
Tcl_SavedResult ciSave;
int res = TCL_OK;
Tcl_Obj* command = Tcl_DuplicateObj (dataPtr->command);
Tcl_Obj* temp;
if (preserve) {
Tcl_SaveResult (dataPtr->interp, &ciSave);
}
if (command == (Tcl_Obj*) NULL) {
/* Memory allocation problem */
res = TCL_ERROR;
goto cleanup;
}
Tcl_IncrRefCount(command);
temp = Tcl_NewStringObj((char*) op, -1);
if (temp == (Tcl_Obj*) NULL) {
/* Memory allocation problem */
res = TCL_ERROR;
goto cleanup;
}
res = Tcl_ListObjAppendElement(dataPtr->interp, command, temp);
if (res != TCL_OK)
goto cleanup;
/*
* Use a byte-array to prevent the misinterpretation of binary data
* coming through as UTF while at the tcl level.
*/
temp = Tcl_NewByteArrayObj(buf, bufLen);
if (temp == (Tcl_Obj*) NULL) {
/* Memory allocation problem */
res = TCL_ERROR;
goto cleanup;
}
res = Tcl_ListObjAppendElement (dataPtr->interp, command, temp);
if (res != TCL_OK)
goto cleanup;
/*
* Step 2, execute the command at the global level of the interpreter
* used to create the transformation. Destroy the command afterward.
* If an error occured and the current interpreter is defined and not
* equal to the interpreter for the callback, then copy the error
* message into current interpreter. Don't copy if in preservation mode.
*/
res = Tcl_GlobalEvalObj (dataPtr->interp, command);
Tcl_DecrRefCount (command);
command = (Tcl_Obj*) NULL;
if ((res != TCL_OK) && (interp != NO_INTERP) &&
(dataPtr->interp != interp) && !preserve) {
Tcl_SetObjResult(interp, Tcl_GetObjResult(dataPtr->interp));
return res;
}
/*
* Step 3, transmit a possible conversion result to the underlying
* channel, or ourselves.
*/
switch (transmit) {
case TRANSMIT_DONT:
/* nothing to do */
break;
case TRANSMIT_DOWN:
resObj = Tcl_GetObjResult(dataPtr->interp);
resBuf = (unsigned char*) Tcl_GetByteArrayFromObj(resObj, &resLen);
Tcl_WriteRaw(Tcl_GetStackedChannel(dataPtr->self),
(char*) resBuf, resLen);
break;
case TRANSMIT_SELF:
resObj = Tcl_GetObjResult (dataPtr->interp);
resBuf = (unsigned char*) Tcl_GetByteArrayFromObj(resObj, &resLen);
Tcl_WriteRaw(dataPtr->self, (char*) resBuf, resLen);
break;
case TRANSMIT_IBUF:
resObj = Tcl_GetObjResult (dataPtr->interp);
resBuf = (unsigned char*) Tcl_GetByteArrayFromObj(resObj, &resLen);
ResultAdd(&dataPtr->result, resBuf, resLen);
break;
case TRANSMIT_NUM:
/* Interpret result as integer number */
resObj = Tcl_GetObjResult (dataPtr->interp);
Tcl_GetIntFromObj(dataPtr->interp, resObj, &dataPtr->maxRead);
break;
}
Tcl_ResetResult(dataPtr->interp);
if (preserve) {
Tcl_RestoreResult(dataPtr->interp, &ciSave);
}
return res;
cleanup:
if (preserve) {
Tcl_RestoreResult(dataPtr->interp, &ciSave);
}
if (command != (Tcl_Obj*) NULL) {
Tcl_DecrRefCount(command);
}
return res;
}
/*
*------------------------------------------------------*
*
* TransformBlockModeProc --
*
* Trap handler. Called by the generic IO system
* during option processing to change the blocking
* mode of the channel.
*
* Sideeffects:
* Forwards the request to the underlying
* channel.
*
* Result:
* 0 if successful, errno when failed.
*
*------------------------------------------------------*
*/
static int
TransformBlockModeProc (instanceData, mode)
ClientData instanceData; /* State of transformation */
int mode; /* New blocking mode */
{
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
if (mode == TCL_MODE_NONBLOCKING) {
dataPtr->flags |= CHANNEL_ASYNC;
} else {
dataPtr->flags &= ~(CHANNEL_ASYNC);
}
return 0;
}
/*
*------------------------------------------------------*
*
* TransformCloseProc --
*
* Trap handler. Called by the generic IO system
* during destruction of the transformation channel.
*
* Sideeffects:
* Releases the memory allocated in
* 'Tcl_TransformObjCmd'.
*
* Result:
* None.
*
*------------------------------------------------------*
*/
static int
TransformCloseProc (instanceData, interp)
ClientData instanceData;
Tcl_Interp* interp;
{
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
/*
* Important: In this procedure 'dataPtr->self' already points to
* the underlying channel.
*/
/*
* There is no need to cancel an existing channel handler, this is already
* done. Either by 'Tcl_UnstackChannel' or by the general cleanup in
* 'Tcl_Close'.
*
* But we have to cancel an active timer to prevent it from firing on the
* removed channel.
*/
if (dataPtr->timer != (Tcl_TimerToken) NULL) {
Tcl_DeleteTimerHandler (dataPtr->timer);
dataPtr->timer = (Tcl_TimerToken) NULL;
}
/*
* Now flush data waiting in internal buffers to output and input. The
* input must be done despite the fact that there is no real receiver
* for it anymore. But the scripts might have sideeffects other parts
* of the system rely on (f.e. signaling the close to interested parties).
*/
if (dataPtr->mode & TCL_WRITABLE) {
ExecuteCallback (dataPtr, interp, A_FLUSH_WRITE,
NULL, 0, TRANSMIT_DOWN, 1);
}
if ((dataPtr->mode & TCL_READABLE) && !dataPtr->readIsFlushed) {
dataPtr->readIsFlushed = 1;
ExecuteCallback (dataPtr, interp, A_FLUSH_READ,
NULL, 0, TRANSMIT_IBUF, 1);
}
if (dataPtr->mode & TCL_WRITABLE) {
ExecuteCallback (dataPtr, interp, A_DELETE_WRITE,
NULL, 0, TRANSMIT_DONT, 1);
}
if (dataPtr->mode & TCL_READABLE) {
ExecuteCallback (dataPtr, interp, A_DELETE_READ,
NULL, 0, TRANSMIT_DONT, 1);
}
/*
* General cleanup
*/
ResultClear(&dataPtr->result);
Tcl_DecrRefCount(dataPtr->command);
ckfree((VOID*) dataPtr);
return TCL_OK;
}
/*
*------------------------------------------------------*
*
* TransformInputProc --
*
* Called by the generic IO system to convert read data.
*
* Sideeffects:
* As defined by the conversion.
*
* Result:
* A transformed buffer.
*
*------------------------------------------------------*
*/
static int
TransformInputProc (instanceData, buf, toRead, errorCodePtr)
ClientData instanceData;
char* buf;
int toRead;
int* errorCodePtr;
{
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
int gotBytes, read, res, copied;
Tcl_Channel downChan;
/* should assert (dataPtr->mode & TCL_READABLE) */
if (toRead == 0) {
/* Catch a no-op.
*/
return 0;
}
gotBytes = 0;
downChan = Tcl_GetStackedChannel(dataPtr->self);
while (toRead > 0) {
/*
* Loop until the request is satisfied (or no data is available from
* below, possibly EOF).
*/
copied = ResultCopy (&dataPtr->result, UCHARP (buf), toRead);
toRead -= copied;
buf += copied;
gotBytes += copied;
if (toRead == 0) {
/* The request was completely satisfied from our buffers.
* We can break out of the loop and return to the caller.
*/
return gotBytes;
}
/*
* Length (dataPtr->result) == 0, toRead > 0 here . Use the incoming
* 'buf'! as target to store the intermediary information read
* from the underlying channel.
*
* Ask the tcl level how much data it allows us to read from
* the underlying channel. This feature allows the transform to
* signal EOF upstream although there is none downstream. Useful
* to control an unbounded 'fcopy', either through counting bytes,
* or by pattern matching.
*/
ExecuteCallback (dataPtr, NO_INTERP, A_QUERY_MAXREAD,
NULL, 0, TRANSMIT_NUM /* -> maxRead */, 1);
if (dataPtr->maxRead >= 0) {
if (dataPtr->maxRead < toRead) {
toRead = dataPtr->maxRead;
}
} /* else: 'maxRead < 0' == Accept the current value of toRead */
if (toRead <= 0) {
return gotBytes;
}
read = Tcl_ReadRaw(downChan, buf, toRead);
if (read < 0) {
/* Report errors to caller. EAGAIN is a special situation.
* If we had some data before we report that instead of the
* request to re-try.
*/
if ((Tcl_GetErrno() == EAGAIN) && (gotBytes > 0)) {
return gotBytes;
}
*errorCodePtr = Tcl_GetErrno();
return -1;
}
if (read == 0) {
/*
* Check wether we hit on EOF in the underlying channel or
* not. If not differentiate between blocking and
* non-blocking modes. In non-blocking mode we ran
* temporarily out of data. Signal this to the caller via
* EWOULDBLOCK and error return (-1). In the other cases
* we simply return what we got and let the caller wait
* for more. On the other hand, if we got an EOF we have
* to convert and flush all waiting partial data.
*/
if (! Tcl_Eof (downChan)) {
if ((gotBytes == 0) && (dataPtr->flags & CHANNEL_ASYNC)) {
*errorCodePtr = EWOULDBLOCK;
return -1;
} else {
return gotBytes;
}
} else {
if (dataPtr->readIsFlushed) {
/* Already flushed, nothing to do anymore
*/
return gotBytes;
}
dataPtr->readIsFlushed = 1;
ExecuteCallback (dataPtr, NO_INTERP, A_FLUSH_READ,
NULL, 0, TRANSMIT_IBUF, P_PRESERVE);
if (ResultLength (&dataPtr->result) == 0) {
/* we had nothing to flush */
return gotBytes;
}
continue; /* at: while (toRead > 0) */
}
} /* read == 0 */
/* Transform the read chunk and add the result to our
* read buffer (dataPtr->result)
*/
res = ExecuteCallback (dataPtr, NO_INTERP, A_READ,
UCHARP (buf), read, TRANSMIT_IBUF,
P_PRESERVE);
if (res != TCL_OK) {
*errorCodePtr = EINVAL;
return -1;
}
} /* while toRead > 0 */
return gotBytes;
}
/*
*------------------------------------------------------*
*
* TransformOutputProc --
*
* Called by the generic IO system to convert data
* waiting to be written.
*
* Sideeffects:
* As defined by the transformation.
*
* Result:
* A transformed buffer.
*
*------------------------------------------------------*
*/
static int
TransformOutputProc (instanceData, buf, toWrite, errorCodePtr)
ClientData instanceData;
char* buf;
int toWrite;
int* errorCodePtr;
{
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
int res;
/* should assert (dataPtr->mode & TCL_WRITABLE) */
if (toWrite == 0) {
/* Catch a no-op.
*/
return 0;
}
res = ExecuteCallback (dataPtr, NO_INTERP, A_WRITE,
UCHARP (buf), toWrite,
TRANSMIT_DOWN, P_NO_PRESERVE);
if (res != TCL_OK) {
*errorCodePtr = EINVAL;
return -1;
}
return toWrite;
}
/*
*------------------------------------------------------*
*
* TransformSeekProc --
*
* This procedure is called by the generic IO level
* to move the access point in a channel.
*
* Sideeffects:
* Moves the location at which the channel
* will be accessed in future operations.
* Flushes all transformation buffers, then
* forwards it to the underlying channel.
*
* Result:
* -1 if failed, the new position if
* successful. An output argument contains
* the POSIX error code if an error
* occurred, or zero.
*
*------------------------------------------------------*
*/
static int
TransformSeekProc (instanceData, offset, mode, errorCodePtr)
ClientData instanceData; /* The channel to manipulate */
long offset; /* Size of movement. */
int mode; /* How to move */
int* errorCodePtr; /* Location of error flag. */
{
int result;
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
Tcl_Channel parent = Tcl_GetStackedChannel(dataPtr->self);
Tcl_ChannelType* parentType = Tcl_GetChannelType(parent);
Tcl_DriverSeekProc* parentSeekProc = Tcl_ChannelSeekProc(parentType);
if ((offset == 0) && (mode == SEEK_CUR)) {
/* This is no seek but a request to tell the caller the current
* location. Simply pass the request down.
*/
result = (*parentSeekProc) (Tcl_GetChannelInstanceData(parent),
offset, mode, errorCodePtr);
return result;
}
/*
* It is a real request to change the position. Flush all data waiting
* for output and discard everything in the input buffers. Then pass
* the request down, unchanged.
*/
if (dataPtr->mode & TCL_WRITABLE) {
ExecuteCallback (dataPtr, NO_INTERP, A_FLUSH_WRITE,
NULL, 0, TRANSMIT_DOWN, P_NO_PRESERVE);
}
if (dataPtr->mode & TCL_READABLE) {
ExecuteCallback (dataPtr, NO_INTERP, A_CLEAR_READ,
NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE);
ResultClear(&dataPtr->result);
dataPtr->readIsFlushed = 0;
}
result = (*parentSeekProc) (Tcl_GetChannelInstanceData(parent),
offset, mode, errorCodePtr);
return result;
}
/*
*------------------------------------------------------*
*
* TransformSetOptionProc --
*
* Called by generic layer to handle the reconfi-
* guration of channel specific options. As this
* channel type does not have such, it simply passes
* all requests downstream.
*
* Sideeffects:
* As defined by the channel downstream.
*
* Result:
* A standard TCL error code.
*
*------------------------------------------------------*
*/
static int
TransformSetOptionProc (instanceData, interp, optionName, value)
ClientData instanceData;
Tcl_Interp *interp;
char *optionName;
char *value;
{
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
Tcl_Channel downChan = Tcl_GetStackedChannel(dataPtr->self);
Tcl_DriverSetOptionProc *setOptionProc;
setOptionProc = Tcl_ChannelSetOptionProc(Tcl_GetChannelType(downChan));
if (setOptionProc != NULL) {
return (*setOptionProc)(Tcl_GetChannelInstanceData(downChan),
interp, optionName, value);
}
return TCL_ERROR;
}
/*
*------------------------------------------------------*
*
* TransformGetOptionProc --
*
* Called by generic layer to handle requests for
* the values of channel specific options. As this
* channel type does not have such, it simply passes
* all requests downstream.
*
* Sideeffects:
* As defined by the channel downstream.
*
* Result:
* A standard TCL error code.
*
*------------------------------------------------------*
*/
static int
TransformGetOptionProc (instanceData, interp, optionName, dsPtr)
ClientData instanceData;
Tcl_Interp* interp;
char* optionName;
Tcl_DString* dsPtr;
{
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
Tcl_Channel downChan = Tcl_GetStackedChannel(dataPtr->self);
Tcl_DriverGetOptionProc *getOptionProc;
getOptionProc = Tcl_ChannelGetOptionProc(Tcl_GetChannelType(downChan));
if (getOptionProc != NULL) {
return (*getOptionProc)(Tcl_GetChannelInstanceData(downChan),
interp, optionName, dsPtr);
} else if (optionName == (char*) NULL) {
/*
* Request is query for all options, this is ok.
*/
return TCL_OK;
}
/*
* Request for a specific option has to fail, we don't have any.
*/
return TCL_ERROR;
}
/*
*------------------------------------------------------*
*
* TransformWatchProc --
*
* Initialize the notifier to watch for events from
* this channel.
*
* Sideeffects:
* Sets up the notifier so that a future
* event on the channel will be seen by Tcl.
*
* Result:
* None.
*
*------------------------------------------------------*
*/
/* ARGSUSED */
static void
TransformWatchProc (instanceData, mask)
ClientData instanceData; /* Channel to watch */
int mask; /* Events of interest */
{
/* The caller expressed interest in events occuring for this
* channel. We are forwarding the call to the underlying
* channel now.
*/
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
Tcl_Channel downChan;
dataPtr->watchMask = mask;
/* No channel handlers any more. We will be notified automatically
* about events on the channel below via a call to our
* 'TransformNotifyProc'. But we have to pass the interest down now.
* We are allowed to add additional 'interest' to the mask if we want
* to. But this transformation has no such interest. It just passes
* the request down, unchanged.
*/
downChan = Tcl_GetStackedChannel(dataPtr->self);
(Tcl_GetChannelType(downChan))
->watchProc(Tcl_GetChannelInstanceData(downChan), mask);
/*
* Management of the internal timer.
*/
if ((dataPtr->timer != (Tcl_TimerToken) NULL) &&
(!(mask & TCL_READABLE) || (ResultLength(&dataPtr->result) == 0))) {
/* A pending timer exists, but either is there no (more)
* interest in the events it generates or nothing is availablee
* for reading, so remove it.
*/
Tcl_DeleteTimerHandler (dataPtr->timer);
dataPtr->timer = (Tcl_TimerToken) NULL;
}
if ((dataPtr->timer == (Tcl_TimerToken) NULL) &&
(mask & TCL_READABLE) && (ResultLength (&dataPtr->result) > 0)) {
/* There is no pending timer, but there is interest in readable
* events and we actually have data waiting, so generate a timer
* to flush that.
*/
dataPtr->timer = Tcl_CreateTimerHandler (FLUSH_DELAY,
TransformChannelHandlerTimer, (ClientData) dataPtr);
}
}
/*
*------------------------------------------------------*
*
* TransformGetFileHandleProc --
*
* Called from Tcl_GetChannelHandle to retrieve
* OS specific file handle from inside this channel.
*
* Sideeffects:
* None.
*
* Result:
* The appropriate Tcl_File or NULL if not
* present.
*
*------------------------------------------------------*
*/
static int
TransformGetFileHandleProc (instanceData, direction, handlePtr)
ClientData instanceData; /* Channel to query */
int direction; /* Direction of interest */
ClientData* handlePtr; /* Place to store the handle into */
{
/*
* Return the handle belonging to parent channel.
* IOW, pass the request down and the result up.
*/
TransformChannelData* dataPtr = (TransformChannelData*) instanceData;
return Tcl_GetChannelHandle(Tcl_GetStackedChannel(dataPtr->self),
direction, handlePtr);
}
/*
*------------------------------------------------------*
*
* TransformNotifyProc --
*
* ------------------------------------------------*
* Handler called by Tcl to inform us of activity
* on the underlying channel.
* ------------------------------------------------*
*
* Sideeffects:
* May process the incoming event by itself.
*
* Result:
* None.
*
*------------------------------------------------------*
*/
static int
TransformNotifyProc (clientData, mask)
ClientData clientData; /* The state of the notified transformation */
int mask; /* The mask of occuring events */
{
TransformChannelData* dataPtr = (TransformChannelData*) clientData;
/*
* An event occured in the underlying channel. This
* transformation doesn't process such events thus returns the
* incoming mask unchanged.
*/
if (dataPtr->timer != (Tcl_TimerToken) NULL) {
/*
* Delete an existing timer. It was not fired, yet we are
* here, so the channel below generated such an event and we
* don't have to. The renewal of the interest after the
* execution of channel handlers will eventually cause us to
* recreate the timer (in TransformWatchProc).
*/
Tcl_DeleteTimerHandler (dataPtr->timer);
dataPtr->timer = (Tcl_TimerToken) NULL;
}
return mask;
}
/*
*------------------------------------------------------*
*
* TransformChannelHandlerTimer --
*
* Called by the notifier (-> timer) to flush out
* information waiting in the input buffer.
*
* Sideeffects:
* As of 'Tcl_NotifyChannel'.
*
* Result:
* None.
*
*------------------------------------------------------*
*/
static void
TransformChannelHandlerTimer (clientData)
ClientData clientData; /* Transformation to query */
{
TransformChannelData* dataPtr = (TransformChannelData*) clientData;
dataPtr->timer = (Tcl_TimerToken) NULL;
if (!(dataPtr->watchMask & TCL_READABLE) ||
(ResultLength (&dataPtr->result) == 0)) {
/* The timer fired, but either is there no (more)
* interest in the events it generates or nothing is available
* for reading, so ignore it and don't recreate it.
*/
return;
}
Tcl_NotifyChannel(dataPtr->self, TCL_READABLE);
}
/*
*------------------------------------------------------*
*
* ResultClear --
*
* Deallocates any memory allocated by 'ResultAdd'.
*
* Sideeffects:
* See above.
*
* Result:
* None.
*
*------------------------------------------------------*
*/
static void
ResultClear (r)
ResultBuffer* r; /* Reference to the buffer to clear out */
{
r->used = 0;
if (r->allocated) {
ckfree((char*) r->buf);
r->buf = UCHARP (NULL);
r->allocated = 0;
}
}
/*
*------------------------------------------------------*
*
* ResultInit --
*
* Initializes the specified buffer structure. The
* structure will contain valid information for an
* emtpy buffer.
*
* Sideeffects:
* See above.
*
* Result:
* None.
*
*------------------------------------------------------*
*/
static void
ResultInit (r)
ResultBuffer* r; /* Reference to the structure to initialize */
{
r->used = 0;
r->allocated = 0;
r->buf = UCHARP (NULL);
}
/*
*------------------------------------------------------*
*
* ResultLength --
*
* Returns the number of bytes stored in the buffer.
*
* Sideeffects:
* None.
*
* Result:
* An integer, see above too.
*
*------------------------------------------------------*
*/
static int
ResultLength (r)
ResultBuffer* r; /* The structure to query */
{
return r->used;
}
/*
*------------------------------------------------------*
*
* ResultCopy --
*
* Copies the requested number of bytes from the
* buffer into the specified array and removes them
* from the buffer afterward. Copies less if there
* is not enough data in the buffer.
*
* Sideeffects:
* See above.
*
* Result:
* The number of actually copied bytes,
* possibly less than 'toRead'.
*
*------------------------------------------------------*
*/
static int
ResultCopy (r, buf, toRead)
ResultBuffer* r; /* The buffer to read from */
unsigned char* buf; /* The buffer to copy into */
int toRead; /* Number of requested bytes */
{
if (r->used == 0) {
/* Nothing to copy in the case of an empty buffer.
*/
return 0;
}
if (r->used == toRead) {
/* We have just enough. Copy everything to the caller.
*/
memcpy ((VOID*) buf, (VOID*) r->buf, (size_t) toRead);
r->used = 0;
return toRead;
}
if (r->used > toRead) {
/* The internal buffer contains more than requested.
* Copy the requested subset to the caller, and shift
* the remaining bytes down.
*/
memcpy ((VOID*) buf, (VOID*) r->buf, (size_t) toRead);
memmove ((VOID*) r->buf, (VOID*) (r->buf + toRead),
(size_t) r->used - toRead);
r->used -= toRead;
return toRead;
}
/* There is not enough in the buffer to satisfy the caller, so
* take everything.
*/
memcpy((VOID*) buf, (VOID*) r->buf, (size_t) r->used);
toRead = r->used;
r->used = 0;
return toRead;
}
/*
*------------------------------------------------------*
*
* ResultAdd --
*
* Adds the bytes in the specified array to the
* buffer, by appending it.
*
* Sideeffects:
* See above.
*
* Result:
* None.
*
*------------------------------------------------------*
*/
static void
ResultAdd (r, buf, toWrite)
ResultBuffer* r; /* The buffer to extend */
unsigned char* buf; /* The buffer to read from */
int toWrite; /* The number of bytes in 'buf' */
{
if ((r->used + toWrite) > r->allocated) {
/* Extension of the internal buffer is required.
*/
if (r->allocated == 0) {
r->allocated = toWrite + INCREMENT;
r->buf = UCHARP (ckalloc((unsigned) r->allocated));
} else {
r->allocated += toWrite + INCREMENT;
r->buf = UCHARP (ckrealloc((char*) r->buf,
(unsigned) r->allocated));
}
}
/* now copy data */
memcpy(r->buf + r->used, buf, (size_t) toWrite);
r->used += toWrite;
}
|
Changes to generic/tclIndexObj.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclIndexObj.c -- * * This file implements objects of type "index". This object type * is used to lookup a keyword in a table of valid values and cache * the index of the matching entry. * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclIndexObj.c -- * * This file implements objects of type "index". This object type * is used to lookup a keyword in a table of valid values and cache * the index of the matching entry. * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclIndexObj.c,v 1.4.10.3 2001/08/30 19:02:21 hobbs Exp $ */ #include "tclInt.h" /* * Prototypes for procedures defined later in this file: */ |
| ︙ | ︙ | |||
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
"index", /* name */
(Tcl_FreeInternalRepProc *) NULL, /* freeIntRepProc */
(Tcl_DupInternalRepProc *) NULL, /* dupIntRepProc */
(Tcl_UpdateStringProc *) NULL, /* updateStringProc */
SetIndexFromAny /* setFromAnyProc */
};
/*
* Boolean flag indicating whether or not the tclIndexType object
* type has been registered with the Tcl compiler.
*/
static int indexTypeInitialized = 0;
| > > > > > > > > > > | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
"index", /* name */
(Tcl_FreeInternalRepProc *) NULL, /* freeIntRepProc */
(Tcl_DupInternalRepProc *) NULL, /* dupIntRepProc */
(Tcl_UpdateStringProc *) NULL, /* updateStringProc */
SetIndexFromAny /* setFromAnyProc */
};
/*
* DKF - Just noting that the data format used in objects with the
* above type is that the ptr1 field will contain a pointer to the
* table that the last lookup was performed in, and the ptr2 field
* will contain the sizeof(char) offset of the string within that
* table. Note that we assume that each table is only ever called
* with a single offset, but this is a pretty safe assumption in
* practise...
*/
/*
* Boolean flag indicating whether or not the tclIndexType object
* type has been registered with the Tcl compiler.
*/
static int indexTypeInitialized = 0;
|
| ︙ | ︙ | |||
86 87 88 89 90 91 92 |
* (doing the check here saves the overhead of calling
* Tcl_GetIndexFromObjStruct in the common case where the result
* is cached).
*/
if ((objPtr->typePtr == &tclIndexType)
&& (objPtr->internalRep.twoPtrValue.ptr1 == (VOID *) tablePtr)) {
| | > | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
* (doing the check here saves the overhead of calling
* Tcl_GetIndexFromObjStruct in the common case where the result
* is cached).
*/
if ((objPtr->typePtr == &tclIndexType)
&& (objPtr->internalRep.twoPtrValue.ptr1 == (VOID *) tablePtr)) {
*indexPtr = ((int) objPtr->internalRep.twoPtrValue.ptr2)
/ sizeof(char *);
return TCL_OK;
}
return Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, sizeof(char *),
msg, flags, indexPtr);
}
/*
|
| ︙ | ︙ | |||
147 148 149 150 151 152 153 |
/*
* See if there is a valid cached result from a previous lookup.
*/
if ((objPtr->typePtr == &tclIndexType)
&& (objPtr->internalRep.twoPtrValue.ptr1 == (VOID *) tablePtr)) {
| | | 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
/*
* See if there is a valid cached result from a previous lookup.
*/
if ((objPtr->typePtr == &tclIndexType)
&& (objPtr->internalRep.twoPtrValue.ptr1 == (VOID *) tablePtr)) {
*indexPtr = ((int) objPtr->internalRep.twoPtrValue.ptr2) / offset;
return TCL_OK;
}
/*
* Lookup the value of the object in the table. Accept unique
* abbreviations unless TCL_EXACT is set in flags.
*/
|
| ︙ | ︙ | |||
179 180 181 182 183 184 185 |
*/
if (key[0] == '\0') {
goto error;
}
for (entryPtr = tablePtr, i = 0; *entryPtr != NULL;
| | | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
*/
if (key[0] == '\0') {
goto error;
}
for (entryPtr = tablePtr, i = 0; *entryPtr != NULL;
entryPtr = (char **) ((char *) entryPtr + offset), i++) {
for (p1 = key, p2 = *entryPtr; *p1 == *p2; p1++, p2++) {
if (*p1 == 0) {
index = i;
goto done;
}
}
if (*p1 == 0) {
|
| ︙ | ︙ | |||
209 210 211 212 213 214 215 |
done:
if ((objPtr->typePtr != NULL)
&& (objPtr->typePtr->freeIntRepProc != NULL)) {
objPtr->typePtr->freeIntRepProc(objPtr);
}
objPtr->internalRep.twoPtrValue.ptr1 = (VOID *) tablePtr;
| > > > | | | | | 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 |
done:
if ((objPtr->typePtr != NULL)
&& (objPtr->typePtr->freeIntRepProc != NULL)) {
objPtr->typePtr->freeIntRepProc(objPtr);
}
objPtr->internalRep.twoPtrValue.ptr1 = (VOID *) tablePtr;
/*
* Make sure to account for offsets != sizeof(char *). [Bug 5153]
*/
objPtr->internalRep.twoPtrValue.ptr2 = (VOID *) (index * offset);
objPtr->typePtr = &tclIndexType;
*indexPtr = index;
return TCL_OK;
error:
if (interp != NULL) {
int count;
resultPtr = Tcl_GetObjResult(interp);
Tcl_AppendStringsToObj(resultPtr,
(numAbbrev > 1) ? "ambiguous " : "bad ", msg, " \"",
key, "\": must be ", *tablePtr, (char *) NULL);
for (entryPtr = (char **) ((char *) tablePtr + offset), count = 0;
*entryPtr != NULL;
entryPtr = (char **) ((char *) entryPtr + offset), count++) {
if ((*((char **) ((char *) entryPtr + offset))) == NULL) {
Tcl_AppendStringsToObj(resultPtr,
(count > 0) ? ", or " : " or ", *entryPtr,
(char *) NULL);
} else {
Tcl_AppendStringsToObj(resultPtr, ", ", *entryPtr,
(char *) NULL);
}
|
| ︙ | ︙ | |||
306 307 308 309 310 311 312 |
* message. */
char *message; /* Error message to print after the
* leading objects in objv. The
* message may be NULL. */
{
Tcl_Obj *objPtr;
char **tablePtr;
| | > | > > > > > | > | | 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 |
* message. */
char *message; /* Error message to print after the
* leading objects in objv. The
* message may be NULL. */
{
Tcl_Obj *objPtr;
char **tablePtr;
int i, offset;
objPtr = Tcl_GetObjResult(interp);
Tcl_AppendToObj(objPtr, "wrong # args: should be \"", -1);
for (i = 0; i < objc; i++) {
/*
* If the object is an index type use the index table which allows
* for the correct error message even if the subcommand was
* abbreviated. Otherwise, just use the string rep.
*/
if (objv[i]->typePtr == &tclIndexType) {
tablePtr = ((char **) objv[i]->internalRep.twoPtrValue.ptr1);
offset = ((int) objv[i]->internalRep.twoPtrValue.ptr2);
Tcl_AppendStringsToObj(objPtr,
*((char **)(((char *)tablePtr)+offset)),
(char *) NULL);
} else {
Tcl_AppendStringsToObj(objPtr, Tcl_GetString(objv[i]),
(char *) NULL);
}
/*
* Append a space character (" ") if there is more text to follow
* (either another element from objv, or the message string).
*/
if ((i < (objc - 1)) || message) {
Tcl_AppendStringsToObj(objPtr, " ", (char *) NULL);
}
}
if (message) {
Tcl_AppendStringsToObj(objPtr, message, (char *) NULL);
}
Tcl_AppendStringsToObj(objPtr, "\"", (char *) NULL);
}
|
Changes to generic/tclInitScript.h.
1 2 3 4 5 6 7 8 9 10 | /* * tclInitScript.h -- * * This file contains Unix & Windows common init script * It is not used on the Mac. (the mac init script is in tclMacInit.c) * * Copyright (c) 1998 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * All rights reserved. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclInitScript.h -- * * This file contains Unix & Windows common init script * It is not used on the Mac. (the mac init script is in tclMacInit.c) * * Copyright (c) 1998 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * All rights reserved. * * RCS: @(#) $Id: tclInitScript.h,v 1.12.2.1 2001/09/12 21:26:36 dgp Exp $ */ /* * In order to find init.tcl during initialization, the following script * is invoked by Tcl_Init(). It looks in several different directories: * * $tcl_library - can specify a primary location, if set |
| ︙ | ︙ | |||
45 46 47 48 49 50 51 |
set dirs {}\n\
if {[info exists tcl_library]} {\n\
lappend dirs $tcl_library\n\
} else {\n\
if {[info exists env(TCL_LIBRARY)]} {\n\
lappend dirs $env(TCL_LIBRARY)\n\
}\n\
| > | | > | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
set dirs {}\n\
if {[info exists tcl_library]} {\n\
lappend dirs $tcl_library\n\
} else {\n\
if {[info exists env(TCL_LIBRARY)]} {\n\
lappend dirs $env(TCL_LIBRARY)\n\
}\n\
catch {\n\
lappend dirs $tclDefaultLibrary\n\
unset tclDefaultLibrary\n\
}\n\
set dirs [concat $dirs $tcl_libPath]\n\
}\n\
foreach i $dirs {\n\
set tcl_library $i\n\
set tclfile [file join $i init.tcl]\n\
if {[file exists $tclfile]} {\n\
if {![catch {uplevel #0 [list source $tclfile]} msg]} {\n\
|
| ︙ | ︙ |
Changes to generic/tclInt.decls.
1 2 3 4 5 6 7 8 9 10 11 12 | # tclInt.decls -- # # This file contains the declarations for all unsupported # functions that are exported by the Tcl library. This file # is used to generate the tclIntDecls.h, tclIntPlatDecls.h, # tclIntStub.c, tclPlatStub.c, tclCompileDecls.h and tclCompileStub.c # files # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # tclInt.decls -- # # This file contains the declarations for all unsupported # functions that are exported by the Tcl library. This file # is used to generate the tclIntDecls.h, tclIntPlatDecls.h, # tclIntStub.c, tclPlatStub.c, tclCompileDecls.h and tclCompileStub.c # files # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: tclInt.decls,v 1.20.2.6 2001/10/17 19:29:25 das Exp $ library tcl # Define the unsupported generic interfaces. interface tclInt |
| ︙ | ︙ | |||
573 574 575 576 577 578 579 |
declare 152 generic {
void TclSetLibraryPath(Tcl_Obj *pathPtr)
}
declare 153 generic {
Tcl_Obj *TclGetLibraryPath(void)
}
| > | | | < > | | | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
declare 152 generic {
void TclSetLibraryPath(Tcl_Obj *pathPtr)
}
declare 153 generic {
Tcl_Obj *TclGetLibraryPath(void)
}
# moved to tclTest.c in 8.3.2/8.4a2
#declare 154 generic {
# int TclTestChannelCmd(ClientData clientData,
# Tcl_Interp *interp, int argc, char **argv)
#}
#declare 155 generic {
# int TclTestChannelEventCmd(ClientData clientData, \
# Tcl_Interp *interp, int argc, char **argv)
#}
declare 156 generic {
void TclRegError (Tcl_Interp *interp, char *msg, \
int status)
}
declare 157 generic {
Var * TclVarTraceExists (Tcl_Interp *interp, char *varName)
}
declare 158 generic {
void TclSetStartupScriptFileName(char *filename)
}
declare 159 generic {
char *TclGetStartupScriptFileName(void)
}
declare 160 generic {
int TclpMatchFilesTypes(Tcl_Interp *interp, char *separators, \
Tcl_DString *dirPtr, char *pattern, char *tail, GlobTypeData *types)
}
# new in 8.3.2/8.4a2
declare 161 generic {
int TclChannelTransform(Tcl_Interp *interp, Tcl_Channel chan, \
Tcl_Obj *cmdObjPtr)
}
declare 162 generic {
void TclChannelEventScriptInvoker(ClientData clientData, int flags)
}
# New in 8.3.4, support for shared library version of tclcompiler.
# ALERT: The result of 'TclGetInstructionTable' is actually an
# InstructionDesc*" but we do not want to describe this structure in
# "tclInt.h". It is described in "tclCompile.h". Use a cast to the
# correct type when calling this procedure.
declare 163 generic {
void * TclGetInstructionTable (void)
}
# ALERT: The argument of 'TclExpandCodeArray' is actually a
# "CompileEnv*" but we do not want to describe this structure in
# "tclInt.h". It is described in "tclCompile.h".
declare 164 generic {
void TclExpandCodeArray (void *envPtr)
}
##############################################################################
# Define the platform specific internal Tcl interface. These functions are
# only available on the designated platform.
interface tclIntPlat
|
| ︙ | ︙ | |||
635 636 637 638 639 640 641 |
int FSpSetDefaultDir(FSSpecPtr theSpec)
}
declare 6 mac {
OSErr FSpFindFolder(short vRefNum, OSType folderType, \
Boolean createFolder, FSSpec *spec)
}
declare 7 mac {
| | | | | | 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 |
int FSpSetDefaultDir(FSSpecPtr theSpec)
}
declare 6 mac {
OSErr FSpFindFolder(short vRefNum, OSType folderType, \
Boolean createFolder, FSSpec *spec)
}
declare 7 mac {
void GetGlobalMouseTcl(Point *mouse)
}
# The following routines are utility functions in Tcl. They are exported
# here because they are needed in Tk. They are not officially supported,
# however. The first set are from the MoreFiles package.
declare 8 mac {
pascal OSErr FSpGetDirectoryIDTcl(CONST FSSpec *spec, long *theDirID, \
Boolean *isDirectory)
}
declare 9 mac {
pascal short FSpOpenResFileCompatTcl(CONST FSSpec *spec, \
SignedByte permission)
}
declare 10 mac {
pascal void FSpCreateResFileCompatTcl(CONST FSSpec *spec, OSType creator, \
OSType fileType, ScriptCode scriptTag)
}
# Like the MoreFiles routines these fix problems in the standard
# Mac calls. These routines are from tclMacUtils.h.
declare 11 mac {
|
| ︙ | ︙ | |||
706 707 708 709 710 711 712 713 714 715 716 717 718 719 |
declare 23 mac {
FILE * TclMacFOpenHack(CONST char *path, CONST char *mode)
}
# Replaced in 8.1 by TclpReadLink:
# declare 24 mac {
# int TclMacReadlink(char *path, char *buf, int size)
# }
declare 25 mac {
int TclMacChmod(char *path, int mode)
}
############################
# Windows specific internals
| > > > | 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 |
declare 23 mac {
FILE * TclMacFOpenHack(CONST char *path, CONST char *mode)
}
# Replaced in 8.1 by TclpReadLink:
# declare 24 mac {
# int TclMacReadlink(char *path, char *buf, int size)
# }
declare 24 mac {
char * TclpGetTZName(int isdst)
}
declare 25 mac {
int TclMacChmod(char *path, int mode)
}
############################
# Windows specific internals
|
| ︙ | ︙ | |||
788 789 790 791 792 793 794 |
}
declare 19 win {
TclFile TclpOpenFile(CONST char *fname, int mode)
}
declare 20 win {
void TclWinAddProcess(HANDLE hProcess, DWORD id)
}
| > > | | < > > > > > > > | 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 |
}
declare 19 win {
TclFile TclpOpenFile(CONST char *fname, int mode)
}
declare 20 win {
void TclWinAddProcess(HANDLE hProcess, DWORD id)
}
# Removed permanently from 8.3.4 to match 8.4a2's removal
#
# declare 21 win {
# void TclpAsyncMark(Tcl_AsyncHandler async)
# }
# Added in 8.1:
declare 22 win {
TclFile TclpCreateTempFile(CONST char *contents)
}
declare 23 win {
char * TclpGetTZName(int isdst)
}
declare 24 win {
char * TclWinNoBackslash(char *path)
}
declare 25 win {
TclPlatformType *TclWinGetPlatform(void)
}
declare 26 win {
void TclWinSetInterfaces(int wide)
}
# Added in Tcl 8.3.3 / 8.4
declare 27 win {
void TclWinFlushDirtyChannels (void)
}
#########################
# Unix specific internals
# Pipe channel functions
declare 0 unix {
|
| ︙ | ︙ |
Changes to generic/tclInt.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclInt.h -- * * Declarations of things used internally by the Tcl interpreter. * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1993-1997 Lucent Technologies. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclInt.h -- * * Declarations of things used internally by the Tcl interpreter. * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1993-1997 Lucent Technologies. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclInt.h,v 1.42.2.4 2001/11/29 20:08:33 msofer Exp $ */ #ifndef _TCLINT #define _TCLINT /* * Common include files needed by most of the Tcl source files are |
| ︙ | ︙ | |||
180 181 182 183 184 185 186 |
int maxExportPatterns; /* Mumber of export patterns for which
* space is currently allocated. */
int cmdRefEpoch; /* Incremented if a newly added command
* shadows a command for which this
* namespace has already cached a Command *
* pointer; this causes all its cached
* Command* pointers to be invalidated. */
| | | > > | | | | 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
int maxExportPatterns; /* Mumber of export patterns for which
* space is currently allocated. */
int cmdRefEpoch; /* Incremented if a newly added command
* shadows a command for which this
* namespace has already cached a Command *
* pointer; this causes all its cached
* Command* pointers to be invalidated. */
int resolverEpoch; /* Incremented whenever (a) the name resolution
* rules change for this namespace or (b) a
* newly added command shadows a command that
* is compiled to bytecodes.
* This invalidates all byte codes compiled
* in the namespace, causing the code to be
* recompiled under the new rules.*/
Tcl_ResolveCmdProc *cmdResProc;
/* If non-null, this procedure overrides
* the usual command resolution mechanism
* in Tcl. This procedure is invoked
* within Tcl_FindCommand to resolve all
* command references within the namespace. */
Tcl_ResolveVarProc *varResProc;
|
| ︙ | ︙ | |||
1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 | */ extern Tcl_Obj * tclFreeObjList; #ifdef TCL_COMPILE_STATS extern long tclObjsAlloced; extern long tclObjsFreed; #endif /* TCL_COMPILE_STATS */ /* * Pointer to a heap-allocated string of length zero that the Tcl core uses * as the value of an empty string representation for an object. This value * is shared by all new objects allocated by Tcl_NewObj. */ | > > | 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 | */ extern Tcl_Obj * tclFreeObjList; #ifdef TCL_COMPILE_STATS extern long tclObjsAlloced; extern long tclObjsFreed; #define TCL_MAX_SHARED_OBJ_STATS 5 extern long tclObjsShared[TCL_MAX_SHARED_OBJ_STATS]; #endif /* TCL_COMPILE_STATS */ /* * Pointer to a heap-allocated string of length zero that the Tcl core uses * as the value of an empty string representation for an object. This value * is shared by all new objects allocated by Tcl_NewObj. */ |
| ︙ | ︙ | |||
1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 | EXTERN void TclFinalizeEncodingSubsystem _ANSI_ARGS_((void)); EXTERN void TclFinalizeEnvironment _ANSI_ARGS_((void)); EXTERN void TclFinalizeExecution _ANSI_ARGS_((void)); EXTERN void TclFinalizeIOSubsystem _ANSI_ARGS_((void)); EXTERN void TclFinalizeLoad _ANSI_ARGS_((void)); EXTERN void TclFinalizeMemorySubsystem _ANSI_ARGS_((void)); EXTERN void TclFinalizeNotifier _ANSI_ARGS_((void)); EXTERN void TclFinalizeSynchronization _ANSI_ARGS_((void)); EXTERN void TclFinalizeThreadData _ANSI_ARGS_((void)); EXTERN void TclFindEncodings _ANSI_ARGS_((CONST char *argv0)); EXTERN Proc * TclFindProc _ANSI_ARGS_((Interp *iPtr, char *procName)); EXTERN int TclFormatInt _ANSI_ARGS_((char *buffer, long n)); EXTERN void TclFreePackageInfo _ANSI_ARGS_((Interp *iPtr)); | > | 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 | EXTERN void TclFinalizeEncodingSubsystem _ANSI_ARGS_((void)); EXTERN void TclFinalizeEnvironment _ANSI_ARGS_((void)); EXTERN void TclFinalizeExecution _ANSI_ARGS_((void)); EXTERN void TclFinalizeIOSubsystem _ANSI_ARGS_((void)); EXTERN void TclFinalizeLoad _ANSI_ARGS_((void)); EXTERN void TclFinalizeMemorySubsystem _ANSI_ARGS_((void)); EXTERN void TclFinalizeNotifier _ANSI_ARGS_((void)); EXTERN void TclFinalizeAsync _ANSI_ARGS_((void)); EXTERN void TclFinalizeSynchronization _ANSI_ARGS_((void)); EXTERN void TclFinalizeThreadData _ANSI_ARGS_((void)); EXTERN void TclFindEncodings _ANSI_ARGS_((CONST char *argv0)); EXTERN Proc * TclFindProc _ANSI_ARGS_((Interp *iPtr, char *procName)); EXTERN int TclFormatInt _ANSI_ARGS_((char *buffer, long n)); EXTERN void TclFreePackageInfo _ANSI_ARGS_((Interp *iPtr)); |
| ︙ | ︙ | |||
2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 |
TclIncrObjsAllocated()
# define TclDecrRefCount(objPtr) \
if (--(objPtr)->refCount <= 0) { \
if ((objPtr)->refCount < -1) \
panic("Reference count for %lx was negative: %s line %d", \
(objPtr), __FILE__, __LINE__); \
if (((objPtr)->bytes != NULL) \
&& ((objPtr)->bytes != tclEmptyStringRep)) { \
ckfree((char *) (objPtr)->bytes); \
} \
if (((objPtr)->typePtr != NULL) \
&& ((objPtr)->typePtr->freeIntRepProc != NULL)) { \
(objPtr)->typePtr->freeIntRepProc(objPtr); \
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
TclIncrObjsAllocated()
# define TclDecrRefCount(objPtr) \
if (--(objPtr)->refCount <= 0) { \
if ((objPtr)->refCount < -1) \
panic("Reference count for %lx was negative: %s line %d", \
(objPtr), __FILE__, __LINE__); \
if (((objPtr)->bytes != NULL) \
&& ((objPtr)->bytes != tclEmptyStringRep)) { \
ckfree((char *) (objPtr)->bytes); \
} \
if (((objPtr)->typePtr != NULL) \
&& ((objPtr)->typePtr->freeIntRepProc != NULL)) { \
(objPtr)->typePtr->freeIntRepProc(objPtr); \
} \
ckfree((char *) (objPtr)); \
TclIncrObjsFreed(); \
}
#elif defined(PURIFY)
/*
* The PURIFY mode is like the regular mode, but instead of doing block
* Tcl_Obj allocation and keeping a freed list for efficiency, it always
* allocates and frees a single Tcl_Obj so that tools like Purify can
* better track memory leaks
*/
# define TclNewObj(objPtr) \
(objPtr) = (Tcl_Obj *) Tcl_Ckalloc(sizeof(Tcl_Obj)); \
(objPtr)->refCount = 0; \
(objPtr)->bytes = tclEmptyStringRep; \
(objPtr)->length = 0; \
(objPtr)->typePtr = NULL; \
TclIncrObjsAllocated();
# define TclDecrRefCount(objPtr) \
if (--(objPtr)->refCount <= 0) { \
if (((objPtr)->bytes != NULL) \
&& ((objPtr)->bytes != tclEmptyStringRep)) { \
ckfree((char *) (objPtr)->bytes); \
} \
if (((objPtr)->typePtr != NULL) \
&& ((objPtr)->typePtr->freeIntRepProc != NULL)) { \
(objPtr)->typePtr->freeIntRepProc(objPtr); \
|
| ︙ | ︙ |
Changes to generic/tclIntDecls.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclIntDecls.h -- * * This file contains the declarations for all unsupported * functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclIntDecls.h -- * * This file contains the declarations for all unsupported * functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclIntDecls.h,v 1.19.2.2 2001/10/15 20:27:23 andreas_kupries Exp $ */ #ifndef _TCLINTDECLS #define _TCLINTDECLS /* * WARNING: This file is automatically generated by the tools/genStubs.tcl |
| ︙ | ︙ | |||
502 503 504 505 506 507 508 | /* 151 */ EXTERN void TclRegExpRangeUniChar _ANSI_ARGS_((Tcl_RegExp re, int index, int * startPtr, int * endPtr)); /* 152 */ EXTERN void TclSetLibraryPath _ANSI_ARGS_((Tcl_Obj * pathPtr)); /* 153 */ EXTERN Tcl_Obj * TclGetLibraryPath _ANSI_ARGS_((void)); | | < < | < < < > > > > > > > > > > | 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 |
/* 151 */
EXTERN void TclRegExpRangeUniChar _ANSI_ARGS_((Tcl_RegExp re,
int index, int * startPtr, int * endPtr));
/* 152 */
EXTERN void TclSetLibraryPath _ANSI_ARGS_((Tcl_Obj * pathPtr));
/* 153 */
EXTERN Tcl_Obj * TclGetLibraryPath _ANSI_ARGS_((void));
/* Slot 154 is reserved */
/* Slot 155 is reserved */
/* 156 */
EXTERN void TclRegError _ANSI_ARGS_((Tcl_Interp * interp,
char * msg, int status));
/* 157 */
EXTERN Var * TclVarTraceExists _ANSI_ARGS_((Tcl_Interp * interp,
char * varName));
/* 158 */
EXTERN void TclSetStartupScriptFileName _ANSI_ARGS_((
char * filename));
/* 159 */
EXTERN char * TclGetStartupScriptFileName _ANSI_ARGS_((void));
/* 160 */
EXTERN int TclpMatchFilesTypes _ANSI_ARGS_((Tcl_Interp * interp,
char * separators, Tcl_DString * dirPtr,
char * pattern, char * tail,
GlobTypeData * types));
/* 161 */
EXTERN int TclChannelTransform _ANSI_ARGS_((Tcl_Interp * interp,
Tcl_Channel chan, Tcl_Obj * cmdObjPtr));
/* 162 */
EXTERN void TclChannelEventScriptInvoker _ANSI_ARGS_((
ClientData clientData, int flags));
/* 163 */
EXTERN void * TclGetInstructionTable _ANSI_ARGS_((void));
/* 164 */
EXTERN void TclExpandCodeArray _ANSI_ARGS_((void * envPtr));
typedef struct TclIntStubs {
int magic;
struct TclIntStubHooks *hooks;
int (*tclAccess) _ANSI_ARGS_((CONST char * path, int mode)); /* 0 */
int (*tclAccessDeleteProc) _ANSI_ARGS_((TclAccessProc_ * proc)); /* 1 */
|
| ︙ | ︙ | |||
716 717 718 719 720 721 722 |
void (*tclHandleFree) _ANSI_ARGS_((TclHandle handle)); /* 147 */
TclHandle (*tclHandlePreserve) _ANSI_ARGS_((TclHandle handle)); /* 148 */
void (*tclHandleRelease) _ANSI_ARGS_((TclHandle handle)); /* 149 */
int (*tclRegAbout) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_RegExp re)); /* 150 */
void (*tclRegExpRangeUniChar) _ANSI_ARGS_((Tcl_RegExp re, int index, int * startPtr, int * endPtr)); /* 151 */
void (*tclSetLibraryPath) _ANSI_ARGS_((Tcl_Obj * pathPtr)); /* 152 */
Tcl_Obj * (*tclGetLibraryPath) _ANSI_ARGS_((void)); /* 153 */
| | | > > > > | 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 |
void (*tclHandleFree) _ANSI_ARGS_((TclHandle handle)); /* 147 */
TclHandle (*tclHandlePreserve) _ANSI_ARGS_((TclHandle handle)); /* 148 */
void (*tclHandleRelease) _ANSI_ARGS_((TclHandle handle)); /* 149 */
int (*tclRegAbout) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_RegExp re)); /* 150 */
void (*tclRegExpRangeUniChar) _ANSI_ARGS_((Tcl_RegExp re, int index, int * startPtr, int * endPtr)); /* 151 */
void (*tclSetLibraryPath) _ANSI_ARGS_((Tcl_Obj * pathPtr)); /* 152 */
Tcl_Obj * (*tclGetLibraryPath) _ANSI_ARGS_((void)); /* 153 */
void *reserved154;
void *reserved155;
void (*tclRegError) _ANSI_ARGS_((Tcl_Interp * interp, char * msg, int status)); /* 156 */
Var * (*tclVarTraceExists) _ANSI_ARGS_((Tcl_Interp * interp, char * varName)); /* 157 */
void (*tclSetStartupScriptFileName) _ANSI_ARGS_((char * filename)); /* 158 */
char * (*tclGetStartupScriptFileName) _ANSI_ARGS_((void)); /* 159 */
int (*tclpMatchFilesTypes) _ANSI_ARGS_((Tcl_Interp * interp, char * separators, Tcl_DString * dirPtr, char * pattern, char * tail, GlobTypeData * types)); /* 160 */
int (*tclChannelTransform) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Channel chan, Tcl_Obj * cmdObjPtr)); /* 161 */
void (*tclChannelEventScriptInvoker) _ANSI_ARGS_((ClientData clientData, int flags)); /* 162 */
void * (*tclGetInstructionTable) _ANSI_ARGS_((void)); /* 163 */
void (*tclExpandCodeArray) _ANSI_ARGS_((void * envPtr)); /* 164 */
} TclIntStubs;
#ifdef __cplusplus
extern "C" {
#endif
extern TclIntStubs *tclIntStubsPtr;
#ifdef __cplusplus
|
| ︙ | ︙ | |||
1348 1349 1350 1351 1352 1353 1354 | #define TclSetLibraryPath \ (tclIntStubsPtr->tclSetLibraryPath) /* 152 */ #endif #ifndef TclGetLibraryPath #define TclGetLibraryPath \ (tclIntStubsPtr->tclGetLibraryPath) /* 153 */ #endif | < < | < < < | < > > > > > > > > > > > > > > > > | 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 | #define TclSetLibraryPath \ (tclIntStubsPtr->tclSetLibraryPath) /* 152 */ #endif #ifndef TclGetLibraryPath #define TclGetLibraryPath \ (tclIntStubsPtr->tclGetLibraryPath) /* 153 */ #endif /* Slot 154 is reserved */ /* Slot 155 is reserved */ #ifndef TclRegError #define TclRegError \ (tclIntStubsPtr->tclRegError) /* 156 */ #endif #ifndef TclVarTraceExists #define TclVarTraceExists \ (tclIntStubsPtr->tclVarTraceExists) /* 157 */ #endif #ifndef TclSetStartupScriptFileName #define TclSetStartupScriptFileName \ (tclIntStubsPtr->tclSetStartupScriptFileName) /* 158 */ #endif #ifndef TclGetStartupScriptFileName #define TclGetStartupScriptFileName \ (tclIntStubsPtr->tclGetStartupScriptFileName) /* 159 */ #endif #ifndef TclpMatchFilesTypes #define TclpMatchFilesTypes \ (tclIntStubsPtr->tclpMatchFilesTypes) /* 160 */ #endif #ifndef TclChannelTransform #define TclChannelTransform \ (tclIntStubsPtr->tclChannelTransform) /* 161 */ #endif #ifndef TclChannelEventScriptInvoker #define TclChannelEventScriptInvoker \ (tclIntStubsPtr->tclChannelEventScriptInvoker) /* 162 */ #endif #ifndef TclGetInstructionTable #define TclGetInstructionTable \ (tclIntStubsPtr->tclGetInstructionTable) /* 163 */ #endif #ifndef TclExpandCodeArray #define TclExpandCodeArray \ (tclIntStubsPtr->tclExpandCodeArray) /* 164 */ #endif #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #endif /* _TCLINTDECLS */ |
Changes to generic/tclIntPlatDecls.h.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclIntPlatDecls.h -- * * This file contains the declarations for all platform dependent * unsupported functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclIntPlatDecls.h -- * * This file contains the declarations for all platform dependent * unsupported functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * * RCS: @(#) $Id: tclIntPlatDecls.h,v 1.8.2.6 2001/10/18 01:01:53 hobbs Exp $ */ #ifndef _TCLINTPLATDECLS #define _TCLINTPLATDECLS /* * WARNING: This file is automatically generated by the tools/genStubs.tcl |
| ︙ | ︙ | |||
111 112 113 114 115 116 117 | int direction)); /* 19 */ EXTERN TclFile TclpOpenFile _ANSI_ARGS_((CONST char * fname, int mode)); /* 20 */ EXTERN void TclWinAddProcess _ANSI_ARGS_((HANDLE hProcess, DWORD id)); | | < > > | | > | | | | 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 | int direction)); /* 19 */ EXTERN TclFile TclpOpenFile _ANSI_ARGS_((CONST char * fname, int mode)); /* 20 */ EXTERN void TclWinAddProcess _ANSI_ARGS_((HANDLE hProcess, DWORD id)); /* Slot 21 is reserved */ /* 22 */ EXTERN TclFile TclpCreateTempFile _ANSI_ARGS_(( CONST char * contents)); /* 23 */ EXTERN char * TclpGetTZName _ANSI_ARGS_((int isdst)); /* 24 */ EXTERN char * TclWinNoBackslash _ANSI_ARGS_((char * path)); /* 25 */ EXTERN TclPlatformType * TclWinGetPlatform _ANSI_ARGS_((void)); /* 26 */ EXTERN void TclWinSetInterfaces _ANSI_ARGS_((int wide)); /* 27 */ EXTERN void TclWinFlushDirtyChannels _ANSI_ARGS_((void)); #endif /* __WIN32__ */ #ifdef MAC_TCL /* 0 */ EXTERN VOID * TclpSysAlloc _ANSI_ARGS_((long size, int isBin)); /* 1 */ EXTERN void TclpSysFree _ANSI_ARGS_((VOID * ptr)); /* 2 */ EXTERN VOID * TclpSysRealloc _ANSI_ARGS_((VOID * cp, unsigned int size)); /* 3 */ EXTERN void TclpExit _ANSI_ARGS_((int status)); /* 4 */ EXTERN int FSpGetDefaultDir _ANSI_ARGS_((FSSpecPtr theSpec)); /* 5 */ EXTERN int FSpSetDefaultDir _ANSI_ARGS_((FSSpecPtr theSpec)); /* 6 */ EXTERN OSErr FSpFindFolder _ANSI_ARGS_((short vRefNum, OSType folderType, Boolean createFolder, FSSpec * spec)); /* 7 */ EXTERN void GetGlobalMouseTcl _ANSI_ARGS_((Point * mouse)); /* 8 */ EXTERN pascal OSErr FSpGetDirectoryIDTcl _ANSI_ARGS_(( CONST FSSpec * spec, long * theDirID, Boolean * isDirectory)); /* 9 */ EXTERN pascal short FSpOpenResFileCompatTcl _ANSI_ARGS_(( CONST FSSpec * spec, SignedByte permission)); /* 10 */ EXTERN pascal void FSpCreateResFileCompatTcl _ANSI_ARGS_(( CONST FSSpec * spec, OSType creator, OSType fileType, ScriptCode scriptTag)); /* 11 */ EXTERN int FSpLocationFromPath _ANSI_ARGS_((int length, CONST char * path, FSSpecPtr theSpec)); /* 12 */ EXTERN OSErr FSpPathFromLocation _ANSI_ARGS_((FSSpecPtr theSpec, |
| ︙ | ︙ | |||
188 189 190 191 192 193 194 | EXTERN short TclMacUnRegisterResourceFork _ANSI_ARGS_(( char * tokenPtr, Tcl_Obj * resultPtr)); /* 22 */ EXTERN int TclMacCreateEnv _ANSI_ARGS_((void)); /* 23 */ EXTERN FILE * TclMacFOpenHack _ANSI_ARGS_((CONST char * path, CONST char * mode)); | | > | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
EXTERN short TclMacUnRegisterResourceFork _ANSI_ARGS_((
char * tokenPtr, Tcl_Obj * resultPtr));
/* 22 */
EXTERN int TclMacCreateEnv _ANSI_ARGS_((void));
/* 23 */
EXTERN FILE * TclMacFOpenHack _ANSI_ARGS_((CONST char * path,
CONST char * mode));
/* 24 */
EXTERN char * TclpGetTZName _ANSI_ARGS_((int isdst));
/* 25 */
EXTERN int TclMacChmod _ANSI_ARGS_((char * path, int mode));
#endif /* MAC_TCL */
typedef struct TclIntPlatStubs {
int magic;
struct TclIntPlatStubHooks *hooks;
|
| ︙ | ︙ | |||
231 232 233 234 235 236 237 |
int (*tclpCreatePipe) _ANSI_ARGS_((TclFile * readPipe, TclFile * writePipe)); /* 14 */
int (*tclpCreateProcess) _ANSI_ARGS_((Tcl_Interp * interp, int argc, char ** argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid * pidPtr)); /* 15 */
void *reserved16;
void *reserved17;
TclFile (*tclpMakeFile) _ANSI_ARGS_((Tcl_Channel channel, int direction)); /* 18 */
TclFile (*tclpOpenFile) _ANSI_ARGS_((CONST char * fname, int mode)); /* 19 */
void (*tclWinAddProcess) _ANSI_ARGS_((HANDLE hProcess, DWORD id)); /* 20 */
| | > | | | | | | 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 |
int (*tclpCreatePipe) _ANSI_ARGS_((TclFile * readPipe, TclFile * writePipe)); /* 14 */
int (*tclpCreateProcess) _ANSI_ARGS_((Tcl_Interp * interp, int argc, char ** argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid * pidPtr)); /* 15 */
void *reserved16;
void *reserved17;
TclFile (*tclpMakeFile) _ANSI_ARGS_((Tcl_Channel channel, int direction)); /* 18 */
TclFile (*tclpOpenFile) _ANSI_ARGS_((CONST char * fname, int mode)); /* 19 */
void (*tclWinAddProcess) _ANSI_ARGS_((HANDLE hProcess, DWORD id)); /* 20 */
void *reserved21;
TclFile (*tclpCreateTempFile) _ANSI_ARGS_((CONST char * contents)); /* 22 */
char * (*tclpGetTZName) _ANSI_ARGS_((int isdst)); /* 23 */
char * (*tclWinNoBackslash) _ANSI_ARGS_((char * path)); /* 24 */
TclPlatformType * (*tclWinGetPlatform) _ANSI_ARGS_((void)); /* 25 */
void (*tclWinSetInterfaces) _ANSI_ARGS_((int wide)); /* 26 */
void (*tclWinFlushDirtyChannels) _ANSI_ARGS_((void)); /* 27 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
VOID * (*tclpSysAlloc) _ANSI_ARGS_((long size, int isBin)); /* 0 */
void (*tclpSysFree) _ANSI_ARGS_((VOID * ptr)); /* 1 */
VOID * (*tclpSysRealloc) _ANSI_ARGS_((VOID * cp, unsigned int size)); /* 2 */
void (*tclpExit) _ANSI_ARGS_((int status)); /* 3 */
int (*fSpGetDefaultDir) _ANSI_ARGS_((FSSpecPtr theSpec)); /* 4 */
int (*fSpSetDefaultDir) _ANSI_ARGS_((FSSpecPtr theSpec)); /* 5 */
OSErr (*fSpFindFolder) _ANSI_ARGS_((short vRefNum, OSType folderType, Boolean createFolder, FSSpec * spec)); /* 6 */
void (*getGlobalMouseTcl) _ANSI_ARGS_((Point * mouse)); /* 7 */
pascal OSErr (*fSpGetDirectoryIDTcl) _ANSI_ARGS_((CONST FSSpec * spec, long * theDirID, Boolean * isDirectory)); /* 8 */
pascal short (*fSpOpenResFileCompatTcl) _ANSI_ARGS_((CONST FSSpec * spec, SignedByte permission)); /* 9 */
pascal void (*fSpCreateResFileCompatTcl) _ANSI_ARGS_((CONST FSSpec * spec, OSType creator, OSType fileType, ScriptCode scriptTag)); /* 10 */
int (*fSpLocationFromPath) _ANSI_ARGS_((int length, CONST char * path, FSSpecPtr theSpec)); /* 11 */
OSErr (*fSpPathFromLocation) _ANSI_ARGS_((FSSpecPtr theSpec, int * length, Handle * fullPath)); /* 12 */
void (*tclMacExitHandler) _ANSI_ARGS_((void)); /* 13 */
void (*tclMacInitExitToShell) _ANSI_ARGS_((int usePatch)); /* 14 */
OSErr (*tclMacInstallExitToShellPatch) _ANSI_ARGS_((ExitToShellProcPtr newProc)); /* 15 */
int (*tclMacOSErrorToPosixError) _ANSI_ARGS_((int error)); /* 16 */
void (*tclMacRemoveTimer) _ANSI_ARGS_((void * timerToken)); /* 17 */
void * (*tclMacStartTimer) _ANSI_ARGS_((long ms)); /* 18 */
int (*tclMacTimerExpired) _ANSI_ARGS_((void * timerToken)); /* 19 */
int (*tclMacRegisterResourceFork) _ANSI_ARGS_((short fileRef, Tcl_Obj * tokenPtr, int insert)); /* 20 */
short (*tclMacUnRegisterResourceFork) _ANSI_ARGS_((char * tokenPtr, Tcl_Obj * resultPtr)); /* 21 */
int (*tclMacCreateEnv) _ANSI_ARGS_((void)); /* 22 */
FILE * (*tclMacFOpenHack) _ANSI_ARGS_((CONST char * path, CONST char * mode)); /* 23 */
char * (*tclpGetTZName) _ANSI_ARGS_((int isdst)); /* 24 */
int (*tclMacChmod) _ANSI_ARGS_((char * path, int mode)); /* 25 */
#endif /* MAC_TCL */
} TclIntPlatStubs;
#ifdef __cplusplus
extern "C" {
#endif
|
| ︙ | ︙ | |||
394 395 396 397 398 399 400 | #define TclpOpenFile \ (tclIntPlatStubsPtr->tclpOpenFile) /* 19 */ #endif #ifndef TclWinAddProcess #define TclWinAddProcess \ (tclIntPlatStubsPtr->tclWinAddProcess) /* 20 */ #endif | | < < < > > > > | 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 | #define TclpOpenFile \ (tclIntPlatStubsPtr->tclpOpenFile) /* 19 */ #endif #ifndef TclWinAddProcess #define TclWinAddProcess \ (tclIntPlatStubsPtr->tclWinAddProcess) /* 20 */ #endif /* Slot 21 is reserved */ #ifndef TclpCreateTempFile #define TclpCreateTempFile \ (tclIntPlatStubsPtr->tclpCreateTempFile) /* 22 */ #endif #ifndef TclpGetTZName #define TclpGetTZName \ (tclIntPlatStubsPtr->tclpGetTZName) /* 23 */ #endif #ifndef TclWinNoBackslash #define TclWinNoBackslash \ (tclIntPlatStubsPtr->tclWinNoBackslash) /* 24 */ #endif #ifndef TclWinGetPlatform #define TclWinGetPlatform \ (tclIntPlatStubsPtr->tclWinGetPlatform) /* 25 */ #endif #ifndef TclWinSetInterfaces #define TclWinSetInterfaces \ (tclIntPlatStubsPtr->tclWinSetInterfaces) /* 26 */ #endif #ifndef TclWinFlushDirtyChannels #define TclWinFlushDirtyChannels \ (tclIntPlatStubsPtr->tclWinFlushDirtyChannels) /* 27 */ #endif #endif /* __WIN32__ */ #ifdef MAC_TCL #ifndef TclpSysAlloc #define TclpSysAlloc \ (tclIntPlatStubsPtr->tclpSysAlloc) /* 0 */ #endif #ifndef TclpSysFree |
| ︙ | ︙ | |||
448 449 450 451 452 453 454 | #define FSpSetDefaultDir \ (tclIntPlatStubsPtr->fSpSetDefaultDir) /* 5 */ #endif #ifndef FSpFindFolder #define FSpFindFolder \ (tclIntPlatStubsPtr->fSpFindFolder) /* 6 */ #endif | | | | | | | | | | | | | | 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 | #define FSpSetDefaultDir \ (tclIntPlatStubsPtr->fSpSetDefaultDir) /* 5 */ #endif #ifndef FSpFindFolder #define FSpFindFolder \ (tclIntPlatStubsPtr->fSpFindFolder) /* 6 */ #endif #ifndef GetGlobalMouseTcl #define GetGlobalMouseTcl \ (tclIntPlatStubsPtr->getGlobalMouseTcl) /* 7 */ #endif #ifndef FSpGetDirectoryIDTcl #define FSpGetDirectoryIDTcl \ (tclIntPlatStubsPtr->fSpGetDirectoryIDTcl) /* 8 */ #endif #ifndef FSpOpenResFileCompatTcl #define FSpOpenResFileCompatTcl \ (tclIntPlatStubsPtr->fSpOpenResFileCompatTcl) /* 9 */ #endif #ifndef FSpCreateResFileCompatTcl #define FSpCreateResFileCompatTcl \ (tclIntPlatStubsPtr->fSpCreateResFileCompatTcl) /* 10 */ #endif #ifndef FSpLocationFromPath #define FSpLocationFromPath \ (tclIntPlatStubsPtr->fSpLocationFromPath) /* 11 */ #endif #ifndef FSpPathFromLocation #define FSpPathFromLocation \ |
| ︙ | ︙ | |||
516 517 518 519 520 521 522 | #define TclMacCreateEnv \ (tclIntPlatStubsPtr->tclMacCreateEnv) /* 22 */ #endif #ifndef TclMacFOpenHack #define TclMacFOpenHack \ (tclIntPlatStubsPtr->tclMacFOpenHack) /* 23 */ #endif | | > > > | 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 | #define TclMacCreateEnv \ (tclIntPlatStubsPtr->tclMacCreateEnv) /* 22 */ #endif #ifndef TclMacFOpenHack #define TclMacFOpenHack \ (tclIntPlatStubsPtr->tclMacFOpenHack) /* 23 */ #endif #ifndef TclpGetTZName #define TclpGetTZName \ (tclIntPlatStubsPtr->tclpGetTZName) /* 24 */ #endif #ifndef TclMacChmod #define TclMacChmod \ (tclIntPlatStubsPtr->tclMacChmod) /* 25 */ #endif #endif /* MAC_TCL */ #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #endif /* _TCLINTPLATDECLS */ |
Changes to generic/tclInterp.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclInterp.c -- * * This file implements the "interp" command which allows creation * and manipulation of Tcl interpreters from within Tcl scripts. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclInterp.c -- * * This file implements the "interp" command which allows creation * and manipulation of Tcl interpreters from within Tcl scripts. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclInterp.c,v 1.5.12.2 2001/09/11 00:53:27 hobbs Exp $ */ #include <stdio.h> #include "tclInt.h" #include "tclPort.h" /* |
| ︙ | ︙ | |||
945 946 947 948 949 950 951 |
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
| | | 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 |
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GetAliasObj --
*
* Object version: Gets information about an alias.
*
* Results:
* A standard Tcl result.
*
* Side effects:
|
| ︙ | ︙ | |||
1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 |
Tcl_Preserve((ClientData) targetInterp);
((Interp *) targetInterp)->numLevels++;
Tcl_ResetResult(targetInterp);
Tcl_AllowExceptions(targetInterp);
/*
* Append the arguments to the command prefix and invoke the command
* in the target interp's global namespace.
*/
Tcl_ListObjGetElements(NULL, aliasPtr->prefixPtr, &prefc, &prefv);
cmdPtr = Tcl_NewListObj(prefc, prefv);
Tcl_ListObjReplace(NULL, cmdPtr, prefc, 0, objc - 1, objv + 1);
Tcl_ListObjGetElements(NULL, cmdPtr, &cmdc, &cmdv);
result = TclObjInvoke(targetInterp, cmdc, cmdv,
TCL_INVOKE_NO_TRACEBACK);
Tcl_DecrRefCount(cmdPtr);
| > > > > > > > > > > > > > < < | 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 |
Tcl_Preserve((ClientData) targetInterp);
((Interp *) targetInterp)->numLevels++;
Tcl_ResetResult(targetInterp);
Tcl_AllowExceptions(targetInterp);
/*
* Check depth of nested calls with AliasObjCmd: if this gets too large,
* it's probably because of an infinite loop somewhere.
*/
if (((Interp *) targetInterp)->numLevels >
((Interp *) targetInterp)->maxNestingDepth) {
Tcl_AppendToObj(Tcl_GetObjResult(targetInterp),
"too many nested calls to AliasObjCmd (infinite loop using alias?)", -1);
result = TCL_ERROR;
goto done;
}
/*
* Append the arguments to the command prefix and invoke the command
* in the target interp's global namespace.
*/
Tcl_ListObjGetElements(NULL, aliasPtr->prefixPtr, &prefc, &prefv);
cmdPtr = Tcl_NewListObj(prefc, prefv);
Tcl_ListObjReplace(NULL, cmdPtr, prefc, 0, objc - 1, objv + 1);
Tcl_ListObjGetElements(NULL, cmdPtr, &cmdc, &cmdv);
result = TclObjInvoke(targetInterp, cmdc, cmdv,
TCL_INVOKE_NO_TRACEBACK);
Tcl_DecrRefCount(cmdPtr);
/*
* Check if we are at the bottom of the stack for the target interpreter.
* If so, check for special return codes.
*/
if (((Interp *) targetInterp)->numLevels == 0) {
if (result == TCL_RETURN) {
|
| ︙ | ︙ | |||
1437 1438 1439 1440 1441 1442 1443 |
sprintf(buf, "command returned bad code: %d", result);
Tcl_SetObjResult(targetInterp, Tcl_NewStringObj(buf, -1));
}
result = TCL_ERROR;
}
}
| > > | | 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 |
sprintf(buf, "command returned bad code: %d", result);
Tcl_SetObjResult(targetInterp, Tcl_NewStringObj(buf, -1));
}
result = TCL_ERROR;
}
}
done:
((Interp *) targetInterp)->numLevels--;
TclTransferResult(targetInterp, result, interp);
Tcl_Release((ClientData) targetInterp);
return result;
}
/*
|
| ︙ | ︙ |
Changes to generic/tclListObj.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclListObj.c -- * * This file contains procedures that implement the Tcl list object * type. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclListObj.c -- * * This file contains procedures that implement the Tcl list object * type. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclListObj.c,v 1.7.8.1 2001/04/04 07:38:47 hobbs Exp $ */ #include "tclInt.h" /* * Prototypes for procedures defined later in this file: */ |
| ︙ | ︙ | |||
261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
listRepPtr->elemCount = objc;
listRepPtr->elements = elemPtrs;
objPtr->internalRep.otherValuePtr = (VOID *) listRepPtr;
objPtr->typePtr = &tclListType;
} else {
objPtr->bytes = tclEmptyStringRep;
}
}
/*
*----------------------------------------------------------------------
*
* Tcl_ListObjGetElements --
| > | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 |
listRepPtr->elemCount = objc;
listRepPtr->elements = elemPtrs;
objPtr->internalRep.otherValuePtr = (VOID *) listRepPtr;
objPtr->typePtr = &tclListType;
} else {
objPtr->bytes = tclEmptyStringRep;
objPtr->length = 0;
}
}
/*
*----------------------------------------------------------------------
*
* Tcl_ListObjGetElements --
|
| ︙ | ︙ |
Changes to generic/tclLiteral.c.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * that appears in tclHash.c. * * Copyright (c) 1997-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * that appears in tclHash.c. * * Copyright (c) 1997-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclLiteral.c,v 1.8.2.3 2001/10/11 22:34:11 msofer Exp $ */ #include "tclInt.h" #include "tclCompile.h" #include "tclPort.h" /* * When there are this many entries per bucket, on average, rebuild |
| ︙ | ︙ | |||
691 692 693 694 695 696 697 698 |
for (prevPtr = NULL, entryPtr = globalTablePtr->buckets[index];
entryPtr != NULL;
prevPtr = entryPtr, entryPtr = entryPtr->nextPtr) {
if (entryPtr->objPtr == objPtr) {
entryPtr->refCount--;
/*
| < < < < < < < < < < < < < < < < < < < < < < < | > > < < < > > > | > | > | > > > > > > > | > > > | > | 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 |
for (prevPtr = NULL, entryPtr = globalTablePtr->buckets[index];
entryPtr != NULL;
prevPtr = entryPtr, entryPtr = entryPtr->nextPtr) {
if (entryPtr->objPtr == objPtr) {
entryPtr->refCount--;
/*
* If the literal is no longer being used by any ByteCode,
* delete the entry then remove the reference corresponding
* to the global literal table entry (decrement the ref count
* of the object).
*/
if (entryPtr->refCount == 0) {
if (prevPtr == NULL) {
globalTablePtr->buckets[index] = entryPtr->nextPtr;
} else {
prevPtr->nextPtr = entryPtr->nextPtr;
}
ckfree((char *) entryPtr);
globalTablePtr->numEntries--;
TclDecrRefCount(objPtr);
/*
* Check if the LiteralEntry is only being kept alive by
* a circular reference from a ByteCode stored as its
* internal rep. In that case, set the ByteCode object array
* entry NULL to signal to TclCleanupByteCode to not try to
* release this about to be freed literal again.
*/
if (objPtr->typePtr == &tclByteCodeType) {
codePtr = (ByteCode *) objPtr->internalRep.otherValuePtr;
if ((codePtr->numLitObjects == 1)
&& (codePtr->objArrayPtr[0] == objPtr)) {
codePtr->objArrayPtr[0] = NULL;
}
}
#ifdef TCL_COMPILE_STATS
iPtr->stats.currentLitStringBytes -= (double) (length + 1);
#endif /*TCL_COMPILE_STATS*/
}
break;
}
}
/*
* Remove the reference corresponding to the local literal table
* entry.
*/
Tcl_DecrRefCount(objPtr);
}
/*
*----------------------------------------------------------------------
*
* HashString --
|
| ︙ | ︙ |
Changes to generic/tclMain.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclMain.c -- * * Main program for Tcl shells and other Tcl-based applications. * * Copyright (c) 1988-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclMain.c -- * * Main program for Tcl shells and other Tcl-based applications. * * Copyright (c) 1988-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMain.c,v 1.7.2.3 2002/03/26 02:26:58 hobbs Exp $ */ #include "tcl.h" #include "tclInt.h" # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLEXPORT |
| ︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | * to include tclPort.h here, because people might copy this file out of * the Tcl source directory to make their own modified versions). * Note: "exit" should really be declared here, but there's no way to * declare it without causing conflicts with other definitions elsewher * on some systems, so it's better just to leave it out. */ extern int isatty _ANSI_ARGS_((int fd)); extern char * strcpy _ANSI_ARGS_((char *dst, CONST char *src)); static char *tclStartupScriptFileName = NULL; /* *---------------------------------------------------------------------- * * TclSetStartupScriptFileName -- * | > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
* to include tclPort.h here, because people might copy this file out of
* the Tcl source directory to make their own modified versions).
* Note: "exit" should really be declared here, but there's no way to
* declare it without causing conflicts with other definitions elsewher
* on some systems, so it's better just to leave it out.
*/
#if !defined(MAC_TCL)
extern int isatty _ANSI_ARGS_((int fd));
#else
#include <unistd.h>
#endif
extern char * strcpy _ANSI_ARGS_((char *dst, CONST char *src));
static char *tclStartupScriptFileName = NULL;
static Tcl_MainLoopProc *mainLoopProc = NULL;
typedef struct ThreadSpecificData {
Tcl_Interp *interp; /* Interpreter for this thread. */
Tcl_DString command; /* Used to assemble lines of terminal input
* into Tcl commands. */
Tcl_DString line; /* Used to read the next line from the
* terminal input. */
int tty; /* Non-zero means standard input is a
* terminal-like device. Zero means it's
* a file. */
} ThreadSpecificData;
Tcl_ThreadDataKey dataKey;
/*
* Forward declarations for procedures defined later in this file.
*/
static void Prompt _ANSI_ARGS_((Tcl_Interp *interp, int partial));
static void StdinProc _ANSI_ARGS_((ClientData clientData,
int mask));
/*
*----------------------------------------------------------------------
*
* TclSetStartupScriptFileName --
*
|
| ︙ | ︙ | |||
97 98 99 100 101 102 103 | * * Tcl_Main -- * * Main program for tclsh and most other Tcl-based applications. * * Results: * None. This procedure never returns (it exits the process when | | | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | * * Tcl_Main -- * * Main program for tclsh and most other Tcl-based applications. * * Results: * None. This procedure never returns (it exits the process when * it's done). * * Side effects: * This procedure initializes the Tcl world and then starts * interpreting commands; almost anything could happen, depending * on the script being interpreted. * *---------------------------------------------------------------------- |
| ︙ | ︙ | |||
119 120 121 122 123 124 125 |
/* Application-specific initialization
* procedure to call after most
* initialization but before starting to
* execute commands. */
{
Tcl_Obj *resultPtr;
Tcl_Obj *commandPtr = NULL;
| | | > > > > | | 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 |
/* Application-specific initialization
* procedure to call after most
* initialization but before starting to
* execute commands. */
{
Tcl_Obj *resultPtr;
Tcl_Obj *commandPtr = NULL;
char buffer[TCL_INTEGER_SPACE + 8], *args;
int code, gotPartial, length;
int exitCode = 0;
Tcl_Channel inChannel, outChannel, errChannel;
Tcl_Interp *interp;
Tcl_DString argString;
ThreadSpecificData *tsdPtr;
Tcl_FindExecutable(argv[0]);
tsdPtr = (ThreadSpecificData *)
Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData));
tsdPtr->interp = interp = Tcl_CreateInterp();
#ifdef TCL_MEM_DEBUG
Tcl_InitMemory(interp);
#endif
/*
* Make command-line arguments available in the Tcl variables "argc"
* and "argv". If the first argument doesn't start with a "-" then
|
| ︙ | ︙ | |||
166 167 168 169 170 171 172 |
Tcl_SetVar(interp, "argc", buffer, TCL_GLOBAL_ONLY);
Tcl_SetVar(interp, "argv0", Tcl_DStringValue(&argString), TCL_GLOBAL_ONLY);
/*
* Set the "tcl_interactive" variable.
*/
| | | | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
Tcl_SetVar(interp, "argc", buffer, TCL_GLOBAL_ONLY);
Tcl_SetVar(interp, "argv0", Tcl_DStringValue(&argString), TCL_GLOBAL_ONLY);
/*
* Set the "tcl_interactive" variable.
*/
tsdPtr->tty = isatty(0);
Tcl_SetVar(interp, "tcl_interactive",
((tclStartupScriptFileName == NULL) && tsdPtr->tty) ? "1" : "0",
TCL_GLOBAL_ONLY);
/*
* Invoke application-specific initialization.
*/
if ((*appInitProc)(interp) != TCL_OK) {
|
| ︙ | ︙ | |||
231 232 233 234 235 236 237 |
commandPtr = Tcl_NewObj();
Tcl_IncrRefCount(commandPtr);
inChannel = Tcl_GetStdChannel(TCL_STDIN);
outChannel = Tcl_GetStdChannel(TCL_STDOUT);
gotPartial = 0;
while (1) {
| | | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
commandPtr = Tcl_NewObj();
Tcl_IncrRefCount(commandPtr);
inChannel = Tcl_GetStdChannel(TCL_STDIN);
outChannel = Tcl_GetStdChannel(TCL_STDOUT);
gotPartial = 0;
while (1) {
if (tsdPtr->tty) {
Tcl_Obj *promptCmdPtr;
promptCmdPtr = Tcl_GetVar2Ex(interp,
(gotPartial ? "tcl_prompt2" : "tcl_prompt1"),
NULL, TCL_GLOBAL_ONLY);
if (promptCmdPtr == NULL) {
defaultPrompt:
|
| ︙ | ︙ | |||
295 296 297 298 299 300 301 |
commandPtr = Tcl_NewObj();
Tcl_IncrRefCount(commandPtr);
if (code != TCL_OK) {
if (errChannel) {
Tcl_WriteObj(errChannel, Tcl_GetObjResult(interp));
Tcl_WriteChars(errChannel, "\n", 1);
}
| | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
commandPtr = Tcl_NewObj();
Tcl_IncrRefCount(commandPtr);
if (code != TCL_OK) {
if (errChannel) {
Tcl_WriteObj(errChannel, Tcl_GetObjResult(interp));
Tcl_WriteChars(errChannel, "\n", 1);
}
} else if (tsdPtr->tty) {
resultPtr = Tcl_GetObjResult(interp);
Tcl_GetStringFromObj(resultPtr, &length);
if ((length > 0) && outChannel) {
Tcl_WriteObj(outChannel, resultPtr);
Tcl_WriteChars(outChannel, "\n", 1);
}
}
if (mainLoopProc != NULL) {
/*
* If a main loop has been defined while running interactively,
* we want to start a fileevent based prompt by establishing a
* channel handler for stdin.
*/
if (inChannel) {
Tcl_CreateChannelHandler(inChannel, TCL_READABLE, StdinProc,
(ClientData) inChannel);
}
if (tsdPtr->tty) {
Prompt(interp, 0);
}
Tcl_DStringInit(&tsdPtr->command);
Tcl_DStringInit(&tsdPtr->line);
(*mainLoopProc)();
mainLoopProc = NULL;
break;
}
#ifdef TCL_MEM_DEBUG
if (tclMemDumpFileName != NULL) {
Tcl_DecrRefCount(commandPtr);
Tcl_DeleteInterp(interp);
Tcl_Exit(0);
}
#endif
}
/*
* Rather than calling exit, invoke the "exit" command so that
* users can replace "exit" with some other command to do additional
* cleanup on exit. The Tcl_Eval call should never return.
*/
done:
if ((exitCode == 0) && (mainLoopProc != NULL)) {
/*
* If everything has gone OK so far, call the main loop proc,
* if it exists. Packages (like Tk) can set it to start processing
* events at this point.
*/
(*mainLoopProc)();
mainLoopProc = NULL;
}
if (commandPtr != NULL) {
Tcl_DecrRefCount(commandPtr);
}
sprintf(buffer, "exit %d", exitCode);
Tcl_Eval(interp, buffer);
}
/*
*---------------------------------------------------------------
*
* Tcl_SetMainLoop --
*
* Sets an alternative main loop procedure.
*
* Results:
* Returns the previously defined main loop procedure.
*
* Side effects:
* This procedure will be called before Tcl exits, allowing for
* the creation of an event loop.
*
*---------------------------------------------------------------
*/
void
Tcl_SetMainLoop(proc)
Tcl_MainLoopProc *proc;
{
mainLoopProc = proc;
}
/*
*----------------------------------------------------------------------
*
* StdinProc --
*
* This procedure is invoked by the event dispatcher whenever
* standard input becomes readable. It grabs the next line of
* input characters, adds them to a command being assembled, and
* executes the command if it's complete.
*
* Results:
* None.
*
* Side effects:
* Could be almost arbitrary, depending on the command that's
* typed.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
static void
StdinProc(clientData, mask)
ClientData clientData; /* Not used. */
int mask; /* Not used. */
{
static int gotPartial = 0;
char *cmd;
int code, count;
Tcl_Channel chan = (Tcl_Channel) clientData;
ThreadSpecificData *tsdPtr = (ThreadSpecificData *)
Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData));
Tcl_Interp *interp = tsdPtr->interp;
count = Tcl_Gets(chan, &tsdPtr->line);
if (count < 0) {
if (!gotPartial) {
if (tsdPtr->tty) {
Tcl_Exit(0);
} else {
Tcl_DeleteChannelHandler(chan, StdinProc, (ClientData) chan);
}
return;
}
}
(void) Tcl_DStringAppend(&tsdPtr->command, Tcl_DStringValue(
&tsdPtr->line), -1);
cmd = Tcl_DStringAppend(&tsdPtr->command, "\n", -1);
Tcl_DStringFree(&tsdPtr->line);
if (!Tcl_CommandComplete(cmd)) {
gotPartial = 1;
goto prompt;
}
gotPartial = 0;
/*
* Disable the stdin channel handler while evaluating the command;
* otherwise if the command re-enters the event loop we might
* process commands from stdin before the current command is
* finished. Among other things, this will trash the text of the
* command being evaluated.
*/
Tcl_CreateChannelHandler(chan, 0, StdinProc, (ClientData) chan);
code = Tcl_RecordAndEval(interp, cmd, TCL_EVAL_GLOBAL);
chan = Tcl_GetStdChannel(TCL_STDIN);
if (chan) {
Tcl_CreateChannelHandler(chan, TCL_READABLE, StdinProc,
(ClientData) chan);
}
Tcl_DStringFree(&tsdPtr->command);
if (Tcl_GetStringResult(interp)[0] != '\0') {
if ((code != TCL_OK) || (tsdPtr->tty)) {
chan = Tcl_GetStdChannel(TCL_STDOUT);
if (chan) {
Tcl_WriteObj(chan, Tcl_GetObjResult(interp));
Tcl_WriteChars(chan, "\n", 1);
}
}
}
/*
* Output a prompt.
*/
prompt:
if (tsdPtr->tty) {
Prompt(interp, gotPartial);
}
Tcl_ResetResult(interp);
}
/*
*----------------------------------------------------------------------
*
* Prompt --
*
* Issue a prompt on standard output, or invoke a script
* to issue the prompt.
*
* Results:
* None.
*
* Side effects:
* A prompt gets output, and a Tcl script may be evaluated
* in interp.
*
*----------------------------------------------------------------------
*/
static void
Prompt(interp, partial)
Tcl_Interp *interp; /* Interpreter to use for prompting. */
int partial; /* Non-zero means there already
* exists a partial command, so use
* the secondary prompt. */
{
char *promptCmd;
int code;
Tcl_Channel outChannel, errChannel;
promptCmd = Tcl_GetVar(interp,
partial ? "tcl_prompt2" : "tcl_prompt1", TCL_GLOBAL_ONLY);
if (promptCmd == NULL) {
defaultPrompt:
if (!partial) {
/*
* We must check that outChannel is a real channel - it
* is possible that someone has transferred stdout out of
* this interpreter with "interp transfer".
*/
outChannel = Tcl_GetChannel(interp, "stdout", NULL);
if (outChannel != (Tcl_Channel) NULL) {
Tcl_WriteChars(outChannel, "% ", 2);
}
}
} else {
code = Tcl_Eval(interp, promptCmd);
if (code != TCL_OK) {
Tcl_AddErrorInfo(interp,
"\n (script that generates prompt)");
/*
* We must check that errChannel is a real channel - it
* is possible that someone has transferred stderr out of
* this interpreter with "interp transfer".
*/
errChannel = Tcl_GetChannel(interp, "stderr", NULL);
if (errChannel != (Tcl_Channel) NULL) {
Tcl_WriteObj(errChannel, Tcl_GetObjResult(interp));
Tcl_WriteChars(errChannel, "\n", 1);
}
goto defaultPrompt;
}
}
outChannel = Tcl_GetChannel(interp, "stdout", NULL);
if (outChannel != (Tcl_Channel) NULL) {
Tcl_Flush(outChannel);
}
}
|
Changes to generic/tclNamesp.c.
| ︙ | ︙ | |||
15 16 17 18 19 20 21 | * Michael J. McLennan * Bell Labs Innovations for Lucent Technologies * mmclennan@lucent.com * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | * Michael J. McLennan * Bell Labs Innovations for Lucent Technologies * mmclennan@lucent.com * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclNamesp.c,v 1.17.2.2 2001/11/29 20:08:33 msofer Exp $ */ #include "tclInt.h" /* * Flag passed to TclGetNamespaceForQualName to indicate that it should * search for a namespace rather than a command or variable inside a |
| ︙ | ︙ | |||
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 |
&& (realCmdPtr->nsPtr == currNsPtr)
&& (Tcl_FindHashEntry(&currNsPtr->cmdTable,
cmdName) != NULL)) {
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"import pattern \"", pattern,
"\" would create a loop containing command \"",
Tcl_DStringValue(&ds), "\"", (char *) NULL);
return TCL_ERROR;
}
}
dataPtr = (ImportedCmdData *)
ckalloc(sizeof(ImportedCmdData));
importedCmd = Tcl_CreateObjCommand(interp,
Tcl_DStringValue(&ds), InvokeImportedCmd,
(ClientData) dataPtr, DeleteImportedCmd);
dataPtr->realCmdPtr = cmdPtr;
dataPtr->selfPtr = (Command *) importedCmd;
dataPtr->selfPtr->compileProc = cmdPtr->compileProc;
/*
* Create an ImportRef structure describing this new import
* command and add it to the import ref list in the "real"
* command.
*/
| > > | 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 |
&& (realCmdPtr->nsPtr == currNsPtr)
&& (Tcl_FindHashEntry(&currNsPtr->cmdTable,
cmdName) != NULL)) {
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"import pattern \"", pattern,
"\" would create a loop containing command \"",
Tcl_DStringValue(&ds), "\"", (char *) NULL);
Tcl_DStringFree(&ds);
return TCL_ERROR;
}
}
dataPtr = (ImportedCmdData *)
ckalloc(sizeof(ImportedCmdData));
importedCmd = Tcl_CreateObjCommand(interp,
Tcl_DStringValue(&ds), InvokeImportedCmd,
(ClientData) dataPtr, DeleteImportedCmd);
dataPtr->realCmdPtr = cmdPtr;
dataPtr->selfPtr = (Command *) importedCmd;
dataPtr->selfPtr->compileProc = cmdPtr->compileProc;
Tcl_DStringFree(&ds);
/*
* Create an ImportRef structure describing this new import
* command and add it to the import ref list in the "real"
* command.
*/
|
| ︙ | ︙ | |||
2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 |
* shadowNsPtr is initially :: and we check for case 1. above.
*/
if (found) {
hPtr = Tcl_FindHashEntry(&shadowNsPtr->cmdTable, cmdName);
if (hPtr != NULL) {
nsPtr->cmdRefEpoch++;
}
}
/*
* Insert nsPtr at the front of the trail list: i.e., at the end
* of the trailPtr array.
*/
| > > > > > > > > > > > | 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 |
* shadowNsPtr is initially :: and we check for case 1. above.
*/
if (found) {
hPtr = Tcl_FindHashEntry(&shadowNsPtr->cmdTable, cmdName);
if (hPtr != NULL) {
nsPtr->cmdRefEpoch++;
/*
* If the shadowed command was compiled to bytecodes, we
* invalidate all the bytecodes in nsPtr, to force a new
* compilation. We use the resolverEpoch to signal the need
* for a fresh compilation of every bytecode.
*/
if ((((Command *) Tcl_GetHashValue(hPtr))->compileProc) != NULL) {
nsPtr->resolverEpoch++;
}
}
}
/*
* Insert nsPtr at the front of the trail list: i.e., at the end
* of the trailPtr array.
*/
|
| ︙ | ︙ |
Changes to generic/tclObj.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclObj.c -- * * This file contains Tcl object-related procedures that are used by * many Tcl commands. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclObj.c -- * * This file contains Tcl object-related procedures that are used by * many Tcl commands. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclObj.c,v 1.12.2.5 2001/10/19 23:47:57 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * Table of all object types. |
| ︙ | ︙ | |||
44 45 46 47 48 49 50 | * as the value of an empty string representation for an object. This value * is shared by all new objects allocated by Tcl_NewObj. */ static char emptyString; char *tclEmptyStringRep = &emptyString; | < < < < < < < < < | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | * as the value of an empty string representation for an object. This value * is shared by all new objects allocated by Tcl_NewObj. */ static char emptyString; char *tclEmptyStringRep = &emptyString; /* * Prototypes for procedures defined later in this file: */ static int SetBooleanFromAny _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *objPtr)); |
| ︙ | ︙ | |||
405 406 407 408 409 410 411 412 413 414 415 416 |
/*
* Allocate the object using the list of free Tcl_Obj structs
* we maintain.
*/
Tcl_MutexLock(&tclObjMutex);
if (tclFreeObjList == NULL) {
TclAllocateFreeObjects();
}
objPtr = tclFreeObjList;
tclFreeObjList = (Tcl_Obj *) tclFreeObjList->internalRep.otherValuePtr;
| > > > | | 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 |
/*
* Allocate the object using the list of free Tcl_Obj structs
* we maintain.
*/
Tcl_MutexLock(&tclObjMutex);
#ifdef PURIFY
objPtr = (Tcl_Obj *) Tcl_Ckalloc(sizeof(Tcl_Obj));
#else
if (tclFreeObjList == NULL) {
TclAllocateFreeObjects();
}
objPtr = tclFreeObjList;
tclFreeObjList = (Tcl_Obj *) tclFreeObjList->internalRep.otherValuePtr;
#endif
objPtr->refCount = 0;
objPtr->bytes = tclEmptyStringRep;
objPtr->length = 0;
objPtr->typePtr = NULL;
#ifdef TCL_COMPILE_STATS
tclObjsAlloced++;
#endif /* TCL_COMPILE_STATS */
|
| ︙ | ︙ | |||
519 520 521 522 523 524 525 |
*/
#define OBJS_TO_ALLOC_EACH_TIME 100
void
TclAllocateFreeObjects()
{
| < < < | | | | 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 |
*/
#define OBJS_TO_ALLOC_EACH_TIME 100
void
TclAllocateFreeObjects()
{
size_t bytesToAlloc = (OBJS_TO_ALLOC_EACH_TIME * sizeof(Tcl_Obj));
char *basePtr;
register Tcl_Obj *prevPtr, *objPtr;
register int i;
basePtr = (char *) ckalloc(bytesToAlloc);
memset(basePtr, 0, bytesToAlloc);
prevPtr = NULL;
objPtr = (Tcl_Obj *) basePtr;
for (i = 0; i < OBJS_TO_ALLOC_EACH_TIME; i++) {
objPtr->internalRep.otherValuePtr = (VOID *) prevPtr;
prevPtr = objPtr;
objPtr++;
}
tclFreeObjList = prevPtr;
}
#undef OBJS_TO_ALLOC_EACH_TIME
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
590 591 592 593 594 595 596 |
/*
* If debugging Tcl's memory usage, deallocate the object using ckfree.
* Otherwise, deallocate it by adding it onto the list of free
* Tcl_Obj structs we maintain.
*/
Tcl_MutexLock(&tclObjMutex);
| | | 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 |
/*
* If debugging Tcl's memory usage, deallocate the object using ckfree.
* Otherwise, deallocate it by adding it onto the list of free
* Tcl_Obj structs we maintain.
*/
Tcl_MutexLock(&tclObjMutex);
#if defined(TCL_MEM_DEBUG) || defined(PURIFY)
ckfree((char *) objPtr);
#else
objPtr->internalRep.otherValuePtr = (VOID *) tclFreeObjList;
tclFreeObjList = objPtr;
#endif /* TCL_MEM_DEBUG */
#ifdef TCL_COMPILE_STATS
|
| ︙ | ︙ | |||
644 645 646 647 648 649 650 |
register Tcl_Obj *dupPtr;
TclNewObj(dupPtr);
if (objPtr->bytes == NULL) {
dupPtr->bytes = NULL;
} else if (objPtr->bytes != tclEmptyStringRep) {
| | < < < < < < < < | 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 |
register Tcl_Obj *dupPtr;
TclNewObj(dupPtr);
if (objPtr->bytes == NULL) {
dupPtr->bytes = NULL;
} else if (objPtr->bytes != tclEmptyStringRep) {
TclInitStringRep(dupPtr, objPtr->bytes, objPtr->length);
}
if (typePtr != NULL) {
if (typePtr->dupIntRepProc == NULL) {
dupPtr->internalRep = objPtr->internalRep;
dupPtr->typePtr = typePtr;
} else {
|
| ︙ | ︙ |
Changes to generic/tclParse.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclParse.c -- * * This file contains procedures that parse Tcl scripts. They * do so in a general-purpose fashion that can be used for many * different purposes, including compilation, direct execution, * code analysis, etc. This file also includes a few additional * procedures such as Tcl_EvalObjv, Tcl_Eval, and Tcl_EvalEx, which * allow scripts to be evaluated directly, without compiling. * * Copyright (c) 1997 Sun Microsystems, Inc. | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* * tclParse.c -- * * This file contains procedures that parse Tcl scripts. They * do so in a general-purpose fashion that can be used for many * different purposes, including compilation, direct execution, * code analysis, etc. This file also includes a few additional * procedures such as Tcl_EvalObjv, Tcl_Eval, and Tcl_EvalEx, which * allow scripts to be evaluated directly, without compiling. * * Copyright (c) 1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclParse.c,v 1.13.2.1 2001/04/03 22:54:38 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * The following table provides parsing information about each possible |
| ︙ | ︙ | |||
1452 1453 1454 1455 1456 1457 1458 |
Tcl_LogCommandInfo(interp, script, parse.commandStart, commandLength);
}
for (i = 0; i < objectsUsed; i++) {
Tcl_DecrRefCount(objv[i]);
}
if (gotParse) {
| | > > > | > > | > > > > | > > > > > > > > > > | > > > > > > > > > > > > > > > > > | 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 |
Tcl_LogCommandInfo(interp, script, parse.commandStart, commandLength);
}
for (i = 0; i < objectsUsed; i++) {
Tcl_DecrRefCount(objv[i]);
}
if (gotParse) {
next = parse.commandStart + parse.commandSize;
bytesLeft -= next - p;
p = next;
Tcl_FreeParse(&parse);
if ((nested != 0) && (p > script)) {
char *nextCmd = NULL; /* pointer to start of next command */
/*
* We get here in the special case where the TCL_BRACKET_TERM
* flag was set in the interpreter.
*
* At this point, we want to find the end of the script
* (either end of script or the closing ']').
*/
while ((p[-1] != ']') && bytesLeft) {
if (Tcl_ParseCommand(NULL, p, bytesLeft, nested, &parse)
!= TCL_OK) {
/*
* We were looking for the ']' to close the script.
* But if we find a syntax error, it is ok to quit
* early since in that case we no longer need to know
* where the ']' is (if there was one). We reset the
* pointer to the start of the command that after the
* one causing the return. -- hobbs
*/
p = (nextCmd == NULL) ? parse.commandStart : nextCmd;
break;
}
if (nextCmd == NULL) {
nextCmd = parse.commandStart;
}
/*
* Advance to the next command in the script.
*/
next = parse.commandStart + parse.commandSize;
bytesLeft -= next - p;
p = next;
Tcl_FreeParse(&parse);
}
iPtr->termOffset = (p - 1) - script;
} else {
iPtr->termOffset = p - script;
}
}
if (objv != staticObjArray) {
ckfree((char *) objv);
|
| ︙ | ︙ |
Changes to generic/tclPkg.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclPkg.c -- * * This file implements package and version control for Tcl via * the "package" command and a few C APIs. * * Copyright (c) 1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclPkg.c -- * * This file implements package and version control for Tcl via * the "package" command and a few C APIs. * * Copyright (c) 1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclPkg.c,v 1.5.2.1 2001/08/24 16:19:09 dgp Exp $ */ #include "tclInt.h" /* * Each invocation of the "package ifneeded" command creates a structure * of the following type, which is used to load the package into the |
| ︙ | ︙ | |||
499 500 501 502 503 504 505 |
switch ((enum pkgOptions) optionIndex) {
case PKG_FORGET: {
char *keyString;
for (i = 2; i < objc; i++) {
keyString = Tcl_GetString(objv[i]);
hPtr = Tcl_FindHashEntry(&iPtr->packageTable, keyString);
if (hPtr == NULL) {
| | | 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 |
switch ((enum pkgOptions) optionIndex) {
case PKG_FORGET: {
char *keyString;
for (i = 2; i < objc; i++) {
keyString = Tcl_GetString(objv[i]);
hPtr = Tcl_FindHashEntry(&iPtr->packageTable, keyString);
if (hPtr == NULL) {
continue;
}
pkgPtr = (Package *) Tcl_GetHashValue(hPtr);
Tcl_DeleteHashEntry(hPtr);
if (pkgPtr->version != NULL) {
ckfree(pkgPtr->version);
}
while (pkgPtr->availPtr != NULL) {
|
| ︙ | ︙ |
Changes to generic/tclPlatDecls.h.
1 2 3 4 5 6 7 8 | /* * tclPlatDecls.h -- * * Declarations of platform specific Tcl APIs. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * | | > > > > > > > > > | 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 | /* * tclPlatDecls.h -- * * Declarations of platform specific Tcl APIs. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * * RCS: @(#) $Id: tclPlatDecls.h,v 1.5.12.1 2001/04/03 22:54:38 hobbs Exp $ */ #ifndef _TCLPLATDECLS #define _TCLPLATDECLS /* * Pull in the definition of TCHAR. Hopefully the compile flags * of the core are matching against your project build for these * public functions. BE AWARE. */ #if defined(__WIN32__) && !defined(_INC_TCHAR) #include <tchar.h> #endif /* !BEGIN!: Do not edit below this line. */ /* * Exported function declarations: */ #ifdef __WIN32__ |
| ︙ | ︙ |
Changes to generic/tclPosixStr.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclPosixStr.c -- * * This file contains procedures that generate strings * corresponding to various POSIX-related codes, such * as errno and signals. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclPosixStr.c -- * * This file contains procedures that generate strings * corresponding to various POSIX-related codes, such * as errno and signals. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclPosixStr.c,v 1.5.2.1 2000/08/07 21:32:40 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" /* *---------------------------------------------------------------------- |
| ︙ | ︙ | |||
982 983 984 985 986 987 988 | #endif #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO)) case SIGPOLL: return "SIGPOLL"; #endif #ifdef SIGPROF case SIGPROF: return "SIGPROF"; #endif | | | 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 | #endif #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO)) case SIGPOLL: return "SIGPOLL"; #endif #ifdef SIGPROF case SIGPROF: return "SIGPROF"; #endif #if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) case SIGPWR: return "SIGPWR"; #endif #ifdef SIGQUIT case SIGQUIT: return "SIGQUIT"; #endif #ifdef SIGSEGV case SIGSEGV: return "SIGSEGV"; |
| ︙ | ︙ | |||
1114 1115 1116 1117 1118 1119 1120 | #endif #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO)) case SIGPOLL: return "input/output possible on file"; #endif #ifdef SIGPROF case SIGPROF: return "profiling alarm"; #endif | | | 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 | #endif #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO)) case SIGPOLL: return "input/output possible on file"; #endif #ifdef SIGPROF case SIGPROF: return "profiling alarm"; #endif #if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) case SIGPWR: return "power-fail restart"; #endif #ifdef SIGQUIT case SIGQUIT: return "quit signal"; #endif #ifdef SIGSEGV case SIGSEGV: return "segmentation violation"; |
| ︙ | ︙ |
Changes to generic/tclScan.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclScan.c -- * * This file contains the implementation of the "scan" command. * * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclScan.c -- * * This file contains the implementation of the "scan" command. * * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclScan.c,v 1.6.2.4 2002/03/18 20:56:17 hobbs Exp $ */ #include "tclInt.h" /* * Flag values used by Tcl_ScanObjCmd. */ |
| ︙ | ︙ | |||
535 536 537 538 539 540 541 |
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
char *format;
int numVars, nconversions, totalVars = -1;
| | > | 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 |
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
char *format;
int numVars, nconversions, totalVars = -1;
int objIndex, offset, i, result, code;
long value;
char *string, *end, *baseString;
char op = 0;
int base = 0;
int underflow = 0;
size_t width;
long (*fn)() = NULL;
Tcl_UniChar ch, sch;
|
| ︙ | ︙ | |||
640 641 642 643 644 645 646 |
flags |= SCAN_SUPPRESS;
format += Tcl_UtfToUniChar(format, &ch);
} else if ((ch < 0x80) && isdigit(UCHAR(ch))) { /* INTL: "C" locale. */
value = strtoul(format-1, &end, 10); /* INTL: "C" locale. */
if (*end == '$') {
format = end+1;
format += Tcl_UtfToUniChar(format, &ch);
| | | 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 |
flags |= SCAN_SUPPRESS;
format += Tcl_UtfToUniChar(format, &ch);
} else if ((ch < 0x80) && isdigit(UCHAR(ch))) { /* INTL: "C" locale. */
value = strtoul(format-1, &end, 10); /* INTL: "C" locale. */
if (*end == '$') {
format = end+1;
format += Tcl_UtfToUniChar(format, &ch);
objIndex = (int) value - 1;
}
}
/*
* Parse any width specifier.
*/
|
| ︙ | ︙ | |||
690 691 692 693 694 695 696 | op = 'i'; base = 0; fn = (long (*)())strtol; break; case 'o': op = 'i'; base = 8; | | | | 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 | op = 'i'; base = 0; fn = (long (*)())strtol; break; case 'o': op = 'i'; base = 8; fn = (long (*)())strtoul; break; case 'x': op = 'i'; base = 16; fn = (long (*)())strtoul; break; case 'u': op = 'i'; base = 10; flags |= SCAN_UNSIGNED; fn = (long (*)())strtoul; break; |
| ︙ | ︙ | |||
850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 |
for (end = buf; width > 0; width--) {
switch (*string) {
/*
* The 0 digit has special meaning at the beginning of
* a number. If we are unsure of the base, it
* indicates that we are in base 8 or base 16 (if it is
* followed by an 'x').
*/
case '0':
if (base == 0) {
base = 8;
flags |= SCAN_XOK;
}
if (flags & SCAN_NOZERO) {
flags &= ~(SCAN_SIGNOK | SCAN_NODIGITS
| SCAN_NOZERO);
} else {
flags &= ~(SCAN_SIGNOK | SCAN_XOK
| SCAN_NODIGITS);
| > > > > > > > | 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 |
for (end = buf; width > 0; width--) {
switch (*string) {
/*
* The 0 digit has special meaning at the beginning of
* a number. If we are unsure of the base, it
* indicates that we are in base 8 or base 16 (if it is
* followed by an 'x').
*
* 8.1 - 8.3.4 incorrectly handled 0x... base-16
* cases for %x by not reading the 0x as the
* auto-prelude for base-16. [Bug #495213]
*/
case '0':
if (base == 0) {
base = 8;
flags |= SCAN_XOK;
}
if (base == 16) {
flags |= SCAN_XOK;
}
if (flags & SCAN_NOZERO) {
flags &= ~(SCAN_SIGNOK | SCAN_NODIGITS
| SCAN_NOZERO);
} else {
flags &= ~(SCAN_SIGNOK | SCAN_XOK
| SCAN_NODIGITS);
|
| ︙ | ︙ | |||
950 951 952 953 954 955 956 |
* Scan the value from the temporary buffer. If we are
* returning a large unsigned value, we have to convert it back
* to a string since Tcl only supports signed values.
*/
if (!(flags & SCAN_SUPPRESS)) {
*end = '\0';
| | | > > > | > | 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 |
* Scan the value from the temporary buffer. If we are
* returning a large unsigned value, we have to convert it back
* to a string since Tcl only supports signed values.
*/
if (!(flags & SCAN_SUPPRESS)) {
*end = '\0';
value = (long) (*fn)(buf, NULL, base);
if ((flags & SCAN_UNSIGNED) && (value < 0)) {
sprintf(buf, "%lu", value); /* INTL: ISO digit */
objPtr = Tcl_NewStringObj(buf, -1);
} else {
if ((unsigned long) value > UINT_MAX) {
objPtr = Tcl_NewLongObj(value);
} else {
objPtr = Tcl_NewIntObj(value);
}
}
Tcl_IncrRefCount(objPtr);
objs[objIndex++] = objPtr;
}
break;
|
| ︙ | ︙ | |||
1108 1109 1110 1111 1112 1113 1114 |
* More %-specifiers than matching chars, so we
* just spit out empty strings for these
*/
Tcl_ListObjAppendElement(NULL, objPtr, Tcl_NewObj());
}
}
}
| > | > | 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 |
* More %-specifiers than matching chars, so we
* just spit out empty strings for these
*/
Tcl_ListObjAppendElement(NULL, objPtr, Tcl_NewObj());
}
}
}
if (objs != NULL) {
ckfree((char*) objs);
}
if (code == TCL_OK) {
if (underflow && (nconversions == 0)) {
if (numVars) {
objPtr = Tcl_NewIntObj(-1);
} else {
if (objPtr) {
Tcl_SetListObj(objPtr, 0, NULL);
|
| ︙ | ︙ |
Changes to generic/tclStubInit.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclStubInit.c -- * * This file contains the initializers for the Tcl stub vectors. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclStubInit.c -- * * This file contains the initializers for the Tcl stub vectors. * * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclStubInit.c,v 1.35.2.7 2001/10/17 19:29:25 das Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * Remove macros that will interfere with the definitions below. |
| ︙ | ︙ | |||
225 226 227 228 229 230 231 |
TclHandleFree, /* 147 */
TclHandlePreserve, /* 148 */
TclHandleRelease, /* 149 */
TclRegAbout, /* 150 */
TclRegExpRangeUniChar, /* 151 */
TclSetLibraryPath, /* 152 */
TclGetLibraryPath, /* 153 */
| | | > > > > | 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 |
TclHandleFree, /* 147 */
TclHandlePreserve, /* 148 */
TclHandleRelease, /* 149 */
TclRegAbout, /* 150 */
TclRegExpRangeUniChar, /* 151 */
TclSetLibraryPath, /* 152 */
TclGetLibraryPath, /* 153 */
NULL, /* 154 */
NULL, /* 155 */
TclRegError, /* 156 */
TclVarTraceExists, /* 157 */
TclSetStartupScriptFileName, /* 158 */
TclGetStartupScriptFileName, /* 159 */
TclpMatchFilesTypes, /* 160 */
TclChannelTransform, /* 161 */
TclChannelEventScriptInvoker, /* 162 */
TclGetInstructionTable, /* 163 */
TclExpandCodeArray, /* 164 */
};
TclIntPlatStubs tclIntPlatStubs = {
TCL_STUB_MAGIC,
NULL,
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
TclGetAndDetachPids, /* 0 */
|
| ︙ | ︙ | |||
271 272 273 274 275 276 277 |
TclpCreatePipe, /* 14 */
TclpCreateProcess, /* 15 */
NULL, /* 16 */
NULL, /* 17 */
TclpMakeFile, /* 18 */
TclpOpenFile, /* 19 */
TclWinAddProcess, /* 20 */
| | > | | | | | | 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 |
TclpCreatePipe, /* 14 */
TclpCreateProcess, /* 15 */
NULL, /* 16 */
NULL, /* 17 */
TclpMakeFile, /* 18 */
TclpOpenFile, /* 19 */
TclWinAddProcess, /* 20 */
NULL, /* 21 */
TclpCreateTempFile, /* 22 */
TclpGetTZName, /* 23 */
TclWinNoBackslash, /* 24 */
TclWinGetPlatform, /* 25 */
TclWinSetInterfaces, /* 26 */
TclWinFlushDirtyChannels, /* 27 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
TclpSysAlloc, /* 0 */
TclpSysFree, /* 1 */
TclpSysRealloc, /* 2 */
TclpExit, /* 3 */
FSpGetDefaultDir, /* 4 */
FSpSetDefaultDir, /* 5 */
FSpFindFolder, /* 6 */
GetGlobalMouseTcl, /* 7 */
FSpGetDirectoryIDTcl, /* 8 */
FSpOpenResFileCompatTcl, /* 9 */
FSpCreateResFileCompatTcl, /* 10 */
FSpLocationFromPath, /* 11 */
FSpPathFromLocation, /* 12 */
TclMacExitHandler, /* 13 */
TclMacInitExitToShell, /* 14 */
TclMacInstallExitToShellPatch, /* 15 */
TclMacOSErrorToPosixError, /* 16 */
TclMacRemoveTimer, /* 17 */
TclMacStartTimer, /* 18 */
TclMacTimerExpired, /* 19 */
TclMacRegisterResourceFork, /* 20 */
TclMacUnRegisterResourceFork, /* 21 */
TclMacCreateEnv, /* 22 */
TclMacFOpenHack, /* 23 */
TclpGetTZName, /* 24 */
TclMacChmod, /* 25 */
#endif /* MAC_TCL */
};
TclPlatStubs tclPlatStubs = {
TCL_STUB_MAGIC,
NULL,
|
| ︙ | ︙ | |||
677 678 679 680 681 682 683 |
NULL, /* 278 */
#endif /* MAC_TCL */
Tcl_GetVersion, /* 279 */
Tcl_InitMemory, /* 280 */
Tcl_StackChannel, /* 281 */
Tcl_UnstackChannel, /* 282 */
Tcl_GetStackedChannel, /* 283 */
| | | 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 |
NULL, /* 278 */
#endif /* MAC_TCL */
Tcl_GetVersion, /* 279 */
Tcl_InitMemory, /* 280 */
Tcl_StackChannel, /* 281 */
Tcl_UnstackChannel, /* 282 */
Tcl_GetStackedChannel, /* 283 */
Tcl_SetMainLoop, /* 284 */
NULL, /* 285 */
Tcl_AppendObjToObj, /* 286 */
Tcl_CreateEncoding, /* 287 */
Tcl_CreateThreadExitHandler, /* 288 */
Tcl_DeleteThreadExitHandler, /* 289 */
Tcl_DiscardResult, /* 290 */
Tcl_EvalEx, /* 291 */
|
| ︙ | ︙ | |||
787 788 789 790 791 792 793 794 795 796 |
Tcl_GetAllocMutex, /* 387 */
Tcl_GetChannelNames, /* 388 */
Tcl_GetChannelNamesEx, /* 389 */
Tcl_ProcObjCmd, /* 390 */
Tcl_ConditionFinalize, /* 391 */
Tcl_MutexFinalize, /* 392 */
Tcl_CreateThread, /* 393 */
};
/* !END!: Do not edit above this line. */
| > > > > > > > > > > > > > > > > > > | 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 |
Tcl_GetAllocMutex, /* 387 */
Tcl_GetChannelNames, /* 388 */
Tcl_GetChannelNamesEx, /* 389 */
Tcl_ProcObjCmd, /* 390 */
Tcl_ConditionFinalize, /* 391 */
Tcl_MutexFinalize, /* 392 */
Tcl_CreateThread, /* 393 */
Tcl_ReadRaw, /* 394 */
Tcl_WriteRaw, /* 395 */
Tcl_GetTopChannel, /* 396 */
Tcl_ChannelBuffered, /* 397 */
Tcl_ChannelName, /* 398 */
Tcl_ChannelVersion, /* 399 */
Tcl_ChannelBlockModeProc, /* 400 */
Tcl_ChannelCloseProc, /* 401 */
Tcl_ChannelClose2Proc, /* 402 */
Tcl_ChannelInputProc, /* 403 */
Tcl_ChannelOutputProc, /* 404 */
Tcl_ChannelSeekProc, /* 405 */
Tcl_ChannelSetOptionProc, /* 406 */
Tcl_ChannelGetOptionProc, /* 407 */
Tcl_ChannelWatchProc, /* 408 */
Tcl_ChannelGetHandleProc, /* 409 */
Tcl_ChannelFlushProc, /* 410 */
Tcl_ChannelHandlerProc, /* 411 */
};
/* !END!: Do not edit above this line. */
|
Changes to generic/tclTest.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclTest.c -- * * This file contains C command procedures for a bunch of additional * Tcl commands that are used for testing out Tcl's C interfaces. * These commands are not normally included in Tcl applications; * they're only used for testing. * * Copyright (c) 1993-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. | | | > | 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 | /* * tclTest.c -- * * This file contains C command procedures for a bunch of additional * Tcl commands that are used for testing out Tcl's C interfaces. * These commands are not normally included in Tcl applications; * they're only used for testing. * * Copyright (c) 1993-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclTest.c,v 1.17.2.3 2001/09/20 01:13:03 hobbs Exp $ */ #define TCL_TEST #include "tclInt.h" #include "tclPort.h" #include "tclRegexp.h" #include "tclIO.h" #include <locale.h> /* * Declare external functions used in Windows tests. */ /* |
| ︙ | ︙ | |||
272 273 274 275 276 277 278 279 280 281 282 283 284 285 | struct stat *buf)); static int TeststatprocCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); static int TesttranslatefilenameCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); static int TestupvarCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); /* * External (platform specific) initialization routine, these declarations * explicitly don't use EXTERN since this code does not get compiled * into the library: */ | > > > > | 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 | struct stat *buf)); static int TeststatprocCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); static int TesttranslatefilenameCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); static int TestupvarCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); static int TestChannelCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); static int TestChannelEventCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); /* * External (platform specific) initialization routine, these declarations * explicitly don't use EXTERN since this code does not get compiled * into the library: */ |
| ︙ | ︙ | |||
325 326 327 328 329 330 331 |
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateObjCommand(interp, "noop", NoopObjCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testaccessproc", TestaccessprocCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testasync", TestasyncCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
| | | | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 |
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateObjCommand(interp, "noop", NoopObjCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testaccessproc", TestaccessprocCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testasync", TestasyncCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testchannel", TestChannelCmd,
(ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testchannelevent", TestChannelEventCmd,
(ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testchmod", TestchmodCmd,
(ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testcmdtoken", TestcmdtokenCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testcmdinfo", TestcmdinfoCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
|
| ︙ | ︙ | |||
731 732 733 734 735 736 737 |
TestcmdtokenCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Tcl_Command token;
| | | | | | | 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 |
TestcmdtokenCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Tcl_Command token;
int *l;
char buf[30];
if (argc != 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" option arg\"", (char *) NULL);
return TCL_ERROR;
}
if (strcmp(argv[1], "create") == 0) {
token = Tcl_CreateCommand(interp, argv[2], CmdProc1,
(ClientData) "original", (Tcl_CmdDeleteProc *) NULL);
sprintf(buf, "%p", (VOID *)token);
Tcl_SetResult(interp, buf, TCL_VOLATILE);
} else if (strcmp(argv[1], "name") == 0) {
Tcl_Obj *objPtr;
if (sscanf(argv[2], "%p", &l) != 1) {
Tcl_AppendResult(interp, "bad command token \"", argv[2],
"\"", (char *) NULL);
return TCL_ERROR;
}
objPtr = Tcl_NewObj();
Tcl_GetCommandFullName(interp, (Tcl_Command) l, objPtr);
Tcl_AppendElement(interp,
Tcl_GetCommandName(interp, (Tcl_Command) l));
Tcl_AppendElement(interp, Tcl_GetString(objPtr));
Tcl_DecrRefCount(objPtr);
} else {
Tcl_AppendResult(interp, "bad option \"", argv[1],
"\": must be create or name", (char *) NULL);
|
| ︙ | ︙ | |||
4238 4239 4240 4241 4242 4243 4244 |
if (!strcmp("testOpenFileChannel3%.fil", fileName)) {
return (TclpOpenFileChannel(interp, "__testOpenFileChannel3%__.fil",
modeString, permissions));
} else {
return (NULL);
}
}
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
if (!strcmp("testOpenFileChannel3%.fil", fileName)) {
return (TclpOpenFileChannel(interp, "__testOpenFileChannel3%__.fil",
modeString, permissions));
} else {
return (NULL);
}
}
/*
*----------------------------------------------------------------------
*
* TestChannelCmd --
*
* Implements the Tcl "testchannel" debugging command and its
* subcommands. This is part of the testing environment.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
TestChannelCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Interpreter for result. */
int argc; /* Count of additional args. */
char **argv; /* Additional arg strings. */
{
char *cmdName; /* Sub command. */
Tcl_HashTable *hTblPtr; /* Hash table of channels. */
Tcl_HashSearch hSearch; /* Search variable. */
Tcl_HashEntry *hPtr; /* Search variable. */
Channel *chanPtr; /* The actual channel. */
ChannelState *statePtr; /* state info for channel */
Tcl_Channel chan; /* The opaque type. */
size_t len; /* Length of subcommand string. */
int IOQueued; /* How much IO is queued inside channel? */
ChannelBuffer *bufPtr; /* For iterating over queued IO. */
char buf[TCL_INTEGER_SPACE];/* For sprintf. */
int mode; /* rw mode of the channel */
if (argc < 2) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" subcommand ?additional args..?\"", (char *) NULL);
return TCL_ERROR;
}
cmdName = argv[1];
len = strlen(cmdName);
chanPtr = (Channel *) NULL;
if (argc > 2) {
chan = Tcl_GetChannel(interp, argv[2], &mode);
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
chanPtr = (Channel *) chan;
statePtr = chanPtr->state;
chanPtr = statePtr->topChanPtr;
chan = (Tcl_Channel) chanPtr;
} else {
/* lint */
statePtr = NULL;
chan = NULL;
}
if ((cmdName[0] == 'i') && (strncmp(cmdName, "info", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" info channelName\"", (char *) NULL);
return TCL_ERROR;
}
Tcl_AppendElement(interp, argv[2]);
Tcl_AppendElement(interp, chanPtr->typePtr->typeName);
if (statePtr->flags & TCL_READABLE) {
Tcl_AppendElement(interp, "read");
} else {
Tcl_AppendElement(interp, "");
}
if (statePtr->flags & TCL_WRITABLE) {
Tcl_AppendElement(interp, "write");
} else {
Tcl_AppendElement(interp, "");
}
if (statePtr->flags & CHANNEL_NONBLOCKING) {
Tcl_AppendElement(interp, "nonblocking");
} else {
Tcl_AppendElement(interp, "blocking");
}
if (statePtr->flags & CHANNEL_LINEBUFFERED) {
Tcl_AppendElement(interp, "line");
} else if (statePtr->flags & CHANNEL_UNBUFFERED) {
Tcl_AppendElement(interp, "none");
} else {
Tcl_AppendElement(interp, "full");
}
if (statePtr->flags & BG_FLUSH_SCHEDULED) {
Tcl_AppendElement(interp, "async_flush");
} else {
Tcl_AppendElement(interp, "");
}
if (statePtr->flags & CHANNEL_EOF) {
Tcl_AppendElement(interp, "eof");
} else {
Tcl_AppendElement(interp, "");
}
if (statePtr->flags & CHANNEL_BLOCKED) {
Tcl_AppendElement(interp, "blocked");
} else {
Tcl_AppendElement(interp, "unblocked");
}
if (statePtr->inputTranslation == TCL_TRANSLATE_AUTO) {
Tcl_AppendElement(interp, "auto");
if (statePtr->flags & INPUT_SAW_CR) {
Tcl_AppendElement(interp, "saw_cr");
} else {
Tcl_AppendElement(interp, "");
}
} else if (statePtr->inputTranslation == TCL_TRANSLATE_LF) {
Tcl_AppendElement(interp, "lf");
Tcl_AppendElement(interp, "");
} else if (statePtr->inputTranslation == TCL_TRANSLATE_CR) {
Tcl_AppendElement(interp, "cr");
Tcl_AppendElement(interp, "");
} else if (statePtr->inputTranslation == TCL_TRANSLATE_CRLF) {
Tcl_AppendElement(interp, "crlf");
if (statePtr->flags & INPUT_SAW_CR) {
Tcl_AppendElement(interp, "queued_cr");
} else {
Tcl_AppendElement(interp, "");
}
}
if (statePtr->outputTranslation == TCL_TRANSLATE_AUTO) {
Tcl_AppendElement(interp, "auto");
} else if (statePtr->outputTranslation == TCL_TRANSLATE_LF) {
Tcl_AppendElement(interp, "lf");
} else if (statePtr->outputTranslation == TCL_TRANSLATE_CR) {
Tcl_AppendElement(interp, "cr");
} else if (statePtr->outputTranslation == TCL_TRANSLATE_CRLF) {
Tcl_AppendElement(interp, "crlf");
}
for (IOQueued = 0, bufPtr = statePtr->inQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
IOQueued += bufPtr->nextAdded - bufPtr->nextRemoved;
}
TclFormatInt(buf, IOQueued);
Tcl_AppendElement(interp, buf);
IOQueued = 0;
if (statePtr->curOutPtr != (ChannelBuffer *) NULL) {
IOQueued = statePtr->curOutPtr->nextAdded -
statePtr->curOutPtr->nextRemoved;
}
for (bufPtr = statePtr->outQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
IOQueued += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
TclFormatInt(buf, IOQueued);
Tcl_AppendElement(interp, buf);
TclFormatInt(buf, Tcl_Tell((Tcl_Channel) chanPtr));
Tcl_AppendElement(interp, buf);
TclFormatInt(buf, statePtr->refCount);
Tcl_AppendElement(interp, buf);
return TCL_OK;
}
if ((cmdName[0] == 'i') &&
(strncmp(cmdName, "inputbuffered", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "channel name required",
(char *) NULL);
return TCL_ERROR;
}
for (IOQueued = 0, bufPtr = statePtr->inQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
IOQueued += bufPtr->nextAdded - bufPtr->nextRemoved;
}
TclFormatInt(buf, IOQueued);
Tcl_AppendResult(interp, buf, (char *) NULL);
return TCL_OK;
}
if ((cmdName[0] == 'm') && (strncmp(cmdName, "mode", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "channel name required",
(char *) NULL);
return TCL_ERROR;
}
if (statePtr->flags & TCL_READABLE) {
Tcl_AppendElement(interp, "read");
} else {
Tcl_AppendElement(interp, "");
}
if (statePtr->flags & TCL_WRITABLE) {
Tcl_AppendElement(interp, "write");
} else {
Tcl_AppendElement(interp, "");
}
return TCL_OK;
}
if ((cmdName[0] == 'n') && (strncmp(cmdName, "name", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "channel name required",
(char *) NULL);
return TCL_ERROR;
}
Tcl_AppendResult(interp, statePtr->channelName, (char *) NULL);
return TCL_OK;
}
if ((cmdName[0] == 'o') && (strncmp(cmdName, "open", len) == 0)) {
hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL);
if (hTblPtr == (Tcl_HashTable *) NULL) {
return TCL_OK;
}
for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch);
hPtr != (Tcl_HashEntry *) NULL;
hPtr = Tcl_NextHashEntry(&hSearch)) {
Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr));
}
return TCL_OK;
}
if ((cmdName[0] == 'o') &&
(strncmp(cmdName, "outputbuffered", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "channel name required",
(char *) NULL);
return TCL_ERROR;
}
IOQueued = 0;
if (statePtr->curOutPtr != (ChannelBuffer *) NULL) {
IOQueued = statePtr->curOutPtr->nextAdded -
statePtr->curOutPtr->nextRemoved;
}
for (bufPtr = statePtr->outQueueHead;
bufPtr != (ChannelBuffer *) NULL;
bufPtr = bufPtr->nextPtr) {
IOQueued += (bufPtr->nextAdded - bufPtr->nextRemoved);
}
TclFormatInt(buf, IOQueued);
Tcl_AppendResult(interp, buf, (char *) NULL);
return TCL_OK;
}
if ((cmdName[0] == 'q') &&
(strncmp(cmdName, "queuedcr", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "channel name required",
(char *) NULL);
return TCL_ERROR;
}
Tcl_AppendResult(interp,
(statePtr->flags & INPUT_SAW_CR) ? "1" : "0",
(char *) NULL);
return TCL_OK;
}
if ((cmdName[0] == 'r') && (strncmp(cmdName, "readable", len) == 0)) {
hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL);
if (hTblPtr == (Tcl_HashTable *) NULL) {
return TCL_OK;
}
for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch);
hPtr != (Tcl_HashEntry *) NULL;
hPtr = Tcl_NextHashEntry(&hSearch)) {
chanPtr = (Channel *) Tcl_GetHashValue(hPtr);
statePtr = chanPtr->state;
if (statePtr->flags & TCL_READABLE) {
Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr));
}
}
return TCL_OK;
}
if ((cmdName[0] == 'r') && (strncmp(cmdName, "refcount", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "channel name required",
(char *) NULL);
return TCL_ERROR;
}
TclFormatInt(buf, statePtr->refCount);
Tcl_AppendResult(interp, buf, (char *) NULL);
return TCL_OK;
}
if ((cmdName[0] == 't') && (strncmp(cmdName, "type", len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "channel name required",
(char *) NULL);
return TCL_ERROR;
}
Tcl_AppendResult(interp, chanPtr->typePtr->typeName,
(char *) NULL);
return TCL_OK;
}
if ((cmdName[0] == 'w') && (strncmp(cmdName, "writable", len) == 0)) {
hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL);
if (hTblPtr == (Tcl_HashTable *) NULL) {
return TCL_OK;
}
for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch);
hPtr != (Tcl_HashEntry *) NULL;
hPtr = Tcl_NextHashEntry(&hSearch)) {
chanPtr = (Channel *) Tcl_GetHashValue(hPtr);
statePtr = chanPtr->state;
if (statePtr->flags & TCL_WRITABLE) {
Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr));
}
}
return TCL_OK;
}
if ((cmdName[0] == 't') && (strncmp(cmdName, "transform", len) == 0)) {
/*
* Syntax: transform channel -command command
*/
if (argc != 5) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" transform channelId -command cmd\"", (char *) NULL);
return TCL_ERROR;
}
if (strcmp(argv[3], "-command") != 0) {
Tcl_AppendResult(interp, "bad argument \"", argv[3],
"\": should be \"-command\"", (char *) NULL);
return TCL_ERROR;
}
return TclChannelTransform(interp, chan,
Tcl_NewStringObj(argv[4], -1));
}
if ((cmdName[0] == 'u') && (strncmp(cmdName, "unstack", len) == 0)) {
/*
* Syntax: unstack channel
*/
if (argc != 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" unstack channel\"", (char *) NULL);
return TCL_ERROR;
}
return Tcl_UnstackChannel(interp, chan);
}
Tcl_AppendResult(interp, "bad option \"", cmdName, "\": should be ",
"info, open, readable, writable, transform, unstack",
(char *) NULL);
return TCL_ERROR;
}
/*
*----------------------------------------------------------------------
*
* TestChannelEventCmd --
*
* This procedure implements the "testchannelevent" command. It is
* used to test the Tcl channel event mechanism.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* Creates, deletes and returns channel event handlers.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
TestChannelEventCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Tcl_Obj *resultListPtr;
Channel *chanPtr;
ChannelState *statePtr; /* state info for channel */
EventScriptRecord *esPtr, *prevEsPtr, *nextEsPtr;
char *cmd;
int index, i, mask, len;
if ((argc < 3) || (argc > 5)) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" channelName cmd ?arg1? ?arg2?\"", (char *) NULL);
return TCL_ERROR;
}
chanPtr = (Channel *) Tcl_GetChannel(interp, argv[1], NULL);
if (chanPtr == (Channel *) NULL) {
return TCL_ERROR;
}
statePtr = chanPtr->state;
cmd = argv[2];
len = strlen(cmd);
if ((cmd[0] == 'a') && (strncmp(cmd, "add", (unsigned) len) == 0)) {
if (argc != 5) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" channelName add eventSpec script\"", (char *) NULL);
return TCL_ERROR;
}
if (strcmp(argv[3], "readable") == 0) {
mask = TCL_READABLE;
} else if (strcmp(argv[3], "writable") == 0) {
mask = TCL_WRITABLE;
} else if (strcmp(argv[3], "none") == 0) {
mask = 0;
} else {
Tcl_AppendResult(interp, "bad event name \"", argv[3],
"\": must be readable, writable, or none", (char *) NULL);
return TCL_ERROR;
}
esPtr = (EventScriptRecord *) ckalloc((unsigned)
sizeof(EventScriptRecord));
esPtr->nextPtr = statePtr->scriptRecordPtr;
statePtr->scriptRecordPtr = esPtr;
esPtr->chanPtr = chanPtr;
esPtr->interp = interp;
esPtr->mask = mask;
esPtr->scriptPtr = Tcl_NewStringObj(argv[4], -1);
Tcl_IncrRefCount(esPtr->scriptPtr);
Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask,
TclChannelEventScriptInvoker, (ClientData) esPtr);
return TCL_OK;
}
if ((cmd[0] == 'd') && (strncmp(cmd, "delete", (unsigned) len) == 0)) {
if (argc != 4) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" channelName delete index\"", (char *) NULL);
return TCL_ERROR;
}
if (Tcl_GetInt(interp, argv[3], &index) == TCL_ERROR) {
return TCL_ERROR;
}
if (index < 0) {
Tcl_AppendResult(interp, "bad event index: ", argv[3],
": must be nonnegative", (char *) NULL);
return TCL_ERROR;
}
for (i = 0, esPtr = statePtr->scriptRecordPtr;
(i < index) && (esPtr != (EventScriptRecord *) NULL);
i++, esPtr = esPtr->nextPtr) {
/* Empty loop body. */
}
if (esPtr == (EventScriptRecord *) NULL) {
Tcl_AppendResult(interp, "bad event index ", argv[3],
": out of range", (char *) NULL);
return TCL_ERROR;
}
if (esPtr == statePtr->scriptRecordPtr) {
statePtr->scriptRecordPtr = esPtr->nextPtr;
} else {
for (prevEsPtr = statePtr->scriptRecordPtr;
(prevEsPtr != (EventScriptRecord *) NULL) &&
(prevEsPtr->nextPtr != esPtr);
prevEsPtr = prevEsPtr->nextPtr) {
/* Empty loop body. */
}
if (prevEsPtr == (EventScriptRecord *) NULL) {
panic("TestChannelEventCmd: damaged event script list");
}
prevEsPtr->nextPtr = esPtr->nextPtr;
}
Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr,
TclChannelEventScriptInvoker, (ClientData) esPtr);
Tcl_DecrRefCount(esPtr->scriptPtr);
ckfree((char *) esPtr);
return TCL_OK;
}
if ((cmd[0] == 'l') && (strncmp(cmd, "list", (unsigned) len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" channelName list\"", (char *) NULL);
return TCL_ERROR;
}
resultListPtr = Tcl_GetObjResult(interp);
for (esPtr = statePtr->scriptRecordPtr;
esPtr != (EventScriptRecord *) NULL;
esPtr = esPtr->nextPtr) {
if (esPtr->mask) {
Tcl_ListObjAppendElement(interp, resultListPtr, Tcl_NewStringObj(
(esPtr->mask == TCL_READABLE) ? "readable" : "writable", -1));
} else {
Tcl_ListObjAppendElement(interp, resultListPtr,
Tcl_NewStringObj("none", -1));
}
Tcl_ListObjAppendElement(interp, resultListPtr, esPtr->scriptPtr);
}
Tcl_SetObjResult(interp, resultListPtr);
return TCL_OK;
}
if ((cmd[0] == 'r') && (strncmp(cmd, "removeall", (unsigned) len) == 0)) {
if (argc != 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" channelName removeall\"", (char *) NULL);
return TCL_ERROR;
}
for (esPtr = statePtr->scriptRecordPtr;
esPtr != (EventScriptRecord *) NULL;
esPtr = nextEsPtr) {
nextEsPtr = esPtr->nextPtr;
Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr,
TclChannelEventScriptInvoker, (ClientData) esPtr);
Tcl_DecrRefCount(esPtr->scriptPtr);
ckfree((char *) esPtr);
}
statePtr->scriptRecordPtr = (EventScriptRecord *) NULL;
return TCL_OK;
}
if ((cmd[0] == 's') && (strncmp(cmd, "set", (unsigned) len) == 0)) {
if (argc != 5) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" channelName delete index event\"", (char *) NULL);
return TCL_ERROR;
}
if (Tcl_GetInt(interp, argv[3], &index) == TCL_ERROR) {
return TCL_ERROR;
}
if (index < 0) {
Tcl_AppendResult(interp, "bad event index: ", argv[3],
": must be nonnegative", (char *) NULL);
return TCL_ERROR;
}
for (i = 0, esPtr = statePtr->scriptRecordPtr;
(i < index) && (esPtr != (EventScriptRecord *) NULL);
i++, esPtr = esPtr->nextPtr) {
/* Empty loop body. */
}
if (esPtr == (EventScriptRecord *) NULL) {
Tcl_AppendResult(interp, "bad event index ", argv[3],
": out of range", (char *) NULL);
return TCL_ERROR;
}
if (strcmp(argv[4], "readable") == 0) {
mask = TCL_READABLE;
} else if (strcmp(argv[4], "writable") == 0) {
mask = TCL_WRITABLE;
} else if (strcmp(argv[4], "none") == 0) {
mask = 0;
} else {
Tcl_AppendResult(interp, "bad event name \"", argv[4],
"\": must be readable, writable, or none", (char *) NULL);
return TCL_ERROR;
}
esPtr->mask = mask;
Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask,
TclChannelEventScriptInvoker, (ClientData) esPtr);
return TCL_OK;
}
Tcl_AppendResult(interp, "bad command ", cmd, ", must be one of ",
"add, delete, list, set, or removeall", (char *) NULL);
return TCL_ERROR;
}
|
Changes to generic/tclTestObj.c.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclTestObj.c,v 1.6.10.1 2001/04/03 22:54:38 hobbs Exp $ */ #include "tclInt.h" /* * An array of Tcl_Obj pointers used in the commands that operate on or get * the values of Tcl object-valued variables. varPtr[i] is the i-th |
| ︙ | ︙ | |||
416 417 418 419 420 421 422 |
*/
Tcl_GetIndexFromObj((Tcl_Interp *) NULL, objv[1], tablePtr,
"token", 0, &index);
if (Tcl_GetIntFromObj(interp, objv[2], &index2) != TCL_OK) {
return TCL_ERROR;
}
| | > | 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
*/
Tcl_GetIndexFromObj((Tcl_Interp *) NULL, objv[1], tablePtr,
"token", 0, &index);
if (Tcl_GetIntFromObj(interp, objv[2], &index2) != TCL_OK) {
return TCL_ERROR;
}
objv[1]->internalRep.twoPtrValue.ptr2 =
(VOID *) (index2 * sizeof(char *));
result = Tcl_GetIndexFromObj((Tcl_Interp *) NULL, objv[1],
tablePtr, "token", 0, &index);
if (result == TCL_OK) {
Tcl_SetIntObj(Tcl_GetObjResult(interp), index);
}
return result;
}
|
| ︙ | ︙ |
Changes to generic/tclThreadTest.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclThreadTest.c -- * * This file implements the testthread command. Eventually this * should be tclThreadCmd.c * Some of this code is based on work done by Richard Hipp on behalf of * Conservation Through Innovation, Limited, with their permission. * * Copyright (c) 1998 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclThreadTest.c -- * * This file implements the testthread command. Eventually this * should be tclThreadCmd.c * Some of this code is based on work done by Richard Hipp on behalf of * Conservation Through Innovation, Limited, with their permission. * * Copyright (c) 1998 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclThreadTest.c,v 1.9.2.1 2001/04/04 21:22:18 hobbs Exp $ */ #include "tclInt.h" #ifdef TCL_THREADS /* * Each thread has an single instance of the following structure. There |
| ︙ | ︙ | |||
122 123 124 125 126 127 128 | EXTERN int TclThreadList _ANSI_ARGS_((Tcl_Interp *interp)); EXTERN int TclThreadSend _ANSI_ARGS_((Tcl_Interp *interp, Tcl_ThreadId id, char *script, int wait)); #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT | | | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | EXTERN int TclThreadList _ANSI_ARGS_((Tcl_Interp *interp)); EXTERN int TclThreadSend _ANSI_ARGS_((Tcl_Interp *interp, Tcl_ThreadId id, char *script, int wait)); #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT Tcl_ThreadCreateType NewTestThread _ANSI_ARGS_((ClientData clientData)); static void ListRemove _ANSI_ARGS_((ThreadSpecificData *tsdPtr)); static void ListUpdateInner _ANSI_ARGS_((ThreadSpecificData *tsdPtr)); static int ThreadEventProc _ANSI_ARGS_((Tcl_Event *evPtr, int mask)); static void ThreadErrorProc _ANSI_ARGS_((Tcl_Interp *interp)); static void ThreadFreeProc _ANSI_ARGS_((ClientData clientData)); static int ThreadDeleteEvent _ANSI_ARGS_((Tcl_Event *eventPtr, ClientData clientData)); |
| ︙ | ︙ | |||
351 352 353 354 355 356 357 |
Tcl_ThreadId id;
ctrl.script = (char *) script;
ctrl.condWait = NULL;
ctrl.flags = 0;
Tcl_MutexLock(&threadMutex);
| | | 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 |
Tcl_ThreadId id;
ctrl.script = (char *) script;
ctrl.condWait = NULL;
ctrl.flags = 0;
Tcl_MutexLock(&threadMutex);
if (Tcl_CreateThread(&id, NewTestThread, (ClientData) &ctrl,
TCL_THREAD_STACK_DEFAULT, TCL_THREAD_NOFLAGS) != TCL_OK) {
Tcl_MutexUnlock(&threadMutex);
Tcl_AppendResult(interp,"can't create a new thread",0);
ckfree((void*)ctrl.script);
return TCL_ERROR;
}
|
| ︙ | ︙ | |||
373 374 375 376 377 378 379 |
Tcl_SetObjResult(interp, Tcl_NewLongObj((long)id));
return TCL_OK;
}
/*
*------------------------------------------------------------------------
*
| | | 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 |
Tcl_SetObjResult(interp, Tcl_NewLongObj((long)id));
return TCL_OK;
}
/*
*------------------------------------------------------------------------
*
* NewTestThread --
*
* This routine is the "main()" for a new thread whose task is to
* execute a single TCL script. The argument to this function is
* a pointer to a structure that contains the text of the TCL script
* to be executed.
*
* Space to hold the script field of the ThreadControl structure passed
|
| ︙ | ︙ | |||
399 400 401 402 403 404 405 | * * Side effects: * A TCL script is executed in a new thread. * *------------------------------------------------------------------------ */ Tcl_ThreadCreateType | | | 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 |
*
* Side effects:
* A TCL script is executed in a new thread.
*
*------------------------------------------------------------------------
*/
Tcl_ThreadCreateType
NewTestThread(clientData)
ClientData clientData;
{
ThreadCtrl *ctrlPtr = (ThreadCtrl*)clientData;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
int result;
char *threadEvalScript;
|
| ︙ | ︙ |
Changes to generic/tclUtf.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclUtf.c -- * * Routines for manipulating UTF-8 strings. * * Copyright (c) 1997-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclUtf.c -- * * Routines for manipulating UTF-8 strings. * * Copyright (c) 1997-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclUtf.c,v 1.11.2.2 2001/09/13 19:33:19 hobbs Exp $ */ #include "tclInt.h" /* * Include the static character classification tables and macros. */ |
| ︙ | ︙ | |||
107 108 109 110 111 112 113 | * * Side effects: * None. * *--------------------------------------------------------------------------- */ | | | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
*
* Side effects:
* None.
*
*---------------------------------------------------------------------------
*/
INLINE static int
UtfCount(ch)
int ch; /* The Tcl_UniChar whose size is returned. */
{
if ((ch > 0) && (ch < UNICODE_SELF)) {
return 1;
}
if (ch <= 0x7FF) {
|
| ︙ | ︙ | |||
668 669 670 671 672 673 674 |
break;
}
byte = *((unsigned char *) look);
if (byte < 0x80) {
break;
}
if (byte >= 0xC0) {
| < < < | 668 669 670 671 672 673 674 675 676 677 678 679 680 681 |
break;
}
byte = *((unsigned char *) look);
if (byte < 0x80) {
break;
}
if (byte >= 0xC0) {
return (char *) look;
}
look--;
}
return (char *) str;
}
|
| ︙ | ︙ | |||
777 778 779 780 781 782 783 |
* a backslash sequence. */
int *readPtr; /* Fill in with number of characters read
* from src, unless NULL. */
char *dst; /* Filled with the bytes represented by the
* backslash sequence. */
{
register CONST char *p = src+1;
| > | | 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 |
* a backslash sequence. */
int *readPtr; /* Fill in with number of characters read
* from src, unless NULL. */
char *dst; /* Filled with the bytes represented by the
* backslash sequence. */
{
register CONST char *p = src+1;
Tcl_UniChar result;
int count, n;
char buf[TCL_UTF_MAX];
if (dst == NULL) {
dst = buf;
}
count = 2;
|
| ︙ | ︙ | |||
879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 |
if (!isdigit(UCHAR(*p)) || (UCHAR(*p) >= '8')) { /* INTL: digit */
break;
}
count = 4;
result = (unsigned char)((result << 3) + (*p - '0'));
break;
}
result = *p;
count = 2;
break;
}
if (readPtr != NULL) {
*readPtr = count;
}
| > > > > > > > > > > | | 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 |
if (!isdigit(UCHAR(*p)) || (UCHAR(*p) >= '8')) { /* INTL: digit */
break;
}
count = 4;
result = (unsigned char)((result << 3) + (*p - '0'));
break;
}
if (UCHAR(*p) < UNICODE_SELF) {
result = *p;
count = 2;
} else {
/*
* We have to convert here because the user has put a
* backslash in front of a multi-byte utf-8 character.
* While this means nothing special, we shouldn't break up
* a correct utf-8 character. [Bug #217987] test subst-3.2
*/
count = Tcl_UtfToUniChar(p, &result) + 1; /* +1 for '\' */
}
break;
}
if (readPtr != NULL) {
*readPtr = count;
}
return Tcl_UniCharToUtf((int) result, dst);
}
/*
*----------------------------------------------------------------------
*
* Tcl_UtfToUpper --
*
|
| ︙ | ︙ |
Changes to generic/tclUtil.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclUtil.c -- * * This file contains utility procedures that are used by many Tcl * commands. * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclUtil.c -- * * This file contains utility procedures that are used by many Tcl * commands. * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclUtil.c,v 1.17.2.1 2001/07/16 23:14:13 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * The following variable holds the full path name of the binary |
| ︙ | ︙ | |||
1067 1068 1069 1070 1071 1072 1073 |
if (objc == 0) {
*concatStr = '\0';
} else {
p = concatStr;
for (i = 0; i < objc; i++) {
objPtr = objv[i];
element = Tcl_GetStringFromObj(objPtr, &elemLength);
| | | | 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 |
if (objc == 0) {
*concatStr = '\0';
} else {
p = concatStr;
for (i = 0; i < objc; i++) {
objPtr = objv[i];
element = Tcl_GetStringFromObj(objPtr, &elemLength);
while ((elemLength > 0) && (UCHAR(*element) < 127)
&& (isspace(UCHAR(*element)))) { /* INTL: ISO space. */
element++;
elemLength--;
}
/*
* Trim trailing white space. But, be careful not to trim
* a space character if it is preceded by a backslash: in
* this case it could be significant.
*/
while ((elemLength > 0) && (UCHAR(element[elemLength-1]) < 127)
&& isspace(UCHAR(element[elemLength-1])) /* INTL: ISO space. */
&& ((elemLength < 2) || (element[elemLength-2] != '\\'))) {
elemLength--;
}
if (elemLength == 0) {
continue; /* nothing left of this element */
}
|
| ︙ | ︙ |
Changes to generic/tclVar.c.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | * Copyright (c) 1987-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | * Copyright (c) 1987-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclVar.c,v 1.16.2.2 2001/11/09 23:09:09 dgp Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * The strings below are used to indicate what went wrong when a |
| ︙ | ︙ | |||
2866 2867 2868 2869 2870 2871 2872 |
"anymore", "donesearch", "exists", "get", "names", "nextelement",
"set", "size", "startsearch", "unset", (char *) NULL
};
Interp *iPtr = (Interp *) interp;
Var *varPtr, *arrayPtr;
Tcl_HashEntry *hPtr;
| | < | 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 |
"anymore", "donesearch", "exists", "get", "names", "nextelement",
"set", "size", "startsearch", "unset", (char *) NULL
};
Interp *iPtr = (Interp *) interp;
Var *varPtr, *arrayPtr;
Tcl_HashEntry *hPtr;
Tcl_Obj *resultPtr;
int notArray;
char *varName, *msg;
int index, result;
if (objc < 3) {
Tcl_WrongNumArgs(interp, 1, objv, "option arrayName ?arg ...?");
return TCL_ERROR;
}
if (Tcl_GetIndexFromObj(interp, objv[1], arrayOptions, "option",
|
| ︙ | ︙ | |||
2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 |
TCL_TRACE_ARRAY));
if (msg != NULL) {
VarErrMsg(interp, varName, NULL, "trace array", msg);
return TCL_ERROR;
}
}
switch (index) {
case ARRAY_ANYMORE: {
ArraySearch *searchPtr;
char *searchId;
if (objc != 4) {
Tcl_WrongNumArgs(interp, 2, objv,
| > > > > > > > | 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 |
TCL_TRACE_ARRAY));
if (msg != NULL) {
VarErrMsg(interp, varName, NULL, "trace array", msg);
return TCL_ERROR;
}
}
/*
* We have to wait to get the resultPtr until here because
* CallTraces can affect the result.
*/
resultPtr = Tcl_GetObjResult(interp);
switch (index) {
case ARRAY_ANYMORE: {
ArraySearch *searchPtr;
char *searchId;
if (objc != 4) {
Tcl_WrongNumArgs(interp, 2, objv,
|
| ︙ | ︙ | |||
3775 3776 3777 3778 3779 3780 3781 |
for (tail = varName; *tail != '\0'; tail++) {
/* empty body */
}
while ((tail > varName) && ((*tail != ':') || (*(tail-1) != ':'))) {
tail--;
}
| | | 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 |
for (tail = varName; *tail != '\0'; tail++) {
/* empty body */
}
while ((tail > varName) && ((*tail != ':') || (*(tail-1) != ':'))) {
tail--;
}
if ((*tail == ':') && (tail > varName)) {
tail++;
}
/*
* Link to the variable "varName" in the global :: namespace.
*/
|
| ︙ | ︙ | |||
4765 4766 4767 4768 4769 4770 4771 |
Var *
TclVarTraceExists(interp, varName)
Tcl_Interp *interp; /* The interpreter */
char *varName; /* The variable name */
{
Var *varPtr;
Var *arrayPtr;
| < < | > | | | | > | | | | | | | < | | | | 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 |
Var *
TclVarTraceExists(interp, varName)
Tcl_Interp *interp; /* The interpreter */
char *varName; /* The variable name */
{
Var *varPtr;
Var *arrayPtr;
/*
* The choice of "create" flag values is delicate here, and
* matches the semantics of GetVar. Things are still not perfect,
* however, because if you do "info exists x" you get a varPtr
* and therefore trigger traces. However, if you do
* "info exists x(i)", then you only get a varPtr if x is already
* known to be an array. Otherwise you get NULL, and no trace
* is triggered. This matches Tcl 7.6 semantics.
*/
varPtr = TclLookupVar(interp, varName, (char *) NULL,
0, "access", /*createPart1*/ 0, /*createPart2*/ 1, &arrayPtr);
if (varPtr == NULL) {
return NULL;
}
if ((varPtr->tracePtr != NULL)
|| ((arrayPtr != NULL) && (arrayPtr->tracePtr != NULL))) {
CallTraces((Interp *)interp, arrayPtr, varPtr, varName,
(char *) NULL, TCL_TRACE_READS);
}
/*
* If the variable doesn't exist anymore and no-one's using
* it, then free up the relevant structures and hash table entries.
*/
if (TclIsVarUndefined(varPtr)) {
CleanupVar(varPtr, arrayPtr);
return NULL;
}
return varPtr;
}
|
Deleted library/dde/pkgIndex.tcl.
|
| < < < < < |
Changes to library/dde1.1/pkgIndex.tcl.
1 2 3 4 5 |
if {[info exists tcl_platform(debug)]} {
package ifneeded dde 1.1 [list load [file join $dir tcldde83d.dll] dde]
} else {
package ifneeded dde 1.1 [list load [file join $dir tcldde83.dll] dde]
}
| > | 1 2 3 4 5 6 |
if {![package vsatisfies [package provide Tcl] 8]} {return}
if {[info exists tcl_platform(debug)]} {
package ifneeded dde 1.1 [list load [file join $dir tcldde83d.dll] dde]
} else {
package ifneeded dde 1.1 [list load [file join $dir tcldde83.dll] dde]
}
|
Changes to library/encoding/cp1250.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1250, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1250, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC0081201A0083201E2026202020210088203001602039015A0164017D0179 009020182019201C201D202220132014009821220161203A015B0165017E017A 00A002C702D8014100A4010400A600A700A800A9015E00AB00AC00AD00AE017B 00B000B102DB014200B400B500B600B700B80105015F00BB013D02DD013E017C 015400C100C2010200C40139010600C7010C00C9011800CB011A00CD00CE010E 01100143014700D300D4015000D600D70158016E00DA017000DC00DD016200DF 015500E100E2010300E4013A010700E7010D00E9011900EB011B00ED00EE010F 01110144014800F300F4015100F600F70159016F00FA017100FC00FD016302D9 |
Changes to library/encoding/cp1251.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1251, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1251, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 04020403201A0453201E20262020202120AC203004092039040A040C040B040F 045220182019201C201D202220132014009821220459203A045A045C045B045F 00A0040E045E040800A4049000A600A7040100A9040400AB00AC00AD00AE0407 00B000B104060456049100B500B600B704512116045400BB0458040504550457 0410041104120413041404150416041704180419041A041B041C041D041E041F 0420042104220423042404250426042704280429042A042B042C042D042E042F 0430043104320433043404350436043704380439043A043B043C043D043E043F 0440044104420443044404450446044704480449044A044B044C044D044E044F |
Changes to library/encoding/cp1252.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1252, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1252, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC0081201A0192201E20262020202102C62030016020390152008D017D008F 009020182019201C201D20222013201402DC21220161203A0153009D017E0178 00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF 00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF 00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF 00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF 00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF 00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF |
Changes to library/encoding/cp1253.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1253, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1253, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC0081201A0192201E20262020202100882030008A2039008C008D008E008F 009020182019201C201D20222013201400982122009A203A009C009D009E009F 00A00385038600A300A400A500A600A700A800A9000000AB00AC00AD00AE2015 00B000B100B200B3038400B500B600B703880389038A00BB038C00BD038E038F 0390039103920393039403950396039703980399039A039B039C039D039E039F 03A003A1000003A303A403A503A603A703A803A903AA03AB03AC03AD03AE03AF 03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF 03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE0000 |
Changes to library/encoding/cp1254.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1254, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1254, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC0081201A0192201E20262020202102C62030016020390152008D008E008F 009020182019201C201D20222013201402DC21220161203A0153009D009E0178 00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF 00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF 00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF 011E00D100D200D300D400D500D600D700D800D900DA00DB00DC0130015E00DF 00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF 011F00F100F200F300F400F500F600F700F800F900FA00FB00FC0131015F00FF |
Changes to library/encoding/cp1255.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1255, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1255, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC0081201A0192201E20262020202102C62030008A2039008C008D008E008F 009020182019201C201D20222013201402DC2122009A203A009C009D009E009F 00A000A100A200A320AA00A500A600A700A800A900D700AB00AC00AD00AE00AF 00B000B100B200B300B400B500B600B700B800B900F700BB00BC00BD00BE00BF 05B005B105B205B305B405B505B605B705B805B9000005BB05BC05BD05BE05BF 05C005C105C205C305F005F105F205F305F40000000000000000000000000000 05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF 05E005E105E205E305E405E505E605E705E805E905EA00000000200E200F0000 |
Changes to library/encoding/cp1256.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1256, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1256, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC067E201A0192201E20262020202102C62030067920390152068606980688 06AF20182019201C201D20222013201406A921220691203A0153200C200D06BA 00A0060C00A200A300A400A500A600A700A800A906BE00AB00AC00AD00AE00AF 00B000B100B200B300B400B500B600B700B800B9061B00BB00BC00BD00BE061F 06C1062106220623062406250626062706280629062A062B062C062D062E062F 063006310632063306340635063600D7063706380639063A0640064106420643 00E0064400E2064506460647064800E700E800E900EA00EB0649064A00EE00EF 064B064C064D064E00F4064F065000F7065100F9065200FB00FC200E200F06D2 |
Changes to library/encoding/cp1257.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1257, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1257, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC0081201A0083201E20262020202100882030008A2039008C00A802C700B8 009020182019201C201D20222013201400982122009A203A009C00AF02DB009F 00A0000000A200A300A4000000A600A700D800A9015600AB00AC00AD00AE00C6 00B000B100B200B300B400B500B600B700F800B9015700BB00BC00BD00BE00E6 0104012E0100010600C400C501180112010C00C90179011601220136012A013B 01600143014500D3014C00D500D600D701720141015A016A00DC017B017D00DF 0105012F0101010700E400E501190113010D00E9017A011701230137012B013C 01610144014600F3014D00F500F600F701730142015B016B00FC017C017E02D9 |
Changes to library/encoding/cp1258.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp1258, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp1258, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC0081201A0192201E20262020202102C62030008A20390152008D008E008F 009020182019201C201D20222013201402DC2122009A203A0153009D009E0178 00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF 00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF 00C000C100C2010200C400C500C600C700C800C900CA00CB030000CD00CE00CF 011000D1030900D300D401A000D600D700D800D900DA00DB00DC01AF030300DF 00E000E100E2010300E400E500E600E700E800E900EA00EB030100ED00EE00EF 011100F1032300F300F401A100F600F700F800F900FA00FB00FC01B020AB00FF |
Changes to library/encoding/cp874.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp874, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp874, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC008100820083008420260086008700880089008A008B008C008D008E008F 009020182019201C201D20222013201400980099009A009B009C009D009E009F 00A00E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F 0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F 0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F 0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F 0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F 0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 |
Changes to library/encoding/cp936.enc.
1 2 3 4 5 6 7 8 9 10 11 12 | # Encoding file: cp936, multi-byte M 003F 0 127 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: cp936, multi-byte M 003F 0 127 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 20AC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 |
| ︙ | ︙ |
Changes to library/encoding/cp949.enc.
| ︙ | ︙ | |||
590 591 592 593 594 595 596 | C93DC93EC93FC940C941C942C943C944C945C946C94700000000000000000000 0000C948C949C94AC94BC94CC94DC94EC94FC952C953C955C956C957C959C95A C95BC95CC95DC95EC95FC962C964C965C966C967C968C969C96AC96BC96DC96E C96F21D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF 02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E 261C261E00B62020202121952197219921962198266D2669266A266C327F321C | | | 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 | C93DC93EC93FC940C941C942C943C944C945C946C94700000000000000000000 0000C948C949C94AC94BC94CC94DC94EC94FC952C953C955C956C957C959C95A C95BC95CC95DC95EC95FC962C964C965C966C967C968C969C96AC96BC96DC96E C96F21D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF 02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E 261C261E00B62020202121952197219921962198266D2669266A266C327F321C 211633C7212233C233D8212120AC00AE00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 A3 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000C971C972C973C975C976C977C978C979C97AC97BC97DC97EC97FC980C981 |
| ︙ | ︙ |
Changes to library/encoding/cp950.enc.
| ︙ | ︙ | |||
63 64 65 66 67 68 69 | 03C603C703C803C931053106310731083109310A310B310C310D310E310F0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00003110311131123113311431153116311731183119311A311B311C311D311E 311F312031213122312331243125312631273128312902D902C902CA02C702CB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 | | | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 03C603C703C803C931053106310731083109310A310B310C310D310E310F0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00003110311131123113311431153116311731183119311A311B311C311D311E 311F312031213122312331243125312631273128312902D902C902CA02C702CB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000020AC00000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 A4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 4E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201529B |
| ︙ | ︙ |
Added library/encoding/ebcdic.enc.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | S 006F 0 1 00 0000000100020003008500090086007F0087008D008E000B000C000D000E000F 0010001100120013008F000A0008009700180019009C009D001C001D001E001F 0080008100820083008400920017001B00880089008A008B008C000500060007 0090009100160093009400950096000400980099009A009B00140015009E001A 002000A000E200E400E000E100E300E500E700F10060002E003C0028002B007C 002600E900EA00EB00E800ED00EE00EF00EC00DF00210024002A0029003B009F 002D002F00C200C400C000C100C300C500C700D1005E002C0025005F003E003F 00F800C900CA00CB00C800CD00CE00CF00CC00A8003A002300400027003D0022 00D800610062006300640065006600670068006900AB00BB00F000FD00FE00B1 00B0006A006B006C006D006E006F00700071007200AA00BA00E600B800C600A4 00B500AF0073007400750076007700780079007A00A100BF00D000DD00DE00AE 00A200A300A500B700A900A700B600BC00BD00BE00AC005B005C005D00B400D7 00F900410042004300440045004600470048004900AD00F400F600F200F300F5 00A6004A004B004C004D004E004F00500051005200B900FB00FC00DB00FA00FF 00D900F70053005400550056005700580059005A00B200D400D600D200D300D5 003000310032003300340035003600370038003900B3007B00DC007D00DA007E |
Changes to library/encoding/iso2022-jp.enc.
1 2 3 4 5 6 7 |
# Encoding file: iso2022-jp, escape-driven
E
name iso2022-jp
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
| | | | 1 2 3 4 5 6 7 8 9 10 11 12 |
# Encoding file: iso2022-jp, escape-driven
E
name iso2022-jp
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
jis0208 \x1b$B
jis0208 \x1b$@
jis0212 \x1b$(D
gb2312 \x1b$A
ksc5601 \x1b$(C
|
Changes to library/encoding/iso2022.enc.
1 2 3 4 5 6 7 8 |
# Encoding file: iso2022, escape-driven
E
name iso2022
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
gb1988 \x1b(T
| | | < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Encoding file: iso2022, escape-driven
E
name iso2022
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
gb1988 \x1b(T
jis0208 \x1b$B
jis0208 \x1b$@
jis0212 \x1b$(D
gb2312 \x1b$A
ksc5601 \x1b$(C
jis0208 \x1b&@\x1b$B
|
Added library/encoding/iso8859-10.enc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: iso8859-10, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A0010401120122012A0128013600A7013B011001600166017D00AD016A014A 00B0010501130123012B0129013700B7013C011101610167017E2015016B014B 010000C100C200C300C400C500C6012E010C00C9011800CB011600CD00CE00CF 00D00145014C00D300D400D500D6016800D8017200DA00DB00DC00DD00DE00DF 010100E100E200E300E400E500E6012F010D00E9011900EB011700ED00EE00EF 00F00146014D00F300F400F500F6016900F8017300FA00FB00FC00FD00FE0138 |
Added library/encoding/iso8859-13.enc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: iso8859-13, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A0201D00A200A300A4201E00A600A700D800A9015600AB00AC00AD00AE00C6 00B000B100B200B3201C00B500B600B700F800B9015700BB00BC00BD00BE00E6 0104012E0100010600C400C501180112010C00C90179011601220136012A013B 01600143014500D3014C00D500D600D701720141015A016A00DC017B017D00DF 0105012F0101010700E400E501190113010D00E9017A011701230137012B013C 01610144014600F3014D00F500F600F701730142015B016B00FC017C017E2019 |
Added library/encoding/iso8859-14.enc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: iso8859-14, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A01E021E0300A3010A010B1E0A00A71E8000A91E821E0B1EF200AD00AE0178 1E1E1E1F012001211E401E4100B61E561E811E571E831E601EF31E841E851E61 00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF 017400D100D200D300D400D500D61E6A00D800D900DA00DB00DC00DD017600DF 00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF 017500F100F200F300F400F500F61E6B00F800F900FA00FB00FC00FD017700FF |
Added library/encoding/iso8859-15.enc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: iso8859-15, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A000A100A200A320AC00A5016000A7016100A900AA00AB00AC00AD00AE00AF 00B000B100B200B3017D00B500B600B7017E00B900BA00BB01520153017800BF 00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF 00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF 00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF 00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF |
Added library/encoding/iso8859-16.enc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: iso8859-16, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A001040105014120AC201E016000A7016100A9021800AB017900AD017A017B 00B000B1010C0142017D201D00B600B7017E010D021900BB015201530178017C 00C000C100C2010200C4010600C600C700C800C900CA00CB00CC00CD00CE00CF 0110014300D200D300D4015000D6015A017000D900DA00DB00DC0118021A00DF 00E000E100E2010300E4010700E600E700E800E900EA00EB00EC00ED00EE00EF 0111014400F200F300F4015100F6015B017100F900FA00FB00FC0119021B00FF |
Changes to library/encoding/iso8859-6.enc.
1 2 3 4 5 6 7 | # Encoding file: iso8859-6, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Encoding file: iso8859-6, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A000000000000000A40000000000000000000000000000060C00AD00000000 |
| ︙ | ︙ |
Changes to library/encoding/iso8859-7.enc.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A02018201900A30000000000A600A700A800A9000000AB00AC00AD00002015 00B000B100B200B303840385038600B703880389038A00BB038C00BD038E038F 0390039103920393039403950396039703980399039A039B039C039D039E039F 03A003A1000003A303A403A503A603A703A803A903AA03AB03AC03AD03AE03AF 03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF 03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE0000 |
Changes to library/encoding/iso8859-8.enc.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F | | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0080008100820083008400850086008700880089008A008B008C008D008E008F 0090009100920093009400950096009700980099009A009B009C009D009E009F 00A0000000A200A300A400A500A600A700A800A900D700AB00AC00AD00AE00AF 00B000B100B200B300B400B500B600B700B800B900F700BB00BC00BD00BE0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000002017 05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF 05E005E105E205E305E405E505E605E705E805E905EA00000000200E200F0000 |
Added library/encoding/koi8-u.enc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: koi8-u, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 25002502250C251025142518251C2524252C2534253C258025842588258C2590 259125922593232025A02219221A22482264226500A0232100B000B200B700F7 25502551255204510454255404560457255725582559255A255B0491255D255E 255F25602561040104032563040604072566256725682569256A0490256C00A9 044E0430043104460434043504440433044504380439043A043B043C043D043E 043F044F044004410442044304360432044C044B04370448044D04490447044A 042E0410041104260414041504240413042504180419041A041B041C041D041E 041F042F042004210422042304160412042C042B04170428042D04290427042A |
Changes to library/encoding/macCroatian.enc.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 202000B000A200A300A7202200B600DF00AE0160212200B400A82260017D00D8 | | | | 9 10 11 12 13 14 15 16 17 18 19 20 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 202000B000A200A300A7202200B600DF00AE0160212200B400A82260017D00D8 221E00B122642265220600B522022211220F0161222B00AA00BA03A9017E00F8 00BF00A100AC221A01922248010600AB010C202600A000C000C300D501520153 01102014201C201D2018201900F725CAF8FF00A9204420AC2039203A00C600BB 201300B7201A201E203000C2010700C1010D00C800CD00CE00CF00CC00D300D4 011100D200DA00DB00D9013102C602DC00AF03C000CB02DA00B800CA00E602C7 |
Changes to library/encoding/macCyrillic.enc.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0410041104120413041404150416041704180419041A041B041C041D041E041F 0420042104220423042404250426042704280429042A042B042C042D042E042F | | | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 0410041104120413041404150416041704180419041A041B041C041D041E041F 0420042104220423042404250426042704280429042A042B042C042D042E042F 202000B0049000A300A7202200B6040600AE00A9212204020452226004030453 221E00B122642265045600B504910408040404540407045704090459040A045A 0458040500AC221A01922248220600AB00BB202600A0040B045B040C045C0455 20132014201C201D2018201900F7201E040E045E040F045F211604010451044F 0430043104320433043404350436043704380439043A043B043C043D043E043F 0440044104420443044404450446044704480449044A044B044C044D044E20AC |
Changes to library/encoding/macGreek.enc.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400B900B200C900B300D600DC038500E000E200E4038400A800E700E900E8 00EA00EB00A3212200EE00EF202200BD203000F400F600A600AD00F900FB00FC | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 | 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400B900B200C900B300D600DC038500E000E200E4038400A800E700E900E8 00EA00EB00A3212200EE00EF202200BD203000F400F600A600AD00F900FB00FC 2020039303940398039B039E03A000DF00AE00A903A303AA00A7226000B000B7 039100B12264226500A503920395039603970399039A039C03A603AB03A803A9 03AC039D00AC039F03A1224803A400AB00BB202600A003A503A7038603880153 20132015201C201D2018201900F70389038A038C038E03AD03AE03AF03CC038F 03CD03B103B203C803B403B503C603B303B703B903BE03BA03BB03BC03BD03BF 03C003CE03C103C303C403B803C903C203C703C503B603CA03CB039003B0F8A0 |
Changes to library/encoding/macIceland.enc.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 00DD00B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 | | | | 9 10 11 12 13 14 15 16 17 18 19 20 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 00DD00B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 20132014201C201D2018201900F725CA00FF0178204420AC00D000F000DE00FE 00FD00B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 |
Changes to library/encoding/macRoman.enc.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 | | | | 9 10 11 12 13 14 15 16 17 18 19 20 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 20132014201C201D2018201900F725CA00FF0178204420AC2039203AFB01FB02 202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 |
Changes to library/encoding/macTurkish.enc.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 | | | 9 10 11 12 13 14 15 16 17 18 19 20 | 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E007F 00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC 202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 20132014201C201D2018201900F725CA00FF0178011E011F01300131015E015F 202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 F8FF00D200DA00DB00D9F8A002C602DC00AF02D802D902DA00B802DD02DB02C7 |
Added library/encoding/tis-620.enc.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Encoding file: tis-620, single-byte S 003F 0 1 00 0000000100020003000400050006000700080009000A000B000C000D000E000F 0010001100120013001400150016001700180019001A001B001C001D001E001F 0020002100220023002400250026002700280029002A002B002C002D002E002F 0030003100320033003400350036003700380039003A003B003C003D003E003F 0040004100420043004400450046004700480049004A004B004C004D004E004F 0050005100520053005400550056005700580059005A005B005C005D005E005F 0060006100620063006400650066006700680069006A006B006C006D006E006F 0070007100720073007400750076007700780079007A007B007C007D007E0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F 0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F 0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F 0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F 0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F 0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 |
Changes to library/history.tcl.
1 2 3 4 | # history.tcl -- # # Implementation of the history command. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # history.tcl -- # # Implementation of the history command. # # RCS: @(#) $Id: history.tcl,v 1.3.18.1 2000/08/07 21:31:47 hobbs Exp $ # # Copyright (c) 1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
| ︙ | ︙ | |||
301 302 303 304 305 306 307 |
#
# Results:
# The index into history, or an error if the index didn't match.
proc tcl::HistIndex {event} {
variable history
if {[catch {expr {~$event}}]} {
| > | | 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 |
#
# Results:
# The index into history, or an error if the index didn't match.
proc tcl::HistIndex {event} {
variable history
if {[catch {expr {~$event}}]} {
for {set i [expr {$history(nextid)-1}]} {[info exists history($i)]} \
{incr i -1} {
if {[string match $event* $history($i)]} {
return $i;
}
if {[string match $event $history($i)]} {
return $i;
}
}
|
| ︙ | ︙ |
Changes to library/http/http.tcl.
1 2 3 4 5 6 7 8 9 10 11 | # http.tcl -- # # Client-side HTTP for GET, POST, and HEAD commands. # These routines can be used in untrusted code that uses # the Safesock security policy. These procedures use a # callback interface to avoid using vwait, which is not # defined in the safe base. # # See the file "license.terms" for information on usage and # redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | > > > > | < > > | | < < | | | | | | | | < > > > > > | 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 |
# http.tcl --
#
# Client-side HTTP for GET, POST, and HEAD commands.
# These routines can be used in untrusted code that uses
# the Safesock security policy. These procedures use a
# callback interface to avoid using vwait, which is not
# defined in the safe base.
#
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: http.tcl,v 1.32.2.7 2002/02/05 17:09:50 dgp Exp $
# Rough version history:
# 1.0 Old http_get interface
# 2.0 http:: namespace and http::geturl
# 2.1 Added callbacks to handle arriving data, and timeouts
# 2.2 Added ability to fetch into a channel
# 2.3 Added SSL support, and ability to post from a channel
# This version also cleans up error cases and eliminates the
# "ioerror" status in favor of raising an error
# 2.4 Added -binary option to http::geturl and charset element
# to the state array.
package require Tcl 8.2
# keep this in sync with pkgIndex.tcl
package provide http 2.4.2
namespace eval http {
variable http
array set http {
-accept */*
-proxyhost {}
-proxyport {}
-proxyfilter http::ProxyRequired
}
set http(-useragent) "Tcl http client package [package provide http]"
proc init {} {
variable formMap
variable alphanumeric a-zA-Z0-9
for {set i 0} {$i <= 256} {incr i} {
set c [format %c $i]
if {![string match \[$alphanumeric\] $c]} {
set formMap($c) %[format %.2x $i]
}
}
# These are handled specially
array set formMap { " " + \n %0d%0a }
}
init
variable urlTypes
array set urlTypes {
http {80 ::socket}
}
variable encodings [string tolower [encoding names]]
# This can be changed, but iso8859-1 is the RFC standard.
variable defaultCharset "iso8859-1"
namespace export geturl config reset wait formatQuery register unregister
# Useful, but not exported: data size status code
}
# http::register --
#
|
| ︙ | ︙ | |||
187 188 189 190 191 192 193 |
set state(status) $why
catch {fileevent $state(sock) readable {}}
catch {fileevent $state(sock) writable {}}
Finish $token
if {[info exists state(error)]} {
set errorlist $state(error)
unset state
| | > > > > | | 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 |
set state(status) $why
catch {fileevent $state(sock) readable {}}
catch {fileevent $state(sock) writable {}}
Finish $token
if {[info exists state(error)]} {
set errorlist $state(error)
unset state
eval ::error $errorlist
}
}
# http::geturl --
#
# Establishes a connection to a remote url via http.
#
# Arguments:
# url The http URL to goget.
# args Option value pairs. Valid options include:
# -blocksize, -validate, -headers, -timeout
# Results:
# Returns a token for this connection.
# This token is the name of an array that the caller should
# unset to garbage collect the state.
proc http::geturl { url args } {
variable http
variable urlTypes
variable defaultCharset
# Initialize the state variable, an array. We'll return the
# name of this array as the token for the transaction.
if {![info exists http(uid)]} {
set http(uid) 0
}
set token [namespace current]::[incr http(uid)]
variable $token
upvar 0 $token state
reset $token
# Process command options.
array set state {
-binary false
-blocksize 8192
-queryblocksize 8192
-validate 0
-headers {}
-timeout 0
-type application/x-www-form-urlencoded
-queryprogress {}
state header
meta {}
coding {}
currentsize 0
totalsize 0
querylength 0
queryoffset 0
type text/html
body {}
status ""
http ""
}
set state(charset) $defaultCharset
set options {-binary -blocksize -channel -command -handler -headers \
-progress -query -queryblocksize -querychannel -queryprogress\
-validate -timeout -type}
set usage [join $options ", "]
regsub -all -- - $options {} options
set pat ^-([join $options |])$
foreach {flag value} $args {
if {[regexp $pat $flag]} {
|
| ︙ | ︙ | |||
276 277 278 279 280 281 282 |
}
# Validate URL, determine the server host and port, and check proxy case
if {![regexp -nocase {^(([^:]*)://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url \
x prefix proto host y port srvurl]} {
unset $token
| | | | 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 |
}
# Validate URL, determine the server host and port, and check proxy case
if {![regexp -nocase {^(([^:]*)://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url \
x prefix proto host y port srvurl]} {
unset $token
return -code error "Unsupported URL: $url"
}
if {[string length $proto] == 0} {
set proto http
set url ${proto}://$url
}
if {![info exists urlTypes($proto)]} {
unset $token
return -code error "Unsupported URL type \"$proto\""
}
set defport [lindex $urlTypes($proto) 0]
set defcmd [lindex $urlTypes($proto) 1]
if {[string length $port] == 0} {
set port $defport
}
|
| ︙ | ︙ | |||
341 342 343 344 345 346 347 |
set state(sock) $s
# Wait for the connection to complete
if {$state(-timeout) > 0} {
fileevent $s writable [list http::Connect $token]
http::wait $token
| < | > > > > > > > > > | < < < | 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 |
set state(sock) $s
# Wait for the connection to complete
if {$state(-timeout) > 0} {
fileevent $s writable [list http::Connect $token]
http::wait $token
if {[string equal $state(status) "error"]} {
# something went wrong while trying to establish the connection
# Clean up after events and such, but DON'T call the command
# callback (if available) because we're going to throw an
# exception from here instead.
set err [lindex $state(error) 0]
cleanup $token
return -code error $err
} elseif {![string equal $state(status) "connect"]} {
# Likely to be connection timeout
return $token
}
set state(status) ""
}
# Send data in cr-lf format, but accept any line terminators
|
| ︙ | ︙ | |||
384 385 386 387 388 389 390 |
fconfigure $state(-querychannel) -blocking 1 -translation binary
set contDone 0
}
if {[catch {
puts $s "$how $srvurl HTTP/1.0"
puts $s "Accept: $http(-accept)"
| > > > | > > > | 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 |
fconfigure $state(-querychannel) -blocking 1 -translation binary
set contDone 0
}
if {[catch {
puts $s "$how $srvurl HTTP/1.0"
puts $s "Accept: $http(-accept)"
if {$port == $defport} {
# Don't add port in this case, to handle broken servers.
# [Bug #504508]
puts $s "Host: $host"
} else {
puts $s "Host: $host:$port"
}
puts $s "User-Agent: $http(-useragent)"
foreach {key value} $state(-headers) {
regsub -all \[\n\r\] $value {} value
set key [string trim $key]
if {[string equal $key "Content-Length"]} {
set contDone 1
set state(querylength) $value
|
| ︙ | ︙ | |||
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 |
if {! [info exists state(-command)]} {
# geturl does EVERYTHING asynchronously, so if the user
# calls it synchronously, we just do a wait here.
wait $token
}
} err]} {
# The socket probably was never connected,
# or the connection dropped later.
# Clean up after events and such, but DON'T call the command callback
# (if available) because we're going to throw an exception from here
# instead.
| > > > > > | > > > | > | 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 |
if {! [info exists state(-command)]} {
# geturl does EVERYTHING asynchronously, so if the user
# calls it synchronously, we just do a wait here.
wait $token
if {[string equal $state(status) "error"]} {
# Something went wrong, so throw the exception, and the
# enclosing catch will do cleanup.
return -code error [lindex $state(error) 0]
}
}
} err]} {
# The socket probably was never connected,
# or the connection dropped later.
# Clean up after events and such, but DON'T call the command callback
# (if available) because we're going to throw an exception from here
# instead.
# if state(status) is error, it means someone's already called Finish
# to do the above-described clean up.
if {[string equal $state(status) "error"]} {
Finish $token $err 1
}
cleanup $token
return -code error $err
}
return $token
}
|
| ︙ | ︙ | |||
497 498 499 500 501 502 503 504 505 506 507 508 509 510 |
}
}
proc http::size {token} {
variable $token
upvar 0 $token state
return $state(currentsize)
}
# http::cleanup
#
# Garbage collect the state associated with a transaction
#
# Arguments
# token The token returned from http::geturl
| > > > > > > > > > | 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 |
}
}
proc http::size {token} {
variable $token
upvar 0 $token state
return $state(currentsize)
}
proc http::error {token} {
variable $token
upvar 0 $token state
if {[info exists state(error)]} {
return $state(error)
}
return ""
}
# http::cleanup
#
# Garbage collect the state associated with a transaction
#
# Arguments
# token The token returned from http::geturl
|
| ︙ | ︙ | |||
527 528 529 530 531 532 533 | # Arguments # token The token returned from http::geturl # # Side Effects # Sets the status of the connection, which unblocks # the waiting geturl call | | | < < | < < | | > > | 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 |
# Arguments
# token The token returned from http::geturl
#
# Side Effects
# Sets the status of the connection, which unblocks
# the waiting geturl call
proc http::Connect {token} {
variable $token
upvar 0 $token state
global errorInfo errorCode
if {[eof $state(sock)] ||
[string length [fconfigure $state(sock) -error]]} {
Finish $token "connect failed [fconfigure $state(sock) -error]" 1
} else {
set state(status) connect
fileevent $state(sock) writable {}
}
return
}
# http::Write
#
# Write POST query data to the socket
#
# Arguments
# token The token for the connection
|
| ︙ | ︙ | |||
620 621 622 623 624 625 626 | # # Arguments # token The token returned from http::geturl # # Side Effects # Read the socket and handle callbacks. | | > | > > > > > > > > > > | > | > > > > > | 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 |
#
# Arguments
# token The token returned from http::geturl
#
# Side Effects
# Read the socket and handle callbacks.
proc http::Event {token} {
variable $token
upvar 0 $token state
set s $state(sock)
if {[eof $s]} {
Eof $token
return
}
if {[string equal $state(state) "header"]} {
if {[catch {gets $s line} n]} {
Finish $token $n
} elseif {$n == 0} {
variable encodings
set state(state) body
if {$state(-binary) || ![regexp -nocase ^text $state(type)] || \
[regexp gzip|compress $state(coding)]} {
# Turn off conversions for non-text data
fconfigure $s -translation binary
if {[info exists state(-channel)]} {
fconfigure $state(-channel) -translation binary
}
} else {
# If we are getting text, set the incoming channel's
# encoding correctly. iso8859-1 is the RFC default, but
# this could be any IANA charset. However, we only know
# how to convert what we have encodings for.
set idx [lsearch -exact $encodings \
[string tolower $state(charset)]]
if {$idx >= 0} {
fconfigure $s -encoding [lindex $encodings $idx]
}
}
if {[info exists state(-channel)] && \
![info exists state(-handler)]} {
# Initiate a sequence of background fcopies
fileevent $s readable {}
CopyStart $s $token
}
} elseif {$n > 0} {
if {[regexp -nocase {^content-type:(.+)$} $line x type]} {
set state(type) [string trim $type]
# grab the optional charset information
regexp -nocase {charset\s*=\s*(\S+)} $type x state(charset)
}
if {[regexp -nocase {^content-length:(.+)$} $line x length]} {
set state(totalsize) [string trim $length]
}
if {[regexp -nocase {^content-encoding:(.+)$} $line x coding]} {
set state(coding) [string trim $coding]
}
if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} {
lappend state(meta) $key [string trim $value]
} elseif {[regexp ^HTTP $line]} {
set state(http) $line
}
}
|
| ︙ | ︙ | |||
678 679 680 681 682 683 684 |
if {$n >= 0} {
incr state(currentsize) $n
}
} err]} {
Finish $token $err
} else {
if {[info exists state(-progress)]} {
| > | | | 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 |
if {$n >= 0} {
incr state(currentsize) $n
}
} err]} {
Finish $token $err
} else {
if {[info exists state(-progress)]} {
eval $state(-progress) \
{$token $state(totalsize) $state(currentsize)}
}
}
}
}
# http::CopyStart
#
# Error handling wrapper around fcopy
#
# Arguments
# s The socket to copy from
# token The token returned from http::geturl
#
# Side Effects
# This closes the connection upon error
proc http::CopyStart {s token} {
variable $token
upvar 0 $token state
if {[catch {
fcopy $s $state(-channel) -size $state(-blocksize) -command \
[list http::CopyDone $token]
} err]} {
Finish $token $err
|
| ︙ | ︙ | |||
717 718 719 720 721 722 723 | # Arguments # token The token returned from http::geturl # count The amount transfered # # Side Effects # Invokes callbacks | | | 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 |
# Arguments
# token The token returned from http::geturl
# count The amount transfered
#
# Side Effects
# Invokes callbacks
proc http::CopyDone {token count {error {}}} {
variable $token
upvar 0 $token state
set s $state(sock)
incr state(currentsize) $count
if {[info exists state(-progress)]} {
eval $state(-progress) {$token $state(totalsize) $state(currentsize)}
}
|
| ︙ | ︙ | |||
745 746 747 748 749 750 751 | # # Arguments # token The token returned from http::geturl # # Side Effects # Clean up the socket | | | 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 |
#
# Arguments
# token The token returned from http::geturl
#
# Side Effects
# Clean up the socket
proc http::Eof {token} {
variable $token
upvar 0 $token state
if {[string equal $state(state) "header"]} {
# Premature eof
set state(status) eof
} else {
set state(status) ok
|
| ︙ | ︙ | |||
776 777 778 779 780 781 782 |
variable $token
upvar 0 $token state
if {![info exists state(status)] || [string length $state(status)] == 0} {
# We must wait on the original variable name, not the upvar alias
vwait $token\(status)
}
| < < < < | | 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 |
variable $token
upvar 0 $token state
if {![info exists state(status)] || [string length $state(status)] == 0} {
# We must wait on the original variable name, not the upvar alias
vwait $token\(status)
}
return $state(status)
}
# http::formatQuery --
#
# See documentaion for details.
# Call http::formatQuery with an even number of arguments, where
|
| ︙ | ︙ | |||
802 803 804 805 806 807 808 |
# TODO
proc http::formatQuery {args} {
set result ""
set sep ""
foreach i $args {
append result $sep [mapReply $i]
| | | | | > < < < | | | > < < | 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 |
# TODO
proc http::formatQuery {args} {
set result ""
set sep ""
foreach i $args {
append result $sep [mapReply $i]
if {[string equal $sep "="]} {
set sep &
} else {
set sep =
}
}
return $result
}
# http::mapReply --
#
# Do x-www-urlencoded character mapping
#
# Arguments:
# string The string the needs to be encoded
#
# Results:
# The encoded string
proc http::mapReply {string} {
variable formMap
variable alphanumeric
# The spec says: "non-alphanumeric characters are replaced by '%HH'"
# 1 leave alphanumerics characters alone
# 2 Convert every other character to an array lookup
# 3 Escape constructs that are "special" to the tcl parser
# 4 "subst" the result, doing all the array substitutions
regsub -all \[^$alphanumeric\] $string {$formMap(&)} string
regsub -all {[][{})\\]\)} $string {\\&} string
return [subst -nocommand $string]
}
# http::ProxyRequired --
# Default proxy filter.
#
# Arguments:
# host The destination host
#
# Results:
# The current proxy settings
proc http::ProxyRequired {host} {
variable http
if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} {
if {![info exists http(-proxyport)] || \
![string length $http(-proxyport)]} {
set http(-proxyport) 8080
}
return [list $http(-proxyhost) $http(-proxyport)]
}
}
|
Changes to library/http/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | > | | 1 2 3 4 5 6 7 8 9 10 11 12 |
# Tcl package index file, version 1.1
# This file is generated by the "pkg_mkIndex" command
# and sourced either when an application starts up or
# by a "package unknown" script. It invokes the
# "package ifneeded" command to set up package-related
# information so that packages will be loaded automatically
# in response to "package require" commands. When this
# script is sourced, the variable $dir must contain the
# full path name of this file's directory.
if {![package vsatisfies [package provide Tcl] 8.2]} {return}
package ifneeded http 2.4.2 [list tclPkgSetup $dir http 2.4.2 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister}}}]
|
Deleted library/http2.3/http.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted library/http2.3/pkgIndex.tcl.
|
| < < < < < < < < < < < |
Changes to library/init.tcl.
1 2 3 4 5 | # init.tcl -- # # Default system startup file for Tcl-based applications. Defines # "unknown" procedure and auto-load facilities. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # init.tcl -- # # Default system startup file for Tcl-based applications. Defines # "unknown" procedure and auto-load facilities. # # RCS: @(#) $Id: init.tcl,v 1.39.2.4 2001/12/29 00:54:26 hobbs Exp $ # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
| ︙ | ︙ | |||
161 162 163 164 165 166 167 |
# If the command word has the form "namespace inscope ns cmd"
# then concatenate its arguments onto the end and evaluate it.
set cmd [lindex $args 0]
if {[regexp "^namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} {
set arglist [lrange $args 1 end]
| | | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# If the command word has the form "namespace inscope ns cmd"
# then concatenate its arguments onto the end and evaluate it.
set cmd [lindex $args 0]
if {[regexp "^namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} {
set arglist [lrange $args 1 end]
set ret [catch {uplevel 1 ::$cmd $arglist} result]
if {$ret == 0} {
return $result
} else {
return -code $ret -errorcode $errorCode $result
}
}
|
| ︙ | ︙ | |||
184 185 186 187 188 189 190 |
#
# Make sure we're not trying to load the same proc twice.
#
if {[info exists unknown_pending($name)]} {
return -code error "self-referential recursion in \"unknown\" for command \"$name\"";
}
set unknown_pending($name) pending;
| | | 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
#
# Make sure we're not trying to load the same proc twice.
#
if {[info exists unknown_pending($name)]} {
return -code error "self-referential recursion in \"unknown\" for command \"$name\"";
}
set unknown_pending($name) pending;
set ret [catch {auto_load $name [uplevel 1 {::namespace current}]} msg]
unset unknown_pending($name);
if {$ret != 0} {
append errorInfo "\n (autoloading \"$name\")"
return -code $ret -errorcode $errorCode -errorinfo $errorInfo $msg
}
if {![array size unknown_pending]} {
unset unknown_pending
|
| ︙ | ︙ | |||
224 225 226 227 228 229 230 |
if {[string compare {} $new]} {
set errorCode $savedErrorCode
set errorInfo $savedErrorInfo
set redir ""
if {[string equal [info commands console] ""]} {
set redir ">&@stdout <@stdin"
}
| | | | | 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 |
if {[string compare {} $new]} {
set errorCode $savedErrorCode
set errorInfo $savedErrorInfo
set redir ""
if {[string equal [info commands console] ""]} {
set redir ">&@stdout <@stdin"
}
return [uplevel 1 exec $redir $new [lrange $args 1 end]]
}
}
set errorCode $savedErrorCode
set errorInfo $savedErrorInfo
if {[string equal $name "!!"]} {
set newcmd [history event]
} elseif {[regexp {^!(.+)$} $name dummy event]} {
set newcmd [history event $event]
} elseif {[regexp {^\^([^^]*)\^([^^]*)\^?$} $name dummy old new]} {
set newcmd [history event -1]
catch {regsub -all -- $old $newcmd $new newcmd}
}
if {[info exists newcmd]} {
tclLog $newcmd
history change $newcmd 0
return [uplevel 1 $newcmd]
}
set ret [catch {set cmds [info commands $name*]} msg]
if {[string equal $name "::"]} {
set name ""
}
if {$ret != 0} {
return -code $ret -errorcode $errorCode \
"error in unknown while checking if \"$name\" is a unique command abbreviation: $msg"
}
if {[llength $cmds] == 1} {
return [uplevel 1 [lreplace $args 0 0 $cmds]]
}
if {[llength $cmds]} {
if {[string equal $name ""]} {
return -code error "empty command name \"\""
} else {
return -code error \
"ambiguous command name \"$name\": [lsort $cmds]"
|
| ︙ | ︙ | |||
282 283 284 285 286 287 288 |
# a canonical namespace as returned [namespace current]
# for instance. If not given, namespace current is used.
proc auto_load {cmd {namespace {}}} {
global auto_index auto_oldpath auto_path
if {[string length $namespace] == 0} {
| | | 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 |
# a canonical namespace as returned [namespace current]
# for instance. If not given, namespace current is used.
proc auto_load {cmd {namespace {}}} {
global auto_index auto_oldpath auto_path
if {[string length $namespace] == 0} {
set namespace [uplevel 1 [list ::namespace current]]
}
set nameList [auto_qualify $cmd $namespace]
# workaround non canonical auto_index entries that might be around
# from older auto_mkindex versions
lappend nameList $cmd
foreach name $nameList {
if {[info exists auto_index($name)]} {
|
| ︙ | ︙ | |||
451 452 453 454 455 456 457 |
# Arguments -
# pattern The pattern of commands being imported (like "foo::*")
# a canonical namespace as returned by [namespace current]
proc auto_import {pattern} {
global auto_index
| > > > > > > | | < | > > | 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 |
# Arguments -
# pattern The pattern of commands being imported (like "foo::*")
# a canonical namespace as returned by [namespace current]
proc auto_import {pattern} {
global auto_index
# If no namespace is specified, this will be an error case
if {![string match *::* $pattern]} {
return
}
set ns [uplevel 1 [list ::namespace current]]
set patternList [auto_qualify $pattern $ns]
auto_load_index
foreach pattern $patternList {
foreach name [array names auto_index $pattern] {
if {[string equal "" [info commands $name]]
&& [string equal [namespace qualifiers $pattern] \
[namespace qualifiers $name]]} {
uplevel #0 $auto_index($name)
}
}
}
}
# auto_execok --
|
| ︙ | ︙ | |||
499 500 501 502 503 504 505 |
set shellBuiltins [list cls copy date del erase dir echo mkdir \
md rename ren rmdir rd time type ver vol]
if {[string equal $tcl_platform(os) "Windows NT"]} {
# NT includes the 'start' built-in
lappend shellBuiltins "start"
}
| > > > > > | > > > > > > > > | | | 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 |
set shellBuiltins [list cls copy date del erase dir echo mkdir \
md rename ren rmdir rd time type ver vol]
if {[string equal $tcl_platform(os) "Windows NT"]} {
# NT includes the 'start' built-in
lappend shellBuiltins "start"
}
if {[info exists env(PATHEXT)]} {
# Add an initial ; to have the {} extension check first.
set execExtensions [split ";$env(PATHEXT)" ";"]
} else {
set execExtensions [list {} .com .exe .bat]
}
if {[lsearch -exact $shellBuiltins $name] != -1} {
# When this is command.com for some reason on Win2K, Tcl won't
# exec it unless the case is right, which this corrects. COMSPEC
# may not point to a real file, so do the check.
set cmd $env(COMSPEC)
if {[file exists $cmd]} {
set cmd [file attributes $cmd -shortname]
}
return [set auto_execs($name) [list $cmd /c $name]]
}
if {[llength [file split $name]] != 1} {
foreach ext $execExtensions {
set file ${name}${ext}
if {[file exists $file] && ![file isdirectory $file]} {
return [set auto_execs($name) [list $file]]
}
}
return ""
}
|
| ︙ | ︙ | |||
535 536 537 538 539 540 541 |
}
}
foreach dir [split $path {;}] {
# Skip already checked directories
if {[info exists checked($dir)] || [string equal {} $dir]} { continue }
set checked($dir) {}
| | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 |
}
}
foreach dir [split $path {;}] {
# Skip already checked directories
if {[info exists checked($dir)] || [string equal {} $dir]} { continue }
set checked($dir) {}
foreach ext $execExtensions {
set file [file join $dir ${name}${ext}]
if {[file exists $file] && ![file isdirectory $file]} {
return [set auto_execs($name) [list $file]]
}
}
}
return ""
|
| ︙ | ︙ |
Changes to library/msgcat/msgcat.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 | # msgcat.tcl -- # # This file defines various procedures which implement a # message catalog facility for Tcl programs. It should be # loaded with the command "package require msgcat". # # Copyright (c) 1998 by Scriptics Corporation. # Copyright (c) 1998 by Mark Harrison. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# msgcat.tcl --
#
# This file defines various procedures which implement a
# message catalog facility for Tcl programs. It should be
# loaded with the command "package require msgcat".
#
# Copyright (c) 1998 by Scriptics Corporation.
# Copyright (c) 1998 by Mark Harrison.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: msgcat.tcl,v 1.4.2.4 2001/08/09 01:00:56 dgp Exp $
package require Tcl 8.2
package provide msgcat 1.1.1
namespace eval msgcat {
namespace export mc mcset mclocale mcpreferences mcunknown
# Records the current locale as passed to mclocale
variable locale ""
|
| ︙ | ︙ | |||
45 46 47 48 49 50 51 |
# Returns the translatd string. Propagates errors thrown by the
# format command.
proc msgcat::mc {src args} {
# Check for the src in each namespace starting from the local and
# ending in the global.
| | | | | 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 |
# Returns the translatd string. Propagates errors thrown by the
# format command.
proc msgcat::mc {src args} {
# Check for the src in each namespace starting from the local and
# ending in the global.
set ns [uplevel 1 [list ::namespace current]]
while {$ns != ""} {
foreach loc $::msgcat::loclist {
if {[info exists ::msgcat::msgs($loc,$ns,$src)]} {
if {[llength $args] == 0} {
return $::msgcat::msgs($loc,$ns,$src)
} else {
return [eval \
[list format $::msgcat::msgs($loc,$ns,$src)] \
$args]
}
}
}
set ns [namespace parent $ns]
}
# we have not found the translation
return [uplevel 1 [list [::namespace origin mcunknown] \
$::msgcat::locale $src] $args]
}
# msgcat::mclocale --
#
# Query or set the current locale.
#
# Arguments:
|
| ︙ | ︙ | |||
130 131 132 133 134 135 136 |
proc msgcat::mcload {langdir} {
set x 0
foreach p [::msgcat::mcpreferences] {
set langfile [file join $langdir $p.msg]
if {[file exists $langfile]} {
incr x
| | > > > | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
proc msgcat::mcload {langdir} {
set x 0
foreach p [::msgcat::mcpreferences] {
set langfile [file join $langdir $p.msg]
if {[file exists $langfile]} {
incr x
set fid [open $langfile "r"]
fconfigure $fid -encoding utf-8
uplevel 1 [read $fid]
close $fid
}
}
return $x
}
# msgcat::mcset --
#
|
| ︙ | ︙ | |||
154 155 156 157 158 159 160 |
# Returns the new locale.
proc msgcat::mcset {locale src {dest ""}} {
if {[string equal $dest ""]} {
set dest $src
}
| | > > > | > > > | > | 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 |
# Returns the new locale.
proc msgcat::mcset {locale src {dest ""}} {
if {[string equal $dest ""]} {
set dest $src
}
set ns [uplevel 1 [list ::namespace current]]
set ::msgcat::msgs([string tolower $locale],$ns,$src) $dest
return $dest
}
# msgcat::mcunknown --
#
# This routine is called by msgcat::mc if a translation cannot
# be found for a string. This routine is intended to be replaced
# by an application specific routine for error reporting
# purposes. The default behavior is to return the source string.
# If additional args are specified, the format command will be used
# to work them into the traslated string.
#
# Arguments:
# locale The current locale.
# src The string to be translated.
# args Args to pass to the format command
#
# Results:
# Returns the translated value.
proc msgcat::mcunknown {locale src args} {
if {[llength $args]} {
return [eval [list format $src] $args]
} else {
return $src
}
}
# Initialize the default locale
namespace eval msgcat {
# set default locale, try to get from environment
if {[info exists ::env(LANG)]} {
mclocale $::env(LANG)
} else {
mclocale "C"
}
}
|
Changes to library/msgcat/pkgIndex.tcl.
|
| > | | 1 2 |
if {![package vsatisfies [package provide Tcl] 8.2]} {return}
package ifneeded msgcat 1.1.1 [list source [file join $dir msgcat.tcl]]
|
Deleted library/msgcat1.0/msgcat.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted library/msgcat1.0/pkgIndex.tcl.
|
| < |
Changes to library/opt/optparse.tcl.
1 2 3 4 5 6 7 8 9 10 | # optparse.tcl -- # # (private) Option parsing package # Primarily used internally by the safe:: code. # # WARNING: This code will go away in a future release # of Tcl. It is NOT supported and you should not rely # on it. If your code does rely on this package you # may directly incorporate this code into your application. # | | > | | | 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 |
# optparse.tcl --
#
# (private) Option parsing package
# Primarily used internally by the safe:: code.
#
# WARNING: This code will go away in a future release
# of Tcl. It is NOT supported and you should not rely
# on it. If your code does rely on this package you
# may directly incorporate this code into your application.
#
# RCS: @(#) $Id: optparse.tcl,v 1.2.12.3 2001/08/09 01:00:56 dgp Exp $
package require Tcl 8
package provide opt 0.4.3
namespace eval ::tcl {
# Exported APIs
namespace export OptKeyRegister OptKeyDelete OptKeyError OptKeyParse \
OptProc OptProcArgGiven OptParse \
Lempty Lget \
Lassign Lvarpop Lvarpop1 Lvarset Lvarincr \
SetMax SetMin
################# Example of use / 'user documentation' ###################
proc OptCreateTestProc {} {
|
| ︙ | ︙ | |||
105 106 107 108 109 110 111 |
# programCounter :== {"P" integer+ }
#
# singleStep :== { instruction parameters* }
#
# instruction :== single element list
#
# (the difference between singleStep and program is that \
| | | | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# programCounter :== {"P" integer+ }
#
# singleStep :== { instruction parameters* }
#
# instruction :== single element list
#
# (the difference between singleStep and program is that \
# llength [lindex $program 0] >= 2
# while
# llength [lindex $singleStep 0] == 1
# )
#
# And for this application:
#
# singleStep :== { instruction varname {hasBeenSet currentValue} type
# typeArgs help }
# instruction :== "flags" | "value"
|
| ︙ | ︙ | |||
170 171 172 173 174 175 176 |
foreach item $desc {
if {$state == "args"} {
# more items after 'args'...
return -code error "'args' special argument must be the last one";
}
set res [OptNormalizeOne $item];
| | | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
foreach item $desc {
if {$state == "args"} {
# more items after 'args'...
return -code error "'args' special argument must be the last one";
}
set res [OptNormalizeOne $item];
set state [lindex $res 0];
if {$inflags} {
if {$state == "flags"} {
# add to 'subprogram'
lappend flagsprg $res;
} else {
# put in the flags
# structure for flag programs items is a list of
|
| ︙ | ︙ | |||
235 236 237 238 239 240 241 |
# Parse entry point for ppl who don't want to register with a key,
# for instance because the description changes dynamically.
# (otherwise one should really use OptKeyRegister once + OptKeyParse
# as it is way faster or simply OptProc which does it all)
# Assign a temporary key, call OptKeyParse and then free the storage
proc ::tcl::OptParse {desc arglist} {
set tempkey [OptKeyRegister $desc];
| | | | | | | | | | 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 |
# Parse entry point for ppl who don't want to register with a key,
# for instance because the description changes dynamically.
# (otherwise one should really use OptKeyRegister once + OptKeyParse
# as it is way faster or simply OptProc which does it all)
# Assign a temporary key, call OptKeyParse and then free the storage
proc ::tcl::OptParse {desc arglist} {
set tempkey [OptKeyRegister $desc];
set ret [catch {uplevel 1 [list ::tcl::OptKeyParse $tempkey $arglist]} res];
OptKeyDelete $tempkey;
return -code $ret $res;
}
# Helper function, replacement for proc that both
# register the description under a key which is the name of the proc
# (and thus unique to that code)
# and add a first line to the code to call the OptKeyParse proc
# Stores the list of variables that have been actually given by the user
# (the other will be sets to their default value)
# into local variable named "Args".
proc ::tcl::OptProc {name desc body} {
set namespace [uplevel 1 [list ::namespace current]];
if { ([string match "::*" $name])
|| ([string compare $namespace "::"]==0)} {
# absolute name or global namespace, name is the key
set key $name;
} else {
# we are relative to some non top level namespace:
set key "${namespace}::${name}";
}
OptKeyRegister $desc $key;
uplevel 1 [list ::proc $name args "set Args \[::tcl::OptKeyParse $key \$args\]\n$body"];
return $key;
}
# Check that a argument has been given
# assumes that "OptProc" has been used as it will check in "Args" list
proc ::tcl::OptProcArgGiven {argname} {
upvar Args alist;
expr {[lsearch $alist $argname] >=0}
}
#######
# Programs/Descriptions manipulation
# Return the instruction word/list of a given step/(sub)program
proc OptInstr {lst} {
lindex $lst 0;
}
# Is a (sub) program or a plain instruction ?
proc OptIsPrg {lst} {
expr {[llength [OptInstr $lst]]>=2}
}
# Is this instruction a program counter or a real instr
proc OptIsCounter {item} {
expr {[lindex $item 0]=="P"}
}
# Current program counter (2nd word of first word)
proc OptGetPrgCounter {lst} {
Lget $lst {0 1}
}
# Current program counter (2nd word of first word)
proc OptSetPrgCounter {lstName newValue} {
upvar $lstName lst;
set lst [lreplace $lst 0 0 [concat "P" $newValue]];
}
# returns a list of currently selected items.
proc OptSelection {lst} {
set res {};
foreach idx [lrange [lindex $lst 0] 1 end] {
lappend res [Lget $lst $idx];
}
return $res;
}
# Advance to next description
proc OptNextDesc {descName} {
uplevel 1 [list Lvarincr $descName {0 1}];
}
# Get the current description, eventually descend
proc OptCurDesc {descriptions} {
lindex $descriptions [OptGetPrgCounter $descriptions];
}
# get the current description, eventually descend
|
| ︙ | ︙ | |||
344 345 346 347 348 349 350 |
lappend adress 2
Lvarset descriptions $adress [list 1 $value];
# ^hasBeenSet flag
}
# empty state means done/paste the end of the program
proc OptState {item} {
| | | | | 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 |
lappend adress 2
Lvarset descriptions $adress [list 1 $value];
# ^hasBeenSet flag
}
# empty state means done/paste the end of the program
proc OptState {item} {
lindex $item 0
}
# current state
proc OptCurState {descriptions} {
OptState [OptCurDesc $descriptions];
}
#######
# Arguments manipulation
# Returns the argument that has to be processed now
proc OptCurrentArg {lst} {
lindex $lst 0;
}
# Advance to next argument
proc OptNextArg {argsName} {
uplevel 1 [list Lvarpop1 $argsName];
}
#######
|
| ︙ | ︙ | |||
958 959 960 961 962 963 964 |
}
# Gets the value of one leaf of a lists tree
proc ::tcl::Lget {list indexLst} {
if {[llength $indexLst] <= 1} {
return [lindex $list $indexLst];
}
| | | | | 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 |
}
# Gets the value of one leaf of a lists tree
proc ::tcl::Lget {list indexLst} {
if {[llength $indexLst] <= 1} {
return [lindex $list $indexLst];
}
Lget [lindex $list [lindex $indexLst 0]] [lrange $indexLst 1 end];
}
# Sets the value of one leaf of a lists tree
# (we use the version that does not create the elements because
# it would be even slower... needs to be written in C !)
# (nb: there is a non trivial recursive problem with indexes 0,
# which appear because there is no difference between a list
# of 1 element and 1 element alone : [list "a"] == "a" while
# it should be {a} and [listp a] should be 0 while [listp {a b}] would be 1
# and [listp "a b"] maybe 0. listp does not exist either...)
proc ::tcl::Lvarset {listName indexLst newValue} {
upvar $listName list;
if {[llength $indexLst] <= 1} {
Lvarset1nc list $indexLst $newValue;
} else {
set idx [lindex $indexLst 0];
set targetList [lindex $list $idx];
# reduce refcount on targetList (not really usefull now,
# could be with optimizing compiler)
# Lvarset1 list $idx {};
# recursively replace in targetList
Lvarset targetList [lrange $indexLst 1 end] $newValue;
# put updated sub list back in the tree
Lvarset1nc list $idx $targetList;
}
}
# Set one cell to a value, eventually create all the needed elements
# (on level-1 of lists)
variable emptyList {}
|
| ︙ | ︙ | |||
1013 1014 1015 1016 1017 1018 1019 |
# Increments the value of one leaf of a lists tree
# (which must exists)
proc ::tcl::Lvarincr {listName indexLst {howMuch 1}} {
upvar $listName list;
if {[llength $indexLst] <= 1} {
Lvarincr1 list $indexLst $howMuch;
} else {
| | | < < < < < < < < | | | 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 |
# Increments the value of one leaf of a lists tree
# (which must exists)
proc ::tcl::Lvarincr {listName indexLst {howMuch 1}} {
upvar $listName list;
if {[llength $indexLst] <= 1} {
Lvarincr1 list $indexLst $howMuch;
} else {
set idx [lindex $indexLst 0];
set targetList [lindex $list $idx];
# reduce refcount on targetList
Lvarset1nc list $idx {};
# recursively replace in targetList
Lvarincr targetList [lrange $indexLst 1 end] $howMuch;
# put updated sub list back in the tree
Lvarset1nc list $idx $targetList;
}
}
# Increments the value of one cell of a list
proc ::tcl::Lvarincr1 {listName index {howMuch 1}} {
upvar $listName list;
set newValue [expr {[lindex $list $index]+$howMuch}];
set list [lreplace $list $index $index $newValue];
return $newValue;
}
# Removes the first element of a list
# and returns the new list value
proc ::tcl::Lvarpop1 {listName} {
upvar $listName list;
set list [lrange $list 1 end];
}
# Same but returns the removed element
# (Like the tclX version)
proc ::tcl::Lvarpop {listName} {
upvar $listName list;
set el [lindex $list 0];
set list [lrange $list 1 end];
return $el;
}
# Assign list elements to variables and return the length of the list
proc ::tcl::Lassign {list args} {
# faster than direct blown foreach (which does not byte compile)
set i 0;
set lg [llength $list];
foreach vname $args {
if {$i>=$lg} break
uplevel 1 [list ::set $vname [lindex $list $i]];
incr i;
}
return $lg;
}
# Misc utilities
|
| ︙ | ︙ |
Changes to library/opt/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | > | | 1 2 3 4 5 6 7 8 9 10 11 12 |
# Tcl package index file, version 1.1
# This file is generated by the "pkg_mkIndex -direct" command
# and sourced either when an application starts up or
# by a "package unknown" script. It invokes the
# "package ifneeded" command to set up package-related
# information so that packages will be loaded automatically
# in response to "package require" commands. When this
# script is sourced, the variable $dir must contain the
# full path name of this file's directory.
if {![package vsatisfies [package provide Tcl] 8]} {return}
package ifneeded opt 0.4.3 [list source [file join $dir optparse.tcl]]
|
Deleted library/opt0.4/optparse.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted library/opt0.4/pkgIndex.tcl.
|
| < < < < < < < < < < < |
Changes to library/package.tcl.
1 2 3 4 5 | # package.tcl -- # # utility procs formerly in init.tcl which can be loaded on demand # for package management. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # package.tcl -- # # utility procs formerly in init.tcl which can be loaded on demand # for package management. # # RCS: @(#) $Id: package.tcl,v 1.14.2.2 2001/08/24 16:19:10 dgp Exp $ # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1998 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # |
| ︙ | ︙ | |||
29 30 31 32 33 34 35 |
# Defaults to [info sharedlibextension]
#
# Results:
# Returns 1 if the extension matches, 0 otherwise
proc pkg_compareExtension { fileName {ext {}} } {
global tcl_platform
| < | < | > > > > | > > > > > > > > > > > > > > > | 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 |
# Defaults to [info sharedlibextension]
#
# Results:
# Returns 1 if the extension matches, 0 otherwise
proc pkg_compareExtension { fileName {ext {}} } {
global tcl_platform
if {![string length $ext]} {set ext [info sharedlibextension]}
if {[string equal $tcl_platform(platform) "windows"]} {
return [string equal -nocase [file extension $fileName] $ext]
} else {
# Some unices add trailing numbers after the .so, so
# we could have something like '.so.1.2'.
set root $fileName
while {1} {
set currExt [file extension $root]
if {[string equal $currExt $ext]} {
return 1
}
# The current extension does not match; if it is not a numeric
# value, quit, as we are only looking to ignore version number
# extensions. Otherwise we might return 1 in this case:
# pkg_compareExtension foo.so.bar .so
# which should not match.
if { ![string is integer -strict [string range $currExt 1 end]] } {
return 0
}
set root [file rootname $root]
}
}
}
# pkg_mkIndex --
# This procedure creates a package index in a given directory. The
# package index consists of a "pkgIndex.tcl" file whose contents are
# a Tcl script that sets up package information with "package require"
|
| ︙ | ︙ | |||
66 67 68 69 70 71 72 |
# args - Any number of additional arguments, each giving
# a glob pattern that matches the names of one or
# more shared libraries or Tcl script files in
# dir.
proc pkg_mkIndex {args} {
global errorCode errorInfo
| | | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# args - Any number of additional arguments, each giving
# a glob pattern that matches the names of one or
# more shared libraries or Tcl script files in
# dir.
proc pkg_mkIndex {args} {
global errorCode errorInfo
set usage {"pkg_mkIndex ?-direct? ?-lazy? ?-load pattern? ?-verbose? ?--? dir ?pattern ...?"};
set argCount [llength $args]
if {$argCount < 1} {
return -code error "wrong # args: should be\n$usage"
}
set more ""
|
| ︙ | ︙ | |||
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
cd $oldDir
set c [interp create]
# Load into the child any packages currently loaded in the parent
# interpreter that match the -load pattern.
foreach pkg [info loaded] {
if {! [string match $loadPat [lindex $pkg 1]]} {
continue
}
if {[catch {
load [lindex $pkg 0] [lindex $pkg 1] $c
} err]} {
if {$doVerbose} {
tclLog "warning: load [lindex $pkg 0] [lindex $pkg 1]\nfailed with: $err"
}
} elseif {$doVerbose} {
| > > > > > > > > > > > > > | 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 |
cd $oldDir
set c [interp create]
# Load into the child any packages currently loaded in the parent
# interpreter that match the -load pattern.
if {[string length $loadPat]} {
if {$doVerbose} {
tclLog "currently loaded packages: '[info loaded]'"
tclLog "trying to load all packages matching $loadPat"
}
if {![llength [info loaded]]} {
tclLog "warning: no packages are currently loaded, nothing"
tclLog "can possibly match '$loadPat'"
}
}
foreach pkg [info loaded] {
if {! [string match $loadPat [lindex $pkg 1]]} {
continue
}
if {$doVerbose} {
tclLog "package [lindex $pkg 1] matches '$loadPat'"
}
if {[catch {
load [lindex $pkg 0] [lindex $pkg 1] $c
} err]} {
if {$doVerbose} {
tclLog "warning: load [lindex $pkg 0] [lindex $pkg 1]\nfailed with: $err"
}
} elseif {$doVerbose} {
|
| ︙ | ︙ | |||
324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 |
}
} msg] == 1} {
set what [$c eval set ::tcl::debug]
if {$doVerbose} {
tclLog "warning: error while $what $file: $msg"
}
} else {
set type [$c eval set ::tcl::type]
set cmds [lsort [$c eval array names ::tcl::newCmds]]
set pkgs [$c eval set ::tcl::newPkgs]
if {[llength $pkgs] > 1} {
tclLog "warning: \"$file\" provides more than one package ($pkgs)"
}
foreach pkg $pkgs {
# cmds is empty/not used in the direct case
lappend files($pkg) [list $file $type $cmds]
}
| > > > > > > > > | 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 |
}
} msg] == 1} {
set what [$c eval set ::tcl::debug]
if {$doVerbose} {
tclLog "warning: error while $what $file: $msg"
}
} else {
set what [$c eval set ::tcl::debug]
if {$doVerbose} {
tclLog "successful $what of $file"
}
set type [$c eval set ::tcl::type]
set cmds [lsort [$c eval array names ::tcl::newCmds]]
set pkgs [$c eval set ::tcl::newPkgs]
if {$doVerbose} {
tclLog "commands provided were $cmds"
tclLog "packages provided were $pkgs"
}
if {[llength $pkgs] > 1} {
tclLog "warning: \"$file\" provides more than one package ($pkgs)"
}
foreach pkg $pkgs {
# cmds is empty/not used in the direct case
lappend files($pkg) [list $file $type $cmds]
}
|
| ︙ | ︙ | |||
416 417 418 419 420 421 422 |
# tclMacPkgSearch --
# The procedure is used on the Macintosh to search a given directory for files
# with a TEXT resource named "pkgIndex". If it exists it is sourced in to the
# interpreter to setup the package database.
proc tclMacPkgSearch {dir} {
| | | 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 |
# tclMacPkgSearch --
# The procedure is used on the Macintosh to search a given directory for files
# with a TEXT resource named "pkgIndex". If it exists it is sourced in to the
# interpreter to setup the package database.
proc tclMacPkgSearch {dir} {
foreach x [glob -directory $dir -nocomplain *.shlb] {
if {[file isfile $x]} {
set res [resource open $x]
foreach y [resource list TEXT $res] {
if {[string equal $y "pkgIndex"]} {source -rsrc pkgIndex}
}
catch {resource close $res}
}
|
| ︙ | ︙ | |||
456 457 458 459 460 461 462 |
set old_path [set use_path $auto_path]
while {[llength $use_path]} {
set dir [lindex $use_path end]
# we can't use glob in safe interps, so enclose the following
# in a catch statement, where we get the pkgIndex files out
# of the subdirectories
catch {
| > | | 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 |
set old_path [set use_path $auto_path]
while {[llength $use_path]} {
set dir [lindex $use_path end]
# we can't use glob in safe interps, so enclose the following
# in a catch statement, where we get the pkgIndex files out
# of the subdirectories
catch {
foreach file [glob -directory $dir -join -nocomplain \
* pkgIndex.tcl] {
set dir [file dirname $file]
if {[file readable $file] && ![info exists procdDirs($dir)]} {
if {[catch {source $file} msg]} {
tclLog "error reading package index file $file: $msg"
} else {
set procdDirs($dir) 1
}
|
| ︙ | ︙ | |||
488 489 490 491 492 493 494 |
if {(![interp issafe]) && \
[string equal $tcl_platform(platform) "macintosh"]} {
set dir [lindex $use_path end]
if {![info exists procdDirs($dir)]} {
tclMacPkgSearch $dir
set procdDirs($dir) 1
}
| | | 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 |
if {(![interp issafe]) && \
[string equal $tcl_platform(platform) "macintosh"]} {
set dir [lindex $use_path end]
if {![info exists procdDirs($dir)]} {
tclMacPkgSearch $dir
set procdDirs($dir) 1
}
foreach x [glob -directory $dir -nocomplain *] {
if {[file isdirectory $x] && ![info exists procdDirs($x)]} {
set dir $x
tclMacPkgSearch $dir
set procdDirs($dir) 1
}
}
}
|
| ︙ | ︙ |
Deleted library/reg/pkgIndex.tcl.
|
| < < < < < < < |
Changes to library/reg1.0/pkgIndex.tcl.
1 2 3 4 5 6 7 |
if {[info exists tcl_platform(debug)]} {
package ifneeded registry 1.0 \
[list load [file join $dir tclreg83d.dll] registry]
} else {
package ifneeded registry 1.0 \
[list load [file join $dir tclreg83.dll] registry]
}
| > | 1 2 3 4 5 6 7 8 |
if {![package vsatisfies [package provide Tcl] 8]} {return}
if {[info exists tcl_platform(debug)]} {
package ifneeded registry 1.0 \
[list load [file join $dir tclreg83d.dll] registry]
} else {
package ifneeded registry 1.0 \
[list load [file join $dir tclreg83.dll] registry]
}
|
Changes to library/safe.tcl.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | # See the safe.n man page for details. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # See the safe.n man page for details. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: safe.tcl,v 1.6.2.1 2001/04/03 22:54:38 hobbs Exp $ # # The implementation is based on namespaces. These naming conventions # are followed: # Private procs starts with uppercase. # Public procs are exported and starts with lowercase # |
| ︙ | ︙ | |||
492 493 494 495 496 497 498 |
foreach dir $pathList {
if {[file isdirectory $dir]} {
# check that we don't have it yet as a children
# of a previous dir
if {[lsearch -exact $res $dir]<0} {
lappend res $dir
}
| | | 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 |
foreach dir $pathList {
if {[file isdirectory $dir]} {
# check that we don't have it yet as a children
# of a previous dir
if {[lsearch -exact $res $dir]<0} {
lappend res $dir
}
foreach sub [glob -directory $dir -nocomplain *] {
if {([file isdirectory $sub]) \
&& ([lsearch -exact $res $sub]<0) } {
# new sub dir, add it !
lappend res $sub
}
}
}
|
| ︙ | ︙ |
Deleted library/tcltest/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < < < < < |
Deleted library/tcltest/tcltest.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to library/tcltest1.0/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | > | < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 |
# Tcl package index file, version 1.1
# This file is generated by the "pkg_mkIndex" command
# and sourced either when an application starts up or
# by a "package unknown" script. It invokes the
# "package ifneeded" command to set up package-related
# information so that packages will be loaded automatically
# in response to "package require" commands. When this
# script is sourced, the variable $dir must contain the
# full path name of this file's directory.
if {![package vsatisfies [package provide Tcl] 8.2]} {return}
package ifneeded tcltest 1.0.2 [list source [file join $dir tcltest.tcl]]
|
Changes to library/tcltest1.0/tcltest.tcl.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | # This design was based on the Tcl testing approach designed and # initially implemented by Mary Ann May-Pumphrey of Sun Microsystems. # # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | > | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# This design was based on the Tcl testing approach designed and
# initially implemented by Mary Ann May-Pumphrey of Sun Microsystems.
#
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
# All rights reserved.
#
# RCS: @(#) $Id: tcltest.tcl,v 1.24.2.3 2002/03/24 19:07:48 dgp Exp $
package require Tcl 8.2
package provide tcltest 1.0.2
# create the "tcltest" namespace for all testing variables and procedures
namespace eval tcltest {
# Export the public tcltest procs
set procList [list test cleanupTests saveState restoreState \
|
| ︙ | ︙ | |||
416 417 418 419 420 421 422 |
}
}
}
flush $::tcltest::errorChannel
return
}
| | | 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
}
}
}
flush $::tcltest::errorChannel
return
}
if {[llength [info commands ::tcltest::initConstraintsHook]] == 0} {
proc ::tcltest::initConstraintsHook {} {}
}
# ::tcltest::initConstraints --
#
# Check Constraintsuration information that will determine which tests
# to run. To do this, create an array ::tcltest::testConstraints. Each
|
| ︙ | ︙ | |||
648 649 650 651 652 653 654 655 656 657 658 659 660 661 |
} else {
catch {exec rm -r removeMe}
}
}
# Locate tcltest executable
if {![info exists tk_version]} {
set tcltest [info nameofexecutable]
if {$tcltest == "{}"} {
set tcltest {}
}
}
| > | 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 |
} else {
catch {exec rm -r removeMe}
}
}
# Locate tcltest executable
variable tcltest
if {![info exists tk_version]} {
set tcltest [info nameofexecutable]
if {$tcltest == "{}"} {
set tcltest {}
}
}
|
| ︙ | ︙ | |||
697 698 699 700 701 702 703 | } # ::tcltest::PrintUsageInfoHook # # Hook used for customization of display of usage information. # | | | 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 |
}
# ::tcltest::PrintUsageInfoHook
#
# Hook used for customization of display of usage information.
#
if {[llength [info commands ::tcltest::PrintUsageInfoHook]] == 0} {
proc ::tcltest::PrintUsageInfoHook {} {}
}
# ::tcltest::PrintUsageInfo
#
# Prints out the usage information for package tcltest. This can be
# customized with the redefinition of ::tcltest::PrintUsageInfoHook.
|
| ︙ | ︙ | |||
852 853 854 855 856 857 858 | # ::tcltest::processCmdLineArgsFlagsHook -- # # This hook is used to add to the list of command line arguments that are # processed by ::tcltest::processCmdLineArgs. # | | | | 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 |
# ::tcltest::processCmdLineArgsFlagsHook --
#
# This hook is used to add to the list of command line arguments that are
# processed by ::tcltest::processCmdLineArgs.
#
if {[llength [info commands ::tcltest::processCmdLineArgsAddFlagsHook]] == 0} {
proc ::tcltest::processCmdLineArgsAddFlagsHook {} {}
}
# ::tcltest::processCmdLineArgsHook --
#
# This hook is used to actually process the flags added by
# ::tcltest::processCmdLineArgsAddFlagsHook.
#
# Arguments:
# flags The flags that have been pulled out of argv
#
if {[llength [info commands ::tcltest::processCmdLineArgsHook]] == 0} {
proc ::tcltest::processCmdLineArgsHook {flag} {}
}
# ::tcltest::processCmdLineArgs --
#
# Use command line args to set the verbose, skip, and
# match, outputChannel, errorChannel, debug, and temporaryDirectory
|
| ︙ | ︙ | |||
1341 1342 1343 1344 1345 1346 1347 | # ::tcltest::cleanupTestsHook -- # # This hook allows a harness that builds upon tcltest to specify # additional things that should be done at cleanup. # | | | 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 |
# ::tcltest::cleanupTestsHook --
#
# This hook allows a harness that builds upon tcltest to specify
# additional things that should be done at cleanup.
#
if {[llength [info commands ::tcltest::cleanupTestsHook]] == 0} {
proc ::tcltest::cleanupTestsHook {} {}
}
# test --
#
# This procedure runs a test and prints an error message if the test fails.
# If ::tcltest::verbose has been set, it also prints a message even if the
|
| ︙ | ︙ |
Changes to mac/MW_TclAppleScriptHeader.pch.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * compiler flags. See MetroWerks documention for more details. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < < < < < < < < < < < | 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 | * compiler flags. See MetroWerks documention for more details. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: MW_TclAppleScriptHeader.pch,v 1.4.12.1 2001/04/04 21:22:18 hobbs Exp $ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created * compilied header. The name of the header depends on the * architecture we are compiling for (see the code below). For * example, for a 68k app the prefix file should be: MW_TclHeader68K. */ #if __POWERPC__ #pragma precompile_target "MW_TclAppleScriptHeaderPPC" #elif __CFM68K__ #pragma precompile_target "MW_TclAppleScriptHeaderCFM68K" #else #pragma precompile_target "MW_TclAppleScriptHeader68K" #endif #include "tclMacCommonPch.h" #define USE_TCL_STUBS |
Added mac/MW_TclBuildLibHeader.h.
> > > > > > > | 1 2 3 4 5 6 7 | #if __POWERPC__ #include "MW_TclBuildLibHeaderPPC" #elif __CFM68K__ #include "MW_TclBuildLibHeaderCFM68K" #else #include "MW_TclBuildLibHeader68K" #endif |
Added mac/MW_TclBuildLibHeader.pch.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* * MW_TclBuildLibHeader.pch -- * * This file is the source for a pre-compilied header that gets used * for all files in the Tcl projects. This make compilies go a bit * faster. This file is only intended to be used in the MetroWerks * CodeWarrior environment. It essentially acts as a place to set * compiler flags. See MetroWerks documention for more details. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id$ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created * compilied header. The name of the header depends on the * architecture we are compiling for (see the code below). For * example, for a 68k app the prefix file should be: MW_TclHeader68K. */ #if __POWERPC__ #pragma precompile_target "MW_TclBuildLibHeaderPPC" #elif __CFM68K__ #pragma precompile_target "MW_TclBuildLibHeaderCFM68K" #else #pragma precompile_target "MW_TclBuildLibHeader68K" #endif #define BUILD_tcl 1 #include "MW_TclHeaderCommon.h" |
Changes to mac/MW_TclHeader.pch.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * compiler flags. See MetroWerks documention for more details. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < < < < < < < < < | < < < < < < < | 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 | * compiler flags. See MetroWerks documention for more details. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: MW_TclHeader.pch,v 1.7.12.1 2001/04/04 21:22:18 hobbs Exp $ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created * compilied header. The name of the header depends on the * architecture we are compiling for (see the code below). For * example, for a 68k app the prefix file should be: MW_TclHeader68K. */ #if __POWERPC__ #pragma precompile_target "MW_TclHeaderPPC" #elif __CFM68K__ #pragma precompile_target "MW_TclHeaderCFM68K" #else #pragma precompile_target "MW_TclHeader68K" #endif #include "MW_TclHeaderCommon.h" |
Added mac/MW_TclHeaderCommon.h.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* * MW_TclHeaderCommon.h -- * * Common includes for precompiled headers * * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id$ */ #pragma once #include "tclMacCommonPch.h" /* * Place any includes below that will are needed by the majority of the * and is OK to be in any file in the system. */ #include "tcl.h" #ifdef BUILD_tcl # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLEXPORT #endif #include "tclMac.h" #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #include "tclInt.h" #if PRAGMA_IMPORT #pragma import on #endif #include <MoreFiles.h> #include <MoreFilesExtras.h> #include <FSpCompat.h> #include <FileCopy.h> #include <FullPath.h> #include <IterateDirectory.h> #include <MoreDesktopMgr.h> #include <DirectoryCopy.h> #include <Search.h> #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif |
Added mac/MW_TclStaticHeader.h.
> > > > > > > | 1 2 3 4 5 6 7 | #if __POWERPC__ #include "MW_TclStaticHeaderPPC" #elif __CFM68K__ #include "MW_TclStaticHeaderCFM68K" #else #include "MW_TclStaticHeader68K" #endif |
Added mac/MW_TclStaticHeader.pch.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* * MW_TclStaticHeader.pch -- * * This file is the source for a pre-compilied header that gets used * for all files in the Tcl projects. This make compilies go a bit * faster. This file is only intended to be used in the MetroWerks * CodeWarrior environment. It essentially acts as a place to set * compiler flags. See MetroWerks documention for more details. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id$ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created * compilied header. The name of the header depends on the * architecture we are compiling for (see the code below). For * example, for a 68k app the prefix file should be: MW_TclHeader68K. */ #if __POWERPC__ #pragma precompile_target "MW_TclStaticHeaderPPC" #elif __CFM68K__ #pragma precompile_target "MW_TclStaticHeaderCFM68K" #else #pragma precompile_target "MW_TclStaticHeader68K" #endif #define STATIC_BUILD 1 #include "MW_TclHeaderCommon.h" |
Changes to mac/MW_TclTestHeader.pch.
1 | /* | | | | | < | < < < < < < | < < < < < | | 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 | /* * MW_TclTestHeader.pch -- * * This file is the source for a pre-compilied header that gets used * for all files in the Tcl projects. This make compilies go a bit * faster. This file is only intended to be used in the MetroWerks * CodeWarrior environment. It essentially acts as a place to set * compiler flags. See MetroWerks documention for more details. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: MW_TclTestHeader.pch,v 1.1.2.1 2001/04/04 21:22:18 hobbs Exp $ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created * compilied header. The name of the header depends on the * architecture we are compiling for (see the code below). For * example, for a 68k app the prefix file should be: MW_TclHeader68K. */ #if __POWERPC__ #pragma precompile_target "MW_TclTestHeaderPPC" #elif __CFM68K__ #pragma precompile_target "MW_TclTestHeaderCFM68K" #else #pragma precompile_target "MW_TclTestHeader68K" #endif #define BUILD_tcl 1 #define STATIC_BUILD 1 #define TCL_DEBUG 1 #define TCL_THREADS 1 #include "MW_TclHeaderCommon.h" |
Changes to mac/README.
1 2 | Tcl 8.3 for Macintosh | < < < < < < < < | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Tcl 8.3 for Macintosh RCS: @(#) $Id: README,v 1.12.2.2 2001/10/03 20:26:09 hobbs Exp $ 1. Introduction --------------- This is the README file for the Macintosh version of the Tcl scripting language. The home page for the Macintosh releases is http://www.tcl-tk.net/software/mac/ A summary of what's new in this release is at http://www.tcl-tk.net/software/tcltk/8.3.html A summary of Macintosh-specific features is at http://www.tcl-tk.net/software/mac/features.html 2. The Distribution ------------------- Macintosh Tcl is distributed in three different forms. This should make it easier to only download what you need. Substitute <version> |
| ︙ | ︙ | |||
51 52 53 54 55 56 57 |
addition, Metrowerks CodeWarrior libraries and project files
are included. However, you must already have the More Files
package to compile this code.
The "html" subdirectory contains reference documentation in
in the HTML format. You may also find these pages at:
| | | | | | < < > | 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 |
addition, Metrowerks CodeWarrior libraries and project files
are included. However, you must already have the More Files
package to compile this code.
The "html" subdirectory contains reference documentation in
in the HTML format. You may also find these pages at:
http://www.tcl-tk.net/man/tcl<version>/contents.html
3. Compiling Tcl
----------------
In order to compile Macintosh Tcl you must have the
following items:
CodeWarrior Pro 5+
Mac Tcl (sources)
More Files 1.4.9
The included project files should work fine. However, for current
release notes please check this page:
http://www.tcl-tk.net/doc/howto/compile.html#mac
If you have comments or bug reports, report them to the bug database at:
http://tcl.sourceforge.net/
|
Changes to mac/tclMac.h.
1 2 3 4 5 6 7 8 9 10 | /* * tclMac.h -- * * Declarations of Macintosh specific public variables and procedures. * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < < < < < < < < < < | 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 | /* * tclMac.h -- * * Declarations of Macintosh specific public variables and procedures. * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMac.h,v 1.4.14.1 2001/04/04 21:22:18 hobbs Exp $ */ #ifndef _TCLMAC #define _TCLMAC #ifndef _TCL # include "tcl.h" #endif #include <Types.h> #include <Files.h> #include <Events.h> typedef int (*Tcl_MacConvertEventPtr) _ANSI_ARGS_((EventRecord *eventPtr)); #include "tclPlatDecls.h" #endif /* _TCLMAC */ |
Changes to mac/tclMacAlloc.c.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * Portions contributed by Chris Kingsley, Jack Jansen and Ray Johnson *. * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > | > > > > > > > > > > | | | 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 |
* Copyright (c) 1996-1997 Sun Microsystems, Inc.
*
* Portions contributed by Chris Kingsley, Jack Jansen and Ray Johnson
*.
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclMacAlloc.c,v 1.4.12.1 2001/05/17 13:30:02 das Exp $
*/
#include "tclInt.h"
#include "tclMacInt.h"
#include <Memory.h>
#include <Gestalt.h>
#include <stdlib.h>
#include <string.h>
/*
* Flags that are used by ConfigureMemory to define how the allocator
* should work. They can be or'd together.
*/
#define MEMORY_ALL_SYS 1 /* All memory should come from the system
heap. */
#define MEMORY_DONT_USE_TEMPMEM 2 /* Don't use temporary memory but system memory. */
/*
* Amount of space to leave in the application heap for the Toolbox to work.
*/
#define TOOLBOX_SPACE (512 * 1024)
static int memoryFlags = 0;
static Handle toolGuardHandle = NULL;
/* This handle must be around so that we don't
* have NewGWorld failures. This handle is
* purgeable. Before we allocate any blocks,
* we see if this handle is still around.
* If it is not, then we try to get it again.
* If we can get it, we lock it and try
* to do the normal allocation, unlocking on
* the way out. If we can't, we go to the
* system heap directly. */
static int tclUseMemTracking = 0; /* Are we tracking memory allocations?
* On recent versions of the MacOS this
* is no longer necessary, as we can use
* temporary memory which is freed by the
* OS after a quit or crash. */
static size_t tclExtraHdlSize = 0; /* Size of extra memory allocated at the start
* of each block when using memory tracking
* ( == 0 otherwise) */
/*
* The following typedef and variable are used to keep track of memory
* blocks that are allocated directly from the System Heap. These chunks
* of memory must always be freed - even if we crash.
*/
typedef struct listEl {
Handle memoryHandle;
struct listEl * next;
struct listEl * prec;
} ListEl;
static ListEl * systemMemory = NULL;
static ListEl * appMemory = NULL;
/*
* Prototypes for functions used only in this file.
*/
static pascal void CleanUpExitProc _ANSI_ARGS_((void));
void ConfigureMemory _ANSI_ARGS_((int flags));
|
| ︙ | ︙ | |||
95 96 97 98 99 100 101 102 |
TclpSysRealloc(
VOID *oldPtr, /* Original block */
unsigned int size) /* New size of block. */
{
Handle hand;
void *newPtr;
int maxsize;
| > > | > > > > > > > > > > > | > > | 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 |
TclpSysRealloc(
VOID *oldPtr, /* Original block */
unsigned int size) /* New size of block. */
{
Handle hand;
void *newPtr;
int maxsize;
OSErr err;
if (tclUseMemTracking) {
hand = ((ListEl *) ((Ptr) oldPtr - tclExtraHdlSize))->memoryHandle;
} else {
hand = RecoverHandle((Ptr) oldPtr);
}
maxsize = GetHandleSize(hand) - sizeof(Handle);
if (maxsize < size) {
HUnlock(hand);
SetHandleSize(hand,size + tclExtraHdlSize);
err = MemError();
HLock(hand);
if(err==noErr){
newPtr=(*hand + tclExtraHdlSize);
} else {
newPtr = TclpSysAlloc(size, 1);
if(newPtr!=NULL) {
memmove(newPtr, oldPtr, maxsize);
TclpSysFree(oldPtr);
}
}
} else {
newPtr = oldPtr;
}
return newPtr;
}
/*
|
| ︙ | ︙ | |||
132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
VOID *
TclpSysAlloc(
long size, /* Size of block to allocate. */
int isBin) /* Is this a bin allocation? */
{
Handle hand = NULL;
ListEl * newMemoryRecord;
if (!(memoryFlags & MEMORY_ALL_SYS)) {
/*
* If the guard handle has been purged, throw it away and try
* to allocate it again.
*/
| > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
VOID *
TclpSysAlloc(
long size, /* Size of block to allocate. */
int isBin) /* Is this a bin allocation? */
{
Handle hand = NULL;
ListEl * newMemoryRecord;
int isSysMem = 0;
static int initialized=0;
if (!initialized) {
long response = 0;
OSErr err = noErr;
int useTempMem = 0;
/* Check if we can use temporary memory */
initialized=1;
err = Gestalt(gestaltOSAttr, &response);
if (err == noErr) {
useTempMem = response & (1 << gestaltRealTempMemory);
}
tclUseMemTracking = !useTempMem || (memoryFlags & MEMORY_DONT_USE_TEMPMEM);
if(tclUseMemTracking) {
tclExtraHdlSize = sizeof(ListEl);
/*
* We are allocating memory directly from the system
* heap. We need to install an exit handle
* to ensure the memory is cleaned up.
*/
TclMacInstallExitToShellPatch(CleanUpExitProc);
}
}
if (!(memoryFlags & MEMORY_ALL_SYS)) {
/*
* If the guard handle has been purged, throw it away and try
* to allocate it again.
*/
|
| ︙ | ︙ | |||
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
* If we have never allocated the guard handle, or it was purged
* and thrown away, then try to allocate it again.
*/
if (toolGuardHandle == NULL) {
toolGuardHandle = NewHandle(TOOLBOX_SPACE);
if (toolGuardHandle != NULL) {
HPurge(toolGuardHandle);
}
}
/*
* If we got the handle, lock it and do our allocation.
*/
if (toolGuardHandle != NULL) {
HLock(toolGuardHandle);
| > | < < | < < < < < < < > > > > > > > > > | > > < < < < < < < < < < < < < < < < < > > > | > > > > > > > | > > > > > | | 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 |
* If we have never allocated the guard handle, or it was purged
* and thrown away, then try to allocate it again.
*/
if (toolGuardHandle == NULL) {
toolGuardHandle = NewHandle(TOOLBOX_SPACE);
if (toolGuardHandle != NULL) {
HLock(toolGuardHandle);
HPurge(toolGuardHandle);
}
}
/*
* If we got the handle, lock it and do our allocation.
*/
if (toolGuardHandle != NULL) {
HLock(toolGuardHandle);
hand = NewHandle(size + tclExtraHdlSize);
HUnlock(toolGuardHandle);
}
}
if (hand == NULL) {
/*
* Ran out of memory in application space. Lets try to get
* more memory from system. Otherwise, we return NULL to
* denote failure.
*/
if(!tclUseMemTracking) {
/* Use Temporary Memory instead of System Heap when available */
OSErr err;
isBin = 1; /* always HLockHi TempMemHandles */
hand = TempNewHandle(size + tclExtraHdlSize,&err);
if(err!=noErr) { hand=NULL; }
} else {
/* Use system heap when tracking memory */
isSysMem=1;
isBin = 0;
hand = NewHandleSys(size + tclExtraHdlSize);
}
}
if (hand == NULL) {
return NULL;
}
if (isBin) {
HLockHi(hand);
} else {
HLock(hand);
}
if(tclUseMemTracking) {
/* Only need to do this when tracking memory */
newMemoryRecord = (ListEl *) *hand;
newMemoryRecord->memoryHandle = hand;
newMemoryRecord->prec = NULL;
if(isSysMem) {
newMemoryRecord->next = systemMemory;
systemMemory = newMemoryRecord;
} else {
newMemoryRecord->next = appMemory;
appMemory = newMemoryRecord;
}
if(newMemoryRecord->next!=NULL) {
newMemoryRecord->next->prec=newMemoryRecord;
}
}
return (*hand + tclExtraHdlSize);
}
/*
*----------------------------------------------------------------------
*
* TclpSysFree --
*
|
| ︙ | ︙ | |||
234 235 236 237 238 239 240 |
*----------------------------------------------------------------------
*/
void
TclpSysFree(
void * ptr) /* Free this system memory. */
{
| | > > | > > > > | > > > > > > > > | > | < < > | 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 |
*----------------------------------------------------------------------
*/
void
TclpSysFree(
void * ptr) /* Free this system memory. */
{
if(tclUseMemTracking) {
/* Only need to do this when tracking memory */
ListEl *memRecord;
memRecord = (ListEl *) ((Ptr) ptr - tclExtraHdlSize);
/* Remove current record from linked list */
if(memRecord->next!=NULL) {
memRecord->next->prec=memRecord->prec;
}
if(memRecord->prec!=NULL) {
memRecord->prec->next=memRecord->next;
}
if(memRecord==appMemory) {
appMemory=memRecord->next;
} else if(memRecord==systemMemory) {
systemMemory=memRecord->next;
}
DisposeHandle(memRecord->memoryHandle);
} else {
DisposeHandle(RecoverHandle((Ptr) ptr));
}
}
/*
*----------------------------------------------------------------------
*
* CleanUpExitProc --
*
|
| ︙ | ︙ | |||
267 268 269 270 271 272 273 274 275 276 |
*/
static pascal void
CleanUpExitProc()
{
ListEl * memRecord;
while (systemMemory != NULL) {
memRecord = systemMemory;
systemMemory = memRecord->next;
| > > < | | < | 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 |
*/
static pascal void
CleanUpExitProc()
{
ListEl * memRecord;
if(tclUseMemTracking) {
/* Only need to do this when tracking memory */
while (systemMemory != NULL) {
memRecord = systemMemory;
systemMemory = memRecord->next;
DisposeHandle(memRecord->memoryHandle);
}
}
}
/*
*----------------------------------------------------------------------
*
* FreeAllMemory --
|
| ︙ | ︙ | |||
300 301 302 303 304 305 306 307 308 309 |
*/
void
FreeAllMemory()
{
ListEl * memRecord;
while (systemMemory != NULL) {
memRecord = systemMemory;
systemMemory = memRecord->next;
| > > < | < < < | | < | 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 |
*/
void
FreeAllMemory()
{
ListEl * memRecord;
if(tclUseMemTracking) {
/* Only need to do this when tracking memory */
while (systemMemory != NULL) {
memRecord = systemMemory;
systemMemory = memRecord->next;
DisposeHandle(memRecord->memoryHandle);
}
while (appMemory != NULL) {
memRecord = appMemory;
appMemory = memRecord->next;
DisposeHandle(memRecord->memoryHandle);
}
}
}
/*
*----------------------------------------------------------------------
*
* ConfigureMemory --
|
| ︙ | ︙ |
Changes to mac/tclMacAppInit.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclMacAppInit.c -- * * Provides a version of the Tcl_AppInit procedure for the example shell. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | | 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 | /* * tclMacAppInit.c -- * * Provides a version of the Tcl_AppInit procedure for the example shell. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacAppInit.c,v 1.5.12.2 2001/10/17 19:29:25 das Exp $ */ #include "tcl.h" #include "tclInt.h" #include "tclPort.h" #include "tclMac.h" #include "tclMacInt.h" #if defined(THINK_C) # include <console.h> #elif defined(__MWERKS__) # include <SIOUX.h> EXTERN short InstallConsole _ANSI_ARGS_((short fd)); #endif #ifdef TCL_TEST extern int Procbodytest_Init _ANSI_ARGS_((Tcl_Interp *interp)); extern int Procbodytest_SafeInit _ANSI_ARGS_((Tcl_Interp *interp)); extern int TclObjTest_Init _ANSI_ARGS_((Tcl_Interp *interp)); extern int Tcltest_Init _ANSI_ARGS_((Tcl_Interp *interp)); |
| ︙ | ︙ | |||
185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
#elif defined(__MWERKS__)
/* Set options for CodeWarrior SIOUX package */
SIOUXSettings.autocloseonquit = true;
SIOUXSettings.showstatusline = true;
SIOUXSettings.asktosaveonclose = false;
InstallConsole(0);
SIOUXSetTitle("\pTcl Interpreter");
#elif defined(applec)
/* Init packages used by MPW SIOW package */
InitGraf((Ptr)&qd.thePort);
| > | 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
#elif defined(__MWERKS__)
/* Set options for CodeWarrior SIOUX package */
SIOUXSettings.autocloseonquit = true;
SIOUXSettings.showstatusline = true;
SIOUXSettings.asktosaveonclose = false;
SIOUXSettings.wasteusetempmemory = true;
InstallConsole(0);
SIOUXSetTitle("\pTcl Interpreter");
#elif defined(applec)
/* Init packages used by MPW SIOW package */
InitGraf((Ptr)&qd.thePort);
|
| ︙ | ︙ |
Changes to mac/tclMacApplication.r.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclMacApplication.r -- * * This file creates resources for use Tcl Shell application. * It should be viewed as an example of how to create a new * Tcl application using the shared Tcl libraries. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclMacApplication.r -- * * This file creates resources for use Tcl Shell application. * It should be viewed as an example of how to create a new * Tcl application using the shared Tcl libraries. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacApplication.r,v 1.3.2.2 2001/10/17 19:29:25 das Exp $ */ #include <Types.r> #include <SysTypes.r> /* * The folowing include and defines help construct |
| ︙ | ︙ | |||
38 39 40 41 42 43 44 |
# define MINOR_VERSION TCL_MINOR_VERSION * 16
#endif
resource 'vers' (1) {
TCL_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
TCL_PATCH_LEVEL,
| | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
# define MINOR_VERSION TCL_MINOR_VERSION * 16
#endif
resource 'vers' (1) {
TCL_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
TCL_PATCH_LEVEL,
TCL_PATCH_LEVEL ", by Ray Johnson & Jim Ingham" "\n" "© 2001 Tcl Core Team"
};
resource 'vers' (2) {
TCL_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
TCL_PATCH_LEVEL,
"Tcl Shell " TCL_PATCH_LEVEL " © 1993-2001"
};
#define TCL_APP_CREATOR 'Tcl '
type TCL_APP_CREATOR as 'STR ';
resource TCL_APP_CREATOR (0, purgeable) {
"Tcl Shell " TCL_PATCH_LEVEL " © 1993-2001"
};
/*
* The 'kind' resource works with a 'BNDL' in Macintosh Easy Open
* to affect the text the Finder displays in the "kind" column and
* file info dialog. This information will be applied to all files
* with the listed creator and type.
*/
resource 'kind' (128, "Tcl kind", purgeable) {
TCL_APP_CREATOR,
0, /* region = USA */
{
'APPL', "Tcl Shell",
}
};
/*
* The following resource is used when creating the 'env' variable in
* the Macintosh environment. The creation mechanisim looks for the
* 'STR#' resource named "Tcl Environment Variables" rather than a
* specific resource number. (In other words, feel free to change the
* resource id if it conflicts with your application.) Each string in
* the resource must be of the form "KEYWORD=SOME STRING". See Tcl
* documentation for futher information about the env variable.
*
* A good example of something you may want to set is: "TCL_LIBRARY=My
* disk:etc."
*/
resource 'STR#' (128, "Tcl Environment Variables") {
{
/*
"SCHEDULE_NAME=Agent Controller Schedule",
"SCHEDULE_PATH=Lozoya:System Folder:Tcl Lib:Tcl-Scheduler"
*/
};
};
data 'alis' (1000, "Library Folder") {
$"0000 0000 00BA 0002 0001 012F 0000 0000" /* .....†...../.... */
$"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
$"0000 0000 0000 985C FB00 4244 0000 0000" /* ......ò\š.BD.... */
$"0002 1328 5375 7070 6F72 7420 4C69 6272" /* ...(Support Libr */
$"6172 6965 7329 0000 0000 0000 0000 0000" /* aries).......... */
$"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
$"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
$"0000 0076 8504 B617 A796 003D 0027 025B" /* ...vÖ..ßñ.=.'.[ */
$"01E4 0001 0001 0000 0000 0000 0000 0000" /* .”.............. */
$"0000 0000 0000 0000 0001 2F00 0002 0015" /* ........../..... */
$"2F3A 2853 7570 706F 7274 204C 6962 7261" /* /:(Support Libra */
$"7269 6573 2900 FFFF 0000" /* ries)... */
};
|
Changes to mac/tclMacChan.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclMacChan.c * * Channel drivers for Macintosh channels for the * console fds. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclMacChan.c * * Channel drivers for Macintosh channels for the * console fds. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacChan.c,v 1.6.12.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclMacInt.h" #include <Aliases.h> #include <Errors.h> |
| ︙ | ︙ | |||
132 133 134 135 136 137 138 |
/*
* This structure describes the channel type structure for file based IO:
*/
static Tcl_ChannelType consoleChannelType = {
"file", /* Type name. */
| | | | 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 |
/*
* This structure describes the channel type structure for file based IO:
*/
static Tcl_ChannelType consoleChannelType = {
"file", /* Type name. */
(Tcl_ChannelTypeVersion)StdIOBlockMode, /* Set blocking/nonblocking mode.*/
StdIOClose, /* Close proc. */
StdIOInput, /* Input proc. */
StdIOOutput, /* Output proc. */
StdIOSeek, /* Seek proc. */
NULL, /* Set option proc. */
NULL, /* Get option proc. */
CommonWatch, /* Initialize notifier. */
CommonGetHandle /* Get OS handles out of channel. */
};
/*
* This variable describes the channel type structure for file based IO.
*/
static Tcl_ChannelType fileChannelType = {
"file", /* Type name. */
(Tcl_ChannelTypeVersion)FileBlockMode, /* Set blocking or
* non-blocking mode.*/
FileClose, /* Close proc. */
FileInput, /* Input proc. */
FileOutput, /* Output proc. */
FileSeek, /* Seek proc. */
NULL, /* Set option proc. */
NULL, /* Get option proc. */
|
| ︙ | ︙ |
Changes to mac/tclMacCommonPch.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclMacCommonPch.h -- * * Macintosh Tcl must be compiled with certain compiler options to * ensure that it will work correctly. The following pragmas are * used to ensure that those options are set correctly. An error * will occur at compile time if they are not set correctly. * * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclMacCommonPch.h -- * * Macintosh Tcl must be compiled with certain compiler options to * ensure that it will work correctly. The following pragmas are * used to ensure that those options are set correctly. An error * will occur at compile time if they are not set correctly. * * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacCommonPch.h,v 1.2.22.1 2001/04/04 21:22:19 hobbs Exp $ */ #if !__option(enumsalwaysint) #error Tcl requires the Metrowerks setting "Enums always ints". #endif |
| ︙ | ︙ | |||
44 45 46 47 48 49 50 | * The define is used most everywhere to tell Tcl (or any Tcl * extensions) that we are compiling for the Macintosh platform. */ #define MAC_TCL | < < < < < < < < < < < < < < < < < > | < | 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 | * The define is used most everywhere to tell Tcl (or any Tcl * extensions) that we are compiling for the Macintosh platform. */ #define MAC_TCL /* * Define the following symbol if you want * comprehensive debugging turned on. */ /* #define TCL_DEBUG */ #ifdef TCL_DEBUG # define TCL_MEM_DEBUG # define TCL_TEST #endif /* * for Metrowerks Pro 6 MSL */ #include <UseDLLPrefix.h> |
Changes to mac/tclMacFCmd.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclMacFCmd.c -- * * Implements the Macintosh specific portions of the file manipulation * subcommands of the "file" command. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclMacFCmd.c -- * * Implements the Macintosh specific portions of the file manipulation * subcommands of the "file" command. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacFCmd.c,v 1.7.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tclInt.h" #include "tclMac.h" #include "tclMacInt.h" #include "tclPort.h" #include <FSpCompat.h> |
| ︙ | ︙ | |||
744 745 746 747 748 749 750 |
}
if (err == noErr) {
FSMakeFSSpecCompat(dstFileSpec.vRefNum, dstFileSpec.parID,
tmpName, &tmpDirSpec);
err = FSpDirCreateCompat(&tmpDirSpec, smSystemScript, &tmpDirID);
}
if (err == noErr) {
| | | 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 |
}
if (err == noErr) {
FSMakeFSSpecCompat(dstFileSpec.vRefNum, dstFileSpec.parID,
tmpName, &tmpDirSpec);
err = FSpDirCreateCompat(&tmpDirSpec, smSystemScript, &tmpDirID);
}
if (err == noErr) {
err = FSpDirectoryCopy(&srcFileSpec, &tmpDirSpec, NULL, NULL, 0, true,
CopyErrHandler);
}
/*
* Even if the Copy failed, Rename/Move whatever did get copied to the
* appropriate final destination, if possible.
*/
|
| ︙ | ︙ |
Changes to mac/tclMacFile.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclMacFile.c -- * * This file implements the channel drivers for Macintosh * files. It also comtains Macintosh version of other Tcl * functions that deal with the file system. * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < < < < < < < | 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 | /* * tclMacFile.c -- * * This file implements the channel drivers for Macintosh * files. It also comtains Macintosh version of other Tcl * functions that deal with the file system. * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacFile.c,v 1.9.2.2 2001/10/19 19:39:46 das Exp $ */ /* * Note: This code eventually needs to support async I/O. In doing this * we will need to keep track of all current async I/O. If exit to shell * is called - we shouldn't exit until all asyc I/O completes. */ #include "tclInt.h" #include "tclPort.h" #include "tclMacInt.h" #include <Aliases.h> #include <Errors.h> #include <Processes.h> #include <Strings.h> #include <Types.h> #include <MoreFiles.h> #include <MoreFilesExtras.h> #include <FSpCompat.h> /* *---------------------------------------------------------------------- * * TclpFindExecutable -- * * This procedure computes the absolute path name of the current |
| ︙ | ︙ | |||
130 131 132 133 134 135 136 |
* not be static.*/
GlobTypeData *types) /* Object containing list of acceptable types.
* May be NULL. */
{
char *fname, *patternEnd = tail;
char savedChar;
int fnameLen, result = TCL_OK;
| | > > > > > > | | | > > > > > > > > > > > > > > > > > > > > > | > > > > > > > | 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 |
* not be static.*/
GlobTypeData *types) /* Object containing list of acceptable types.
* May be NULL. */
{
char *fname, *patternEnd = tail;
char savedChar;
int fnameLen, result = TCL_OK;
int baseLength;
CInfoPBRec pb;
OSErr err;
FSSpec dirSpec;
Boolean isDirectory;
long dirID;
short itemIndex;
Str255 fileName;
Tcl_DString fileString;
Tcl_Obj *resultPtr;
OSType okType = 0;
OSType okCreator = 0;
Tcl_DString dsOrig;
Tcl_DStringInit(&dsOrig);
Tcl_DStringAppend(&dsOrig, Tcl_DStringValue(dirPtr),
Tcl_DStringLength(dirPtr));
baseLength = Tcl_DStringLength(&dsOrig);
/*
* Make sure that the directory part of the name really is a
* directory.
*/
Tcl_UtfToExternalDString(NULL, Tcl_DStringValue(&dsOrig),
Tcl_DStringLength(&dsOrig), &fileString);
err = FSpLocationFromPath(Tcl_DStringLength(&fileString),
Tcl_DStringValue(&fileString), &dirSpec);
Tcl_DStringFree(&fileString);
if (err == noErr)
err = FSpGetDirectoryID(&dirSpec, &dirID, &isDirectory);
if ((err != noErr) || !isDirectory) {
/*
* Check if we had a relative path (unix style relative path
* compatibility for glob)
*/
Tcl_DStringFree(&dsOrig);
Tcl_DStringAppend(&dsOrig, ":", 1);
Tcl_DStringAppend(&dsOrig, Tcl_DStringValue(dirPtr),
Tcl_DStringLength(dirPtr));
baseLength = Tcl_DStringLength(&dsOrig);
Tcl_UtfToExternalDString(NULL, Tcl_DStringValue(&dsOrig),
Tcl_DStringLength(&dsOrig), &fileString);
err = FSpLocationFromPath(Tcl_DStringLength(&fileString),
Tcl_DStringValue(&fileString), &dirSpec);
Tcl_DStringFree(&fileString);
if (err == noErr)
err = FSpGetDirectoryID(&dirSpec, &dirID, &isDirectory);
if ((err != noErr) || !isDirectory) {
Tcl_DStringFree(&dsOrig);
return TCL_OK;
}
}
/* Make sure we have a trailing directory delimiter */
if (Tcl_DStringValue(&dsOrig)[baseLength-1] != ':') {
Tcl_DStringAppend(&dsOrig, ":", 1);
baseLength++;
}
/*
* Now open the directory for reading and iterate over the contents.
*/
pb.hFileInfo.ioVRefNum = dirSpec.vRefNum;
|
| ︙ | ︙ | |||
214 215 216 217 218 219 220 |
* directories before calling TclDoGlob. Otherwise, just add
* the file to the result.
*/
Tcl_ExternalToUtfDString(NULL, (char *) fileName + 1, fileName[0],
&fileString);
if (Tcl_StringMatch(Tcl_DStringValue(&fileString), pattern)) {
| | | | | | 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
* directories before calling TclDoGlob. Otherwise, just add
* the file to the result.
*/
Tcl_ExternalToUtfDString(NULL, (char *) fileName + 1, fileName[0],
&fileString);
if (Tcl_StringMatch(Tcl_DStringValue(&fileString), pattern)) {
Tcl_DStringSetLength(&dsOrig, baseLength);
Tcl_DStringAppend(&dsOrig, Tcl_DStringValue(&fileString), -1);
fname = Tcl_DStringValue(&dsOrig);
fnameLen = Tcl_DStringLength(&dsOrig);
if (tail == NULL) {
int typeOk = 1;
if (types != NULL) {
if (types->perm != 0) {
if (
((types->perm & TCL_GLOB_PERM_RONLY) &&
!(pb.hFileInfo.ioFlAttrib & 1)) ||
|
| ︙ | ︙ | |||
291 292 293 294 295 296 297 |
Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(fname+1, fnameLen-1));
} else {
Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(fname, fnameLen));
}
}
| | | | > | 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 |
Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(fname+1, fnameLen-1));
} else {
Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(fname, fnameLen));
}
}
} else {
Tcl_DStringAppend(&dsOrig, ":", 1);
result = TclDoGlob(interp, separators, &dsOrig, tail, types);
if (result != TCL_OK) {
Tcl_DStringFree(&fileString);
break;
}
}
}
Tcl_DStringFree(&fileString);
itemIndex++;
}
*patternEnd = savedChar;
Tcl_DStringFree(&dsOrig);
return result;
}
/*
* TclpMatchFiles --
*
* This function is now obsolete. Call the above function
|
| ︙ | ︙ | |||
807 808 809 810 811 812 813 | bufPtr->st_blksize = vpb.ioVAlBlkSiz; bufPtr->st_blocks = (bufPtr->st_size + bufPtr->st_blksize - 1) / bufPtr->st_blksize; /* * The times returned by the Mac file system are in the * local time zone. We convert them to GMT so that the | | < < < < < < < < < < < < < | > | > | 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 |
bufPtr->st_blksize = vpb.ioVAlBlkSiz;
bufPtr->st_blocks = (bufPtr->st_size + bufPtr->st_blksize - 1)
/ bufPtr->st_blksize;
/*
* The times returned by the Mac file system are in the
* local time zone. We convert them to GMT so that the
* epoch starts from GMT. This is also consistent with
* what is returned from "clock seconds".
*/
bufPtr->st_atime = bufPtr->st_mtime = fpb.ioFlMdDat
- TclpGetGMTOffset() + tcl_mac_epoch_offset;
bufPtr->st_ctime = fpb.ioFlCrDat - TclpGetGMTOffset()
+ tcl_mac_epoch_offset;
}
}
if (err != noErr) {
errno = TclMacOSErrorToPosixError(err);
}
|
| ︙ | ︙ |
Changes to mac/tclMacInt.h.
1 2 3 4 5 6 7 8 9 10 | /* * tclMacInt.h -- * * Declarations of Macintosh specific shared variables and procedures. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | | | | < < > > > > > | > > > | < < < | 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 |
/*
* tclMacInt.h --
*
* Declarations of Macintosh specific shared variables and procedures.
*
* Copyright (c) 1996-1998 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclMacInt.h,v 1.6.2.2 2001/10/17 19:29:25 das Exp $
*/
#ifndef _TCLMACINT
#define _TCLMACINT
#ifndef _TCLINT
#include "tclInt.h"
#endif
#ifndef _TCLPORT
#include "tclPort.h"
#endif
#include <Events.h>
#include <Files.h>
/*
* Defines to control stack behavior.
*
* The Tcl8.2 regexp code is highly recursive for patterns with many
* subexpressions. So we have to increase the stack space to accomodate.
* 512 K is good enough for ordinary work, but you need 768 to pass the Tcl
* regexp testsuite.
*
* For the PPC, you need to set the stack space in the Project file.
*
*/
#ifdef TCL_TEST
# define TCL_MAC_68K_STACK_GROWTH (768*1024)
#else
# define TCL_MAC_68K_STACK_GROWTH (512*1024)
#endif
#define TCL_MAC_STACK_THRESHOLD 16384
#ifdef BUILD_tcl
# undef TCL_STORAGE_CLASS
# define TCL_STORAGE_CLASS DLLEXPORT
#endif
/*
* This flag is passed to TclMacRegisterResourceFork
* by a file (usually a library) whose resource fork
* should not be closed by the resource command.
*/
#define TCL_RESOURCE_DONT_CLOSE 2
/*
* Typedefs used by Macintosh parts of Tcl.
*/
/*
* Prototypes of Mac only internal functions.
*/
EXTERN char * TclMacGetFontEncoding _ANSI_ARGS_((int fontId));
EXTERN int TclMacHaveThreads _ANSI_ARGS_((void));
EXTERN long TclpGetGMTOffset _ANSI_ARGS_((void));
# undef TCL_STORAGE_CLASS
# define TCL_STORAGE_CLASS DLLIMPORT
#include "tclIntPlatDecls.h"
#endif /* _TCLMACINT */
|
Changes to mac/tclMacLibrary.c.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | * file. * * Copyright (c) 1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > > > > > > > > | 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 | * file. * * Copyright (c) 1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacLibrary.c,v 1.4.2.1 2001/04/04 21:22:19 hobbs Exp $ */ /* * Here is another place that we are using the old routine names... */ #include <CodeFragments.h> #include <Errors.h> #include <Resources.h> #include <Strings.h> #include "tclMacInt.h" #if defined(TCL_REGISTER_LIBRARY) && defined(USE_TCL_STUBS) #error "Can't use TCL_REGISTER_LIBRARY and USE_TCL_STUBS at the same time!" /* * Can't register a library with Tcl when using stubs in the current * implementation, since Tcl_InitStubs hasn't been called yet * when OpenLibraryResource is executing. */ #endif /* * These function are not currently defined in any header file. The * only place they should be used is in the Initialization and * Termination entry points for a code fragment. The prototypes * are included here to avoid compile errors. */ |
| ︙ | ︙ |
Changes to mac/tclMacLibrary.r.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclMacLibrary.r -- * * This file creates resources used by the Tcl shared library. * Many thanks go to "Jay Lieske, Jr." <lieske@princeton.edu> who * wrote the initial version of this file. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclMacLibrary.r -- * * This file creates resources used by the Tcl shared library. * Many thanks go to "Jay Lieske, Jr." <lieske@princeton.edu> who * wrote the initial version of this file. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacLibrary.r,v 1.4.2.2 2001/10/17 19:29:25 das Exp $ */ #include <Types.r> #include <SysTypes.r> /* * The folowing include and defines help construct |
| ︙ | ︙ | |||
38 39 40 41 42 43 44 |
# define MINOR_VERSION TCL_MINOR_VERSION * 16
#endif
resource 'vers' (1) {
TCL_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
TCL_PATCH_LEVEL,
| | | | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# define MINOR_VERSION TCL_MINOR_VERSION * 16
#endif
resource 'vers' (1) {
TCL_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
TCL_PATCH_LEVEL,
TCL_PATCH_LEVEL ", by Ray Johnson & Jim Ingham" "\n" "© 2001 Tcl Core Team"
};
resource 'vers' (2) {
TCL_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
TCL_PATCH_LEVEL,
"Tcl Library " TCL_PATCH_LEVEL " © 1993-2001"
};
/*
* Currently the creator for all Tcl/Tk libraries and extensions
* should be 'TclL'. This will allow those extension and libraries
* to use the common icon for Tcl extensions. However, this signature
* still needs to be approved by the signature police at Apple and may
|
| ︙ | ︙ | |||
92 93 94 95 96 97 98 |
resource 'FREF' (TCL_LIBRARY_RESOURCES, purgeable)
{
'shlb', 0, ""
};
type TCL_CREATOR as 'STR ';
resource TCL_CREATOR (0, purgeable) {
| | | 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
resource 'FREF' (TCL_LIBRARY_RESOURCES, purgeable)
{
'shlb', 0, ""
};
type TCL_CREATOR as 'STR ';
resource TCL_CREATOR (0, purgeable) {
"Tcl Library " TCL_PATCH_LEVEL " © 1993-2001"
};
/*
* The 'kind' resource works with a 'BNDL' in Macintosh Easy Open
* to affect the text the Finder displays in the "kind" column and
* file info dialog. This information will be applied to all files
* with the listed creator and type.
|
| ︙ | ︙ | |||
121 122 123 124 125 126 127 |
* give the user a little detail about the library's capabilities
* and enough information to install the library in the correct location.
* A similar string should be placed in all shared libraries.
*/
resource 'STR ' (-16397, purgeable) {
"Tcl Library\n\n"
"This is the core library needed to run Tool Command Language programs. "
| | < < < < < < < < < < < < < < | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
* give the user a little detail about the library's capabilities
* and enough information to install the library in the correct location.
* A similar string should be placed in all shared libraries.
*/
resource 'STR ' (-16397, purgeable) {
"Tcl Library\n\n"
"This is the core library needed to run Tool Command Language programs. "
"To work properly, it should be placed in the ŒTool Command Language¹ folder "
"within the Extensions folder."
};
/*
* The following are icons for the shared library.
*/
data 'icl4' (2000, "Tcl Shared Library", purgeable) {
$"0FFF FFFF FFFF FFFF FFFF FFFF FFFF 0000"
$"F000 0000 0000 0000 0000 0000 000C F000"
$"F0CC CFFF CCCC CCC6 66CC CCCC CCCC F000"
|
| ︙ | ︙ |
Changes to mac/tclMacLoad.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclMacLoad.c -- * * This procedure provides a version of the TclLoadFile for use * on the Macintosh. This procedure will only work with systems * that use the Code Fragment Manager. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclMacLoad.c -- * * This procedure provides a version of the TclLoadFile for use * on the Macintosh. This procedure will only work with systems * that use the Code Fragment Manager. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacLoad.c,v 1.4.2.1 2001/10/19 19:39:46 das Exp $ */ #include <CodeFragments.h> #include <Errors.h> #include <Resources.h> #include <Strings.h> #include <FSpCompat.h> |
| ︙ | ︙ | |||
116 117 118 119 120 121 122 |
OSErr err;
CFragSymbolClass symClass;
FSSpec fileSpec;
short fragFileRef, saveFileRef;
Handle fragResource;
UInt32 offset = 0;
UInt32 length = kCFragGoesToEOF;
| | < < < < < < < < < > > > > > > > > | 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 |
OSErr err;
CFragSymbolClass symClass;
FSSpec fileSpec;
short fragFileRef, saveFileRef;
Handle fragResource;
UInt32 offset = 0;
UInt32 length = kCFragGoesToEOF;
StringPtr fragName=NULL;
Str255 errName;
Tcl_DString ds;
char *native;
native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
err = FSpLocationFromPath(strlen(native), native, &fileSpec);
Tcl_DStringFree(&ds);
if (err != noErr) {
Tcl_SetResult(interp, "could not locate shared library", TCL_STATIC);
return TCL_ERROR;
}
/*
* First thing we must do is infer the package name from the sym1
* variable. This is kind of dumb since the caller actually knows
* this value, it just doesn't give it to us.
*/
native = Tcl_UtfToExternalDString(NULL, sym1, -1, &ds);
native[strlen(native) - 5] = 0;
/*
* See if this fragment has a 'cfrg' resource. It will tell us where
* to look for the fragment in the file. If it doesn't exist we will
* assume we have a ppc frag using the whole data fork. If it does
* exist we find the frag that matches the one we are looking for and
* get the offset and size from the resource.
*/
|
| ︙ | ︙ | |||
166 167 168 169 170 171 172 |
itemCount = (*(CfrgHeaderPtrHand)fragResource)->itemCount;
itemStart = &(*(CfrgHeaderPtrHand)fragResource)->arrayStart;
for (index = 0; index < itemCount;
index++, itemStart += srcItem->itemSize) {
srcItem = (CfrgItem*)itemStart;
if (srcItem->archType != OUR_ARCH_TYPE) continue;
| | | > > < | > > > > | | | > | | | < < | 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 |
itemCount = (*(CfrgHeaderPtrHand)fragResource)->itemCount;
itemStart = &(*(CfrgHeaderPtrHand)fragResource)->arrayStart;
for (index = 0; index < itemCount;
index++, itemStart += srcItem->itemSize) {
srcItem = (CfrgItem*)itemStart;
if (srcItem->archType != OUR_ARCH_TYPE) continue;
if (!strncasecmp(native, (char *) srcItem->name + 1,
strlen(native))) {
offset = srcItem->codeOffset;
length = srcItem->codeLength;
fragName=srcItem->name;
}
}
}
/*
* Close the resource file. If the extension wants to reopen the
* resource fork it should use the tclMacLibrary.c file during it's
* construction.
*/
HUnlock(fragResource);
ReleaseResource(fragResource);
CloseResFile(fragFileRef);
UseResFile(saveFileRef);
}
Tcl_DStringFree(&ds);
/*
* Now we can attempt to load the fragement using the offset & length
* obtained from the resource. We don't worry about the main entry point
* as we are going to search for specific entry points passed to us.
*/
err = GetDiskFragment(&fileSpec, offset, length, fragName,
kLoadCFrag, &connID, &dummy, errName);
*clientDataPtr = (ClientData) connID;
if (err != fragNoErr) {
p2cstr(errName);
Tcl_AppendResult(interp, "couldn't load file \"", fileName,
"\": ", errName, (char *) NULL);
return TCL_ERROR;
}
native = Tcl_UtfToExternalDString(NULL, sym1, -1, &ds);
c2pstr(native);
err = FindSymbol(connID, (StringPtr) native, (Ptr *) proc1Ptr, &symClass);
Tcl_DStringFree(&ds);
if (err != fragNoErr || symClass == kDataCFragSymbol) {
Tcl_SetResult(interp,
"could not find Initialization routine in library",
TCL_STATIC);
return TCL_ERROR;
}
native = Tcl_UtfToExternalDString(NULL, sym2, -1, &ds);
c2pstr(native);
err = FindSymbol(connID, (StringPtr) native, (Ptr *) proc2Ptr, &symClass);
Tcl_DStringFree(&ds);
if (err != fragNoErr || symClass == kDataCFragSymbol) {
*proc2Ptr = NULL;
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* TclpUnloadFile --
|
| ︙ | ︙ | |||
247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
void
TclpUnloadFile(clientData)
ClientData clientData; /* ClientData returned by a previous call
* to TclpLoadFile(). The clientData is
* a token that represents the loaded
* file. */
{
}
/*
*----------------------------------------------------------------------
*
* TclGuessPackageName --
*
| > | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 |
void
TclpUnloadFile(clientData)
ClientData clientData; /* ClientData returned by a previous call
* to TclpLoadFile(). The clientData is
* a token that represents the loaded
* file. */
{
CloseConnection((CFragConnectionID*) &clientData);
}
/*
*----------------------------------------------------------------------
*
* TclGuessPackageName --
*
|
| ︙ | ︙ |
Deleted mac/tclMacMSLPrefix.h.
|
| < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to mac/tclMacMath.h.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * are passed around and used, they will crash hard on the 68K. * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * are passed around and used, they will crash hard on the 68K. * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacMath.h,v 1.2.18.1 2001/04/04 21:22:19 hobbs Exp $ */ #ifndef _TCLMACMATH #define _TCLMACMATH #include <math.h> |
| ︙ | ︙ | |||
131 132 133 134 135 136 137 | # ifdef floor # undef floor # define floor floord # endif #endif #endif | | | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | # ifdef floor # undef floor # define floor floord # endif #endif #endif #if (defined(THINK_C)) #pragma export on double hypotd(double x, double y); #define hypot hypotd #pragma export reset #endif #endif /* _TCLMACMATH */ |
Changes to mac/tclMacNotify.c.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | * event proc will have to arbitrate which events go to which threads. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | * event proc will have to arbitrate which events go to which threads. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacNotify.c,v 1.6.10.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclMac.h" #include "tclMacInt.h" #include <signal.h> |
| ︙ | ︙ | |||
262 263 264 265 266 267 268 |
Rect mouseRect;
/*
* Check for mouse moved events. These events aren't placed on the
* system event queue unless we call WaitNextEvent.
*/
| | | 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 |
Rect mouseRect;
/*
* Check for mouse moved events. These events aren't placed on the
* system event queue unless we call WaitNextEvent.
*/
GetGlobalMouseTcl(¤tMouse);
if ((notifier.eventProcPtr != NULL) &&
!EqualPt(currentMouse, notifier.lastMousePosition)) {
notifier.lastMousePosition = currentMouse;
theEvent.what = nullEvent;
if ((*notifier.eventProcPtr)(&theEvent) == true) {
eventFound = 1;
}
|
| ︙ | ︙ | |||
292 293 294 295 296 297 298 |
}
/*
* Process events from the OS event queue.
*/
while (needsUpdate || (GetEvQHdr()->qHead != NULL)) {
| | | 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
}
/*
* Process events from the OS event queue.
*/
while (needsUpdate || (GetEvQHdr()->qHead != NULL)) {
GetGlobalMouseTcl(¤tMouse);
SetRect(&mouseRect, currentMouse.h, currentMouse.v,
currentMouse.h + 1, currentMouse.v + 1);
RectRgn(notifier.utilityRgn, &mouseRect);
WaitNextEvent(everyEvent, &theEvent, 5, notifier.utilityRgn);
needsUpdate = 0;
if ((notifier.eventProcPtr != NULL)
|
| ︙ | ︙ | |||
477 478 479 480 481 482 483 |
if (!found) {
/*
* Set up mouse region so we will wake if the mouse is moved.
* We do this by defining the smallest possible region around
* the current mouse position.
*/
| | | 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 |
if (!found) {
/*
* Set up mouse region so we will wake if the mouse is moved.
* We do this by defining the smallest possible region around
* the current mouse position.
*/
GetGlobalMouseTcl(¤tMouse);
SetRect(&mouseRect, currentMouse.h, currentMouse.v,
currentMouse.h + 1, currentMouse.v + 1);
RectRgn(notifier.utilityRgn, &mouseRect);
WaitNextEvent(everyEvent, &macEvent, sleepTime,
notifier.utilityRgn);
|
| ︙ | ︙ |
Changes to mac/tclMacOSA.c.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1996 Lucent Technologies and Jim Ingham * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "License Terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1996 Lucent Technologies and Jim Ingham * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "License Terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacOSA.c,v 1.6.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #define MAC_TCL #include <Aliases.h> #include <string.h> #include <AppleEvents.h> |
| ︙ | ︙ | |||
2116 2117 2118 2119 2120 2121 2122 |
if ((err != noErr) && (err != fnfErr)) {
Tcl_AppendResult(interp,
"Error getting a location for the file: \"",
fileName, "\".", NULL);
return TCL_ERROR;
}
| | | | 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 |
if ((err != noErr) && (err != fnfErr)) {
Tcl_AppendResult(interp,
"Error getting a location for the file: \"",
fileName, "\".", NULL);
return TCL_ERROR;
}
FSpCreateResFileCompatTcl(&fileSpec,
'WiSH', 'osas', smSystemScript);
myErr = ResError();
if ((myErr != noErr) && (myErr != dupFNErr)) {
sprintf(idStr, "%d", myErr);
Tcl_AppendResult(interp, "Error #", idStr,
" creating new resource file ", fileName, (char *) NULL);
result = TCL_ERROR;
goto rezEvalCleanUp;
}
fileRef = FSpOpenResFileCompatTcl(&fileSpec, fsRdWrPerm);
if (fileRef == -1) {
Tcl_AppendResult(interp, "Error reading the file: \"",
fileName, "\".", NULL);
result = TCL_ERROR;
goto rezEvalCleanUp;
}
UseResFile(fileRef);
|
| ︙ | ︙ | |||
2303 2304 2305 2306 2307 2308 2309 |
Tcl_DStringFree(&buffer);
if (err != noErr) {
Tcl_AppendResult(interp, "Error finding the file: \"",
fileName, "\".", NULL);
return TCL_ERROR;
}
| | | 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 |
Tcl_DStringFree(&buffer);
if (err != noErr) {
Tcl_AppendResult(interp, "Error finding the file: \"",
fileName, "\".", NULL);
return TCL_ERROR;
}
fileRef = FSpOpenResFileCompatTcl(&fileSpec, fsRdPerm);
if (fileRef == -1) {
Tcl_AppendResult(interp, "Error reading the file: \"",
fileName, "\".", NULL);
return TCL_ERROR;
}
UseResFile(fileRef);
} else {
|
| ︙ | ︙ |
Deleted mac/tclMacOSA.exp.
|
| < |
Changes to mac/tclMacOSA.r.
1 2 3 4 5 6 7 8 9 10 | /* * tkMacOSA.r -- * * This file creates resources used by the AppleScript package. * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | | | | | | | | | | | 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 |
/*
* tkMacOSA.r --
*
* This file creates resources used by the AppleScript package.
*
* Copyright (c) 1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclMacOSA.r,v 1.3.2.2 2001/10/17 19:29:25 das Exp $
*/
#include <Types.r>
#include <SysTypes.r>
/*
* The folowing include and defines help construct
* the version string for Tcl.
*/
#define SCRIPT_MAJOR_VERSION 1 /* Major number */
#define SCRIPT_MINOR_VERSION 1 /* Minor number */
#define SCRIPT_RELEASE_SERIAL 0 /* Really minor number! */
#define RELEASE_LEVEL final /* alpha, beta, or final */
#define SCRIPT_VERSION "1.1"
#define SCRIPT_PATCH_LEVEL "1.1.0"
#define FINAL 1 /* Change to 1 if final version. */
#if FINAL
# define MINOR_VERSION (SCRIPT_MINOR_VERSION * 16) + SCRIPT_RELEASE_SERIAL
#else
# define MINOR_VERSION SCRIPT_MINOR_VERSION * 16
#endif
#define RELEASE_CODE 0x00
resource 'vers' (1) {
SCRIPT_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
SCRIPT_PATCH_LEVEL,
SCRIPT_PATCH_LEVEL ", by Jim Ingham © Cygnus Solutions" "\n" "© 2001 Tcl Core Team"
};
resource 'vers' (2) {
SCRIPT_MAJOR_VERSION, MINOR_VERSION,
RELEASE_LEVEL, 0x00, verUS,
SCRIPT_PATCH_LEVEL,
"Tclapplescript " SCRIPT_PATCH_LEVEL " © 1996-2001"
};
/*
* The -16397 string will be displayed by Finder when a user
* tries to open the shared library. The string should
* give the user a little detail about the library's capabilities
* and enough information to install the library in the correct location.
* A similar string should be placed in all shared libraries.
*/
resource 'STR ' (-16397, purgeable) {
"TclAppleScript Library\n\n"
"This library provides the ability to run AppleScript "
" commands from Tcl/Tk programs. To work properly, it "
"should be placed in the ŒTool Command Language¹ folder "
"within the Extensions folder."
};
/*
* We now load the Tk library into the resource fork of the library.
*/
data 'TEXT' (4000,"pkgIndex",purgeable, preload) {
"# Tcl package index file, version 1.0\n"
"package ifneeded Tclapplescript 1.1 [list tclPkgSetup $dir Tclapplescript 1.1 {{Tclapplescript"
".shlb load AppleScript}}]\n"
};
|
Changes to mac/tclMacPanic.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclMacPanic.c -- * * Source code for the "panic" library procedure used in "Simple Shell"; * other Mac applications will probably override this with a more robust * application-specific panic procedure. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > | 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 | /* * tclMacPanic.c -- * * Source code for the "panic" library procedure used in "Simple Shell"; * other Mac applications will probably override this with a more robust * application-specific panic procedure. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacPanic.c,v 1.2.18.1 2001/04/04 21:22:19 hobbs Exp $ */ #include <Events.h> #include <Controls.h> #include <ControlDefinitions.h> #include <Windows.h> #include <TextEdit.h> #include <Fonts.h> #include <Dialogs.h> #include <Icons.h> #include <Sound.h> #include <stdarg.h> |
| ︙ | ︙ | |||
147 148 149 150 151 152 153 |
SysBeep(1);
} else {
SetPortWindowPort(macWinPtr);
GlobalToLocal(&event.where);
part = FindControl(event.where, macWinPtr,
&okButtonHandle);
| | | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
SysBeep(1);
} else {
SetPortWindowPort(macWinPtr);
GlobalToLocal(&event.where);
part = FindControl(event.where, macWinPtr,
&okButtonHandle);
if ((kControlButtonPart == part) &&
(TrackControl(okButtonHandle,
event.where, NULL))) {
done = true;
}
}
break;
case keyDown:
|
| ︙ | ︙ | |||
171 172 173 174 175 176 177 |
SetPortWindowPort(macWinPtr);
TextFont(systemFont);
BeginUpdate(macWinPtr);
if (stopIconHandle != NULL) {
PlotIcon(&iconRect, stopIconHandle);
}
| | | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
SetPortWindowPort(macWinPtr);
TextFont(systemFont);
BeginUpdate(macWinPtr);
if (stopIconHandle != NULL) {
PlotIcon(&iconRect, stopIconHandle);
}
TETextBox(msg, strlen(msg), &textRect, teFlushDefault);
DrawControls(macWinPtr);
EndUpdate(macWinPtr);
}
}
}
CloseWindow(macWinPtr);
|
| ︙ | ︙ |
Changes to mac/tclMacPort.h.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclMacPort.h -- * * This header file handles porting issues that occur because of * differences between the Mac and Unix. It should be the only * file that contains #ifdefs to handle different flavors of OS. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclMacPort.h -- * * This header file handles porting issues that occur because of * differences between the Mac and Unix. It should be the only * file that contains #ifdefs to handle different flavors of OS. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacPort.h,v 1.10.2.3 2001/10/17 19:29:25 das Exp $ */ #ifndef _MACPORT #define _MACPORT #ifndef _TCLINT |
| ︙ | ︙ | |||
51 52 53 54 55 56 57 | # include <utime.h> /* * The following definitions are usually found if fcntl.h. * However, MetroWerks has screwed that file up a couple of times * and all we need are the defines. */ | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | # include <utime.h> /* * The following definitions are usually found if fcntl.h. * However, MetroWerks has screwed that file up a couple of times * and all we need are the defines. */ #ifndef _FCNTL # define O_RDWR 0x0 /* open the file in read/write mode */ # define O_RDONLY 0x1 /* open the file in read only mode */ # define O_WRONLY 0x2 /* open the file in write only mode */ # define O_APPEND 0x0100 /* open the file in append mode */ # define O_CREAT 0x0200 /* create the file if it doesn't exist */ # define O_EXCL 0x0400 /* if the file exists don't create it again */ # define O_TRUNC 0x0800 /* truncate the file after opening it */ #endif /* * MetroWerks stat.h file is rather weak. The defines * after the include are needed to fill in the missing * defines. */ # include <stat.h> |
| ︙ | ︙ | |||
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 | # define S_IXGRP 00001 /* execute permission: group */ # define S_IRWXO 00007 /* read, write, execute: other */ # define S_IROTH 00004 /* read permission: other */ # define S_IWOTH 00002 /* write permission: other */ # define S_IXOTH 00001 /* execute permission: other */ # endif # define isatty(arg) 1 /* * Defines used by access function. This function is provided * by Mac Tcl as the function TclpAccess. */ # define F_OK 0 /* test for existence of file */ # define X_OK 0x01 /* test for execute or search permission */ # define W_OK 0x02 /* test for write permission */ # define R_OK 0x04 /* test for read permission */ #endif /* __MWERKS__ */ /* * Many signals are not supported on the Mac and are thus not defined in * <signal.h>. They are defined here so that Tcl will compile with less * modification. | > > | 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 | # define S_IXGRP 00001 /* execute permission: group */ # define S_IRWXO 00007 /* read, write, execute: other */ # define S_IROTH 00004 /* read permission: other */ # define S_IWOTH 00002 /* write permission: other */ # define S_IXOTH 00001 /* execute permission: other */ # endif #if __MSL__ < 0x6000 # define isatty(arg) 1 /* * Defines used by access function. This function is provided * by Mac Tcl as the function TclpAccess. */ # define F_OK 0 /* test for existence of file */ # define X_OK 0x01 /* test for execute or search permission */ # define W_OK 0x02 /* test for write permission */ # define R_OK 0x04 /* test for read permission */ #endif #endif /* __MWERKS__ */ /* * Many signals are not supported on the Mac and are thus not defined in * <signal.h>. They are defined here so that Tcl will compile with less * modification. |
| ︙ | ︙ | |||
143 144 145 146 147 148 149 150 151 152 153 154 155 156 | #define WIFEXITED(stat) (1) #define WIFSTOPSIG(stat) (1) #define WIFTERMSIG(stat) (1) #define WIFEXITSTATUS(stat) (1) #define WEXITSTATUS(stat) (1) #define WTERMSIG(status) (1) #define WSTOPSIG(status) (1) /* * Make sure that MAXPATHLEN is defined. */ #ifndef MAXPATHLEN # ifdef PATH_MAX | > > > > > | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | #define WIFEXITED(stat) (1) #define WIFSTOPSIG(stat) (1) #define WIFTERMSIG(stat) (1) #define WIFEXITSTATUS(stat) (1) #define WEXITSTATUS(stat) (1) #define WTERMSIG(status) (1) #define WSTOPSIG(status) (1) #ifdef BUILD_tcl # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLEXPORT #endif /* * Make sure that MAXPATHLEN is defined. */ #ifndef MAXPATHLEN # ifdef PATH_MAX |
| ︙ | ︙ | |||
201 202 203 204 205 206 207 | /* * Declare dynamic loading extension macro. */ #define TCL_SHLIB_EXT ".shlb" /* | | | | < > > > > > > > > > > > > > > > > > > > > < | 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 | /* * Declare dynamic loading extension macro. */ #define TCL_SHLIB_EXT ".shlb" /* * The following define is defined as a workaround on the mac. It claims that * struct tm has the timezone string in it, which is not true. However, * the code that works around this fact does not compile on the Mac, since * it relies on the fact that time.h has a "timezone" variable, which the * Metrowerks time.h does not have... * * The Mac timezone stuff is implemented via the TclpGetTZName() routine in * tclMacTime.c * */ #define HAVE_TM_ZONE /* * If we're using the Metrowerks MSL, we need to convert time_t values from * the mac epoch to the msl epoch (== unix epoch) by adding the offset from * <time.mac.h> to mac time_t values, as MSL is using its epoch for file * access routines such as stat or utime */ #ifdef __MSL__ #include <time.mac.h> #ifdef _mac_msl_epoch_offset_ #define tcl_mac_epoch_offset _mac_msl_epoch_offset_ #define TCL_MAC_USE_MSL_EPOCH /* flag for TclDate.c */ #else #define tcl_mac_epoch_offset 0L #endif #else #define tcl_mac_epoch_offset 0L #endif /* * The following macros have trivial definitions, allowing generic code to * address platform-specific issues. */ #define TclpGetPid(pid) ((unsigned long) (pid)) #define TclSetSystemEnv(a,b) #define tzset() /* * The following defines replace the Macintosh version of the POSIX * functions "stat" and "access". The various compilier vendors |
| ︙ | ︙ | |||
281 282 283 284 285 286 287 | typedef int TclpMutex; #define TclpMutexInit(a) #define TclpMutexLock(a) #define TclpMutexUnlock(a) #endif /* TCL_THREADS */ typedef pascal void (*ExitToShellProcPtr)(void); | | | < | > > > | 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | typedef int TclpMutex; #define TclpMutexInit(a) #define TclpMutexLock(a) #define TclpMutexUnlock(a) #endif /* TCL_THREADS */ typedef pascal void (*ExitToShellProcPtr)(void); #include "tclMac.h" // contains #include "tclPlatDecls.h" #include "tclIntPlatDecls.h" # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLIMPORT #endif /* _MACPORT */ |
Changes to mac/tclMacProjects.sea.hqx.
1 | (This file must be converted with BinHex 4.0) | | > | < > | < | > > | < < | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | > > > > > > | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > | | | | | | | | | | | | | | | | | | | | | | > > > > > | > > | | | | | | | | | | | | | > > | < < | | | | > | < | > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > | > > > | | | < < < | < > | | | < < < > | < < < < < < < < < < < < | | | < > > > > > | > | < < > > > > > > | < > | | | | > > > > > > | | | > | < < < | | < > > > | < > | < < > > | < > | < < < < < > > > > | | | | | | | | | | | | | | | | | > | | < | | | > > > > > > | | | 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 |
(This file must be converted with BinHex 4.0)
:%R4ME%eKBe"bEfTPBh4c,R0PB3""8&"-BA9cG#%!!!%V0`!"U0ABUe0dG@CQ5A3
J+'-T-6Nj0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S[,hH3!bj
KE'&NC'PZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!"+cF!N!0b!!%!N!0bCHJ0TD9
5CA0PFRCPC+@P!+@3"!%!!$J!3,Ea6[1fm8mc!*!0#%8f!*!$cJ!Pkk%!!5TT!!)
Y2L"#G@PXC!!!&e)!43!L!9-#3J(!rj!%!alrq2r`bd3!!)!!N!HPN!3"!!!f!%#
d(A&cYr3Z1!#3!h)!!5SJ!*!$FJ!'ICm!!!%S!#ATZ`!"+2J!##dq)(4ME!!!M%i
!I3!3!GN"p!(!rj!%!Klrq2r`bd!!!)!!N!HPN!3"!!"!!!#f"X)LYr2AD`#3!mi
!!#$$!*!$cJ!3CG!!!PXD!!!I0`#3"!m!3Np"Ae4ME&0SC@aXFbl2J!!!Km0069"
b3eG*43%!rj!%!*!+J!#3"d,"e42GR+Kr#fBFJMkq0IpI-TJ*UkQ!TS9`P"J5$`6
9XUc!T*AJQiV82*!!2S+,D'UkPrA,dPX%A5l"RRjbXF[%$S6[CXeH%"+fD#*rGT@
@C80cMG`(bXiZDP!*SNiB%PUM-c3VHQqJ3Z2#)a%$T%P(GF0A4)bb4!j,T%4X9`Y
+ZZMFJ9QCp0d+%Kc6+Ei!'f1r*bCS1Z"FQpc(5C!!p%`KjKKR[Z`qPfEjL4)f#q5
Y(YNjmi3NcBF83e,&V%'h90[L5'HlBp9-NLZYGamqKPIM%*kdmCMX#NQ1HJF"MNU
(d(!hMjYh[!-R-qAi8bA4qpf2EQ&0eHj'FNJUd4BY3D1mieJL&(VJJDXIR'$$fre
HadP(k6)ArRi*J)cEE6bhRaKBD6CA[[5FlZ1Dr[e@31LN,EeG`m-QVUMFKK,-`kh
458fA[Yb@R+8-A&lY09f%%(l1b+EJ[GI4+@`+X,0@B+fPKfL`Z4``0YXQVfDGJXl
2b8h0IA,*V4,'r)11$l`V[XGF#'HqqYNV*[hR$SBH`URY&e0qpCB6m)B%VDUNU84
UGHNbQ'`JPqApSR2$R[@!E&LlG6kJk(iC`#%I@!b$5Gbi#f*p9N'YE-UBHUS'QT`
#L2KAI$iP`RR`GKMiPT)0G%jM$GqjP6Ve0hj[[8a0!Tcj3C+!Z*+A%04G)*3f`)l
cI$VAZ&(l(-PGH5[jA@AA4edEY6d-2QFi(XlE2#+`K@SeKP2b5$&BAbYDQhMT9'C
X#*!!D!$kBPF+R+(E-*!!dPP[kpX86EASc'PmSlTX$pr*jFk%k-ZN-fYPJF-eZ'p
%ZpNhHlc3Ep"@lZI"'0&&1F`$#Q8pq-A1)%F[lIkB(GMTl)Tq8NU@Gp3pl[+kqpf
+"R+6+Q&*H(biYFh1[f$pl-CS8*UN)"0'R&3F)F#P`5,E)(!+$`["-&1&dMXY[NI
2@'0@McJ(A(@JIdG[VZlq3h`ie*)Y-pY,[(SP`$S5m5iYHT0S!Q%-bGiRVTmQUhj
qr%X4U`3Gr5ERmrlpjBp'GV(@jE"$jU(j+hiekl("C4Vk1lpZH)(%(bHIC$dk$#V
SfaQZcMmJY-ccpdhG'VmmHM1Lq%PKbNRDc%Yh$emhNB4dQ[%bDfcf6mLrYSb82He
aZrf,TP8Q'Q3*L#aYDZ5$ib[#c!"Nfe&,DA&%9#A&8m-Q)[Z!F'BFe+&VSp"Ui@,
1eSL$4E@3!2Tfr8q(e!`!YIj)lP'KjFJA94XpBa*F4[,&"4eN&GH[PQ1qEQBk&RR
GrpTce1h!%38T0eP24c(,QV[1'fZqPUQH"QHhi3l8h3R5D6b66J6Vm$VIC`d1U'I
hHf'+j2qeIcbhF53a4F,8B9je3hF*X3SZRIpq*j5'hSDBB-e[&Aj+QX&#D0AAm6&
+"U2qS#8SS$#"!E""SM+G'qM,4eVicPDXXb!i"b,2(R%#mDPkam4#RUj!k[56K(D
'C,CRa@ULD+1FLq3-kf`bd#+GANTUelqLqph5jI@qia,ZYbY@eSmfM3(dZQATq@Y
8#F510h#BrqC8ZeQiaMj)m#f8Rr264L1GK-Pd03$SVj22mRRr56IpI0Rj,*lJ$PN
5kTZp#p%0VA9N3!kp3f3`Qih3Q!cfVhDJ-"U98#dq)(Y,E@QZM`$lXR6Le8IA&le
Gk-"k9ACrjLlX(`rVE[rUD"A$I`ckEXa#09UFj)cFed2c"dSZ6S`C&YA"P6R(E0L
5Qhap6mkL6!`5rDERGC!!LUk*2D1bEa+Z#'*1R)B9%4qTJ,(QIjqDB#l%0e*pd@9
MV+VmCNSK6j!!Z&S'"ej99rcb4*3mGlpJTKIpkaV5#BE,Ii,qEC!!$1jjI1kfLNX
AVi4G-ARUcj9T$k"%f'lj!Uc%#N4ekqQVPaG1N!"PL25YD+6l(SRE"!9p,""`P6i
"9I6D0,k-4+fKYDjZACVqrUVhBDkGiTk@L&$ED%l9Li55dSb0TI(q[)@)#QrQTZN
9!P1UN!!$ZqL4Y,a4qUSLZm,5SLA%mUpcQ%4AE-k[H*!!hKG3BG1GiL+*@Z'b8DJ
TPK&e$fq6PImcFNH3!#MK3V+2c[3#qRbP"e@3!!!4EIbYc,&EVE%[$e4h"!8X-6V
Xj`VZNhYXU!+QR$b$2JLr1BlJi6#eNRI"@`1(R*+69MR"X3R"lFc'k1C%lhUac5@
b8J0NMSIfIKiX3ZH@p50CjCA'6qUafkF5U@3XB4*l34b!0*f!*a"SZL)2%GNMf`D
h64lVDj)USAm"2cMVRf1"39FE&)55a',(JH4X6B,0e$Em9*VqLNFpI0$KCjJel,X
HeDbldZMXL)8r+[ahih6PSfBZ11[RRUIa(q$K#VV@hD!!GF9d3ZNEU"JAGV6$j0G
k8`0eDJLrCIJeid#XhhafpdB(VQ1C[*6$[QQ@U*+Ti`1kkI9m(jGm9&heT*Rpp,9
IQRh)Kl0pHXQT-jSF4AGQD-D(F+GF[R8P`0D4G9A6A`LC6ARfP@%mP`Qp@fZi,G)
9@m`q%dDDDZ+hl"q*&"[Z5C36c9P98HhArTE-P@ERG%kIlU1Uk#krY6%m8(VfhFb
pbKZNYh1[PM5*XGZ+aA!mFHrD$4V1eDiHMY36Q@FAl5baVk6#GC1&`CEK%4Fj%Pp
iKq6@["(1Jlf3!'#'rfX9UKeZY@!DpA!jR-"(CdaIHhK#%HEkH2-P@KhmBAhKfVJ
iAXkm1ecpfj3K[arhbc#q8Hb5('qYlY-B3dJSl52X9#V&PDGmN9EcY,j%+!1'qjD
2%&EYa#f%N!$apBNQ&X4!NPbTb!)A6Q"lf'1N[,CKM@FpE'JkB6IINX&U4rl3i"D
f-J**(%r$bl$qp-9l3#aQD,q0dQ9T[$U%T8mCfSqKa3mZH64ijR[rqFJZlBKAa&!
-H(da*qf4UT($UPmSP((aPla&YPL+5)5T01lk1%FT%Qhr38DYTZ!E&r)T4q3$@`D
d*qXQUZ(phLH24%6dMmM)XH,k`R(p!94iTk'6Hi"p5G4KUr`FmmMJX6TcP@Sb%`j
53jD0JR0X2(VN`R'#X%F'1bMlbB&cY2()J4NJbe%fUVLbJAZZDF`ZXQY3-b19C2U
H&l[@JG3khi'AffdJibaBVd64ZK+$DdL$V&8b@INhIE(U@rl+Pb(L[S'lfjQFjQ,
e3RRRm()!C@4GDqSI0p6-ZH)8iB1!Me2lfXV[B`cP)!f16GfcCX9AbJ($l53QEYB
1TFq9rQ%N%)fhF1N9dT+#idj'id4!%LRSZ%3pSqfCcQ%q'aP6+C,jNDelC3-9$3p
DMIp-hNY2DFH),EV6'D&QdM-X9-6cZ1fc$kkp+lLAMqPAJ-(hH+1'T*ZSLRf3!0&
qaej*pLJKfLKYGG`(ID-B1G,)SA68Dcm+R31M"aj&L#r(G,BAJf0FU#d,Hi1aCaC
9-`-5#AI0HYZPJpQD0p!b2U%IjlqESC8hHQB!S[pAiifTdrBHU[$,+6(ejeL4J)U
jH(+1NYCS*TMrR[93ll5YG%eJ9(&A4qhU*T(*NbTr%V'I-3XKi[d6)%P!kGfij!C
54fhmX,A-00!-lK(`CbJMU8Z@Mp9Lm"D-HD['mBjqS6P4j*,LD25@+#5fK,(cRKf
#IPbGEab2XreEi[YQKM,&[RF+E8#h6A,rKK'"p0i+H4Ze``0afm$Lm9CZe(2pNUi
K$SGlYe[`-%3DeJi)N8bqLRXVbUf3!0BT!ii@@jp6mG8j8&M@$b9,P2G`'65m8ae
`F"A`+k`XkeIG[eS&(`SN24AhX'5VErpQP903jPk6*(S[aUA0aLQDFb)0M!SiKHD
!CRkC`%5@"0h-LXF)S9@#iE'Xq*i4$`I'c@*5B+T2dUEc#%m[(k+2Y%[k18M1cp'
bpD%PkK@ZVfTMCk&aTSbpb,`MeJICkkANkM8KYhHGcSa8Chrc)1*&99iN!IYUB(K
+mmbr&G2U5--m"r'9)cfIcq-+H5[%V+!!bNTmJZac*83-l02aMkV8cLZ9iG0L@"C
K'8cll0bK5*!!aE9Z9-m%4GBjNLHjkm#rbK"'!a4`6-e6@%b5fd60K3[JP%+NS*'
jH2D28QSlc*LG`@ack*UG1BV0#rTb2QK+PhEjU9AChZ@HI9'Qqh`,[*apYCMEFL'
%!P"5+cq*"Uf(+*9qEGC[X#V(EjdRl8ARk[mLYla35Ue4UHRkI)pji*Fbj-AdFp)
!qPcGIJBZeHpTM%0#eTq-b)2UU*K@8N)Gq`,pG))!`D8-8N9T2Ll[EX0%5!)S'AU
4j3I+*&JjKS&fE'DLkhGT1*E4D@"8VadLBk"f8B!DAUBa+6*$Sq$aDTVQDr-Je4c
p%XUEqUFZNMTYm,BDKIJ1LZrI!pPbPL3(pfGJlJ%[KQ0"4%Uei*r[@BXH%dG6bKS
+f)p4hC!!!C9He6V,*4fmZ69"6&,cZdf[+qiZqYmGC+4SLD)c,N'#-K9YjHek++[
V!bFidD4q!9H#MciHSD+i2CMq,H6&iG3bK2VL(&CLBC-j$A6jGZbJ@%)Ma"FX$0L
F0VZVY9k#4GY*c$LS'drT0bR5NN,hCE$2bi3"$9(Td#9&hG&djmaBR)2,NSA%+H6
rp5&DCSb*G9[6cNlCS(EY0(XT52r"[ZY3JbjG4)mk&aXEj"GS++h256H&PL*`"B4
QL4*Q$Aq*lQkIQmCIa,05ChM@[TREV*A@cKP&M#T3rS`*%1Y5XXL-fDL!D8U%P2R
580aV@P#'3`H8[[`$LVXB!MD5Ri6$e`N3,"NX+lkI2[f6CThmCR"!)ZiqE`[NZK&
c9d`5bh*CCpiV#'VRc1,#Xk"JE3rfi9UMq'jL$%PUj5)8l)58aJ%TqhUb(T'6Y1Q
b2,l046RkCFq)Hbc0*#0-`pRXNPehq5)Xe'EMe5kG*@jXL4&r&`0$RJAdAKYraS@
lJ()#Q4FhS1U,Q2MIcCKV1dGiCPG$8jM#GkDl#F6@hHiYlE1JlEr8ITcR@5Q`pJb
racSRM2G&ElG$%cS-Y0kN+ZHSH+N'Q61`a,LmET!!*eab%DbZHDRlHeNiP@j%B8'
PZ0*)NF-1,N!2BJ-(REAb(qY9k#-e&F+d*G&S#pJB39mbrp5,YEVrIQ8%$-B)djG
4S0E#LUdcNdUP3'N!lleG05VYL@&"cT!!l9kNXYbl0(")hKm!K3CIX3&1c8m8J)@
!b331E-0&S5N18J"*Zi31RAKb%9qpkf&GEj1eY"cLZ$6Uri0J!UUeidc9T-42D(-
&(*!!6ZffP[223*JpK2DU@2!$*CH)U#1a%-[#TK(0P1%hB2B&&RKB2h1(i`@&M9f
%Id8T)CLqr(4'&X"r$Ve-jPXrj*E)E!5iH,YXHf)B,kTAkIk$jDDf!e2E$ZpkSP`
JG!6+ESY10!4aPLZ@ck9Y1ZC1U"4"3M"KRS-`Q&Gr2#!NbZ(RRPhGbBLUFR@6&`%
4+@bYh5GDF2kJP*2G5faa#%e4Jd'1K5S6YIAZ,QZ!Ldc9FJTY05+PNY(-UfQQRh4
pp'"b4a4*TK*T%9U)XTpbeZc4$alIb[rNdBCkk"8HJeZIqSf5iV&r@%C@XaeA)lL
1H3eN"-L4iEP#@NiN44`l,3X!C56U!UeXCSiZX1XD#GV$S"#ql@ED*bim2p9,EIq
`fm2GRmiI@5D12jCXKVkfKR5IJrFI*Qhl0%VUN8TQiKe88'(j`36ZHl6"qJmCKqe
T-CD+f-@JKbl@QfSkr6""6-DR3iH[VB219iEDr"Q-FlR&E,$rC'Z$"@8$36`aYL2
6Jp!@$&(@9SHabidLX9('L%3%II8,IbYMX3Kh%lSNT3$ZBhcde[M@@@+Y'$hRdJ,
MdS%L)jhCkC*p8F#9fq1ijUJUQLVrld6C[)iNb6(#4AGD!P+p5mRQ!UFN9j1hK9h
j%cdpN9#Am!)p)F,!k*2lGC&1pk$36QIE#eIClTraZYRVDQar5J*69Y'Je-XN%Yc
bUKPAQ3HF#m'q5mqNiCE,bND(%GK-83ja4qf-PEdYhH,X+)$XNbj`*M1jM%EZ2N)
8V-A*2F[q2451h#-1hmZ[qHcXi(EK8fY-cd+c0@+#ajd"c'U5c[@HY@FiN!"qjTr
1@J51"lCLhrpD,CMLZL)Q68K0MJVM0F*!K%6ZKlP,&`Hl#3@aNcQCpGRqZBqV&dZ
1UG!1hjVe'ZS%*'qpKS'@PiaBEFEAc,f&!G!LrN,9&"ZfCP"kHi80*`3)D5hp`RA
ICrJSqcS&0)Khe'jeV%PicRb,k$4pd-,"R,CL"bCRd1RkDP*$AF-eNm)mH2IU036
h@Eh#JjQ5G*BjN!$ZV8LG[!BY3b4HS9-jUi%!'Zp,HDaCVj)EA2hp6h()PJXSj4b
rabBS[QEeZ"9%l[#$K1eZ+1[PF'XC%4U8iTL2T,9#$&FQa,E`+26l!+RdeJ[EaBT
-Z8,SbqJJ)I*2eHB(IcJbB4EF')!B'jUbI1E&r*B8#"DKTqD+AicL'bT,p8e"eeI
"hJ'L!2Rh$hR@FVL@mJamV,BUH(ae04kDA2ilE%ap"l`UiT2(bIhlG"Y3"0JVCJr
Dr(KB!PpMTTG(IAVeNj*qJa9[iI#-j3G38mDh@f@RN!"h+'Ka+pZKY2"m9pC9a9U
3!*h5UBH$EZHQm-!*45cTG+kHCm9[amHX9(f8E6'6DCN2QYTjqXREi@h(DH`$,[9
ZPiL9H9&#G$IXCSCjFddB)b,)rB#[+a[B,'%mBc"REE%*X5ALkJLb[Q-TaCG*Ub(
T2-S3ACihPYbRlDVrd9A$q2*Z`JaT"k,FS[2qLK[$UbbL'CaF9PKMmAa)Bjm1Q0h
3%*`[Ec"ZK06h3"+Lkmp)%CB$NrV@M&YLLqYGJ6DrjKacI&QLNA"HkiH8`DiSPaE
V*JpK5Th%-0'0aAId1rLR08Rl`9N5i-5YUrYf[r@U`kSPeSGXSCrqB1Lq#iIcN!!
h&Vr8V4f1DYUiBcAV`G3`P[`3Sc9%lJ@JX&kYb+I-)X+$qQQKC#h"Tp3EV&K@06B
Hk8k,6N81+9JMH1bJ%`qfE9`[KT@26$PYrLkP)DejSQJN,qkAF$PT[!!BT3DGUfd
rS1YMm")-e9CLqmVc10q#FcF)d*[P#K6[,5,5&KUT![Ui2[,p(eQPqNNTbiPL$0C
G$A(18rV%Q`ZI,K!@U-%SmM``B)N$Ylf4r0DLrQ,D"rTq*Lp#&H8b8+IXPi[@KQG
ZN!$Q*4p#a2f4D#Qj8@qXA([#2m#mI(cGeNEA#BQi&X%0-HrrCj!!Gb3Gp,HFAmZ
ea$i)&RMQ*fadD3%P!T`klJR(JkDiYT&fXIMK9("XLe$L[8Xc4"TL!l4,*V%PNTe
19CN`ZRk8i0D)`N'E%e)9kX&B2354ITUMB%AHqhE@qUmm3R9JlLDEK%)8K%@$X&U
)d&3!S9TL,QdCe+lMD5A3R*dMA%N11b-cFjjKmG)(dRaGde&ZhYZM"9!b,NP'Nam
,k@'SQr9@RfeVA!pG6NrF!f6pIGk5"a"#kY1Hf8-$m#*qmR`EhZV4*4%*!NTe4hi
@TCJ#C8h*hY+Jra!rrB`$SI)p5Ne`C-a3e[1cFd)1@d-qaSbhpd$I!NaaYUi(91e
&$4R-TKMp@Dek1KPM!P(#hGQYr'%KITc68R21R)mk8&44G*MYUMRGGHHc%)`UKE%
kEBZ4Gm0ap`N-pElhf[i%5k2V%8CRFTc!9#Q-EP,RXh@h)Kl!'QDR-9GYrF8Dkl#
[c#prp0dPlNfJB-I8G1$(a-H6UB@h$elJ[2jA$Bb6U*CT+D1,kaK%"9cJAFFY*2R
[G2H1$28B$[V($5G)8)#!F5`'B@k29Pr'3*BANL4#Gf+BT8l$jeU0(8A@V5l*M-R
khr&Dm02r8eQ$q#JAG6%j&HYHc0#T2r+ATpIFB3dPHX14!2ZAYT1AkBa8MM-#VG(
`FHNH,1SkU@kplMbE+h%XkG4-p-dNij!!EZT,++!lUXHLqpX[U'[9&!rRrL%EJ"9
je")UN3K66p,,kq`$a*FGSEM8ca24N!#9*PQP-NVeMGSX$m3q5"j$e%b,&)bi%e$
365LJ+HJYAQ5925DVK8EfIk!l1#VSCDl)E(j32cUJV*!!`lT-Ce,qm`ZK,i5GmYK
&Fih8@R"LY-Z%pa9&DieH!2qlQ44iU-YcbV((I2N*-EeiCB![`qd,a1Liq$aeTjF
@#TrlQcANr'6+dXm*S##[3LYb48U6b3P+4Dra35FJI4D[U'H'kSqCe9Qf8SI2T0q
-mERZarMr)XfUK%1hl,c@R3((IhU+)ffFQIQDa18#fQSdUEK5K+IaIJ1%bGP63,R
#EUd$QYPYEkH&k&p$rYep,8)+C!ZU+BF+X(qr%bZ6-MLXaGRS$bXGXpr0U&@MYmM
Ui30r)`%(4MZ3!+6m9NX3kZRk$2RQr,Gi81p5JDA[JbSbZ-Kkej33eXf(0fF68rJ
kmQNH(eDr-ETj6F[M**Lql(F0jlA(&D@5FS@f&e*ehJ0*jbmN@f'a13b@bp-r4LL
(BANRVZV,`HE)'Z0"lr-8Fl1LXQ1,2cJ@(GjC5P%6k19YPdSd8(@Z*bJ#2j*i0%k
0@l`E%0('q9PTpcr9mAKIrpeal1cZd`pG#1N9rhi5(FEY@bf5TLI8hHH0)ThBME4
-iLpXK$D[`,"TAK@&@6-&6celMVED66TAF9rC$aD&Y&1H@CF91(#&6c!(Gi(pUX$
"D8Y*)Rm%6bTKI4#'c2+&M2H&BFAH%1l*H*,C&iP8[2XC[lD2)9UN1G5N09aDNLe
Q@Qq[q40M+4E-HXaE!N5mB3L[Z!"C`D$dC2f0)SQMYJTplX(G!J+a[aq!AK6k[*c
SPi"jBIac+Gmh['GB(Fd[Q[TGraJKlHlB0jE'f(Hhf'Sam`i-hVB`pjBeZ%ZQZj[
$lK#J1GkmpN-IfRFc8p3Xa#ImF#E(VJVQDlUe+r&6-lSFia[0D+C!B!XV28d)G@h
ZqQkV@UMfRa4RQ[`GHDVDm2+6,q-&pffJRcQfNEP)rf+Ta8#KG`I)M1r3Uh+k9%#
*cfFX#QQUC)CjCk#L@AC1kXfI13ZGb1#!f&fVG-@6&PF4X9T8KMlI"*F8pBV#eS4
crC2EXkH,V-!9qIXrK3Q+cI-V#JBL03FR0#dYEi[N,Y0ffX'K!jdakSRQVSpl&5k
Xecc#$Fq&P)efrEV-Q56eP*GGICJ8'(2X82Y4JV#d&Gdej+[pTN"TB$#SJ!)(Bh#
LHq9&FeHGRKrFC`0Xe3l'+e3$,")H0G2CKic29jTd6Y3qc0[M$CTZ0'$35bKMHa$
qh0d,lS98Um5!0M0AT(E@q9[9D5ACeaF'c)36UG`X995kR[U(e[L[LN$41K(KVR'
+%V!2(MaS9!ekPaJlh'pphNYLrMr(DHVfeJXB3M4c6@'&A-aqe*!!baGh96`*MkH
b8b)&b96d8[,+Q"p8,A0!SfBBGU1!jaiC--"%Ck#!##`26qcZ#BB+3+(ipd2m0UK
6Hb-%,J*8RRq54'3p&Z#3!1XIP-Ad&0p`q"PqUi2I%jfHi((hVPRbJ5,fik8$I9l
KDXjQ(FLReFj"*2qNlTRBHl"HB(f6IVFJjVkPi@lm[9m'-VXT%,#bEMjS#UD8(3$
"(ReKT$bf!PRkjTNdlk#AhE@"9YG3faY1(+"bKcE,FrFRhGMiX-a"SSrYHq6h9&5
4QR8*-[cKr$Q3!!SSj,SS3@23pPH03*VeArE4jYaNVqq9"C(JSF$0JJ82',T8L0Q
K9@"SfTPX$[e`31X`acRf(F`Fe9Yq4JRdaTli%1Z"m2EkkL1+p2Zd#*,JRCQFDV5
,4Xe(4%*FKZR2d'MCa8fJA"-Z+qX@+-6Thr+4[CZ"32hm$3GHXV`pm6Fr#`a'C86
*C0qN*q-@e(aNlB'5B"Vj+69Q6e$6"R+1E,*'E-9)'QXGG%N1(dPl9jprNfiV@f+
4EUp0eSJ,mGpDTV1cddKI#XiGpfMD#JA`ka&r,BT*-Q@JE"EZUZbhfI[Ic0G@b+F
(a6`e`lL!Q%#m5DNCq4JMql`T'e,pmA3Xe@)1!bkG-VZ'%936'[m-Z1$*aJ911V`
JA3XLmY%e)d$N-lEH@hL4dN[l!5B+KKrb&j(h3q[2&@3&-,KM$FBp(+pM)EH'm4m
*K"-IYFN#FI44'[PYjXR3Yp0AMl5#XJLUP"j4i0meCeM0MfQB6NUT!!G@D9R+d,q
CA6PEhhHA,dbkPZbR6-qD-XcQ"VZM$qCq*SN0CZ4rq$hGR0#$Yrd1('i[64pT"#"
mYRVF#UlaV@I@KjTpLcQ-km&(&A1+,[T,P)!D+qF5mSYaIhXBlFf'dDfE[m`'diB
0c(NpjI[-hZkP"b(`p"@eKBC1*8@D2@3@q#%kEZhB+qU+H%##Ii,bmPkj1%JfFa)
RECQJQGp84"(M9`TZVSR6Uph4@`T'QbQ,e,d!UTC"3apHm#JI'[I-Aa#NS[H')*9
C!Kj"pJHYBm!dURFcJ&R[Kj@@EJ'E$+0-EqLFIF[m3902@Qq9iFIEQS28T1ZL4FS
6VF'qKEKjH-,*IZ3#1VVBV)8k95NIT5d8efDJj5h(f"hDB'[LUFq`Ii5fePL(&ES
%&KcKS9,pc)4f[B-RE"dQ+6qKMibcY4dabqd6VhE(cV0eSMUaekdT[N8a4bS%&Q@
NGm#p"j1kIeqIp9jQ*Ej4Q(4hj6lN4[VL,i01&8865'ZMU1R3G0A-$#ZeT1-j&#h
D`fEq6p61GMVJY3bLcj8Q`FB9*JP#2i)i,a,`iN`$NkQQ%aR",%dp('E9Z1pTXal
Gj&V%*AP%`8*XD,M1dCa%'&T9!)LlUS`8&jXVT!SqLrja545+c3V'cDaHDeIb8X[
rRQ,8&9`HKiFT[0eql"Jj!UK!CZ()d-mlKYqSTC!%!3!!4!!3Yr3YklId,HX!!!%
S!!!kD!#3!mi!&'eZ!!2[,3!!'6d!N!32!%*239p8Bfa6D'9XE(-Zci!ZH'eX!!!
%L94&@&4$9dP&!3$rN!3!N!U!!*!%"1#h3X(9$l9XEMX2p0m9F&GVDH2%i*,4[T2
15MDqbB#RcL(Yrq#EIrPRr6Sj9Lq6+-+h)TeDGI%$U*fiFk0TAVkK9Ih@ZM5A(e$
6#3jMmmTm'BQ"B!Vq)&ZPZZ'+@i@he"54Z4SPA-KJP"J,0LZ'2@@$liU4*&Qja2T
P6A,3LZRrA[L#H&8JVE[&QaBY50QmG96`TTM-k5BaLK3-TUlPcSr!`jGljAL'@Jc
-IJJ*6chd!0VA@-#kT#HhZ(j[BR`YX,j$RN4NjfJLiCdUjF"[`K50lAF%Zl1U[*+
N!(jDe90#h*Q%5H6pUjD'iKCNmF2U8R,MCLfVLhMjcr)TaXCC&F$AUG4-pLi`@H-
99#*Ik`Z0(a+[C&%(-a[Fk,'EJfpEYF5c'D+JX)FQIqhHIQKBe8`iC&PLR9('E99
6`&p+1C-Z1c&9!9U&Zrl+6bX#4mX'rF!IHXC%HG#q&U'#P'Vi`IA@iUf,26C`i'Q
[M*RMRBUYI65QhKTc!eac"%a+&89469J-'G39J9#4rU@A4@DkKPSGe!Jj6eHX[!L
aVcmdT*K)JVTL[8Xp-I9H'm*BGr#f*HAX@K*j-PcP1Y`S-a$&Rm35dPZ1eNX,L&R
hAa*")IMrY&mARkh'-RBfh1F3J$)@JMB(68*6V[*1K0FG&lHD2mlaMj,$64T,9,@
AHIdEf9a+d+r)!Z[6mT0qGq31U05`ea2@Q5eqIC)%U)eXF[XCfIAA%lM'jU"q"!1
G),$paX2dCYb+"K*m(GbljH*6H%)J[1hqJM@bS%c5QQmB09'S[F!e"p1&+RaUKqT
e10!b1U#e64J63LcL1aB6m8Ar`1G1&USp"c2V*P&QK,1BQQPKp-MmXT&S%ZaVlAI
UFUaGFFB3`cDc'c!3ISKjX,-NCFcEGr$r+f@H0RI@@rZGrH45JFTL@MdS[a3(pG`
61lmdXAcJmKRKMR@%DV%qAEY6fichGBmc8L9J`m+6kMN0*KMXHpl31ZCTi%[bK0X
MZc2e@"mk3k*NFcEqEJT#i)-)!'I2NcmXkY#Y(9F+dJQCfU((hK"h)D2kmdLfiZc
(85f"*L@cfDfY'pNZ'f-iYJbeqJU,r0jljMDdr3#*l@ATI#d)LN4*&(M,(Q8)DGQ
T#E2FB(M$ijLp-@piJKHK9j9J)`dSY!i4VE%fqJ4#fA$BiCMrYaSjEKp,TQB-R#*
1lEM,YrRaEHd*pdp$4Hi22*JFAGTX5mi(,QV[Ce`#qKk)88dMq6*V8"[IYkEe6K8
G4J545S2TIb)KX$N)'Lrc4X*SB"f5,D)k)[Q[A@3"4Le*IlYNq*D6Tmp9ml8ejfY
#3I"5U*HQEcN#(`qBiNrJ@DhZePdI'6S[[%Ym"8C%C#E)jC3dJEC3ENpCrUh0&9c
ZSlQZ-5BeiNG`)JFTPi93$hm6B"8"i*!!'A`Z$H`q#KJ(XK+9&e[[iZS#AK(hk-Q
lpH94dqHfXqaU)`FlBVEcUQB8Z'C'NcNYD`'GU'*VXR9@#4-"3@MVr-h@GrV+!QX
X9j+JVr3A)bm)FMq#8M--l1FDbB8M@+Q$NpQALLBLkm20bY05)5P`Q8FJhNmaGT%
e("Blq9VBETV9X%9'0$%R+NmG,'0@ef&Gd2$J-Z9$-[()*h'C*HUNAH"lU#@2+U9
bb%*F6FQQfNdYE&[b(4c)LlB[CKkVR4jCEFP4'k(BQ0La4*JdeMlA3V#eR2RpXaT
-[*H)hV@!ZM'"cEHK`4p9T)p1kU@H1+Rcd("%6V03Tb4X%9TQe64iFA0lXCUFCjc
S(8'E2Y6fNp9AkfArP,1HfVhD,9D@6R&&[9bcU920Ipc5Vm*0b3Z(%NDqP5c**40
cUZpL(mqachbQ+9Ah3[@[YpAVbX,"9*cIh&$X4$2SlTFmrB#fT%(aM-Ek4qiS#T@
iJMEpQ-qFBFN%Arhj!XdV8EYqYjK*FF%(5$UDD%@5#C9'(+h6%@A,H8Db+dG!NU'
8i(KBdfqArh2*INd!5!'ER'pfEa'RD!Q`C"&qKT8T-5VH45j6L[H1&+f@-+GPL"a
6"KG+Q*6)I6&dQZMj83I*AmaXaDrVFNaT,jP`(1bQj'ii(+5hm"[hR)-NeY6NH)#
2q8XR,MJ[Y[dZ@3MQRY45A1@`cH3(1r5$TiSS,Ak"bfGEXhJDk[mPC[c29&Rj-Y8
CjSS@X-Kl(CZ%$4Z2X3&P!jb"!8rN$VqRRIhY#IEJGAT--$&+QIQDD)fh6F*jS(@
m5-f&3ZH,B%IH`"D$#8Nh96ieb9ZTP@[UVjj(i@Gp'*@@XjM4,Gl`$lmd+'2Tf5h
AC)i16Mj!X!8)"flR6`qX+J6!BD+A',,mAQccP`TP%Jh9&h"'B8K9`6a(#$YF&2$
m'D-NcCL4PCeTiiPrS*CGcBkDZV"`leMZ#Q-r`#`8-@f!8rj"Cl!@DI*Rk,qDc,[
XVFcY"q,r-U'mc#HhBPU)ephaH%M0#THF&QeX'SRd%4e(6bU,lj36UF`I4rDl`k4
GI(*p'-IhMfp!3(QT6)`Xp)DhFA*iQmUbEl$Z`'IpbjpVUE(EdLA2Y&C-"qXC,+h
!ii5IB&!,)aRRDmd#RYe#pKqP*$QU4IDiale*m%pqq`EEA,5hah4Ebil%k)LpV1f
42Xd#TFSRJ25@"$NGfLG[2r!I@JV"!-h4JJ&jj[km+29'Q@4`B)Xf@XlMU'%0R!m
8G51+@l&[KlCq3JR$M`e%3*X'YdVB#TQPY'F4cpfb-QMK3&rD*(ZZTid@XV)XLGL
-)ZCKDMl3XHHEESD#9'0X"I'Z2I"p9J$5,"i+D6#iZmUK"0N-CDM%ZfBlRj`TBk`
F&AG#hQhLU3h23I4Pk+6DdmZafRi"PB2aFIbZ1,)fr54!kcjDDC,[PlX-e)JU8p4
U&$j%RB9fX-q3!%AY+QUDD%#8cHGN-p9b-26b25FJZRVZRm5V%6#$!CEed)mG`XV
$F$,)fq2+HUGk[T!!RUR[bPTQ%bT-ASHb,[B&DB*+FIcmBSX$fp6Nl9IM*FBmea"
ZEZ*0)0*alJU*HQ&h*adB[VEV%LYZV@!i3mS8H6!4f()i84R(4KAcUqehAq6BQd-
0Sp)q6I@f,!`-)FNmC#BUSC54rfJIXS0@A1lFC+eHdb[F(Lf"k&IGV!I%*b''Mr(
ae+$!24djJ$h$j8XMIE$JV@la%jR%jE$j4LCl!$BeTEr%jK2fYqp!dQlr2Z-DaB0
RllEZY3P`KNLliebi$!c492J34!!fT!%*E#m3'e(15SIrMJUUU"+DZ2P3,NEqCHS
UZFEYZ@'hfpJ`llNp%m3cV2(4p@2%JSPV0c,a-FI38Aik336GmH9"AB4TqLTAhJV
k!imPZ"!flb5J[EdE5IbI"`,,hfirY6R'HMi"fPSGVSLkKFG$k*dB(q3Y#YB@I!+
cpk#E$h6VTm%Z"Vf2!IR4N!$jph4%&1hpN!!p'&YIR@I-I&H8P@P1lEqCdTTmDMJ
9phL,cY8jJ1dFEE%q@9A3H)2cMm2TfaZ#Zl1%e-0Zc%I*ZHHa3p3NT6,)Z[VXSbR
2ZNYEZRalC(Pf(Yj**VQ`hr`",3k$N5q86dpYHZ%JqaBbNikmT,($Ul2%UaIMc39
ChI$*'rXU15%aq1A,pQ2b2Cc*'6)ReVp%&%#Q82"qJ'XH'!U"8a@fPE2S[a9B0eD
5EJpJ[GQpBB5V[4#QkFDpVbPS0r'cI+rl0Xhp#$*)PDY'rXIIK,BAA*-H"c(i`fh
INDHIBic-fZ5N!U&c'IUI-5EKjUNImG[Dh)K@`%j+2&6"3!BGVrf(9MD3!+fY,,C
2Alji"aZ$e[bK)HN[L`%1U+iX4&2mFam2X@,!%J2#qDFfrm#Gmd2#DQI'02'$F,p
*CZCR4G$`le2qmGI-S2b#4Tlr6&[RcLpD&d9!AHZ!AQbhq94,"PlEMfc%%@@lM$(
2,#ipY#5L1&m&e4'lPU[-EQT`(i@&545l-'dk,mX6[@*LGK#,NCm2"c*DppDb($H
HHQAJ!c98&-ZNIZBV0H&SqELpMQj0Nl"%*ile+B$DGc*%STHIN!#`ASNCi+VYPqk
%C+eiM`mlM%BDNRZ#aTcDBHmL$kBIMFS,AS)32K"!RKHF$Q)Nl,d+B@IYM6&,$d#
`q`3$+5YaQRXMeZRMBkckh6b633qqf)pb%pq,B9pC#M,,LS-IAh-XPBb''cHBZ9Y
bYjdD+ZX'XiGT#IL*k#q$$iJ,c2HAZ+8*T4fhD8Ae49Y)I3"5#&a08ZRaJ5fJG(6
G1X$FS6DYCP*qPX`%'4$V6X&Z%R&(rd0"6e)JiV'l3QPD5*URKC2d@('L[%23Mim
Y4BK*LBR)c3CKIGRi(i`bC@G"`ihd8Ar2J1#'kjUh%%A112&Z'X[FPLX-1`GCEF'
a$dk,8E%'bSCH)qYcqJ$0YKmLfI!94EP@!*TMK@EQS)RiJXUMq*EX'6P*Z*&hBC6
9BNiJNMQh!rUI3C+%EXJFXdP(D2EE`#"k#[*e#LFk6[$8JF8EZ*b&eTEDSffGlG`
pCV5h,eF)d1NF2'DH!RSYrbd6G+hhEY-G5(,[CJEF%,920ka5)G8iFI&iq",`p2)
8d&k)pUrP[&K#rZec6aYTe6C5Yc&6@qh+%@%ZVVMi1VNCiI0i+JEZ6YA('jBIIk"
X3EY-'UXdrjA!%9%SYR%+m06Ci3iZUXZ%Dh-+T8BrmV8BD2SRN!!["cVKqa5EcXY
"mG5[C6m)[!SQIZ%qjG`r'VF-hqXZH+&l$Ei%-Mep)1aGqrN[5*45M@LLChP1D[4
KPKlIQe!rX*X)6STc[hl0$0H1@ZH'X+LJ,3T0KcP,j`6XV*kB$%C%5,Ba2!ef#V[
!AH&L#d@8Xi4`fiFa%$qHl50%`*RX(dm59faqfql[5Xk1@TQPFJQ&P)@-+JVH-bj
+`THQr,6p)X4fcY[I[`a5N6`1Vai&[H,,,NEKFhi[%0Km6$mDNUJ'XJ2H!FT)II6
[,DVM&4l'QlfP$b65B``$&PH1FeIb8S1VMrYaqFk`aXHk`L+Yb"0mf,RN'c"NFe1
N8JecH!eK"pX$mMS2cFkf'ZbGLR-%3"62UL4[*PM4pmZ0T266#hDk!2IdBhq'2pD
c,Kp,IPcH#c1H$k`Bch"RaBc5EafRQF4CCHTj$3A8*HPZU[F"aR(VNlc8bZXU,NJ
)&AhL5APl$5'[$PSHY6`,LkULcl-U5f(2dkYN`rePm-pmI&1MSQjheUEP!'2)IBQ
rX`LHdY9HkH#,f4&[Qcb!M9RX1TfbY[!GJ%8PccrE3DeB4,fmTqNe-GZ6p0&ZB+L
K!%F&()"K9[`"HLAlp@`XhPb)#h@9&Faj'0hp4"4e[(IL)Kf03AAjlckV`4,Z8r0
qPP[pXQ@m4Qdh,2KC(CV2SBV`JGpZad++aA2NYI1-D&G5%3GQ3ZRG+[kGI!U%BU)
Xh&GeSXUG9!-LUehG#i1Q*NJ8#+IBCB)F832Ram6VaaMLS(fiIETTH0cXP*IZUdB
Tk45)NM$)@P##"M'F!+A--1&l-2bP5Q(FiVAa8'53!1c6j6VS*,fkiZh@SpZ@HfE
rq(jMHG&ZPTD`M9HPCA0De,PDk@2K6MqBVj)C0G-MH2DM!@D@ijEXEU6qc8H')['
I&J(rhddd(55L4+PKF5@#b`,#E!)Q"Qm5!J-a)Cb!meYU[)N"SCiLZ3V"-TUX9ZI
-lT0p9eRX+`kb`[J$,Pj&AafCT92"QMNYLjADY9iSAN(bbrEN[+%MiQQi0c-TETU
@PJkmhQB$B'K)LhcA[#!Q6qUfFL9iKA6ki,Y80YM65kr38cUZ*GhD,2DYRb'6#HA
Ihm$J2'C(H$P[!iZ*@"l)L+9!jmq#!RXr#T[H(fMdfUB8HLX6YTmccql#`I$h[K-
Nf`3K&Li9%,HU+C!!64LFr0Y9UQ8[2AR,U5`k-[%#-N`kSN#43qi,cHGm``m@IEd
3Dfeae&3J4(d!AVcVN6G+-jpL*BhShASU4D5I'4,rNS65['ieLiQ0L6[KmUXjUYB
PhZ-'$RSY+4Ip,`Qar5HZK%Y'(lpSURZ*aiHSh5bc2@B+N!$3ZTSG&J6%GJ8e*@[
,dU(!KfrIGF(RNFHFc83Z'UJG-Kj*A40ERPMbRV&Z2G,ZLqMTQk@reiZTAJk9C$m
`1(Q8MaGLE*SV@hb#$Jfk*RHXDk)d@ll8mrBpU!cdiVJ#pQ)&BfaHUNCFNQ,,%H`
hKh)Yj&!GLjG@VJHm!%R%+C5mY[0dm+@NIU#j5#Y%F9J4cNNke*!!&V0DJ+&B"[Q
CIm,9RUL4mDX3UM-hhr8i&*02856mYPKU8#AB!(CbYYP*iYihf&mCVbVrLrJmHRD
pHr!"&kSTRLpm#KfaiZE0bi'#5TTZC&`k13dRp3U3!)XdU(MrD'mNGQ(L*TD$rir
4B#5H(@$V+PRl"pGbYDFLq8[bG("J'&"j`B&$jmMr*jLFYZGLqc03MkXq@h9cK6p
(,S4#k!,'J-)A8`8%r`8a2"b[rdj[ZCXi@jSUm"d#@[%IY,3)(LQrC"beq*&kSq-
c2)2E9aj58P1q2QM(GfhP)(5P[Vm!@ILD)qQ2-V6HAG`+k#i5Z@rKX6q5b+98Xli
UYfS5aKekja&eVj!!dCZGh1ImNN(NhmhML%690(DHQKPmjS4lBV#MUQ'FNlR`jS&
D3eZf5jf*18QqNb`E%I@4,2MZ5F)dT[Jq3Ye%B45&$[J4Y%kU66Lk`2`kj4[Vi3m
L*653!!q#51$(SNCXZhp23R$BRTi9'C0$T-0XD$+aqMCkNh$'pFX9IQ*M[k0'ibl
h$bZ(2V'mk2K%2iIl3kQXMQI6AdN!XKQ`BF`ZVCEacJ$[-$6l%9PXaD,8rQ,Nq0Q
#YJfPq+Ch5C!!cNF%m5ef2rJVdFF00edeC(2a)#Uc1U@`,PeePNmlJGiD*GrN2UU
cpbL2B&T"B@c"bE"@Ad'M6"9KPdfQb65P%b$"LAVI&Q4J*1qG)3XBAR8EC%LeMIl
fdEa5G*18'Mpmj,fb5`j@1#YhKY*Af8BIUGf3!"@0f89#Cpl9hI8[1kh&T*a!2Bd
,!9Xce0KDbTJjTB++S"m*pPA84[hGZli3qee-mJ&)6!`@"[2b*(aG-cmY1@V@&@P
pFEe-BJNB)R)09@JS26qQee2PB')JIM,'V6fkj81cbFf!Fi166%!!5-rFLQ0Zlc@
5(5-E)i60qK[,20#5N[35`4lRMj3mSDDmJkTqFZa(52XH+p*M1A@2Nc8,a0A`bL"
*X'2SBer5h&r3DYMVA0"CaKAC$&*X$[B9f%aH)4YG%eVULKTikVrr)Ceq$qUP*[l
*!$C3Z3&rkLELdT8*)3eLSN0m1E0(LFAI9BF)%DriRm&""j4&Ab3qJV`BYkcekPC
XbY!8KGCB&eEP,6Xc9#EYC-KX)jk*99!hqNT@1hrJ0B&D!kQB*QI0qch`'f41Fc"
EfVMjGc8GS+a+4l)(GmBM-*jZG`1FX$F4aq'e`a(*@m)48S0-MLk*NfrcV%,"[PY
e66NUTaK%-#dp4#3XQVJ&&dLh"XK2q4K&"*bp(kd[MTK(N!!f,-X*U&*0MqbLmE$
MjkX[[4aF5#5bAM*0Lm@MQ34MS!*'i,`Nl&C6em3GLUTVNbMpr"%EUNBHl!Kph,h
m4!@-4N&X2B"l`F*PjPkG)(qTmTE6MJH#8j02c)I10GaB$elA0@ZXTVm3i)`piVP
AES(Dq-#Vi+`fFFA'T$R%mXF`PN"!+J0%TiibMUXqj988`'FD0)+GcJj'N5YKCjV
e"P&X@JFHHPEeB)`BF+TiB96N[Q`Xf9Didq-6Vr43P('N!h')k"B8RrV*eB&i[QN
3@E1fj`'D*pP%P(Lkl1ED'GKFJSbhmLH(&DTaLMM''qqI0hID2Pc51Fam69q40Y3
c4cbR+ar%Ik0l3Qj'A9X[c1bC6TNNN!"jhQUrI(rpb"ZB80@PY(*Q2"Q1ASiGhHV
%f2j1PM@Dh314@&5d-TA*2a%@hT9iP,Y8fFaB+Uff&0IP0YlceJ,VAQ5$%8`ZhQ6
9PcPNVdKV56Tai9'Vr*JEdF@L2)J4L*Y'VAZX%&TkkSKGQaDdBAHFdp2,$)[Mc&f
ISm02Ak9&jPI9JALeYRS+YNTk#BD4T3dc''e)QK#fQ'Kf[Ce,`IfLD,`P&0,JmrC
,ajdPK0BR'l%UP$i0QFUI)hKaJcd%RC,)N8q`01BCmQB8'Uc%5iG&c`kI%bXD'94
M-q92SHc$a5f5AJ+C,I(K@`3PZ&R9VcRTpDCLE$[cBjdUYMP@HP!2$I'+0HHFTNS
1aY'@685dAPY[k0T"Z@)(qRFa9p[1jJKQDaPP,QR9!F('qp@&`frLfibd#mXd2l'
mB-5bP53ef8iQk9"phlVT6!rh&c+PAI3Ch+P)F*r"60TB5T!!aL[21d3pIeLe0YY
2QlXQ&(-aQ*1D82EHlJ(j'D$U$8U`ImLUX)AUeTC[U[!85%$Ap80,K+ASaA)6%fd
LbK2hUd'JF@e%08%P5%TC8SP1R(ad@2a1j+aSMHCPdapVa$I"lAK%N!"C(6cV"2`
QAFa!@LbXNEQ"jZArMbHl5jZV`lVPMHljfN5NX2a1+pA%3I0lm3B2D8"QE5PImJN
J$rfp[U!DG,MN$06,`mZrek-+Q*e*Yj0YEZjNlRRa+Te*6)P'dIaRmEpXjGc`92(
e3ABrkE2ZN8bjjNbJBKk2rGRI!a9K98b'`iXI25`P3q1(C'2`G*DeVJDYN4Xk*"#
PcUNip3Cd&I3c5YNj@5V!L2RYj)Ul%#!3[J#PN!3"!!""!!#dSDNkYddlJJ!!)--
!!&JA!*!$cJ!4NZS!!H2N!!!G5J#3"!m!9'0XBA"`E'9cBh*TF(3Zci!!!)I$68e
3FN0A588"!2q3"!#3#S!!N!G#`G6%@f`GLi0)4DkN[b4RC2,[p#G'&Ba5`H5melD
4TILkXNc(dUD4AADeYh`"ae8f(MfSk)LA3PP1c[3#,a2j``qGXElqPTKk3KGX'TD
k!hVB4Ff`[h*lLUD'L`+BN6c+ph@'P!&+HQC-r)R0'I*m-,@$l!'[Q8GFUd@%2X2
,T"Lj"'+11`*Pc2PXHmZMq,k0rdC$J%*!aGkV-6Z`A**1B`f)kF9I0hGA"S9eM5U
U&Q0DH&Nce%$r6!CET+h4Ij+E*AKY)T4rN!!eeR69mlA95SVK,X6LPP3-CEEURhK
&'T1aXj4@*5k&L*3eldG'S6jC&9E10a(FPQQmKqIrX93df1k#Zb4FkJU8eN&Jm[+
fM`+19c'+,b8P2)XA80L+X%#62HeHbH!&`TTk,1mMj*HCmA!qY+j18l4Sj8`$D"&
6-N,Pq*YIlAa3$HJp'#hFE["N-$K#*FR2%2q5[N9Vi3+dQ&$A)-KC%B'e[PPB$k6
*+f+Qb6bH%bAYARAL+02j[aX%p8j%jDD@[FU+(0q"3dhB0PqX'Fhq,4qVi*G1Rrl
F1&NGh3H[CM$D8!!I0VHGIf#5E)MjG#k1R,d#@hZ!1erY&#"A9lb[6r2ZR&'[lHr
T25rGd`e@GdhCrqpN[jiDMdMSValBrm`'"*!!LZSPm5meDEVi*LSbYb(b#K(ZMSj
adYT)j4Ue,hHQK(XLGM%i6JV)#`2$Ik#q,0+E5-%YL2[&X4Cbqm,r5b6JAL`P)MY
H+USBi-`1G*B!c8mQmq@PGI)D0*2-aqP"hLiFXPr)e!ZZVA%ka)V+FDTJBL#(4K!
+pa+5pSC)9K$#TeJVpNrF-H@+*B[ffalK+R3dB1(B9QYQId@H"rAq&TE2V!2A1cD
FdMJ`PHBjD0bk0EKHHU#CBr(j@aq[!8U%XBUZlSDp1X9E"2TTT'eAdJ61[5B*I,4
@QKA%YY*qfaJab4Gk-,k6N@Vre+JLI*qh6234`RM&*d1pac@LC*B-YU6CNID4fFF
pA&)fU'$[G&G)q1lLPjK`@5Vp9N`4PM#lCNSPd&Mb@SD6d%'YX'2[db,DT`MAr@8
05'5%bY9&)S-1elM)C@c#AS(FDlPQYJ#X$6H2CK33[!+fC)UEhS)*&*p$&EXbjDp
5mU3+m5Yiq@fNMBJ*I[M6*110iP)qUGj$hZI88Q)JF`1&@A2'6p(5K46d3`Nb!M'
0S%YTkKj4A3`TlTJfl+Eb6X!+)rdVX'41@UbNSHcZY)Bq@`hDPBjqUBR9@FRmBdU
dJZP)h@rEaa3!KEaaQYX1LAEYSkdDj[IZ!+b'b#VLf)qF1a[1k2KPC!dl4PZH4q+
b)00d!HTkfL@Z2UMI5,9JBl%,ejmh$NDer$LFhBi*KU!2EN*9JE%MTp5Ze`MMD'*
M)ZC$T5%P4,8kX#Qj%Q[`QX#H8,2bHhA'Z')N)CJkRc)LpFb"p,%i4RfiQ-+C6`-
pCVU&P+bQH*)L5J`(EcMUTYrXi0ZaFh9lf#qVA()+5MjeP*[$@TYJIm-!$CHIRRH
i8jEc3m52b0H%&Q9b[aRQQd8B`[5mjJdIK9c,p!P%dC*9!#aZ@[2`UaZV+R8##Yi
BMkGMh&bMqT8rl&#"+BV2GV48c``8G+Vq$A%imGd1b&AV[-MJTdb0i*dmlCCGIp,
X*Mb06c-4%GZeQPlGm99jZe%l)@[+e23iTBVid+$454R"TT`UHbKAfN*HFLSmY8a
26pQp$dXKQ2b"9"er"%(#Ri-!#VM`EjHBC+,I(+U2M1XEFaE)$q"[,VBpp%b,,Tb
1'CY8$Td,eMaia%'YFMB@J$Z1Ml`KrT!!!R*0T!V*(U',df0@T-S"-!Z[ieD*k%N
&9G'-SM6AXXBZqdZdNYIDi!Q)[)`TN`D#(G$llHDEG-`AffqpE%d$+%*jK`!ETm[
P6mcEbQ8EZVJPK-eK2FNl1(rcf-8F[j[LVl1YT9j+CdBZ'*JDVSZ(d#JRelLN'-S
3-qBe[ql[mdD'qIJYVLMBrhlH#QCEKB"SamPVB8e84Uaji3"Sia4aAeHZKVkZQ9B
qb'k*9bi9(0$H5a[bG3q-G0U$h*&*j0S+eD*fYDAqKXISJ%dNMbp*!9fL`cH$#Yd
CT!+b!pE+C%)kqbY$1,"iKhm0I1UhrMm["I91RY5`*d!1h#eY)$VI@QX@4e3&p#D
+FaHT[FUllBTS4LUkPKBlS""HFM#00)$ZAN)XrK0j)G2Ad0L#23Mcj+TPEY,iBP$
!aqMJj#m)['%RT*-+'e&qbdIQ!+%*L`Zp%(lQIB(m$jj[2leU4bGMcIL8)kHH
2b3U*!R,-1j5dGR%S@4C0)#F-1BL@I6!qUU0Jp3AmBBmYlF,JIcBS9pi8RdEF'%T
kkFjKNc#faNlP4M`RBq5'APV@!SB3kh!TY,UHk0S)EmI*f5@*,Jm9-#Jh#G,&1Gq
1F)'Tf#hP!2p$Y%Z"&-YPZI"AKJZTm*D3!"Vq0(-mK8PLKRKLkmD9rX,K%15EI1(
G@-53!#QK9)+Jj4#'%U$V6c`L)!*1pKp*ZJfS(+,Q$[`*BADjZ+!a*(fPZ-PN5r2
H@IApm@'N"TRQ08UBHRSD-m2p'523!rf0SPMC05DB`,N*-R84-L+K+R98-2DZr5'
i%'')1l@PEAk+K(1J9SSSGAlE&i36L$k&6CQ&-M"Eccq,1L#3!24I428,eE)'GTL
cSPc3,YL+YZ@PSQC0lck3!+FbDRXQ,Ul)b&EPFXb6!AmDF+V94'ImM&88ki,ipGa
0@i6qSD,0)F")Pk&0fT50bU-PSQiaVBD%P2,XcA4mI!%Q-r#BhNE+"9m`(iRpPPl
U3`IFH8$1J#f6PLBCf-qHeYL+C@,TH@P@TPQUh'"8ENi"eNjCP`Ph0#Ze$PVqc9p
jYLj(Q6qZLU9ZIAVE1fE%TD`E2I3P4k$qI#Cm+ef62J6h0VADr$b*,A"X05%SCBF
"68V)T4r9Mhd"aDjh0i4mXX"bT29d3kDaCHRD#cp2HrqhbH&D16U%P[UF8M3@@'`
8*qjHUV#GAmP`r$S8LF4q5`8i$a08PmI+ImL&%N0GD$`%HB%qcILq9jd93H0dF*h
B!i4iKR"%6p$eTk39hZ0@d8c+2ZIreDFNi!BP+35eMle`YZV$K@PXFIm[`81CBk-
c#AJ"KiMbdch8kmfP,HQr,P3lB@TT[pE0GZ,!D,(afA),PkMKRM34PBN`lE,S-Nq
h$ZQL!`@XBTiT[(i)MLBbqf4b!GZjVf68i0S@!pLJAZdS,6$eS,5qX$f0$@f&aS8
ahPXl-2**i*b&J1+h*YBYFB2Y9*8L#@q)9Ld!ap+lkXXXmK!N"$ELVBj%)J-`&X#
j#,S+!!e+Z#&pqQ*2!iAC`CTqi@b[2-SL4,I-ca2`"c8B'X0S9hYmX)2Rbe"MN5N
QclrR*8A-4E(YNfd'Zrf8aJ2!e,0,imlMHB)8U"PEPkmNLSI!*pk4+b@lGMKKc'l
lU&6-i@BbCPeLLF9@(QfX*T8r#TG(4+G)ZCBRU[)P6FTR849TMNdT0mcpXGFrYI&
pR9(mh4qBbT+,eAFXTK'R$N`Fd*hSCRSH*D+YQN1X[T,QMf`@,"GS$*YT8@jX`&C
ZPaCdH`jI-@RAAdRVP289qmICQ#8#,XMhJQ6)[G1!j5V(',Z@JYhbqb9Te%qhSq+
G5lNP8K8Vf+2qYmrN6Sp*MHF1RVXqY(0e6%59b0`R$%I8ZTr6,IYm*U+(PGlH[bc
G8U6f1*!!Zm*B)$NbrBK"5`m%l6eAN!"'bD-@BB`B,lQ1EdS@T14,)8E,$TpJeaH
,PTUcqYcpE6#fPbjRk@Cpmc&,Gr%*QHc($qF38S@fAAJ"AeiSkpR5kq5Nfm"*KZ#
*lkAifcDYS8Uh-lAFk3@,8J$p!hlS,6rE[%5Lql"AV#(l#LhI#!X(3Afe39Bqk4H
aZmDZ'5GYR`V5Im(Y6jUhVaYBc-B8l`ME!8TMrcld&L,F0hjbND[XlMN1A+6REPb
1%YY@fHq8kTq434f$#c&5jd4(L[4(R0SULX("Q$**jAB4ck1KVV68`hdPTHlah)B
8rjG,R13#fdRdB(ce1EI`'r(#I3J'%-j0Yr@L)9rkmPb&Yl$i&6bk%dQSRJI5ASr
$[GJ&GQbM(ieCZpf+4&84$,PN%#1e#%#mZJR!dHFHSLJ!D5r[cb@1C@mQC-N#-jl
If8Aq`r0')&PPI980MNYQcm@I!28J$5EM-)1pbc@F`RkF&RmlB+#qFK5Kmdi9
U86SA(Ef2H"c2YcI580bA2IHi$Ke-,F2A0Kc)-Ie63bTlfrq"IiH"qCJ`U6Sk19%
RTj(qedHXlDCP(9I[!(5-+2,2Cfb*#P3(Cc0hdJkEl#Z$1mSN1JkeiGMc3Qf#cbU
AIdB"i)#K&mAaH[Ype#(B`p-G%-VrL%%MqcKpT0I!AaMd1fNPpQC4M+-dZ2lAb)`
9U5dZcD0G2phM%rLlbUJR@p23RUAAm(pkdJcU@E+c,+@$jR353k8c+ZZfkhPQc)H
HFHdrqXJ@h4#jP3k))pd-([YPBVc@P)H`,+aSK4,*Mimj1G#)Af,F((bEKP[UriF
D,iTrei*[eD$F"P2Z(`KqhiCCe1bhT48*@TUXqQH*hZINRPa38YVjfkfMUDXj(@)
,9Ci8ShqSaU1hMF*5"-("DeSeCK2kqr96[USThB5i+@*%21%6fkK5TJ"FM5IRqdE
CL,Qk[$fAJ0CK1480q#*"qEp+aI$8SrU&FPB01pjkbDiiFIeSZM6Yl4a3!*jec&(
bhpcVM8EUr)'Hrl@rH*d[h#Cfb@2KbljiP@M1bENG6PViS0HKi13((!DSE+!R3dl
$8pMT6$56IbU+(#CrflmAJ1+I3[G!j'C6U)pXlMRG[a2&S6FF5[-hJ[4MB&0!fBb
lLh'THH,)qI&ri%AkEl+NeCH'lrjjjpPF,mSCNPfjE(!KV,aejI%hKDrZhECfdQJ
b%ZEZQA5aMl,[90S")Y4F"31AL!0E8I8)'ekUM%*FUST`C-9-iTT'(6Si1Z$(-NE
Ak8@Req!PGa)5VcAiKZiJA6ehUCjlIFdb0`HPEBeP25!E`eqL3CcRE$S$13C%4Sm
6@M0JlpE(#YP!HDDa9La6T*cCaS(#JAeBDp1Pfc-RbCQKchqm8ecEYUIJ,'&lEM%
`G-eQ*N@K8I@ciH3M`X9h)#i"[5iire8!Iq,'lU!+i)fhaKr2V0*,i1Kl53lf6`'
fZ!-N+SII$SM*X0US00#NB3N!64Cq+EP345iXq`-EFYM35Gl)qkEjekZQK!,IN!!
Q&Cbe9'c'&`Sh8kb1kllV%mXD(ZQlBRRMG'&$dqAdl!+4V`hBK,fZ(A0K&+BRAB9
Z@q%Re+f`QmMG0KH9hd6[8%*`9SH93Y!DfQ8A+H4fVkVR[Xd8Zq1![fEHQE@pemQ
S'([GNNT%lTZF3hT!YdKHH9V*2Kb)[KP6ldMAPDqJ(Z*DTR0VRbP'e*pEj8Y$*ZD
4Q%%2M*(Se#QVVib3!1KG`r"FlY9lTF(bM%PVpq'`Hj!!Br8Cbb*LdZ#B8ZR,NB8
aXqj#I&JMQK(lID3ABY4Q10Cc'i&8LV@LUa49[i(1[5SZq(QmSph5SBc1j'A@lC3
%2UqC1*EE4,If+[#C%amlk2JM[me[PaC$6P`9e,1rmN[B9'lji0332bZlce,'R&i
%KVSCqfL)3pLA[*-F#5jT"`)3IR,dHM%V2YUT`qf-ZjXee-M4Y)pR1pIS5AA-#U0
l)fQF+f[DY840[)N9Cj-Mk5RBK8&T0[V`k!FTRZDj#R+2*Y0(kD[,U$3MJ2G$-DV
QpL-Ha"$G$"04HMCI"pCC(QefGQF0QE8$CDbHAXY1H2&,GEU8bXl1mCYRMK[iUiV
3jZfC$+!Uf@`4rm-%[kQ%`FD%NP@ki#,9!"ebfKi2iZU&1#Q#&i260@Idp!GjIjc
dkIF3"ZX)#+F9!!Zr(q1NfX[Lf(#PK+ja2@4&EI&mZU`'Kd281Ra'hX[KE,Sp4V#
($0Hhh3ik"0dXX!q!lL-YC4r$Ha@NXZb!fHFR9FVDV&-%UUr09lK[hjlV"k6VGmD
DfMQpjSCCIRC1q2B@F`$AXK`VrE@kNP`VB(4XhLLT9B4qBS4Sa"-HFGiH26Z"TX,
9[rIDJ)F-"`DmaCHD'jNb*(C1HkRT!QfDGCf8)-fl+X58kV[[l)Z%"'XJTM(5R&+
,%D'k4EP0CKCCYY1b`l8Eb`BjC4@"5%1"BiDRdLV3hI88bJ1@%0PJK(5YqLFA(eY
Sq&UEk-$3qR-*6d6b%jcF!8XZN58NBE`PGi[9-[Tj(JZZ5NT$IK)AlV$5LkK4d4k
&K1DYQdfcRU%'@6mh@AU5$&UZV9'Pkickq&`U*eDB&"T4eU1jXq'Ce4q!N!"CB,P
[DcrRB4Fq1,bCh4PiHhBLQq0+Vr)V5jaf!0RrMqBp9#PDYKV`Jc*CGahpreNB2&A
4B3V"%GYId`P2&jjl-T!!LhcipmJJHUU0l%!K6e#p[jJ4k9EaeSSAkmKRKNBYQ'M
Cr2`Cj9)P2U'EmlM5'U6PY3UT5k*4i$jQk3YjMC)B%MN6'8FY-qXfi#qLkKIlS26
F9L6P4@fU'0bAb'6Bhrb3!%%rH'&[*ij!b,F!R&&p)1cFdd%TR*!!S'''c(&h59,
DLaEdb(Kf@cLb(JXH)`5LMrCG'!"bZJ09-R*+bBSqp01rGh`DN!$)T)lJb&N2ZX-
-K8D'aI5kmVej`+2a[#N$R0HBHpmB5Y"hr"QmBYqM(KKT`fHN5MQ2Rl[NDkBT@P'
&"Z-cV"Gi4!Fr#"f@d`JGcLd4fRUk@YF$D@09qm$&"EY-&NSdDJ!"5B5P`U2q5Q#
eA')!3&+"*EKPM,2ID*%9A96al3QHRXpC*ZI+&5N+#jNB$6!,*`[a6La0(E1`BQM
'cF(ilQME%XmI*8F)',)L0kRcq&1X5r14KP,a8##DecE&Njl40$R4M*YcE(Cd!,9
PDH[LJqjhq)50)%E)(Ta*pBJpIpcA#5$X$dUedqJFS(BSH'D2@)(jE*L68eEd2DM
%kQMkh6q3!)FB[TkqelG*9mM-LNd+Njp'@6@9G'Bf6E690UfY&Rhl5$X6Gd6Kd`K
P,Y3IK3Cf81'a5hU!NL(P0C0`E"@#16iV1BcC$b@IEf'A5ZT0kD(!2Pr0@ZRpThB
U14[c4+Iq5I#,3+1@ZQ,YAQdd4*J(iZfFI!`UT!NL[,Phh9Z-Zriq%UC1AI!da,1
BlibB%#(4GM1V[L3YQ'fG)i*B$UDbBRU9c"TmV+UZPBCHI6$&CLeXDTdJcFm$jCT
HJ"!-a6GF`R2jYX!mej9QDL3A%#2FbmMi#995(5H2Q!3h@1ZD8!4aICXfJlLU"@H
XUMKbp-[A9#G"TVF@%U2$YAh9-#0i"19pCT6MRCb-ml8"e*keaR%%4i6GiYPI29c
@pH1VL#NT0jlNa8ZRYrbq[bJ(U#(da@[RkJQ(Ma,bIf"#-i*K@5b)VU4,QGQdhRR
k41SG-UPbN96NDp"%kdmL5YpJaFGU"eBUVpZ9Drdq5dqhiSeFCq1fG,46amR6D00
2-F2LPHM+!CpBjX%rRMFUXH`!#pUd*5"9&GBEX9@F,D1[K#K*#X*,M$39b*Eq52k
[Pk3QEU%KLjZjD4%ESA(@M1q#eK1qaP0FpPH`2j)p10-Z%(k&5f(!mC3hIUA[e-S
kbNTcfJjk2-TqPB1bUqqkI[6erFSQi$ADYG,&CN4hm%H(T3fhVNMaY'DEf$bBi(S
r5kTacDkTIpDD,Vmq8NP2$2SjqNPj9V8cm9"j4SkV)F$a8KY"'(%FP%8$F3GpppZ
*UHicK2m4`jr1"HI[PC,d3NZ!mL"c'U"1b!"eVSaY)YDj(@PSC$99f1Lj9Rqf+J@
&8%D4cC08KIGfS'MeURYYpQrpXI(JK24,9pJ432aeKL@a8MC182eYU)aX%1)E+3)
9ULU6HqFDhT+3!2b9Rpa#h0"lHB4R&hCGD!5LaiqMEmc2-(VQ2@P#X"%daQ`15cQ
G#FM,U'EbPG!VpX90kHNe%6U#+!!F'F+RTj%M9Zc*(R4&8C%9%Ra,-M4,6Kp*l[0
VX6'CM0Z6USJ&rfqYR#pCGHY&bL4$RRGG`VpaL$AE'GG"S4lXK`2V*$5lm&Ib4V*
jFN1HM[hfNcS"8`G"4H@TZV`QTp3hpecGrqadDZU[c28ADS6U9BNp03XZ$bfVU*k
XV*!!i1Y8p!6Tfhfrb0jjHXJ5E2!AAQE9kCQN"VZKmC&YdjSTA0bM06e60M'0@L-
b@&kec6T,K3JI(Xdj+Tm"eaCir#+bYAXVHI3h2R)'9Bfq-D95lcb@I"XQG!-KCq6
(meN%$GP#,K2-L['Kfl8,XRQ)B23f(GA)Er,PDpB-[)rPKbCRa-,XLmL6KQeN[2(
8ZrVGFT3epD8dR%6bSNb8A#!FqA9$Ej-H4kTK5aT,BTXS*1jThXB-pqZ*EFU3!'A
`6@GY5SM0j$@RQ6K6p6aNi%0$G6J"GVMm6pDpe)Rcd8j*)he-UPb"IM#6B3l%$+k
cUrePhi%d!(9X#CRh5"G%Eqcbake0'l%&eFpJ34h(1[#BlQ+kB!I@JDDD8ZV8B6I
VM"@UG,QGdijH$F1k2+9M`EI!&(`$L[3+#'DI6crX*",#1*@FPfL-Ha-UU$IC[bY
[GXIDUiJ2*4"bec[i+Q"IqF!@km0qqm3-9%`KiTqkI1r`2-SP+Z0hM(A#dfNQ2b5
@!`a9jN"CB#V$GpF'iBNJ$b+C!fTEkYjmicMrYec+r4&Lf!m,k$[*34Uf-A+U%a[
ikSUFX"-IRH6XpVV$"6!KG1l2@qLk)!*"R&JIB%Hja1pTAfQ5Pbp51[Qam(UJ%jP
(mYAe#D"[1D-'4K9LIq#mVfphA`EehQhEGIK1eI$Qm4ce`0Fd$MLp-LBC@#8qSZV
Ki,Z8A!8Z'4P%rh5[kk0Nj#FBU$N!k2U%3A3rPfhC0kU!4c1Gq+ZkLb+-T(##&-V
ecNUl*Y[1fl#[MB-#qNMaZ1m,"*J*GII3Z2NTVQl!KQ9QqJhP$KfSX%pRNbMa+e1
,UE$(ck@[ZJ8$edP@R!AF#S@4PPF0'&'(GjD5`pA+cU#KY$c*hDS@dr94!e+3!%A
ND-0+I(5M`4UXq+05I&TAcS`d&U8B6G1LEEVLm&dkPd+V-)8)$eM8[hpd(Q$,5r!
[+PRd6AhA3bUClF-XX8QBleEQ$9-'!9,85F&%9(M[BdJI%2"Tb24A$D,*,6DlXjq
UQ`C-&A9B1'2hUJZf"K2(5i%6I!Qq+#G%V!9GII"-MJbcb1l5@F5A4HlQTQB)B*b
k2$J`+Dm&S`bd,hM+3XFdf!d0'A1a@eq*,XMK,SEeI%m[-cT*)1QZPIV089RcTl@
,(3ehcDK*D81+4bICrVlXVrkklL&&h5'K$'jfPq!KqU*4([+0lQDSCmTaS)[k-r9
iharrb5)3PALLGQHUI%fa%2VP0#3*j+r2hiZPRcLa%-#V`"KlGJK4lN3AB)G!jG`
`3%(-#015IH+('kKR1hi+AV&[`&"X#0EU0IqFF!4BpU0@kl9UZG-hrd(CY&2iU`[
l@50Z5pCUA!#r[HFKYjp'%Lh[i0S)jH#*pTYNTM-0N!"ei&+M,&!F0RSY6P'q&+5
BY2!kL(VJJM4feLS"3rSiG@QGceS'am-!L",FHeda9p*8V#SeNF!`#Y0qYMJ*,hZ
a-Y`+k"kjQe(,RT90@kp,`m[EA9HD*+16MepJ2A9`6%3eASH2LEIKMckf6RlR-kN
3r[I0PYqaFK$R8l)dR!"S3N#Kp!Z6(KZK[PdHA+a3kKfPGH(j21FPZ4MXPp("NPa
MD@qc%p9@3GkZ-3pjPp+ilSNN%&PL@TFh&90T!!LFTUfJZeiVfV#q42TkX2r+TQh
Il[-P9!8T+l"a3,1fh-aTAmi6Xabd,&jIEYfT%ZQ+C-$)INQ'JGJ&SHMJG8p1,jY
52DDqEX-2KER!8B96+V"%Jd+*[YkKkJqDFQ'S'q[&ejGJJHlZcaiLIS-X9Kr++R9
XX`VMX[qc61f1SJ!@R%qpG%HDSZ9HPcUC6G#&'(Gp%cC3FqJ-2Y*$@baMifc#4G'
%p2Eq#%a[i)&#f`YG%ebGML"32##J3GhXXPPc,EXKUpL1'R"p!Br`-SGaQ[KaBAF
!K4#PN!3"!!"&!"#hp#haYr3Ym3!!1QJ!!'mX!*!$cJ!9`Yi!!U4E!!!@V!#3"!m
!9'0XBA"`E'9cBh*TF(3Zci!ZH'eX!!!%L94&@&4$9dP&!3$rN!3!N!U!!*!%"1#
h3X(8iXXZp(-krTf8IY"Piq#rik,"FeHi09PXX+HqVbNSXImj5m86%'83J!02008
HiH%4L*(c)IEi3[$9Kb@DaNZ9#L-cE+j"D*)*rmGr(q0I)pYVB36,65&C4R80PLm
1C2mB3lkV%ia3d$05+DF9T9(2i%Pp,R',&KYJ5,8pj#*e3YhJ#L0Mf&4Gp4Q%0'T
!3ILQ#B-T-jY5j`%ZRqjkrfZ1lfpfq)`E8jjB-8pISm4Ip*,XqE2XPr#qY-K8-r#
P[N'(59M%(GA+I*(6##2)`q5bS5'#JAp@46CK9(I[J4*chDR4c-YSr*[Y3J3i$8m
e-aQrJN4@'NZA+hXiDl3flG[-G[8UNf&h,Gr29Nf*K`L3!1l%$bUl9K+i(`bpEC[
Mc`LKjCmB,L'X1ipjTEqf,FM!f$$p6C4,@h+EMJbi$U$6@S'459-K3`pQi0bmDcV
RLSfIJJNp-aDhkif2D1!4@Kqm!)h*lqP4eQZ98EU"*QmTNdd++&fjfqPL'3p'*DG
&GZ"CKf!T%V$`ki1X#eSjLD&&'D`F3PMM'rJ'@@'hF5Z05'cp%DmQ4a+l*-&T964
*"V)AeUpmCpR2h1%mSMF(q+-'Ti6G#E5R4q%"a1iD*-E0Kbeqc&YI!p[e,ZcFpEm
'9D+(Iq#bHE5T,AD2@Xf#%arVJ@EGdqDc5""D%ENc(ep%!9*"`h@iM,Xl*I5MPpE
e%Z*phC%ffD%B4%k4l'BBAf16e1jp!qCLJ+9i6b36qj(%hGb3!+SI*rHid3rN8#C
lH%eLG%ST1Xh(&`Ii$pi%ZTSN2S""dEL2,3)Z9JU9UA51mhqh,DYD$X+#`[qZqXC
"Rd$ejC@MU`eaG1M'1IJ9@!@,rN9MPA'-PA8$Y8#ILi$`@eSpYb1LN4"D-b'IJd'
5@'#hEA&MhaZ4'SSLLISbddS##T[rd+Jk5L0T$A%"m$UC#S1fCHaED)hNjNf$bCA
,04m83Dl+!!TfDN*CY0LDdmQZAf'ArmUG98lIBhCJEJ9&HpR"2LN-dLSe01V"E3I
*&pl-3m2eh1Sb)Dd'[lH0HC6QI(@d1d25#"8U+#F#(#&2b'L**[Tqr9JcJ1a-$NL
1$I96Ae+'Cpp8'PPmAk1C&LId&i[[c,$H%$MYZK)`,k3U-+'U5KHCY)`"8'fQIL&
'jIljFj4jK'hiEI#8q9-Kd4p#`"*TUcZiBUeG'CdNB&c[VBQmb3i!1la(*QINT5i
15"bR2PmV0$(`V`0#RIY[KB&'pp#8[Aqpi%$&8dRD*bpI#c9b0#Y+!Xll+k6'`EX
ZM2ac"H+j2drQiC!!%QeT1N!*`Ci6C#krmAPl)6p4LND96"hB8%["-3Rhl[-,0lA
6[QRh((GX0BqXCCYm9GcT4J&kV*-Dp201bp(fP5Ep6kpAMfJ-HBVI"![-U6qbp%j
!IA`UM++9Ml#HEJRZeAC6`SDI#KlFf`4Vm5$F&ULP&H1K`LHqaZHh6@m(GA$ID,)
KNfD-QA0*jNj5$K8Bmd3L9rpd%"9A(('RQ[kq%6b1dLiEc1cqK#i2XfTrI5)JU"+
!S$$HM'rr#1A2j*)N%jh&D@M0rL@cQ#"3hBr#SI-6J$Tb3N0"`NE#'JQKY2F'r!)
aGYq-pL-4MGfA0J$L`c03iRf4"1T'd!c9%er2XIiqIq"e30JjT#J$FNpb820IS9-
4BdN3AR@Je6GVeFh@9T0+pll%L-DXVI%#X)NVS2R`ZqJ$6+*EAVNXK#bb4cCk+8a
D3d''l2@(FYR8IR&fV%3V8JMG[%b'!*01'CJ(F+lm)U5MQZ,(@T)Y4NhmqPL`qfS
0EHl@32U5NreY-X8MYIANPeG0AU%hf!eMD"Lh,S66&6$#,!`NAJlG`rGVL5+DZIX
3G&1*JrX3bTq5'iB4MGjGFe#fD'UP2(D4J'lS+@R3DRcPqN,$SRch"Da[Hb6!GXM
+*"bQa@0`dl#GFhLZ!%la1,TF'Dh[&TC-mTAm+D"R"18K+KYe@kB[Y$hBp$#41T1
mlJFb83q'BH&H@Tc3KhBN(D2T&K*aD&RBhe)q0c5k1FqPSp)EF4Tk%Df4IZ)BG!f
MCQ954TRK19d2U@&,mkGd'rdqdP&ZYlD#(9rAeYX`Z&0FM&`f!24EG6SdJSiD`0,
%eqcV9r6!LJYMpqDqP6MT$S'UGaMU[&43JC3f1Q'LidP%2VjJb64$'@2&"(N3Vfj
!1Qe$*VS@jdFharZpFE*!!IcM6aecDZ+@lE@!iLNK,a6fZH*m[,lH'r`91Rk2aBr
(0X1VYGXe,9mN&,1U2Gb,C2Sk"L11F*'@`"@!jh+M9kJ8%a1eJK"$8rR%lCC9F5m
PC4!4S!+VTh-d8J2$G,ifVAC9HqECdXm$*r0%GBcIFA!AJ3)ej1%Ri4"MQic0kl2
CmDYDA4i(6)Qdp3hEmB)M+i3R,3d(Ghd%Pb+FS%2qjbDFB5N!aYrKY#f&HSGBAYJ
hY@hJR8mHTr!RjNdA$C5&eXla1B[rEUk`)Nb&Xqj)55Eh5UN1!"dQrN3B)D5)H"Z
qZKr1[-Y@Dr+6*F!4BJ&3@9Cc$-*9jlT&8+-A&a#KCd'&2hN1Nl@VpZei(a+SF3C
A3%L(H8q3!2Dd2eQ@(k$5GA#C@[[ER9(#@C9(*%c1k0&(fSKdSHk%CE1ZCA1J*BR
2'AIadGCkF@5rikr(SY9RT8TIP0XiU8)3ZPk*UU3BTP9hh1#+J[RRG`QjJpZT*NY
MSYLr1T,PmQC3dIe5[p&X9QbGKm+b6["0YafcQ)!(4q@cK28qNcQ9H&[F*Gb@Aec
f`YV'2ri#qC-cB!A4+X20U1D5EekA[De!%Bf-MDj0HrU,dFPk`1,C#eUX[LeE1Gr
L0fMhYRF4$#YH1FQA1E'JiQj3Mh8F$j(9)Na[mhb4QiP%MC@L6`r"lDlVR*3a*H$
%c2pC'P,@fjUK'62LN!")-VlCR+TjM2`"9RYc3Ie[jUDX3r5@b-&lHD[CjK6*dD4
iP5Q%fr'L[`-%6"[&I)+f49&4`ALCj4B)*"KFK!1Vj4rLJ"!ESPadE0YI3,eERRV
e*M%TfP,#i6r)-!lEpeMk9,0fq!'8)EJ$1!D+X*pqAdHkQE0cJM@UiC`R%kI,QMr
+QM''45)$Krph*,(*3Ia8P'IT@"T!HHK3GJqEd4"N(+lTKJCcpXJHh`"a&J,QTE(
C8jQ4Yf#V$&"Z0I"2!fl8rZ13!#c1ehJqV-U)3d%-BSS9hPS!M9Q5LcUE$N8"l66
hK3U'RGKm&l&TDm*&1!P4PQlYbDGN$1BqZaG"a8r53MTS[0c1TK3X)aX#DR6SM!-
Z2,a&iGCQJ'@$V9#C`dfZk4G()[aadj!!-KHem-BGIPI(2FSZHQb9e#5AC,Dl1$9
re8`k+(&"r@VFl0&f54V$F%c6E6"(BZ!hC6k'PQi4H$Vq@MSH*AXT(b)(e$*MN!"
-XpT9D,G25SQ$EGiA[)Q@f`3@"m6jPfhe+lUKEh2Y)h`@4fX1AGG'""&h@ec3hPU
)bVd%C#&D86D6%[YlF0&E@YL*mbFGQN"6BRK!kl#hpRUBleqM8H3qVh+hjXhDEm@
9h!1IZaN2I4`#FZca*TAKqYCDiBIq@kJGd'd1XP&!-jd'FG%p69L@Xd"F"%jUYkQ
#%l(9arp$2H#3!#i!1Re*28BDFk"c25"dJE[TU`FBjMYRk-D'(Ca'q0#NeIX5GUQ
Y#V&XDpc!4PdZe,G&l55m6krmC3'M(0eLG`c-$ZeZTVA+8SYS+$BBSDI[S4SV`k[
0A8A"CGkT-CGGd61Ke8"jr8PTTaEM6K$iRh0e[&b,@f5[1h)2GAd1%"DqjAY&!bR
p+T9R*P#+c6(DR"&)cdQrhZFVXciH4XZcfU&@NCX6AcR0P+ciJHcXjHm0dj-C6bC
'`@RbcEca&5*CFpc#,C3-Ra$lP&#kl1XZ(k`9Gf8dRGl0!5&kKqbb4K5YDp2CAq(
'HX0[Y3RK9H8U%rf"V0M&'V#SYlm5&(MI1N`*!cU"`*QBrr-#-Q3'556pfD`2'cX
cKhHYdLS@+0&keRBQe35"SRF-Lma8[h1j3Z+ipqaP%Y8LfXZYF`18ABfV&iBJNQb
Z1'iidA1(RI2G666a,YZAlSULp%Ta%9QrLFHEMC4r9QRp)UrH&K5l(Yd1A52XQ-S
&GB#aBe"d[i"[kSbIaS*c$QciLr-K-FKQ`Ukb6MmRca!c2M##l6$epilpM3dA`la
2IR,!jX-jI#E2$X$Nk&BG+m)YXB$TdV2"PfeBfCMEqKEP*U*(MaQ(aUJ&lMDDh+Z
&pZJKTbc*)&'6,L5Q`9VaRc-G)Y"Be!T!MB5#!T-T1bIAqL4!GI4V!3&V*6blm!2
3(S#emQAqC`4pMQrmQmTHf!`HS9dc9NfPiQ6[bqr@bS[)GK#H['m*XImbD[IJYK"
r-cCCVVMal5$Ae()BVMbr-CVX-BC4FpHP)lJD"ED@apUBLqT9KA`Y6Nlq,mh@AE@
'FdB-0bNDR5ek$rjJH0ajj64MLH%PG")VYPFVf,J6rVaYfVYLi&f`)'IjK2HcK+,
9HEfFQ,I*ZM8Y4'c9QiSI-eqZr'TY`9m'A+I(ZEeT30+hjpa9l!Z[*`M'Em#I,dQ
EYCKZrM4pdhlY2YTXDcbBJRqebDk@RP'`J(FkGc&Zq1JY[b-3[-RV6,4T,PqVV*+
QejcB1hMLri(+L$pM4#h"QfIaj%+XFK$AB69a(TC*Ef``*#EkVlck%85ck`bdGd9
r'FDBfFi'"fKmdTeUaIH%A8+(qCaBAAFkV%2PNl#B+*)+I!KX"Am'1M(3lTS'CmE
PI@bj@S"#CicPA`K4lJ&)NJ*X3c2(DV02*0#"e&Y!l9pTj2@I(4Fr6hk-F&01-aR
q(qYrrj!!6bESB'035kQRdGR)idH,$`m-9&-qRj-mli$QcAU18AfJiSrB[`D@[6p
PpX[6)k`NMmmKU,k"#G@F6me!"KIY0aDdBd'EJ"0)dpb#M4YPGLhNXQKImTdABHa
cR$jU2HUVmAG,XI2rhmDG#$d!!c3fUCI3Jc8)p)k!P`AK$45Hq$"SchXaBpf'b0H
(F!YFKJS9j#(@ZfA"keKF3CdZP(lTfLTA-djYSU9[[-pB6YaXq,9Y8+qL"N(qpMm
lM%EfeLV*Ip-I1paKGXkK$5*'X6k-*fp+bpp#,&%TG)llUX8XX01qq9k@P(FEb@[
-"S1Y+K1'%!fh6P0pV(`q&CiEllV3`R0lN8*Z,Ac$p%BE408dhJT4`iB@a50-P"m
08#FVkV`[q@#[l1p@bmfl'L&C!rrH10&)*arB`ARf2Gd!mE*&!KDXEF)hXX@bPej
HcFSLQm%UJ1D9+,&c!RUDiDFk6NlUF%NYEF&6pl-Q!#+,E#6L)h@-j'MpAl#UK(G
'l0k8h+A@hSF95mZI9GerZ6NPApph,[IlmSXIR%6"ScBe5Ief(VmJmFj&hIV9r1M
L"+3-+1fDF$b2brIN3QBU0Q(L$KUBeE8XcNm'+a6A%rM5[i%jcr80UK`hX@Vj[,"
0*1)4KVrE,#4M*qPEZ2+#(iRP3d2V`C@8"m,Br+TC'LH1j"0X-"DI&%B-XC3mk&q
d9[dR'K2[0eea9J-Y"()Xh"0l(`jKH#DK@0Aah)UiKCCaF,bZhp0!)MULqpV6pM4
S+fHf)&rfJV(G0``"$&8%a1"NaRKZYd9MZihm2fL)dp`CpE#UE"f26MX1JK`L[i"
TS%UeEJ(Qma2(ikKLU34&T@YXQ%c8fL+,if,*"dL4KIR"kd(N09IST6d-f-,DX[Q
LN!$05TM%'XPScN'+F'8q#CXXPPGc"jPE94VCR&CP&NqQM1Y&I@8R#dR6cP$8fb5
))mQk6lCb&qB,pcAU6eZ66rFX'm4UZHam[hM4HShSURSNNm3A92)+NlGQSchm5Ed
M!j!!4E*p[lU%,p8K&H4cE@rkrQ&#l`HmaVE,k[K3YV!Vq6`(pfDJ2RYbJf9NSQl
*!2XKd03K'B[b6#PYdlp!fTr[e(eqUdDLF5(&Ip2&'0)V##"rfa1,0F2ilYN30mr
`@PFACp)K6k,d4pJq)YVBI0@DcRcJcZ(3+4S@J-L')2Z5qKZIKD[VDAKG9eU0$`h
6"jC,(KcZf(bpdBIBqBKTbY8eN!$Ar,6SFHT5"3UTZ59d[(H2Z&#UIpIBfRIj0I#
Z+3aiB1"K9(q-GNU+bpBMfk0b8Z"DQ"(V8abXNMR5f@ppHP22Zq)JM'p#LBjjiC+
VYG)l0l9&m,DED,la$4J-dQ8k-S'3!(04AfXG1-&!NdJf@%BbpNZ88NQF[i"qfrh
%e99SrQDIk!%KXiAF[rITj&9((f+K)PXN!6QMUkFlGeUiYH999$pjCkm9$kGU&PD
aK%Ur3kLAfeY[&#Bb*ld4RhhH"IIVIZA#$6X6YfIjN!!&b9DTcU48-6(6N!!iD+`
Z+VZK(CNNhk$Pk3H%+VEd(JZIj9*JX8a+0m6hld4eKBNUcJ""3CUcY&9%fPFC+2F
T[*dRD[D[b8E-#h0P@m'9'`2a-@RD14(*T01N30*pqjG&iI*fAYr!AYfZCr"RYKm
IMY4+%J+0,DQMi8I3kNil'%L68[Mp[$Q($&-VbTYq"SD8jrU+1r8#UUIjJdJT*mP
%0I*8["AF98SA(E$RXXhR+kf5@0Je$4TI#klk-IM*iS4'(BRG(@*cGdQ"4p"QE@%
SHSB9b!3HPq"l60fE1SK8'G-0G82[I#h6mEpb!Z)QcK`fVVR598F*VV'3!2ME,6I
5-GfPJZSNB#iEP46Z'F%BlC[DHrbXZp"+kESk(3ZIAC*3b3H6DmdK"HZSI[VH0Xd
eRm1UDB#+ZbhI%)mIcfiL(3!M,EP(1ITD2L(Kep@N)+H)"3P3d!66L$pBeLZ3!)i
4BL6QbC,EKIITd$p,FlK-'bbe)%T#4CYfjr2X$*8&(RNCP#9*!$Nrp`6L@ZD-cS[
,#d+-2$p@(5#YH'cMQaLQa1PMb*8aTIbhcHP"#,H#d0QY*aK`AV[MM@-)B(YF5bR
,Ra[pV&#dmlS[T3mS-8Hkf8,3kB#eUh(+e(#9EBZA6[iPr0I#ie'lla+i`(mVPI0
R(q4VcibXjl[1H`[k'KMrkN[aB5T9Fhmp$jTQi,UALGaa0FmUHr9G&!qY`&rkQTJ
V*'hd4fK8Z0iFCp@keR!JKiHKJ%raGIB0DQ9'k@rq$lq[1Yk'5cliEd'4GFqFJ6j
@a'CQkRA(3I8#kEFQ3dGlVTjNZ[IeGNC,DS-L((b)1r6![lTk8r80Up5)bV)R!8e
REC(4AdU*`C+Z$IPd93+FP#MPJ8RD5,(P[BH)cR!p&(CJANqR+GNGkT(SS#0Zd1(
R'De4E#2[#1M*j#HV4NVD)P@,!F[PpAKIZ*&8YQ3cb48ZMbDM!,YmraJpLq0@&Da
alYqa8RGSL1pf+Xj+)XrAYpiLN@@1PGpk+65Mf'KeKRA[3JX#SXklC)[4ScJSeR6
ca)T2fD)[kXjr`9r`0+Y"8Uqk6V3,A`LA%a!N4(34C%pYM,dLb%H$`3[afBalFd#
'[JKdC3XMN!$,(95KFcN9JY08heDX-Ti`'&6a4dfIQl!UGjhVCba)E!($03!'e$j
4aJ8kZaS(L!Phf[jI#pN8)m!"0"QBYb`bEl0Y3[pIT[l[V0@$)2c"2daCrF6epKE
c8,%0dI@E-6De3NQ9h&QN)XlY0N54p+CZk%DVkpaaE8TpN!!FB6q!XMLJ`ak!cQF
l!%BHQA8P$!8pe56DEG,jGKCb(V`K"1'q+I-%lk3K8(Y0P*!!`5elB-m`@D-qqK9
#mAVB`FQC#N*33d1[pjV!)ch@)1j4aDd%()LKaLZ!j5*2+SY0hb8IT$$F,3Ef'X+
BD"&)RmIDejh3T&bb%qFaMS#PN!3"!!!r!!#dSD1fYr2BJJ!!@"F!!,F%!*!$cJ!
2@*X!"9bG!!"(G3#3"!m!9'0X6'PLFQ&bD@9c,Xq!!!#(`de08(*$9dP&!3$rN!3
!N!U!!*!(3X(8me``e[bbZ361!j!!3&l#ZQG8JV3F6(LrEMCMd14QURrp0$&CK1b
li)8"Y-pjPeeS0F`M"bpAJ8BT2EE!e'A(YQJ)6e-0)16Z6"H-'D&UmNd@aqU#-U%
C2DjG18&JSVpmm514E$!'r90jl14#!8@6LC&rrc,!a&2qTrhGNPIjCj6aPQaEifI
rHBU#D!D3!-h2%(U&1NkSU!ZK`8YVMIMAaTIi1'*'-%Jl"L1lXbbC+&if4!f0pN$
Xr[,-l!k3!*YDVi!*&J()a9NJ%BM!FX`9[$)$SJ8NMI!d,@EBS9h@jb45V1iQ"&d
3p-H8`&1B-9L%h%[&1"*%@amV&eDX*Y5A)YIK-NaDRB@8UqVUMR*6ZlDk53*[1i9
pL1jk%01rAaEYdfbV`+JfDJ[pqck5iqbKUN)X[FJ@NS(FcLGP8r4Z)Q#dGG$C6L-
R&GKPV(N5rE!X,9)arAC!'fG3YE&(E-5)ED-DrAD"hPXB9pq+JTMrIJaJSKr,$V8
GCd'%,RcYNQFlKBJXeGSN("B)j,B+p`TVhE4+!pZ+RF*EZGM8AZ%('"Pd[p3RYG`
Gj-PJ2lpGHUHYqfdHI3&&$Dllr8a6ZYXTa$,M$)ZHC-"LIJYT[20#ajKM*eFf$QL
8ZB@CAE13!#CC&'Ph5#$P2LRqe5TbciU60MJYE(#+,M6eGQX,)@N)0qA6'0SNk*P
"pa2FjRfURS18C6(%,4cY,p18kKlk9YR31eUY4-GiT1hA-LD'P6-!dIr)$ppQJb"
)h1Kef4"U$IRSrC(H#ip(`P`ISdmdqfj-T*5ld'G9+FdL!c8-aLhMLXVi[`M2c''
jlYI9!9IM1%U'6I0UY`TplFi+`lPCK*!!BL56j6i&cUq#iN[e'+f'#+Q!j$J,qZ%
Hj3MUM5%E@I[P%+DS28Lfh,mh@m52!9'80D!8C95,QbZqYj+mH#9Sm)42444VMQ,
F2CjS2iaecGmlK)2'-d8F#Cq)VFArVH+"%-MdGA$XY9rR(P6#)SA"%ZAEbNEMRBI
qkM,)AF*Ac3Vak@)MLp,VDf4+0FGT02CDfF#[aiL+XbGLQI)6&4Nc8CS9%@2kbNA
X(+SGla0rdT-28PPPh&",el'@H4ST@qPR)5(Rei6ISU[)h'LBMUb@mG#""&TG)9i
"Kqp(rr[r1N&jf@`IpTFNqDQ%#*'"qC94i)b2T95qV0&l%12QeJYhTF"IMHS-U,)
)-DrM$YbMRC+p`XS3bMNKJ#6FR0rh[,GBRU#XPU[CYQjR6%Hpb8kZjYM%i56QAFX
T&lk!JGVRBPG-LQpq9RFfIX)JjC3+fp4cUK-2V(0&08((&B`jUN[0Cl"f&D9'@e@
M4-Ji'"p2[)N)6+k3!&EV&SPD@P4bA42!A12GD24f%r2XPS'DC+bGdETPMM3pLCb
AH&)&%)Hqpkjb(4ZeN3kdmcR(U+[dPN22H)"q-ZPjq-Xrr+3"5Zr&#D'G$m"4qL1
8419KBB6F*M$f6XQmZ$i5$F)fPV92ABrPHIm6*)24!S0aQYY9lB-&iMTSl(2@,ES
AeEJrcFjb49$'"U@-l63KTi'5BXcb&Yc3@2#KE0Ilq1KKUAkH3lq3!(1U'AqK@K!
ffM5Y!I&GQ4IJ`4d@LrIBHKL[XaIpFCSQ"V3-V9PXB8%9$kld0'Ib1`rY8`pB-@&
4)*%Hpd*Y"Lcq%PDk4-BN920)RTL)ie-SC1aaiCL2rhTe+'#dJqZ('Umd(4p`e%9
#&JhLcX"ph#pXjA)06Lq)-4iP3J!G9GJ3@PrlCPc3Er)YIT6(DVQJ#VcFdd-(mZf
``RC&-q!UY+4a-BJ#DXmm4ILRDaX*MUBrP1"#q)#PM#B)TdX``P4@NrYP193QfSI
NTf9[pRliQXTkDLeNc#3%AMCa`R@IcH6YLEa*DGZeY@('0*XI+0UkGVIYNEP+k@l
Q0d1E8j!!8mb6#$EP1D!9lE6[Q-)P-pEBf@+hbBMp9P*ad`fll)`l#NREjm[S2'b
bqdXCaQK9c(l0(,rq&U-K`D(1&hh-VMeY#83@Dr`[lXqehX6@I&Y@N!$BiPPX22D
%[$6M,ckNV#4(af@a%2m"DQ%'X,AQ[K(1j$+T8Lq0eN(p62qDLpbP8*&`!p%mF+@
q#BT1kfrk-c9SSHV%9&q@$8'JELiiJFbVhQkUPV99IS0f`5C%5Uc2Gc*CaE-DNf#
4C0F5`Hp-8VqrA1,%1(F$%e-Pfi-R$`G4Di8)2-42ID*T-H@qL5,B336heGlfX@%
,,e$ll(ejZqT"k[Zc[([ZXbDh&@TEDldV-*hfpBH)UV2mE&C1r1LFVY@RB"2a0@e
TlZdjB%5a%UR%`PfFGdi*F@Y!i2(*XH[#rl8+a,p+&Zp#JjUcqlaLADEALr*hB(e
%#aq5DYS4S8@$B`C!bX4*MD@q-kd4aS!Ze-12YKa5+F@9*0%l,fq[L(`964XV8KZ
d,(@Ch2'(r44-$K0q898SHJGCL)5MN!"RNb844TY4PXfN9I)pNN)h2THX!eM3R)C
3(8U!hd+K9jRLQH@aa@*'JFIc*kde5(0afNKjX-qM9'XaJ)M+Lhf@M[4RrN-3q4l
T%UqILReSmQ2IfT4*Mbri4d8PpP,$YCLr)!XNc@@qLJGQ+M!d0$HbqbXk,!YU16J
Y9Jq0Qp0Yi6(SY8"d)@Rq4hEKSAAKfH3$IYb1kX`M8,jH1d1ERrH-!!A)Vhb&"cj
MDIXD1GZA$SAVQa9dAF"b0`VQGG-(#qB28jMq6MQB@MHP!5dej[k3!"E,Sm'6RiL
SchN6p)N3PiU%J'Hd`*&8'ii2#`bk8)4Z*5H%`(3@2dbL'12-HUp3Y(`+,pSEUdh
%kp)$ej(1'JjP5bhe+YCb,9c'($98Al0)IdNp)`TdBS'MBY9'LFPMR9QfL#6fIr5
V`CZC86iq$MIE5(Qjf`KBahLI`F`l)2+M0!E(0RLBEEfNI6FM#A)L*KTA9Ym3-p2
1qBdkq)h5e@+!h,ADABc6[1F0Vf[Eq&YB*X869+T(Am'q0%hRe)Be&cZm,e2L0Zm
l6k)VE#V'F'&p0*aPFAUc9*[Hl,9"2#U[YjeRc5IPIIHE+([#CSHrVPAjpar)aV0
d`d,EXb""UL00'9I'#PS0P#N4lE1Nc!reS9[Se%3Cr&H6$RIm&UNl3)X`e!Sahk"
cG2XJkEc)Q+[%kqTcbl0k(49UMTL6r-"I4-F#!EF,MY5kGRb#fIm6*a@-6J$XqrT
l8+"-TQSeA#"LFi&H0@-`2Af[mR+bXe'("UPVb)S"Ci@)3VF%V+l-FQCKR%LBKH3
4(%D2Shc1,*!!&Mp"iD@XpTaCQ*,1+N+E,BXi#Df&1p,!JmBeC$5B@V1D8"pMPPc
V936MH*hjB2m0NYHT[TVh#jc(M%8YNVhlX(HNlc(eL*E$PI8khhPSF!d(M&31#Yh
VL4TFhTGPBbb%XEr`Kh3!fiU#ViG@2p8'8Q(UeI0Q+!N'l2I&(Z'pQ2c[(`KJ0pQ
(-j3X-UcZkV2M4VHfTQKEQff4#9[fic(KiD,UEc'2KrB)Th+0'T-If*V!e@"3k2,
pDQJClLMU12Q@@`R3i"D!ScEGlYTiL,&&Ql9er3HT@mU!MBp#UYc&Pf85(jL)j-i
$NU`d(PMEF[4XBV0Y`0DAa#6'XH"9SbElN4iqeMl+pIZ$%@#P-Y`ar#(9Yp4Il&V
a4(JPB'QSkJc2,r'&LNT&1H"@S3&N)Y,Y-9Ce5+IJbYbC55j%%"2IQF&&,HmrLRJ
9L4ED6TGCFfe*Rc*#qRE9Rp[E,0UZ*A`Xq@#!A1C33DhHZjSPc&eUN!#bTbDVGe(
*SN2F93K#@jhIU`"r3,B)1TRJd8%NLikCjfZ*K4qL2*%c,!2U-ZRFM'Z!-"0%`bA
Y"jdr'UF#k($mjf11AFp!(Q5)"pcYP"H6VMqicjr*B6ZiQ08!Faf1R0RLipl$[me
B"r#Q)$BbC'3AY4,SDUY$f6fhB[fm#*3i#Jp(Tq1S"iIA&jLZK&+3!*M$GDc#9'C
H"(,YAMipH,&b*MrLTD8JT[6hAQ[1Q`*D8br5q`0D38Z(Ab1PQ&,`($Qr-ibQ1r[
rfL*q*H&mcK!4"FTMEF$Z0e*0'5+P!"4(4%qZpk"Y3mRaDZhI9dD,CPhh,jJ&"H,
XdKr,D[pH)PcV84%XQHR4eHk!M51AUNcS!blf5lq&&#Dj)0,!iS+BllaieBeY,)G
J!R[`6EMRV(6k&`+J,cfi365c1ERmaRU-XLRD90C8ANLNeUX"d@@*-Jc1m"C4a2U
F2eI1B8XK8c%2X3Pm(kG'(5+Jp9r`b)BheLMVDSe)T+3fpD"DcR59LcE6"RV%jGq
l(`MG*Gk5VbH#FcL[Q+V[,$0Sq+AVHpqP4bi-[k96#@`SL!%DU'ar*e%aVp*$rJ-
eeK#Q2H*rE'RXrA[6Jh1'Ed6cQ!`*02VRH`ipD$qadU+3!2M5PDiNEZP64RiC#Eq
[&5fG%XFcQDK($fN90CBR6mfC4DjqD!2[P5&N`k-&%6jP[&a8$C'@(h%XDdK980,
"d*Rj#NA)1FF958M+!eXSDlf$-FXV8IX+qH+[P)@CZI&1fe@baEhE!QcLX,dCmQ"
q*TKN'ZjVk@)h#lI#C`KrVdee*c1hY1LfjZ2Qda,DYN)Nl2a)VZ'`Y1p5!lJf#(M
)(CNYBl%rEL0N5&`bZMZN06q@,qmHDCNQh"ec-SZ*cXC!hS&@Lph9@*QA$l,E+#,
1MVH8-M*krS196M5+'-0(M$'PNKekp*PJXj!!q[--`DqPYT-)XeH',,j&,-h(Hei
3iPR[4BU4L'R)m+mEr#j$,PYVQf%k,3Z9!CrVI18*"(H2bRSjQVd$8,jR,$CM9h8
a#M2EVYKK(&TRKM4ZKh-F#AdAH68Vh,3f"D+#HQ%Y"AR$rQT5"+&l5BAf6j-Z3[C
rN!#DF!RRiI2*pYEVTVbP[RcBRr)$RNS`KRIEU*bi[[-&GCr0kGG0#dRlGdKhLQQ
LA'Yr0Bj"%SK,IpQSeVKNp#J`DUcl4C!!S-9VkQLH+4l8&fJ2lmmqQ0Lf%Gr0&b6
`rqS0r9!('rC3-6!jN!"-K@KI4+8Ad8%mr$IhTA#MPj`N&qYQ1lGd4aJD6(Xhdpr
+9IDI[jXXQrhDH,G)%TdT!"[L4iS`L4lcLVD180PZ8!F"ZT8SKLbk%&KM[K3hrK3
J&hDRC8*CiGmb*MJa-rB`9bbB@#&hUCbS!HUDY$rK4XHXIj-a+6*JqrMpdbb9ZT2
Z1**BY5X3Udi6q5j&e,0aS2h)6HS)!hZ"jMH2hq3,-fmC-*!!2FFNN@j"+Nhd'!-
FXjVAfGArBaTH1**lQrT5l3eHiV+D0$(-)lhp(k2,0F25HF(UK*kMT@&[Tr#KYb2
ZGrHmTk#AYC+'&UC#FAP4YSc%DmF(3Xa)Y@[4(imDe-,XCFDYJlSk-Q"#(iePDT!
$hZlHJaSkT!+&RprP-bCUeEm9pH'mK,i$(dh`r-0ZMZQ"0%T3IV2DL)!DE#@HQj[
3A'h$i(K8$bZf!@KRTGNjaqlYQjFVqi3V+Q8hCm0aCP"d2D8hh@McCq*bM8DScBT
V%(,RaA51Gi,kIq[,V9Y#h)ha%fRR%kD'M#Qm,'`B`UHF*c(84FeaPX49X,AQp-+
YXG9MACJcLEjh"[5TaP[rqQ5pc)pFea2D*6!a15Nl#2"eBreJZT3GISSrGfX`&b1
k!RV*ii`6"3@9X[5I!U)@@3pVJL'PNi-NlLQlpM-AGpi9S5[$m'`jqAmU0A)*ZrU
HY"%4DmY0M!Uf!RP00IfE$+Pj$[@ErkcMr"GIT@NQ00'K0Me[*$Y[5NXRGLYE[-U
rkhGlAXcjH+9Yd9"%f2r0Y+Xp`YjiX1rXDkfiK'H5!J(66`I!N!"@#@!X2K,"4UQ
EFqF(dm*ZBHS(4(A`-FSF1E5qZX05YMm`4hP#2p6d(kE#Q,i*MjR-I-hG(CDj#f1
1Y00!5H"ID'lh8e$`E&ZpZh0dqXT5pdTPL'1ckJ&SJCDU$DKZKG!UQX8lA2RID'3
6GkAjTRAmG("LL2G%+dr`P$*L-mYSl-FV$#LUqq4$i$R"#kYh1+(2Y5JbB[0#lBr
dBK#Hr2mYQK+mf*-)pc1Hi4FG81KTCZqclp[X[2Sk8QS8J1(0#D)X&`i+e0D3!*l
4'8$B+4*pT-HI%EZV+3@'Vq%VrHhY+2#E+d"-0-k+1c-JULSlqZ#HpTQ`$r!K)Jq
"`@D*5f'JETrc$$r$Gl4R,`6LKpfIFE-8C46CCB0EHE0%U`iCHRFD&"1(PHGFd,F
$(V0[pQ,%je$qrRTL4@iRYRmBZ8MacEHq#6T1%S",X9f9M$A')4LT0@Zr4(kkka9
A`c0aDSF`a#FkN!"qG6T)kKdAQ-mTi[j+r+V3L,,l$&J(GDKaN!#mX&C!lpD#hE%
GSBBmebpG'+f2Bjam4[EdmqhKSeKB"%FrY")@PI(`D$lKl8L'c5jR-#'#C)F+AR1
[+XX$C2@MSJ(-IeY*!09Gh!X#lfGb%&EPTj3TR$%)6efBhhl#SE*L1jAK@"ra)I-
!hjBl64cK%QNm)ID&dEJ%(Pl-`pe3kCRcrHYG1p'`Ucl[FJrZ$9M640X8NmG*qp*
l!*)LJ!!T4Qfb%&bh6P5EhG,[M+ZL8C@#fe,V60B6Q&K,KbbY[i39Z2&T*MfhX!G
Y(NSJaE*$EHNLGC@amhq3!&XQLY9e0Brj+!f8kV"j+A!q-%lc!"Dq!0fmX!603QF
[G'DFFA[TdkmZFbr3c!592R5'P[NLfLUdkaBY$TlPD@Q"e)kaFS516m!QI5E$rp-
h!XHfDAm-HGef8jD+p)0'q20,hJEGRYF(hjYQXGVdUX&-h@U$I`"N+HU&[Y9G8`"
b)fQ3!2kXB#IHj2d#(iphPq6q[frbqK(qP2PSL%G,cCTH$(MZ#D4VQ-EcJYa4Dc2
q(AI&XDicTYTI#hd*,G(9+A`r%"+9cd%D1$QamMJH%$*h%3)4p1F,250ZZ1PcAhq
#3@9L`XK[i+1@IYp3ILcPi1B&5cic3`4S(fZXVTTP-r5@IL,J4kh")2KTfA-E`U%
%X`KbRF-@8EQ)$(Fh4!0+LP#1GhclYV[hYHN&kRj1)ACUL#ak-84GdCKQNf*6rlf
dH13'Fr8@)+B)Q5&Q"BSCL[!`K9SChQ)Vmke!pZTPr1ND8Np%RGp,%fEfLCjlm4d
GMDeNlff&Rf5PVArP$E!ia*EJj8AX4NVFS#M9XXpapZ@I$#5eFk(e,$S$KNkRSk$
J%Mqah4YUMB)Bk3(,)aFYEDXR3Gb&mBE,"'$F4TU#Ha6N%p*P!QV*!2jIT8*JKpY
@ej0PkG[q)V`SGB+YXqhjC"J@pc8m01CV@#k`4[b2S&GMr@'V51UR"V8JU-,pV"J
,CV%!b0hmcT8,2l9+K'G)[qC''V8LM+fF(mia(Je(LNhA)(HG[GiqNLMrjXPXbK[
3q5!h"`JRRQHdk-J1jMp*Ba#mh4l4DPXBX+mCj*ZT3*T8kGM(hPS5,(@mHkLQkh5
h+BrYD!&q&TNV*6phR)@DG4%)ipmk3BX5rda-%J(hmkHRKXmcMI%LYTNMjC*GA-R
%%88NVbQ1#i-1*fVZZMNAK%$k$,E(VY2$U082DTC&`aG'&epQ$)-6"0MUrHBEPeT
PQ"Z4+qJG%"(aA85Q2QPSGipM!rX!bicm+qYCU)HiK463J+r60&dm8YmR0Zk`d[#
+Y-V(1Sc#DZaC8U+PBYJ,X!kd@k+`H9h4`VjQ`B0H#p"`"VhUCSq+U$k85T(1,lR
%G@jp'l+["r9cV3JM`al2(Y,!P3jUmbFY%2L'$``M0h0-DeH86Gr1BjAFDV!A-#i
ldN$"1Dd1Jh'Gchi)Ih,*am5Em%$DM3U1%NbCl&C&&(LQQrV3pfM*1d-cNeGr-eH
0c!RF0`A9)Sij+D,Sec33X*Y6'jQ[3U!&j22NCGAap`"m++P2e,RPY1D!Z+-JePB
(XbUib'&NR'G5jG#P$9D8M+F4Ubj62TdI,f[I4-Zl0pT5f*m$D08!$*Q&BI4V18q
PV`J#$XY!ZT!!#a,Z@N(1&j4NUQR))b-8Pd`8c+BcR2PF1LVeRl1d4+A0i)cb*Ad
0HEHNI),4@$e0)ZMpF,8('dZ,ECH6dpiqEFrHeELVd5%-lf4K9`KDCbb@%l$L#r)
M5lZke6d,r'L+3(L(Q[3f5ZpRq#+69SjbQQ"mfRR$D(VkGQ(fJYf6LYL!@`Hm3DZ
PiPGGQ4[b(h0TMMQN8RIm4SUq4&3am3+3!0NrQZYD2*8Rp)ir(HL!`GL'1S(+iE-
Ch'AUipD8h--hM"dM2%*KDMl(la488qaA,1AZ+VkBam@eTJ2Na,NJDi1'jl6V+cP
9YL"q$dm+[8YCl'S4@*bNDm"YXm$iijNa"59FQ1MGll$AKTZR*(Z[4b,b&r3%ZaN
HqS`'`X+6AFEH#)L"Cc19$F6FTaGl&X!1RDM'+KbKV&`1J!3"VcdfRb5e9YieUr8
!$EY8DT+6aj1IL2m`-cYTr3qU+Pch@)PXPckD-8K(cCMXTSZ`VmK2e"Fa(,qTMmX
BQ9Ke'%*dj1E!M0'"U5L-DXR(5HhBb'pAEmh&V4khc'5q3"EJiD!H$1)S#lEC&BQ
FlG8@U,NUP!ZJZDSETad+hp8K")DR+,S,4Ea+p`66a-eil+C0LPaXEClD2PHNDNc
C@J4U(C`lEqQJKYJf&b`(HVj3Q2$,Id85V8$QEJr!AD,dXC6dLqE0TZ3YJclj#Ad
(!&heHAX$FPk,G&iQV$Q@ddV#!0ZIYPU`#aCh!LlCS3JC2`[Nj&Ak$T8TRU3'"C,
0GNV@PX+2,BL5&a08%UadE*kLm,C`HlKdZq5MS"j9!2Fm$LMT-ErC+q+*eH![Q6-
F(`$DP'Z2BhXj$('G@e1$Q&Z*YFH*N!"Dlii8'p-kX005D5b#Ne`)@396Fcr$$2a
hLPH06lChQ#KHAm@TfZY`&h)QrfNrieKKhr6HeUbQ$*L)#)l,Ma&2h0@eh!cNKTp
!eZI#p6QDc+MUkeYrfSU2TD1XYK6VBT[Fdb3G@-#"#e[0KI[8HRRRZYP6MejLZa8
$9pF'#PaB%56VfMN4@(KE2@Bcb"bAC0%1CVE64UMV6$`VdMqRrkEl,3#e+X[[iir
hh32*)j!!HFP'2E1I@R)+UIDYEZ`[&+klD89)-!$q+[E(Jm+-pEZ$2JM3#)HI(,1
Y#CTj4LSDjH21lMl&JUSh8#2S-4cQYI9J'kad$,)JX#*1[miXG3SfrX2pl@P6Laa
&MXbLd21rFkGp-KkjMH2L0+lNld4`q#K88RZfVGl2,+SPKrecaqJF*[bZAkRBCkC
f*@R"@mZkpY,lqmY(KU)2kUQ[C!T*lc,(SAHG3qIp,3C3Ir8Y%SjAfXa9Q!2+fXJ
#9S`FT-Jcl)`4N9XB+*ETlad+,A#2bpiS&A2+hj,lDH0L(%J3MDlFlpV-YPKKiLd
FjcZ`%e8kL@m$B-6Y"&SiGdE!+0d4C+36NQN%0TJ"bTYb"'Zcp)i2*5Q+9h!Fir`
,K%K!0Rh-2HS6e3Ma,c3p[RFHmTa`eSA'd2++AEaGqhhUF[V$fb24TlQKm0jlNB@
*38"C,(5a$$YCi)pkhZi1iCp-")"diJYDm@JIKB"ZZbM`EjqSpF$cpUU%J!4Z!1$
db1f9VQbbUqJ4e2Lb#Aa`bEV9kmY'XPGRNkJd'UcMUqL2G&qT#F+NFN-Rb9"e`Q3
8adPFI'kV4TDTZFXBGcd*&,[Dj%3`R66ebN1kZq!,b2F'Q4p"6XJG4H!YQUS[i@'
5cClX9%*20Y8-((jm*SBAd!j`h8I61KM(3aCb6blYD9)UbY!kG%pE`I*@0%0UhHU
00!+'%5aKec%R&`[[LpkT%C0(+,6RNUm-LNd&`kE&"%j-kT4p&Tc`(mjA2NG`9*E
ScKm*CiEec6GM5#N#'@V*RIQ(`E$LEqJ-X0Hp5@SkIN9+#25VQEprQM*Ai(Jp"H5
@VIpph`@0eG*D,[I665"l"PcMHHIKS%@G+J[N`C88lB2DKbd(+00Y6NPXf5X0U1[
NRB#ic5T`Z`BE!r4p0d9H3RCH((%TMMG8p2PDeakKNV9d4hT-C#Z)5@F`iCj[Z+*
!,TFJ@ZSBKSpcBk@H8+DJ)00e-B')[d36jC3N@qH1hS[#Z"f*U4kh)$,8fp*Qcd*
eSPE'&Zi94rr%m&LX,Q3J61rJB%'PGM$`,6cTqhI'%*DP3bY&kbSmC`Y(i[AYQ1B
5B&@X#eeRSkrG6[bQP2E-C-p6I0G!UVTiVEdKSK8jirElrrE6h8ZCC!10Y5PfDdP
m!)TlRD"H`c+C&9IDJSTr+1(cla&eIqR1(dpjaQaFMqq@0%fS`Q[246D9ZZLPN!"
KaH`*Ya8kCT5iKrjU@$jAe#mXcMXErS$SBKPmK$*c(D,3#[SAIq&lYNUX9I59$ah
RARLcVdJNm8N9"+kmbr#eil,h92ScBALjTf3pA"(%Mpp@!"BQM"dhM`#$A[N,eqK
T-Q+,ZED@[Cpr-YIikp45KLKdE"GeSb,4"D5R,8hIXpQA5JTS)#BGPLlH9Thq!k"
I@F6K@ZaV2Z)UQqMeY9SVjZ(Q8H`5$Z8PE#@1[,XV`rPC4YVM'ifiI&@D9U'fq4[
K8&Z4eJKQSMi1%`EFa$Td52KqNDbQ'9ie+"5,-M&4f!aaMIJ("&JaD8)'elhj04*
hGBRA3&kK(m0i2-8dii[1lk@$H51MITi6*iKr$'(@*j93ld98I9b[E`+ZL@"fMGa
[S)D5N!!64Q4(,%SK&$2RQrhSXA"Rd6J5fjY4L(GJ)XLk(V1N`TmqX+0CXQ%'Y3e
*"*QMYqbB*V"ilkl0V(-eB2TQTYBKEF#503GdIS0dML-rFKLh)TdL0hG3l6d@caj
`jC4%qbFFTG+9!U!UKQ&Cp9QH6+eLI2-0(c0QS'YdFYq(Q"US'#T`,rD'1%DcR#T
)jYkm)N44KBf$+cBV@Z-h*`11+p!Ylj*AbHXd&bVZJIFDBDJL44jqZh0!6Yap2AF
(KVR[&QD-(-S[E1fC-801$hEhf+NZiF-X*60TUS6AjhdG6F8E,8FLU,(RN@'6'#L
[)IQ[qU2H#DTKlrmM0(,6MRrf62J-)XEG'h#9bR415YK#BcC%q`#,[!ZYh#S4K'c
plQpLGrmBeLP#A03A4@Y'`PE$FY2)!GU4c9+)e*aRF[abh(2hG-%aV5CP4TlS,hD
JPf)lNGBk8QL19h05C2TP$%"FY4lc-"DXpD[rKFmp%SI5Ll@PBc9QpKNF-+XM@+F
UcjfharU*q$1P111b0a45X9dSRGNAXhk&dEDcZR+lc2qQ)`e+"pE25[19aYlb%B[
UCD8I!PpM!pG6-N89[-XLj05R@jT@fY+*Jhd'#NLGT`iHDLPL+mA(MB8VdMQEaQ6
X%YH[KCT4d4Hpb%XFV3eAb)10F[YUAr5[[F%@IQ!E!E(GQjlqjVUrV9[81#[JE6E
,MYeKdZ*CXfrHL+Q'%8ri8jVfH2Y&JUJj59mLQ)Q,-PhA@(RP3)hJ$c*mh`4Ai,P
Upl*JE$2q9@-qS2,6iNU6UP+eUV1UN!!e)3IfqLT!$lGpbXS%cA@E2YmRI,BppH!
Z52X(PSmmcJB*DPkhG&NC5rG8)dpHficTCJ%hCp#',%`R%J1JI@r+*pj9p9p(#)l
epXHpU)6J`99,@XkUr-C)a#NALjUkBeVG-'S`&%IVKBLTH%eH(VFi0YJp-L`(ckH
CeJE-jJ40+q[Q+F8Z,JK)U2mAUQVdEPXcTil2Hb39dN`4MAUdlVcSaP-K3!Bc9pK
@1`F*H)dGTBMQ#QehBq6dp&crLE42#Z6Pj@E2R2TC"MaP#(CbQCVLDDER`Cb95V1
5Z2#$elR0lpB-TH3P'I&6E8$qlp@miT`8%h,+E8RRik2MG'%iAF2eiJc)iVE$hU9
!bU0T-"hmck@&-LrJkAYmSfG"Gl6950@f1#4L$!60be!M%4K[GA9mMSY((jC9((d
YQf8AL`'jj)ZqFXBAR*E)F8ZfDdNC3l+9m#hcfjPbKALE`lacLT9KTGf'PLVjqX4
h+$%Mq%K4dpJ6U`!MYc*'Xb6E*a(Lrpl%d3pm-D[HH+#`0l)G3aHX(p-0Vfq'bqC
G$*,A2M*0'lEYVerR+A5Y)46K9GF9#l0ldS,)pb'UPZ0rh4"jAkP!*R,"`HNVkIm
@[#QkaX-5HA*'GC[#*Lbcqe*EUTYJDTZ1RfEBM%1C0reRdP"IE$@1K8%aGkC$#-4
cH+'*X-,TLC4RP#MKqKF*B2DX,'`SQ!abS2I)kMN*c-JTqZHU2*MIUZ'rd(cdFhV
QDP[6,9('AP6b-hSrF0acP$iLCQApUpSBH)`MQReX1mLbD(NaYl*9hmDYaqlF4d8
42A[Ym*&h,S5[1J`Q'aTf("VF4$,[T$#E)[m('X&,GCaPXi,1@m6m0)c,PlUD%RZ
88#[#T4M`bpA"k*A(d5l8EE[Z0Rp%*b@r%44A,`mp[dd[S(K%X(CZ(B'5e5Yk5I"
Vf9UUh&d6*f'BELq-@0e&RbA-dliZRk95p9+@Lc`%5hlY$E1E5H1V9`4iNZ4&Epe
q4jGhJd62XBTCpQGEPC6l*3X*PmJd(+b'UfS-+3XG63Z2+N"G5k238QP[!#1(8!C
kc&M9cQUTQr)(ZKD[MU4("F-2!qP091`[c9AYD*i&FmD-RLbSLRXc64&)RIAhIGV
Ma!A[C3Irq$2U%QF9)eGrNYU$TchR3ZK"!5-"L12#rM)@&9rkX%ha)lh`8XPZ'd3
i66C&c3a(rJUVdNNj9)VELb(lUle'"m#4K[+8dfrr[RSpR!&$5crHae"Vp!h+qY6
IJL`fLd'U,9Pm,K$(jBr0m$68##B$aD*@lNjJD!E+%TE#p@E8Dki@ZD(Y'T9eP1J
'&8IJF@"5dNY"*8`b8hl53eD@l5GfahZcLjNT*IBVMpH!Kh4R'cl$m2pM2jQrZr%
YJeh1A[e$Gc$ENrjp4L[N#XmK5Mp*F@N*"V&VIjGj*-IjGqeXdBAY9+Gr2Xr9801
j8mF[N9,NV)UhE@'[ceRkHQ6hrdT9l+I1UjNA6F5D%Q!9C%R3ArX%0KdN1VBlJ10
(`XiDa%(dUd#1Y@MBS[E*@[(,fG3Dd!mKZFj+AQKjPH%QGfhKPEG0!kUV%CA0(eS
'r$ZFe5I%YU1+1FHC3reVL(EC'cPZC!#V9b"@f(aPlARfJF1[J)Dj*eiL#UGe#2Y
0AeUbhD#S8-BI&R[qK3CjGB9HYjAQR1`530'D,Jk5KaEIIF)HFH@@arLeT)ArYMq
f#M$c9Ef&+r13!2$D$,r(S*rjhml,MZ[G5I+Gf#aN1!6TfP0UI*rD&"HTGAN6!Xr
bEr9!JaSd))qNDmkk8&VHZUP-R%2'%LU+[&PT+b*09[Nd+9U#kSRdL,C55JM!K&l
"LX+4JKc9(mi@%,!NF5TNdcDcjHT8�pKp9%Z'fkS)dS%h#+i,@2!,,$fq5lerm
mm&Si8,Aa+CijRB$ZGE3)!&A*3DJeLrBKHk`3[`L0bQVSpN6aVSMY!*C%,r4Lr*!
!$S+GBb4(0[D1Hp4aijYi#ar3b"(e3GKbbJVb2"SH3GlKMe*Nf5J!*B-Y*QLqrX2
5b%R'#,NAHQbU,L"1-IARJeUCr+GAFYD'QpCDKUpi2@()e'*ML%MqERSQT6lEc#6
8$k!1#1JhXb+4,T,%YM,$&C4h14j6+qFk"I`!MlQ`PCdZ$2!fE[Y+LUc#2IrIRcN
G0pZZI'$i1#Tp,8*'A69`1SALSp5#58HZq2VVS6p*8e8j@2-H%'2-5Na(VQJ6pTr
6#lI((j!!##R1j-lUSBTi3e)%#8GdmqK%"[Q!Xp`$k#IE@h(,%@YpC5#E8-Q$#&R
mRd`T1+8"d`$,(I(+IeH63E-"SXZ-0Q5%0#*Y&!Sf-#hXf-00H63Jfk%09i3iB8)
hSUm(X5[ES3bT`Z@S@&B`TLqj&Ha6M0P#cbi(qe)f6`Ciai)'pqSh8&&)Y&bb39H
Hb9[rp*Tr*FpfI,A$dC6LQTEf1@L-MJb"2PDZT3%qr[,aC'l)RkU!H5%H@e8$A!&
'3hD3!*lcC"eVmDHXF)'2%e*#%1`k$[+pphc6criGl$ff4D)6@9!EBXH[KX%Ul,5
"([8B1"UPbV8lM*!!clTNeiXLId5bfGKp5BX1qK,'R5likB-R0U)3aMUJ3&,Mf5L
&SerjbH(ZV-hGk,SrmcCDGET,Q+)B9J+@4m'Z5D9T"@f9k!@(VX(6$`fK(iVPemJ
-c608XAB2Mh91%-Tc1)8l$8@QR$UmRI[299r4Lad3G`%0#F1K,04ei8Cc*HFId68
Ci&hl!dE3DK-5CH*G25V(Ljl[VU&"qG5'1fq!S21I@3B*Khqr*fS8C*,4)Grq0Bd
%,NF945BfBDmcC,pbPFLcXS61r'U`m$hQ1Sk'0m"mPb+pVLAJ2SU-ZY+D&hkmp$2
[*b'lM!fmdNmN!RQ'keT@Q4Vq6MM')%)dU68%#fl+&05&ehcA#J,kl@mD3fiY3C2
jGL8"NajCbZm%Sb,QqYQF)"3l+fKp3+[d(DJV0PNGFVq0GarBZ2,)X4XE)ZM$B(f
U9GqB&pE`2J&QZ12#iR0p)2PA9I)a@IERZ4p*9kB4m1NUChP6aFPfQT4Eh"M$)YN
mXq&H$)Q2(+B-HM2Md@jkDap%X(0$M-AY1"F"'E*48rNjk&j@3D[RjeRjV5'rT5G
U2i1hAFI0e3)edJ@*R*j&UFQbB[1Di@``E`k%3a8@29LTTCdKR1ZL3)[kEYh(FAL
,f)a9ZNP0[X+@ErDkEi9U1A`l#6P@MA1,RD*&B+3b9SpI'5'iM#BaY83c"AZMAi`
*T6J4Jj&[R+e`pfTf&k4B-2`0qL'4*Z#Ja55&8iSB6qF*UZKP&!d2L8P[YrQhbII
E85Xqd850aR'[*1+XIa2Ca%6Ta'I-af(@"0AVAK9[H%3H&2)lp)eQVElE,,Ylk2h
ES66HahP)C(&fJQjbHH'S`IGl"lkESD8Uelk(cH[dYq15m4[rjSkJ'`'NGE'PA&c
6cppP*Z,ADlcDlPGGM[GJ'&!NR#e(BP,FRZ`A6q'ChrVmYG2(%+G$A-f0JHcY$8l
9f38JGcHGb1!TKp5CG9EcANS0$cfeETN9XXlRp-CANP#EBb6Fe"VSIm0@hhJH-Q@
M6P(A$XqhUG#D"bFSpkVXReFHE`&,&QSI3iI#ci,H4`$2h*-%`FNXU1YPVeIjU&(
a!Y,4YCG'61VE"klc#iPji*cUE,S,'MKCR(Uj-dA*,4E8!2i8"'MM3[hGG$NKU5m
paKb1M!Ec4I"HHGl0$q1PKK*hb`i$T&-pjTdQc@V)bq+@@0DT8JLj(kI1N!!M+Ea
,RDD"IPbZGp"jQiF*8AS5f4X2KClP"6G&q25Gj0j4mUDiUJV(Ei1C0Pr9MRq&@8+
$qSX@eqhAVG`VL9*B'Z3d5GVV8DQ&b'qUCJfMl5'1YQiQPZUe[`dX8`"GReT[j$c
V1f`T2a,lj-e'CaMRV8Li#Bl`h+X#9FIZJQ6E$%U5!b%kF#3S"kRK!6M@&l'VkU6
Ger$+L65,MJ084X3lkREZB"R9)&3eh*MUlP0%GNam&RZM@@p@e**bpX$H8c#[Xj5
VfBbY)cel"C1jRbk%R0`-SD3*+2ERc(e59$P"Rr0rYS0kH&!RE,`PND,SZ&DJ2kf
FK-)AESYK%cU[SfdhmF1B`1)m+[NSDa3%9ZqQ)b@HDSeaFN1N[HS"[I$2&$)"[*b
N8`XEm!L&eMNXAbMM2!K35+r'h!6kjN"G9&2ff(8Je$$$hfRqpQT-kb&Y!a9M-jM
%AZ0NekU21iriFP'$"MG5qFFT!YPrI'LqiIRFcMqqS60N6c,d&*iEG`2d[GBKE'(
McdRjiPp)RE,pfEa2hYXYJSKNd'3mpqLB@jJB$Gr*Q"lGr@k+%q+LmZ)EF6(4C,q
k"!SE2D60IHM'P4c!)d'i4l!'8A@UH-LRFN,+(j5[GZq*aT4-8hP"1JUcq6DE(Sf
*e8LRqPqSM#"&'9VB$qD#ml`*0d"5!FAX0%&h@rGf&8KfI2phh'KAf")5`*-DVVC
),Uq%SZJ5ImB%l(AN8>6pL`5Fr&Ai,$h*S%6-4jmpQXXPcqk*I-(0+p5-(4`Le
JP6m[q'a)AK3&0R9[cK#fN4Rm-T,RR-C2hV+[L9i)#2lY,q@NlrHSke#BR1DA`cE
pc)I!b6KaYm`K4mi$-R16@Ei+CHa[9*L28a#UVGB""URN&qB@cq`HmHB'irV9hR%
cr@`Tmpa6TkjS[P5d$5hJKjKlIb!l$EeZE[h46C8P(YQe,B0cb0HqKAjE68C)m05
M`$chb530dD0Nj*-+cU%+1!C-83%$AEPmrfkTq+rm$hEfGPkXc#XF-+)FMZCdC(a
$Z*T'j&*)C2pMQeTC`AAbiUm!VQCa-YmQEkDU1M$q%@01c9!6m#4%KmG4l0@0,JS
QU!Q@CmQ(cp"CFAUaBBArQ+kkHZCIR1)YVDcJ2iU$eRZ*e5jG%-36k%ci(&mlN!$
QF8!P`p9fb4"hfbTmi[V0XRBR32TRp8(M+![rV['rTb&k9SR8C2+ZShGiLVAAN4@
Y3IhR$a1m&44ZlC`A"qkAYQG$*1DhiS)"3)4#1jr@Ue4kLbe&Ym@5FJNhX4$VFE'
[e[6DUdR$e`!b!LU(6&r-jf&`XKkSi8)TNGR0T[(1)M6cVHdV50&d%H$ZL2jC2!L
DAAEH1*+KbPKlPJX-H(EbpEIEH&`CMF1@2bNjiN5+82!%HECb2QXPV(BVjr@a$$$
)F$Hd(-h,VE+d4iQCdN6JBNq6Pqf&@(CB@%C'm5b5kEL3!%`21+F#!Pp1%lHL+df
mU9Y(EffZbGYFpZ2M&XB"9aZFEBejilNZHcG+!KS-T5dm@X)P,e4Z'8@@"dGCf`I
X0aNG3"IidS&hX9X0YEdSkGhU&)DLH#JEb*SB1#k[5Iq-%hG8Q46a3(H+#Md`aB2
$Bm-KGm-ENIPM"#V&eU[9TCID"DUUelij[fFT9Z'c'cIpql%F,kMFSqPdZ5K$4bq
ENMJiKH3H"$5Bc,rXCV#3!)'!'NrGYKG+aMSh-!B%rG`A3$RY8i0@EX*i[k"AlMQ
H'f&JY$ZKXTIeA8Va$4FFpl*$qM[kVkLkA99H%FhfElh$Nd,MGdSR)59N`3Q%`R9
1)6PSej0X#85T'$j'l-`fp(lL6[aJ0Qb!CYU+d#EC8!08ZM'iVTBKF-P%4GNGN[f
rAqhNEFZCQdNaUFaT6A"&l![J[%NE"I2brhA2lbN%3l89dm,YV+Be3'F5kfZFff#
d12`0b$U!1EpXJKYr9r1GL'J',4&(9TP2Gk!MEVP(Q2VPm%R!*1jpp$%c1a&J9PZ
'J`c!(U4r!bTeS6XM$Ea*(mmbRaq`m*&hfE'+TNNVcb!06hKS8%HiP-M4JEXSaQ9
jURC++5AhMEEhMMFBCh&3LX6D!LXHd$*ChZHN9jDe4`581L0&APIcAaiUSJpZecP
h,CZ0QShBYNKF"[JaaC)Kh9&15Bq@-Ca0-`h0cc&XApC*pb#`k40`ImJ*Uj8JTTJ
cFCZT0j9eFI(K#"01lcG1DG)9SlSk*448#U`mCfVD+[&Z&SXEAYbV%Hq1a",#l1'
PeRm#e"DSp`TbeV9TH83RNd#+`Udh%M[#d+GX&+GFL(#2cajS,CKq,K*1i0qi5M$
Ca80``P,98A8QIGrJ'TDdYja9[U$q"`&"ecSXD&Lc4pVk(9r)q*%Ur+@eE3V6bX'
c`+'CH$S")'H[$+H5MY%5,2MkX"`69[ae'$YNU'DD-m8aSCAbQmBh+'e2AhXA!rC
,TE'F$$Yd$[(2lIUHjK'NcR82eh"1[#RqL5Gb0Mb`cC8(65F@P6B+1$9PhdbTLKF
rc$R*X$S6LZX0-*5[hiDrCEG,-jRfN!!q$0bk@2NRN3jRfDDkKpj2j$2X1ZRJYiS
E@IYTBbbmjEFj-6P6j3Zbm('[0CP8J[f2Dh"9qCMG%`BjkpG)Kcd`,0)`[meD9cM
BNa[PV'Rb"9#mqe52@+eE%T6G@!DQm"&4&6,SKZ"4e5B8q$pN4dX$P52#$RZh,0A
cYa@3!'YJUmiE@-aQ[mC5hN0'$8kfKH%!MSkY6k[[V1FN3`HUfG*j)j5Y&Ul!pNP
N"fQEj9QIV3[E,YV@e0dZbelqS%Ua,mF(r&DaP-&Z08ki*c(@KURZL)Sc"PZQCD$
Fi6rqepXBhlGKlVEVH9(jebP'hN+ke36mEAGA&(VH0Qe8DHI1[c#!+UL(6e$`cH0
iYbYj%)Eb&rNiJUfeTp*m9`"IHXQY69h9h31C&#d!'(4IIf$%PV(4'$!e[4hKeD@
Z`DPLT0C01q4I5@rqiIKUQYZR*!2#Me3fYGEGiYSR3Z(!Hq(9--SDILT0,PJQ+)X
pNkmB-ljX+eKNq+%HZ6SQ,RVP)hE[`kbEp2aMl,M*N!")G&319mrfP$5(d+*LqZa
,!V'@K#64B6eHVJmBRFIZ1kI%e(%HBKN8,[X(58rV&leVhL[kkJUcA2ETZTGr6YT
2H,d&#,ThhAH+LL&82efU(B*eCIY!j-b("1lXfHhmkY)G&Z3aKlkLblQ)9kKpPQ)
DY(JqZYkKBFi%Y,@5mX[@jH+-!ji(c%pX26%kC@V`&JBlAV5iL0+L6(#ZLrZ'e5N
pBP3Jb'09M,i![8pMrBp,C6i@p2S0D2B,MTkJLrjU5MYP+I%1!l(Ik%Q3!2F`'YD
5!pa#llPEDM)J0Je,#2ifXb5*$MKf089#1IaFm6HU8(4jl)d9@@k5P[&BJS,(+hV
f0rXdmrb2e4B@h,bMFiBXKm4P)lLlkeJrNV2J+Q0Hd9Ch+[Z[Fr26$TQQRIUKlJQ
TAT[dN5I1"BV,E"4`1jUAY35P+P)3[kC*ePAX2CTJCj!!31am3cl[%#D9jbD)[0d
Ve*rRMlZVf[rRMJM4mH(JTJBDLD9Jk`Z(A-+p%@T%$4IJZ[ICNr%P,`)#$Ak*P0h
IiS`p9N[EGh,"&!PKCa`&4eR"LmTYA$aG2c-I+U4J9UNAf5+3!(jj$c,`h9*L*e)
Xb#6@4KQAI6IG"ANTHhJlNPkG#eLqhZ`m!8(C&YH8KcYhQDl2(LUr0,Krh)rdMV(
"9cDThMXZVR,BF$CmbEZGK$R"ief4IQ@mkjfY#UrS"XVYXiPac6F[[K#YhCAX8NP
c8)edZ0`kDK0('%DPjG'H+(-S$a*C"pEq1dpfC,*-mb%,%@RUfK+QJ)%mZ`(**eP
6a4!1"%0r-GiT*5!rk(M5G)BZpY#+2,E[,2dr-L4TVaF-1`krTNGiZILr`"$F-$`
06pQ#VVNK0[0AV'[-TqmUp5P!f+A["1mU+br6,Qlk4"2'XAGT2`,1(6pA"8$6TcD
(RF`kVaJ[Ed&pSE6V1pEQZf%d5qA[H5Nrm"aQ[b@Q%8"cdVV(5hBCbV)JqZUIpj2
X`TS9PV!L(E1l$MjK8EVZB"'[S33bmNcNVkSR'J%YM0i[)3&8AE#MZf%8[KhZ9Bd
*l#Uf+q$XJC,"IFCeY3"c8k0h@iZcc1$8q`HSb$mDUQ(8)[mPJhq1SZm!60RZ#8l
RFSE+N6P)h"V3&23q!3'c#&-INaPr&CreV0jUG6biq8$''Q-'-lcl15+CHmC93[M
G0H6055!r&'5F5l)KGE4CmJp&iK`j[LLcY4%fFheqCQa!QQcUG"q[f3L$5R@DcTN
D2,cYiPAK2%0kN6$%E''Mr)l6kX95h`p*XQ@ZK'Y$j6HTr8Mq-,0dIUcehK@"P1S
AS,9N%#p#bZ$V%56TpBqAQUP#K!)ciipMld,(kJ+N1-C[Rb83ci9K#j-d#Q--!&U
UE9FQR4m-M!lErDN*MBm,2b%5SNJ9drrkRhN"F(DHL[,NrDBa"2bZL+Cm&K&aFQl
Gf'd-B6TcTGCkl*BEQAjU(S`LLBk,be1P!R%fk3P#)!LYfbUC@bU1k0f2Eim+c(Y
3,em2%+9KAI3`0NiiR4i@XNJ9Xei(,[+2V)am[Z$L3DE@'c`eNijb`BmPhRhpF)9
BQSe8-PUbM$fq%X)Nl1&*ILQ4dI4Gc-L1jaIQ6mMdC)kihqme,Eq+K'e$dV`bRC3
Z&ppXMieR+B,Y@"j5EkL8*IqYK84"fJEQp%eS(@"%[3iJV$`GfES1ddZjqK!df5d
!PE#JPZ"Y%[dPR*MFDQqMdKrXrekP-9,1)q2BjF4[p4J3%`mjMRBPkRr21XH1V,K
-mI)IpT8S,rLqjPH@dS%)$)KDC"kZdkC%,3%58Ph+mmTk&jEN(b6c-fH430ajPG4
-ElPl(PhRm4!*da0YVXi4M+[4f9VY2B$FN3RK,BNXV0E%XR0HLIF&j)ZS+9q@1*C
a)2pT!(9qb!1Qq-(*MkCrB+Tj-"PS3kf$rN-FbRd0(MH"lYChrLj(5h1pJ'"4$S"
qeehE%XeRmk9QiQb'Z@r-8cfF*3+a`LVe'G4'R$dT0eBPj+-[LYLefm1'!(V[3!'
kY2NYdmQ0'Nh$[(QbN!#m8IdrE3J&%Tm"m9NML(BVX'Iqcq,r@-Ri"mEhkEEDih$
RZbYkN59d6X%CRiF9B@2kD*'SbVUS"a&Eq6eV()3CRQL-j'0A3DBJEbaGc6%b,!C
43Tb0(dG8%EI$SP#bP9c+&LJPNG,ZL$Hm&`mV'IC$-f6elKjA2[1b4VcHPbC(jNQ
bCQ'LFS%CQXJFFXFmpfI)L&b13XHZ#NQC8pj,eIS@C!E&1+UA-9*MEdVZPE"l-3a
)F!+X'ST$U!k([lCC)I5$NUcSlIq"E28B(-$cJUYlXQ3+d-I2N!#)3+mZ"mB'Uhp
%"fGl2p@!lP)"[#QRBA-36rj'r&3$))Z$[59-kD#P,hLlB9CSMZ"I`lCqrI0X1Kj
&P+caL4Kd50efM,%L#!-h1R'RfVi"6fVmT163hLr$L5SE+c9eQpMcj5("G#CY1-I
p8RaI0[V2(UX2a%BlJTcQ(Uh*[JB$dY(Q8Ib2req"M--",J'$05hqjF$%AAj&eI5
H"1VJ)5cl"h$H'fL23%i5*r@'I,dZlJ,6#(A%PhPA)3%[F%je+#5qD&#S9K6@"q'
-L'!Zq(DJY*miLi"9b*2J!A,q3QQa&FfqMIh+4N-U!&br43E'6,r@B9K0YJe%"3I
LUG$bKNL%N!!SNR0pHQP&2hCrTU4`CU"a$i)1HQd8C$ppi6Y-$#rqQ024kHpM9hG
h0b80cEqKE,cRV0[ZJrmb1iG1KrZrL+[Z&ra6HK*J0'KKF(%Cmk,+H2qM",'jKK2
5UjRGdp`4RrNN)Upb9K#R`)m,C*N+mbXN45aHFUAlV'eH1URm3S-&Y"(jiDi(5"C
5!Pb!r2-SaC'(0Ked99kJq$&'N!$l!%ZRZ(5E14A`TXNr*"5Q*IDa`JRJ3pY('Z1
$b2$&'N"d5[E"K1XIiqf&Z%Fi1SBic`SX8Hq9&4Eh6A-2eCh3$*ZEPB-m!T2$S$$
!Sjp[2qDNF)IXM$2[aRKCL0YqPQh8Zc@V!Ka1$ISK'XaFSB,j6M6N!b@[!j'5QS&
*eC`KKq44pIAa[RaG[Xj0&NN'RY(dSr9`1FXFBVJBFNX-FYG2D8FD&T5IVUl@q3V
c"())*T&)U!TeiN"0Q1["qI0hCf)m[0AfU#3k6YSK#ikd'`)2"MaeNATY$Jl"Jp&
L8"UilTRipdrma(klr4,b*MLmDYA[&LC#'iGhY[eLAH8iK1ESb1X5NTV&+-0F8lX
0aX5bml+J2r6i!ralG[EH0MZM*&D@U31B`Kd!N!"Haqb%Ij@R3J&dAU9a)S4Cl'8
iX@Jm&VP3T-GLS14,&HCq'9Gl`$QSbY!jF(Y1-B*LG`kQEea(NaQ*0d0lL!PlbQ[
)lS[UUiJP4i[RP'9[05Ub9qCmFja(-&p&*qR"hYj%NTYQ,Rl"3+h6lmHS9YlJ8Pf
$0'5X'DFZ4GQm#+bNi2%*!FeXi"$-Y6DB$qRTVeFPr+BBc5,fbJ9$p3`QTT`hQ-j
3Ph-4$I'(L%EI2Yql"B0fT'IL[l%lC)QA3Q98RZ3XP4@)4qLKFFVQ%mZAd-,K*"M
LRB8-HN'KlSS'$Q'FGDcLKKXQ@E[41$NfE0R1CYT)k0$@JCCJNkm@"p0U%RJ@q1d
i[k"3QRf2SCEkIJV,)5-#di%!Ik@'+&(-L0!H`6DJ'VJEMCUG-G$UBRR@dmIe,!k
0G)[ZMD(-apBNbY8pl#"m3jf%[GD@V+c`HSEDH3R(Q``Dma2BP#60'phdbpPj5CJ
fXa9ZRr65RjTb3)kki0N@3CX[@e[Mc'I(NXTD@-!TqANYrmY`qbJakBhd5E8A4fZ
,&"Q%FI+-8CMBm@%cd,fY'$pk62LNA!IkCrf*cA8(8f'CFmQ"##CB#%!RNUM*q93
3I138"RPAh!+HMSfILFSYIK8@kQ2e)kd,0(caD1cSiR2qjK)Y66L[@-&1V-fa8SJ
&D`h3D4$B($Eepl88pm8k&PI924I66l8Y*AaG5G&*5*L&eYM+QdN5$9-4ZX"-8U!
(edJSQP9F984@'lHlIHc--CSkP+I*-5bHG2kdDM86,qCP"Jbp#6$!YGSX1'3T%TH
LZ)23LiSHE&dJC&24pf),3qBQXh4(PrSAK),+IlM$*M84kHFhRH'jV,`jYB5%MfS
P-peLp2m-lmfqmc&542`Y8Imr3i@-i[V$bIHhdZD5H[EZ#dkAp!"V&G2Ahi9&-G+
H$$*2qk-mS"66*35659hYcpH[ae(Dj$)-dh53!"5i1"(SJ6$cd02cH+U8plK"3`V
,30UPN!#HKj!!IEV6m%`0LUGT+IE2pKBAHmC3%!cK%Rh8PV4Z-F!IFq(f*K$*+@)
&ZYd9m,$V[C)C$TmT!I-$56hp+K$T@`J*aq)P"F0DXb,qaj)#FPd1$ZGl8iE0([b
mJ1Le!JH2-I"%Ic5-Y85)1(P+R!,6FF&18TqMS`l[PUdI2d4CRk4f@BZ3!+9eCip
RN!$S8F,+Y226A&5j[$fqY!lSrmYGqeHBKJ-dlLCU,'A@kS@cJGP8%fBNJLajfS@
fQT)4eFeY1Gmh6VFAc6)#c2ZZkqU[Pj'bikP+a(Akq4Ef8#hQS8SG#(*9r)2kchr
F1,HA3j0U-ekhfljXhQPYJbC14aq&+q4Bemldm,4hd9p2B)@`$TjrD@ZY@m5863T
6'!0MZ9G%CP6d*@cQl1Y(Y$Ej-6YTr*`c%+R`U3@fe2HL+T&"4*)m8L[3J6,4V#@
"MdJa96%9CH',ERQcQKHqEF&c&-,P-Z00%"5T[kQfXXaJAGk")*'(@*pGS193`3a
PQ*a%e('@SJDZH@mDA*D1,VlJ1Z-Yq*NJ8YVFTV8MqV+6kGHcpT1B#*HC)24F2+r
kbiL+VmX`5ND(Php41c8XrZa-0l*bQ,U*1)8IlKj0iVi!G3`%+ATMK*Zb+USD1hr
'$ac*,8Qd3FDFjblCTTAerb95BbA5-%a64'c8!48A"I&5[rX$2HlE9@Ul(0D)"A*
0U2#6HTj!VB``)P[fq-N8,AJ%3SedA9h,e'jNmBEI5pQk2"[(Bf[#5mcGm6T#BMM
6PjrT6[eJ@5+jhMMLHIN[D9"i@''jH64m0p#eReNmqNQS51Q'kXq0-+Mmi[mrHC)
lSBd+K$ADp9qr"[X%DYTKc%*69b0TVK-Gd"2kF1-M'L*jZqb`HeJVJ,IYXq6[@Q*
lke1(%0PI!J`ha[jD$0ThZeE*kMNCA*UZM`fZEN`clS$P2*L`FM(BP5aV1E(*9KE
p5aCl6Ga&R',c$Zc1"HLIqpVYh2@DiPCZ)Vh#p[XL(K0iEE2D,2Z2%9#PiqCBJD`
U'apjq(p(BeIbLID)24@[%KL2`%Fd-5,iP0H`Kp6$LM0!CKUre[E@c(1`SrX`VB*
CPe4X)NR6i`#T-XE&a5kYKajFXA8#LfPC$X"T)D(2ZDc'NDJ59DEhKh`JdY0(JAY
%E,V+-HJ8$UEQ,Ek`1Ne6,b9II9YM,JF5TMV5el,J%!2ljGpQ@,jYhdH'%A`-+FB
S$$VRM6lLQehdqZm)""*2*#Y"haK4ii,f[IB!mK9&+)+$L039K3G&Y*85,9qaX!m
E'aR#h4dGqDS8#XMrPJCfDL(d%F6QIJcQ+a)1dZGfAeLqCYXI)'%)@K1%q$4[G+#
*TPfHLpl5#(XY(FkV"cEQ-HfmLCkXq8QNJDdHJ46YjU`Q$Di#a[fR'qD"h)U5hEp
YTPVI8plhDkrDa*`PJkq2"J9+92H!J,PSFr!-#9I,[`rq`@0U&'rmpT!!"PMT*)0
+MUIb!qj)mfl[K9eqNdNrI2,Z-0Z9HiU850(U`!iLUm1SNKZQ&RhK8dmVTQ6d0bq
Jq&G0JP"Ll9Z6id$fDdEKVlj+`KfLb`5LPr@lf1)`+Ia"Tib-j9!,ZaRN9,FrVHb
@@GdXJ)6i&h'*-S3BVa"8(hm*Hq[Rc`rJIbiiSiGH6-Lj`$RRdMGYjAH%1im"F34
ZrK(CQ6GUCE-U-Qm&)LmZk@ZIq(Ai8G[6(-daX&!eeNEID#&"NqkcfkiU5`L[RHq
$AG,Qm5A!"S4)$f`YbEk)cR`K5)c8DX6-2`kA3JE["QKLhTb#HG)"Gh9IFfI@E!P
'5*hIc2L@d)*EZ2+rqp4VAP`NRG,20HU'hCEXcecAbakE6leY%UNm%V`VY`YhkV+
Hb)8AlLfhMCe8`I&2bBF)P@*+*aj)2-#8MMChAUkpkjLQ6mR[lG#$r+F9-cT4@8Q
,p2fZiRXPDkHCfIQ&*fJMipmDfk4fYShPLX[-+YX+FSS9DTZq!aK6HP*0q88!Hdq
$cY'JSL`T@mFl[U&UTj(BNSZP[)mNm+@3"!%!!%-!%,Id,H1hp#hM!!"[,!!!fH%
!N!21!"12LJ!+qL-!!#*f!*!%$`"8Bfa-D@*bBA*TCA-Zci!ZH'eX!!!%L94&@&4
$9dP&!3$rN!3!N!U!!*!%"1#h3X(8i`X1XY)XQAPe1*8'3LX8N@%VJE#HlR3YPIM
BA!e`-$PaD(IKceTDI0&M1+Fm2Bld)49Shl#fp'``AX8cqXa&3B'qKiIlq6f*9P%
8k"YJX'A,X8rcbPq3!0QmFA0-$C!!%aHm*5emYD5KZj*R%a3GL#mpc3"$9P))P*h
9@Qb`!URffhcp9c!9f$PE@XQ-*$L)MS)irkUr@5MHFI0@)Yp*d9(d5$6(Q!X#Kdc
UaGE`Sr$qbZ'Ml@`b!3G!%rRc'pNiB9B`63(%la4qJmV$2#BQ(r%'#iX$K$6Td"A
Uc*4,@6&2B[D2E0d'4$IY6+,kGVFh9@8ZCE%1T3@NT1bijrXk3J4PLhrfS!C0H&!
(&!4K6,"UPGE`ZGVaZC`X",chkHiEihk4Fj+Q(ArN0eKH'NdikDBpZFI$"8!r1L#
HXP4Gq&`8Y"[q9CraZKr'N5YSU,2f*di)5Q)31c8a,p[!%HDQ2E39MR2j1CT'`)[
#`b-9E)rlh-McakAhlfSkXmT348X!KkLaCJ0P))%RBp0G0"$MNd0Z3QqfL+1VF,9
``"E`5SCihq#K1bhXl&CTjEf&5X*A[)+N0pdm0jcVm*!!4jGj)5kjQj*[&R6EV4a
amC`AIC'p5@r#6[UE*X`q40"H*mM@am#XLU#%SM5CVmZB"HV)11bdYUJUhF`4CK*
Kpl(-pJHF[(N,Hk!JjK98Z5fkBiII#*`cSX#G@0,MrGr38Q5IC"RN"hS58EkA4Dp
iKM&fM@4*$fJB",*aB!+@9fa$DYE4JZ6mUQ6f1T'idXZld`+C*pqFE`USU,LL,R,
5*-'M9`,C!XMl1("!)AlRdb-Z#JaK6ld)J5#q03V25ICj)1el$C3D+ekJ3EU$NHK
mLM0aZa3#N3U@'!B-,9VVll%X[i@,TccTchfCe"!QZhS@0&ZeLaSc+KFm#!3,RhH
Z#rIYSEfi&LZXDHKl+3(E0AJZ9!9*88*2f+"3q`6L`Aaa'HHmTG4!@%lcLh+DRLk
0ZpX'))pU[*d(jDR+)Cc6D0L#3H)(q-",k0Tc0!lae!`iUNd`Tq65!RIC$)5Je%5
0ra4Y+6KJ8`LE%Qb@'U-A@A##YE@SD[BCBr)+B[YAf0TN#kMfakdfir(fMSm5)"F
!)+EfFAd0%kLeBhh)q[S3-cqNLr[3RaM)SBeE8SDbUMQ64-#4QF+Aq)&*jV%9Hd6
F@U`rZJ9a6r"dYm#Y)NM9'Te3'Uj,PRVRh$k!5EBYAX8i#aIA9,SMSH98(ai"SiG
m1kEc+qRbSRAQaGS0&K(@`1a8b4ID2@%-dSG*6iNcVVM!C)dFSIl4"AEDahBN(5'
9LAIT&Z'Hcdqh`4%V0m%mIr&B"$FUIbPH-$-*4lbH(8l+HS)),3$"2+)k&J1)A2D
jL`j#8dqJZ(J'#N9Ck)li5Rd[*FMT94[R'q0(rVM'GXe[ac#5YK*T24ZkI4Z0VpQ
3!!Z'BfhCN3K36PK0Jf+P@ih+45Fb%@4q[ihfLVm%Xhq6N!!IBdFZq6ESUE8Z'05
k#H-$&pN5q$8GVpFV"*3UX5-X0cK&l@Ikd2EN9)PaH!(U-(XPK[-C!+$*hIhF98`
qGTfe35LamMH(`HLbS23G#pD6qAi5CVVb-6EaITh@eK9c1Sq&9eANE0qE8J[,[Fr
3hK9iY3#c,GGpqT`8D@cJH8A8h3p%(BcehcELT#DUdc6lbRiZhTLDa+68Md2J"`!
YjH0K3Pp0#U-G&@TZASIAp#C#6CjRMfT`)lk$T21R`+2F@c$X*X)4UbNM%16%3"&
(40C(ZAM1`BH9f4!`2$d(3A!6`p!Br$!kpHr&hDLFPJcLhlpG(*G+%95jp&hTY@X
GeSP4,&+62E0SmqSqPMDG%D9k02Lk145EaIi(lhJ0IK8pMVD)[M[l+R,)9#iJ[18
d#,pN#"@HU*54Y(K+Ml9$e992DL0+05[H0!HPf2`hX%rMG)hADB)!N!$K4k@r0@R
D30,'K45AiS)MZM0ZlZeGk2V+3)fYCbrai*S6`m#ipC1!iG8rZ#Ya`D[125j5-SP
N'1SE5V**P6A%@QFd"1*65Gpk)QC0$l&qQ&N(X+(0B-,aeCE$5`FNGX98!fG%!FP
M9GMIPA2@SPS+++c%MLN6@d3hKkBPrKJb"Pi3r0cGqH(%*S9#60F0-@IjEfX-)JF
,a`,H#jUY9j!!bp9"ViCHiYNGL[@)0&2iF65P(VQ0Z&Y$1q)+*LQZ2ri#1GTBQ&I
qC3NIB$J1jN-AX'9T&JA'SeC[9k&N-GKb`P1YThf,cm8IRl0Y(6$SY'db"IJHi9M
mJYeCr$XSbe$%K3Xr,)VYQ#F&hQR""BMrcd`dJJ#4PhG"AV`qdC!!98Ac@X0+BF"
C@[@jX@rC,#c5SYDq[q(QGVb3!$3ZZdI%Y4k*&ND@A[@fiFaV*MpQeIIGddBL2Na
pJ2+I8!"ZHT'c#pQFACDi`HU"3MYPVXqD$If+09I4LI[2`MkaMA`hieAi#aNUY[K
8IQJ)cKJPH8)S%bZ89m`M3Ar2&DF-Kp(CDl"A-@@FAIMPq"RN[3A@%T*mbrUD-mb
L#)Hpm3ApSkCDAT2'KUh&QIaZ[S&PNSq11Qe6p8)V'F-Fr$hI#Vb1aTj"I2SqPr2
c#k(VY,e(I(-b!e)-C6&5r8JpUYa9R#8pi59kZ9Lp*d"4T3$"Ubh!jh&9!%h(IdY
Q,cB0%"%cqjmdb!Y*3)+4)NERmr83K#dRK2eL2J+-Fm#V&G,(K3Md5meTp5dcd&T
XPhecb1S,U9KQM!+D[#2lbPRBEFrD$E9X#0KZMVk*)1KJHKMm+bP!,0J![9dM%D#
(DSd$'c+$ZHZ!5)j3a#AeUM&Ae*MdlN-ra1r-4')Ta15A$G6,#X@,i9QPSGRHGQF
1id`p-BD'GE'6bX1E6prHUkXpU'UcJ*%-*qJ`bmY[Aae2-VjGbXNYqC(UI[p[3Qd
6e[mDkJTEa`J8LJ2e#G+$dG2U**[!YRj*F`j,25HTK)qjB+!K!mErmB1`(b3+A0S
Bp9a[8!ISc4jY5%*IIbA[!P[VS%"2@pJ'c+I,Tp)YTkdJJ`r"mQiN),fVJ""Tj6,
&IL%Z"%,1eb8dTILP8S`-ebJGV5kj006a'Hp[-#9eA(9+'SEU63hAfLC&q%0Pq!f
e'eaY*C%1Z`aa8jcJ4H9HSqHB!+i1K6ABNq-qI"l%fNdb0#paemd&9jBBF3plG[A
Z,bG%DphKD2mMX&jp9+d1G`%mkl0M&aSLi`-V`I'US+mL#3+2V@e3,$FAQ!BY8aE
fa,qEpd[J8aLVjbXYadjLqT14eAelDMdd"6D3!1GJ'`!YZZY,bYBY'((BD`D-d-l
DQ'4&FXZDNA#l'MTJrb06eV%Q%SK&q@QS"N%FE!(M*mJNj!AH!Y34XRAhmb86M[a
bF,&$,ATd48))P218S*NdPr"HZVI11lFI"(C3r[Pr,%+X#P43*e)39YCJkHm+Uj1
0+qGc,cE5528f8Q3UE*,!',TdaZ"UQUk'hD2[S6Sd["d(@r4+"%PU4UXj,h0"1iF
AH`16-jGAC[c)DCHl0LC!`J0iT9U#Z2%b-Vr20#1[`qQX,H3r&pU"bclG#YmTq0H
Ym#Nr4*'[+NC61eb-B`YA01M!CBG`5S&#-mYH0N-ZCYC$5)T8**!!f,$$MrajG@*
(1hSPm6XXBe`8lP1#2+C,RhK+TSYTLP#U$KZRaJ1YPR-DTmGU$%HQBS&FM&+dcJN
*Afai9dL42CThF2E'RAd!SSbq`LY9)6,@QcZ4(G8"9[NcVLY",cKcIJeDl1YFaHP
#%kG"*8BrR'A2VS#83!RJ),j8A`b3!'er#($ia)RDSM[hpJ&R!XJh19EN&-#c3FV
@2fB*b0-9#if1VrBC8FXmf-q$2-eBk1fTS!#r6j-Vdaa40jlT1I2c%MHcMipTBeE
bcX%ZJ62RVRA%mfeklZ(mCQBhJXS55!m9*`NV#(QYqrl''143apbBXYiJ&CB&N!"
!i@rBmM$5U(edm-%#ZG(E"@8$30+F4DX'4a%D'L83-YdJc+A@5#,)iNR[YM+0Lh'
LYV$TC,`IFLA(0)84e$eA5J%Rm(0S6)r!Ie#%-hLHRjjRi9ejXDfdLPI+j63r5KB
N6F$HHHd%H5ZFfE$049@f*SMI"1ir[!#@A$U01,keTQ"TP!h!!Il)0-L')8JLB)6
&p8cbmCqMqZ9rHE9hBA%ITT*HRa##'R%562#N5dpP0aA9pU-!G*lf2HaD9jT@dLk
AbR3b6CIVcYCDAbEJZ4@f)%#a4lV%S%V8&(VT2PQmIV%jPbk1C[bj54GlrKbEGYA
[-*pEB'A0fj5"TNP2qC()m0h!UKTc)BCj+#rA$"3T$@88-8pJ-1lBYL11A!cUXS[
88S%pTN`mcG6*$)j*K&f*,Gl*G`5!-8aIm@L%DE`3h!K(L6I4Y9P[j"kaddf-Jc6
X20$"Pc*dck61NhhmLVEBNiJB!DChV1&KI+2Z+5B32@LIXT30kC8(SUfbq(IkFGB
UT$(X92l9C)Gpl6!Hm-Pm"qP[Z*i`D6PC'c$8hQ`CC@8@L#VqJ+N*!S%IUa5+1!!
U1+d6pkd1)FUK5*T)V+)B6lQ!5XD[J*U,Sp)-fH+a$R9bG#0XbKjCTXjiQ2h*+TR
ch0U)d8j[-+MHNTaXhf!j!L!45&jC,mh0mrb2HA4a-dENENN*V)HRVaD%#AAp4G2
CUXYK8aKhPk[a8fkhppXDEbLbG([$D%'0Ia$h6e%Rpb56Ni%p,RmCKBb8$4daP[e
FLL"VFUE*Fqj6TV&d4UbX@d[G@K6-NpSe,YL!q3Bk-&UMKVkF-m#A$`1aaGM`$dZ
2iUp1N5K4YRUe2'j)+hL#3"144`F3jHq&C"m3CB2hBQ9ZJHQ8QKfHHP0USj@(1+N
G@`m*@(%U$TVG2H4a84"iAZC'i%k'-k0V3YdQ'd`0mJ(i+46Zc6+L*C8QX%KV[hl
BRZ`6K0[-eF"3Fc!J063r$Q4(m6qNk-1cd&(1Qkb""G"kMj[Cc-M#TI5`L6kl-9(
Ee-RK85G(+SV@pUq1cj!!"5ij%Pd+ddILJG`qNN[N`aM2IK!eVm(VXF'hjhL0)+l
S3LU'BeHmBrKCI%'YifKQr"JeSH#l%"P0DQcB-Th2ljB,(64S3qH6Ich*)maiDK2
hVi!'TUEfF&9JaEKj'&Gq2AAUcpXljV&(,acR$#fM&9,XQ0k)!q%k*JZUNJ*NapA
KBB+#RM04Pi*2P(1#kh'Sq#2qqNj84HBpqkN)h)6a4G#kN8f$NTFk8Qh!"SJKA-'
Z`9fm$H%9ZXGH$Mm"p0l`#'6&[cj"SA0+HB9rN`J%GCmqZ*ZLKE5@rH8@UVYH!%-
93Q&0jeY-bB2p5S05'"a"q3MjaL1mSjKS-HYrFIpPBLN`cCBS`R@E6@$MdJBe@cp
eXGJpaD1R)5Hj$c3S!1ffcYS43kU43fJIPBQ209k(!hahaa'qArcXadDaIMV[T5*
@6$$FG[f(pm-i#!H!Zk0A(%Z1'J'dM2pHf#!Q')5*f#F`JclM,Z*DrUpP5)b0"*9
FHemUYJRaY&VIZc[Z881-#B6'+Di,)R+`ep,(6#rdK4G3A)aBH*NhhF0iQ`KLA9M
[-$I$EEJT$NV%9Z8VY!53!&,C`BI[rape9E!J"J&&TFF%lZVe*8'kh6!HHmBai'd
+aCVlp$4MKQ8"I+bQr%lNBIfFHa'%H'fRr9Y8kqmjVaFL-D)[(!,&E4)kLcq3!1L
3!'#6Ca5q-+R2RSI00"*9B8',$"Ce(mdPk9!JL0SD!bl#b'H*,mUb%LFd&N!UVdq
XM+eB+B&+hmK8#mQ+)@a*"8Zh&k*pP%K*!Q9Y9GSKY%9L`mBM+FK$IV+r[VQ63LB
BM-6IkCMNd@kDeif*JmkqiiX3@*&f[MPq)RhkB,,5XjE0TQ(5#56fC@4A2j+Ga9d
GeYj!JjGhYm*f`I%d#Gb80FKB#rCrZ#0IIiX")eq,18Zp-T,8#E!H`&C1fq)UVq6
D3AEZ9Df451m),G)(UE-B5*dj@3)JriCL6Fl,f`pa%cT#0@N63UC6Qm"G6Id!'5j
E''qUlG$$q&X(f'!D+i%[#r(Q(Rb%)$'6Fa[cCH6FbpCpcD-MCl#`3lHC@&CD2'G
6Z,&+VD3ph!qmT$Phh+Tfr#[ECB*LHHSV[EkHmJIPV1E#`PEUB%HjGdM8Ff%I!*Y
51bTfHaeQQ&l*jUaV8dNZa!%rNCP*SdhBPl3ABD)8&-N0Y@3NR+K%+k4rC3HC!Rd
%62-P'`')RQ@'0'46X@VVl2S2')%(-Q4SPXE&'9S*E0UqUp@e82%S*KUhD&(1R9F
qYeK#m%4m3hKm$Z`J+ieeVMVH#f08+TZ8pPN4c0YG6+f)G`m$E$qhK-E+4UA0-SB
d*$j%-dMd#24GJL8A)3I'Jb$V+BTqZM$'Z&8-CS[2c+,XQ0apFH845Qr$4YVT'('
,`EAF*UYh"rMh+Ih)ZB"QrhqcP*Z[r85UVkhibGV#DK#+'TZ`Gre`bFI1bCE0,H2
j@eP-Pr6ZX&6`8e!!*N@mr`V9SQX&C)B`(0P[+P%9Kl1eb6#bm1%a38$'cTYLX$Q
54%qqd"['YFlLh"eFlfSG$'JY*2lTJ!J+*R0M!k#hJ$[!*mN@3eV-J8Llccdr,aN
@pCje@EbeZ&NXmlMdB&q"d`0Dh1$Yd0YL!Sj90@S#-bimUkmLH8)0l6p2qiH,1TD
[)XljjGjH["'9$@T8-UR`Jfbh0*J2(Rdip'5!ANQP04Y)*ecASK&6he'h@*R1k60
)rD&SHe`bkD3(q$(ra2*5*$c6l@KMAQCCAFY2`16LfVk4jmIhRRM0rh(a9ES%FAT
0mZ16K2YSGQ5*ISe3*'12VBe4X&0+4Dj5+rUFXh'lGN'$F5CSK-U+PRBc'@!F4Lk
M'P)%*D(iY2rA@UVVq-LB[$)eh6&4[2'AL,AE6E6AZF6XG$X@fhBD$cA*P2(bZ,J
IQRMTlZU3!!(I0QKU8)$C-*af03i0NPSaEe[ZKp-GUB5`XH$5bY9qlc&[58,L"aG
23aM2D5fN5me(jrQ$RT4@%T!!2KP&*diaYB!+PUi,1HZ'rd&EDF`#BX#lb*+bK6Y
c[$*V(SAPNMMK6P4(8AVTBK34!%XYT[8pZ)R0KHi0)9"QiQKkDRPLehGM-8l8q(,
Tppp"f!$1p4dfVhQ0b0([qNJ-[E@j)pR1I[Vl[%i@ZPq&jQ%8!KZC6+C24clfTS)
e9UD$VEYpLBEYc51p[ffGMS3$8"i+%b"TQIPXf,2j%ZZ''AC`'2YC&K+pXB(CN!#
BA`K)G+q&H(mLd&hJke1&1HYaN!!h0F'2MKdb,XkU9hY+l1MRV"rqk9JM54Ekd@k
e()B(bBi8-ATZ4)-)ipBE@BPAb3$ErjUFXZk@L(VZUqUIe42pC)M(XTYaB5ilU,#
UjL4V`TTI$4m&%DP#UF1DAiH!#08pm)kApL'T[UVLbbXZ$K6h)mU!IB33D*5[UqP
6AEHd#lV9K@-MABHjaaL5f6['GH&C#TR0M8C2TEC0CBEQ6"2AhF4prdp305q#[#2
Aeb*ce)+F'S2'F*EqNQipCA45a%!&V"8e"+(%eq&`!Yea"&Tb!bVBm*lKLFQU6qX
BH,IPZK,9VK(XUIUm,U!JeG)5!6XKQE#XjJa3Hm$h0d+5fZ#mABMXp8q%8Z[3r9a
*[9Pm*HYY)$%V!VH8Ed-qT(5jmI"S"@VJbYhlU)HTFe8#cX[ja"'5GT!!X@KB1,R
ShCra%d5Np5Q#)F3[SamVJTcA8b'[KbdBjV2HdNQD!KmNDi2#f2VVFr1rN!!b)0L
SerY!ec&Z1fGU!CEaAr'YE-kAE`jl%-jB1%0#Uf&cKF@ikDMV(XiI(Jq)Gm!Aj`R
HIKX,J`'S8qELr2cX2B82+Q)ZbLDBH(i+F5Pca9fDM"0HAZYB@4cD@CJG#4)dSiL
kU,0%p%YRMIEep61`[B,J*VYmDeXUH&c-PNNdkYlZD#$ejDPL`L,8LmXpecRD6m*
r00IVf3SmC9GQ3N`Ha&3C6JS(6&%$di#S(rZd$1G'dMk4BbPffI-a'AB'jPV3beM
eUD8RV&4Q3T8XK+3$N!$9+Y)k-pc#ZLG'"QLee&,m)bi(G--SZHRKbA4d+K%GNHM
Z6G+TbQ`6QYBZFk!Zl20ajI6T0R%MMUlNlKIVJP*STHHEc6MhKENdQkQY'dN*'Z6
D'&r-cq`dC@$'[-h+DrCPc@*@Ga[T3US"!Cb4b02SBr[LS62kKaEN`@eRfSABVTV
VeUIPRik&@K0S)ZGlUJ45`VdXjb0C"eP[!c+XM,Pe-p5q"pqjF,*Pl!SUbZhrehR
dIX2EkDCj@DSK["69PdHLjN#H&CP@Ii-TMbA$chYP))E#I%mZmS*'R-B4V$&,`0p
JKbD-1#CL91hX5M+Me0r`5F-miYh"k@'$"G9H"AH)*+GGm0ahm%kh)4aeppkaU'2
25NC6'L'3!+LU$[R5c65,$E`#`AFQ5*NhI%%!VfZmEUb,$FeVrj)Ke0aHDlVa+!D
9mqABL3CDUZ[mFHkP,jJr5kj'JH'G3BR$ALfejdF!(NB3plGf(,XpmqU)hp0Nq1X
l&akFGNbb@eA0,heXdUmM'XY`Zc$#SP2h[Pm4LkVi+h,1JC@V46KPCj%)(!!,YE,
dGRPkd`a1lS5CB&)d3-dPQCG8a0+HZIJ+01`&hFJ&%ZX2-D#YTV0d&''SfhMcr@*
ST,E6qpABKD8i5#mS`aFjl@-$PcA8Il)FRGd6ASA(61BbThB(kbih44(%8@pqX5k
#lpI5`TF'l"C4'4pTlLFhjSQkqIQ@B96(2r`"9jT!$5G,`L1blSGqD"[BKX8id$h
LZU5EE(DDDM)%E$KLX6h@rXP'8V-K43QYhqd&2jHD#"ArIp6pqCU2SQQS*(Qh,p[
Vq!ebLTZ+LIX)XS@4b(ZSfEGKm,YA"fK-A,`)TLj6rjU@GeSX@TlpG2lrUZ%kq"F
j5bXXCCe9MYFqZ6PjhLR3i*AimX6FlD8+)TSKUK!LG9XlLeMHN!$6!T[VNic3V!q
b@h29r14j'@5"'Q0E'QScVbfE6C8X#NfkY401L,%*8j0[B[mIdeISXrK[2P-jq*j
bA!I@JfaFc5G+XjcFbKI5kprE3qmZ+`j2XfE2"R0bdD&mapACb#Qpq$("6DKbZHV
i-TrY`&V(1hZ`!4h4AldA6R0(VeN"EL3)#IRJ)VNd-i53!(#[9LbRllCmr*HkXL'
TSrlGVrQIZ`AEEiT"6#cGD8-VU-mJeCXBEcG+mVB62mZmBeMR5YCF9L5A53F0!&R
U,U2aZr(Y1TY4pI5`9X-DXI&5fITrPE'61T!!$+aT5J&cQ"JXNcYah'0m#YQeVS8
pZIZhE%'U41kM2jiYL*0'N`d($b&86j6&,XML!*N(90*VlR"DA,LSc`9icN6*5Bf
F+MaR+"TMFS0hSkeJ%aIr%1KbqGQAh(J@iA86R5K'ar+)GaHX,lTVdlS%LJ0$L0T
BUJ4eJb&`KKem3amZJ1I$YbdM9#3Tr8qhh+YQV$TRU*`H9VJ[Ndb%X#[CcB%9XrT
PcNiE!cKZFB`k9YP(rIJIhVA%+jrU!$1mlQcYBjh*eIc&6hYXL"Zj29l&@SBPdl(
)1E(dKe(JrG-3`BA#4T[kPhqplK[4G5(Llh2[d@)X)6aIc*j@[,IK#IIZf@*RNNK
1If'ZEQb8%iYChYTCX[*b3e[HQDQP!S(Y@Y!ZK,F-p6e3B8$`AXKM6%63hQ,1Zil
3!$PhJ,L#H+J%J!Z5c%*AL*!!feGJBqF-%fd"$GJ4&EAjfG"Zlm6-d%DG[(imHp'
4pFK*iaIl"m"QJYp9k!rL"U&Rf,h+-f8B"dXZ2e84`&(BNAq-JfN)1`&Gb5%fr%S
$rm1'K-J)`ml&dY8U*e#5IpEZUr(Fm#"a1eZK,qEm#+DmiEh#Xielm(X'F0B!lbL
'fBVFVNZ9NJ9")kM(&CJ3%9VR[8HH[Cp[Fp-#)EPPkUF@BmPj31qc@4qr0KYaQcU
a!Q!T#Ir(dJ2X9k&ZHKb(Vd@I#Tca$a)3aj!!cF+QCJ$+pR#aJVTCej9"LVH3!)k
f4`U6dZRFL9C%D123pf2iUSS1qQIJLpF#!@[%ib$"p%flKiYQN!"5kh@D*p,G22R
Db@'f!c@K3q,PF5BRSk'qfJ9@BJ12MmiIVhS%NbI@LT[pZ0J6C5`1djD4fBM,6U6
,eqZ`VdKbiX)JfU[%NY(5RhRf,PVMp[mard-%6V5(Yb223EP#@6R6RaA9&&`2`"V
CN4Nb4qZ,R"j(NaZ(L5AVrfj&[J1"T1dN,NAD(0(Mk*l'#98Xb+jA**[`F(d*X((
**c'kER#@mkq@U9Z[L48%b%&)9f)UV,Y&K"5MQ$6ZJ'`rRVrNh#jEYDr`RRT4(SI
1MLK'61qlqP()G"32CVQPX)l'TKP0$TLTS0GAm2r8U(1VTqHJC&Sc8NB,GkD'&H,
6@6*5f#YpK1jc0ei-e@S!8hb1@26!UIcC!R#DKL8-,i&Vf)0HY)C2)LlX+1)IUGr
lPX"QKYc"8YXf#)58BljQMAiMM8dH+S@i,,6c9*PaRa0SK+r`,RR83Cap#C!!f"G
4QdV+UM5501R+RMSE4,i1qq#pV'H+0(e8)9&NAke0N!$GX[[S*H68i0E2-P-h*+H
,#aD[H-"QI`[(X@89biq%)(-'XF3D&RJJa%&SQhqbHp*qa68(9Ua``0$4h@2aP63
ldD,AV+0,DcZ!%`jr2l"eAF'Iq5$q2IXkqi+S$-(JJ-AEC)qc[D33f4-M`rj)dB1
F$dkQLV[L+MU0Z4M#eBlY+T3iQp&HUYq'1PmkLiTDapS)9`h4"Q%dPHiN1Ueb-3b
dN!$+9)#dT-GYpeSA1*L`CT!!cp&IIkHR(ZBXT+cVNGa52M[)+Z0NhDV'S*UmQYb
AF2#RX+Sf*bLh3$S8j4RHZ%[84*c)@S8'[c[Q8[4GVDQ-YqCGH"ll-c+$5+QcAQ5
9e3F8F5jY-S!m[LS*kNXCe,5$Vfp,a&iDe(pk$L[fb4H'FQe$$c)!#%mffYSdH+B
c5iNplGb%pJH65c,%YId`(f,9d1rehiFIQb-JZaVRJ$"*8mfl)$Q)YcEI$V48ZJC
%k005qV[mE+,0-E6'R8,@C-KU#qU6@9&UG"EHfG+,@DfZlrr9Cb+KI0d,`Nq&%5p
[RcC1'5UjUI4lT5LL"J,[p26B%AT0KU!Sj[AAEip!M"9P,VAih1L@,1RiAbRiQR1
XH*J,q4`2@0r$TaeEJi",J0mbNXLef$X'EjSD[PDe'N@lKQd6(`eQ,-fC-e-A6K+
TM69k6T!!iLX2GpLi(A8`3MBK0VBd11+JDAjkM*YaC,BHhNqRII"N'RhU4Sh&1kY
$FXfrPb)Y+b`XbY!j+%3aqj5MePJV1dDh'9QV@NJh5S1$8S@&'BLC)dK3bpP&80k
iK,#4r,&Q&I$b(qYLA4N%9RL48p2i"3NXCTNBp+*X1a0qZfXF0mF-jHhd9+eVaD(
DK-CDQBZF!a,eVa3aRr2JiR`fr,6dN!"Lp+lkf(8,P[8qE$X*[Lpr6(d[b"0'lqd
#`$A`Aie+!6,#cpFDpcd1IfAI)ZhLDGU%ZUY,BDS0-l#Ge'$LS%qXmZr*98cV$$c
)26$!X1RXh4NUl)8Ih%&lB)T%e&Z8dhm04L$Pef$b`08dY@)86(K[a[*+P%aVGhr
@S[(4')kG49'5e,38GXZbA[r(B,4[jQ4eFak9pk3G2amb8H)JrDYZNaN#5FEm@Y#
q$Y5'M10R)j-1,X&DJqJ09$A+"a@1hiGh26XHV'![h&Ce(#440T@MY'0mAYF&cXM
H-[1l8#BQkN13!*X&fD#RHSA(+*YqQ-8Ea$RZ%d`[c`G$c,aG&C*Pk''V+XVVP3%
,@Z-IrSlK*4e'NT9C"I!lc,,A2e(A[ZNBcD!ahTHS0c*j2D!dh3&8)mP)bBUr)X#
PN!3"!!!m!!#dSF5TYr2HH!!!Y`3!!3bQ!*!$cJ!-2TS!""l(!!!bC3#3"!m!9'0
X8fKPE'ac,Xq!!!#(`de08(*$9dP&!3$rN!3!N!U!!*!(3X(9%"mL4REP""484kY
ZHPm56hBYYdbBCd446H$m4$3&`rdrSm)J4(FP`kik-X`,6IQqC-f,EKPYQJLbe8P
,#([lqSdMY[H`3PdhM#MC&kFr&JmZ2%X9cLh1i!@`GaVplme8l14lf#8m3+HmPX"
G1#3aP-j[Xa$,5(TCI$RB[@9D!!RiehkhV5J4d,"+fHEDEm@kQX*PG89XfT%Z[L$
HC)(L2S#Q8MJAZlAjS#&Y,+@VX'41h,Ul+ZA[&5M2dY8fkhYKb'B&b#9QjrG3KB3
8ikQ@$4'K@(RZV#AT&%pTZJK`(0cYTMA29E!SaANQ41&-)bZG0UEabd8(L!Uj93(
+q'lad"*CIBl@0B`,VbM[-$HjS-*0h!9L88LD')Le$plK9hMSjX[DBi2P'Lq@4Z8
l4$S22d[@6Nk[@flTYYeP4aT4pNF,X-%1NHB22YTN+"1HF$`20-Vr"L&ZYpf9pB"
km90@d,T2QU19XcdXiX8Xi@`#i(Kkp"[IZdY8+!Y!T!J,8)aCAq5p8R05b9[+-8"
%X+Y9L1DpR"B9P'mECI[90f!0i(3dfKm1M@[krFhR#1K`5%F`A5QS@!(CajSb`1`
"ZRlMq0Y9EY[mU3FIEiP3ijd'ZfP&NqkDqhRZ$Z65*Km#U2UP)4G0-c5pBb-)Ter
2Y5j)`ll`6pEYpRZ!28,"qcT)p-PkCTV9F'N8kbU@(5km@%[cQkj[4BXJZJ,9cBR
hA9+BA4RKq[@la4j,[T*-"MCkd8rb&)))'KUX+lVjF'i@(CT1&hC2r*c[+aqh(PT
eX2Yj"p["@+02q@&L0HUlEEm90V2NEC2CCMp6D2X*2Hr#%1M2X5B$qJDDfQAePKA
"l[qD9R4%GP2VJqQl+hZjC2Bq[`DHNL+r*dl1J(Dl,PhM+rr*AUB[cTTE,9N(0j6
)(PriR5kq(&KR#N2HZDE2ZCEapE#QSkd$Sk"V0f%VRdE"Ji%@cQ@"VUqc`NUSq12
'hhiiCB!eV[UlL@NF(mmJ&FEr#Mlc(FAmX!T)mT@)DCQ`KArp!4d59Mem0h6QS&"
Sfq+S88+"Y`r9PFkfiL+PT5PUeXJX)r,MUCZ$q2-0afMpem0!lK1"h5lG5reU'JP
bmaBjejmIINMkMMP*C`Dd4k41fSd)dZF%#'%P3+kL)0jSZX0!Y@*4"@R@qP[ELD0
#L$fb'(`ik#Y$1dU4[R6[61`SHl4i1-)$pj5$TJcAY1&0C)$'V,2UYUkS6,-Drmi
TID)l5"*6q#h`SYp4GcY'HYD%AecRkENJ-ApKJ3+IL*,$c4,T)j6K-!f@dYHcR`#
`-jcHRG@DLXA8EhdNI`0mUR(#GLYXb(3Qap[j'MQ"J'$-A3D'l1*&a,GI6e)cA(U
L9Z0R`P8C9fQT`E-HHlc53jkCcf[p8)kiXR8Ufl('VQdSQa$J-(`1Cp*[*1mhbeE
f[dQqeUYcPfjAM`QVa8dQ+FJ183JU4SFaU2PJDbh&lh&FETS@kASJmT42"PibiXK
V4EKh*'qM14&'G!$e[NjmdmNh#AqS"h9+8@00c14L$U-d0M9DMk%VC9N66%9ijP@
$FG"01U),2I,J4S4Yk0+Ijh)1F%&b)@6,3lYp5H#6(#[m$Mh1iJ3-IGR-3!Z5XU!
-qkp2#I%eFY3Q#f6e-`F9*8L)'a+eB*Ub'li8ZU!3FYSI3-iPYflplk3!YD%$d%J
3ZZ$EV%AD(6LRJUMJ2e[$kF4dFMKGhp"Yr*GK-)@G[f)qdQ*2Bl*DDV,9%,iF-Eh
RhCZ+h9IF*M'B0iT`YdV""MYF2(#eRqq3!&A+Q[K52VGXVP*DRKcd"$#rCpA"pjC
2q$LH4bkSqU0q"H'0pE+[pfMrXM'#r28-+A[)#2JM`ZblKmQmjXi&k-)fM2dVH%Z
CAV@RQ,BjT#CQYGq$h"kGCSZ()Bf4+MQdFXCV9F[[$YFc[-3h8dP8H[d*eY0H%fD
JDKdI'Z,[3U@4VEENr'6lGB(G-Y0V#BVUGiGAa2(U8p*8,`CBPbd@Crmh45dcXRY
XI4C@imJjp%pJJ6mDTI@V'%H5PbbM!1Th9ajj5@6J[iGdXC)k39["4#haTfdH(9@
8ESLNRaq)C'FZr"C!*-prTSTDckaeFBEEHGXEVhbDrp8YpY66aU6&f@QE`(`"`Nb
k*akhFm6NFS#QHbcYIM*m"P"fJ+[k&Nc6@*-(&&K0fjFc5SLrm0'TaT!!#(),0CN
1i0H-qZ`%M-(KpVVb#4b4Y#4`%8J",-3PKdY[aM'P,1+!0)V$b&,qAHcL,jq-JR`
M+p!1h2f$3"&[(iNi4d#F5+li[f'L"N6,@mhkq)&4"-q&Ge,e,-F4UJ`Q'iTd28!
4DCZr3$C6Zj1a((%)P@c0APfR6Yjlj#qApf`!8Fdm'UPGJiS$kcU)"V2k4FB%&1F
#%hK,T8&'Apr9%hSI8"Gp-k2A*#@+FRKf@2BNhB2B!X4CXaM1rEL!Vrl1)'V9hdC
5JNJ0!k0e+F,c$[(f6-`VeeCQ!8eVPm1G3HCANC,11YMUcY,C"EElZJ0!Ar"ka#c
JQIUI)[6E9,,rl4FX"Z-'b)-%pN6@LSr-l%LA$E,F[*4SqiP'U"mmd@N0Khj*Kf1
HI@,CE@GMS2fel#HD[faZeLj1kC4c,1[f-PUh'*[f#'e2Aka`L"Al#36L"%0iq'6
r$baph8D#H%)YY3NX)C%BJ2(+C!TGJe5'9eZfala6R6[m[XLpQkY[(Xm-bPLb+B&
KQdjG8Q$LbmrTbEQCGiYm-84ZTcJ$E#Sjm545cq8Pm"@'b%jaM!pRJS&2H[%bK4Z
'8DSXTr''h5lK2TVlKLSaJHi[8E@&-GX"f8&,cQ*%#04#GD4eeQU9`LMES*BZcNB
Sb1-b$'*JpP`iA(F1erCC`LQZG#B'N!$6M#Jp`"VQ5rCY+q+eJp6VSQM8KIeVl@1
[!i%2N8N5ic&i0KF6b're`4VEI*9pd+56k%`bF([XIllABi,#cEb(H$jH0BPTK89
9HFmL8eNB2!D44UF$"0M1G%bCq@-*T%`Ke,NT&KQA(ib,'2NehbmTj-&dC4dTqiF
S$3rLQ(%LR)ClJ4GT#h-bZKVecbjRmerV9qCQrjEK[HiH6raKiU%$!aEX[qTH93J
'c#*KrpRhr8)'rTUM&'`IPeIKJQiS@5HM0KD*TrV-c+3#-!ah+3@e'QdbcY*$*Nd
GdEXmhJmeXPh`eMr22X6f0`LCb-ZI[ehG3!'rad[U,&*9G8e31f%6EE6TVI2Ee+9
`cq!Veq`D3@ID8@""-)++)bh@kd-)IQh8re+NYV"MAAb0D)RjF!mJGL9dcY5kAGZ
[S6C8Upb1mQZ8(9RaY#Aak%92"D#)i@S,D1im1M3cb%)kia&8XqK@&f+CaT)Sr6r
KVfd5$)V-A[@*K&dN9Nh!d@,hbaYZl1D$QYPkMl[Te4db)3qcIUH3!!D0`-#EDmA
@f"l$PF+2Q"F+Cmm5!`Y89DD4YFF(U1L8Gi(1A'a1TD-hX3fHr'pfD,9XmI5%R!K
bPE)4l&e�c32ri%PQDJa+"qNcTqXUJ-aH0KVk2jd0[%Ij'-jm,rYqSVRENI`J&
k4"")'e1QP+X,6rRcbK*D,)VeBTl`b'N(4rNSEDq-5`M,6`hN#!6UfHlF#4Tk$mG
5qMmcTe&ZGUPKM'kJ4QjMD)DJF0[6*8MfI-F3*f6'CIFHQqCIccb#N8L,8m-kP!m
hLHe%1Bb2'2d4(-8MX5R8F@lV3G59&bSJ9iR,JJ&d1"SE3f40amT@DHN,#BpLap6
VHc3$JAQPLrdCf6l44blimc922$-5J,EkDIfd5*3*pkV[Af,VV"%R9m$q5mAf,#j
aC(NkRJcq#2[T319Um(1&F%eRc6NY2m2)(DEH+$#pMJlQ%AT"LG9Zmhmh*m1NV`9
0L,a%TSR[SqD`hAi5SMfF6iAhiBQ3!"[FpJY#f&1l&"@G4Y2"QVf4QDJebkpr8S"
%TIlL[!YLaV0Ki'6BpZ[cr(RkR,(Q4Bcp3D%&0jKXFq,II5#Pi$1G`BJ**6Pe"Ki
*mkpah0PY"T(BSqH(d`!*mZ6k-*X3Xbh*B0b*319*@%NJDiM!YcH0MN4'N!$XM2%
jHZdi(E[X-3EMPe[ABm-!`qeh5)MY$U`ljR1"M(FAi9`i%cEQJrb9flSiK'2lDf!
SXN"CUl*cN5D&il"bjrHb3%`kFjpr`#aUQl-"T0S'R0cfi%&HRE92d'Il$RYFHXq
AFehAQKKd3iVE6YDi%[UrX8!d#'i(6fB61,'2`B)i,,(V(Z03K0$[fEZ%iSk1F0X
c3kZ($IebFP9,C#F@AeZ-km&cPH#kHcjP#`Pbm23+fFB[JKrSQ#XDl2TY)dUTXlD
aIR%pdPX0'ZT23h)-"Q4kV)QJ*!ArHcTZDaMe9kXU1Mf`4['&j!`p,P[`Pi[[h6q
h1T9mIjm)FSM%BBlUdcbd`MrcFh5C4q3@CjJ*N!!LI583Q)1@aUbdFVUM8F2$9D@
Yl13BDBPDC8jHCFlVLc21mFj''FR!aXp20&C&q3c98HB!-B2bAr&@DKc*bBhiNDH
YALk(MHF"Mc!0Ri5!flSRfjep0IUfma5k94Zql90RJpQTY@2BLfTY8X28KqhrGZm
b6D8Ke(Hr,!me`[8#+6q8Qc18MPM#qq3Ue#"adfCI9e!@!@9Uk`B,0S(aHll(qDC
fJDcpa(4,9$2ddp,,Ldp@'bHeKR#lNmDZX6J3Zp%8e1Pb`TXZ2BHdSDT@#Bh6'(+
I,Q(4X$2`@l11L'%VaYJ2(K0ADjXTd[UjUT`X3h1TS$EZa2Q-+5iXV3G[cXc8UTM
$Nr-I@PQfIYB6MEXhE5CZqM8r46pR"588fciZ"1ZM30Gl&1m5Af)!8Bq,YE$RLI9
irCXXDYIhce@*`iBC(4[@AF+fhpZ`mKaYVUQ+k3kDmHBTQ$V%LQ$aQNZeQJIXr8q
69&"2BRTV!CkF!q@ABR1,ReZNPIUI!AD1KLJ*$cd!FY&&J@&6RQVMJcp"-3K-'@R
[-A8*f%9J4(M2m$H10#bqYLNU5Qjah9Y1L[Y`R92CrY0N*F8CVk5-i'F4#%*V+%j
8AK@bRUE1r$MABB[*$RCI`DiMNZNrmbUq$)VjMj01pPJEf!MH1jpmi$k@)U[)qbc
lUa'"6Zj'aM`&(Eiq`4Rh8h8jU(V+"bNl8*+@)bf,,'"6VlHY!%bmk[hk5024r[8
#k[F-&T+S6IDa'!(I$6B@(M,3`64`4Y*Sk*c@S)@CA&01Z5PBR&Ule'@JUN[B2+G
NJVAR`Y#pH",BG#)U&lM!4QN&C%D,lP$YX0Z4#&PZf1a+#X["--R#$ZL,q(f,TRm
)4"G9pHRY`eL4$fIZRCM+`G`jjmiLJ-a)S(j-+A@i%(3e!f#F*)+*ArM$lRQJM*S
NhCV))4IXYGNq$EAR5#19P2-VPrjK"1bCrU'dX[Md%[I58Y"UmU-2)XbJ-"LAFRB
i9DQ'QhQ!,0#4,bZGmXZ'5*IV8p-QJY5"Y@P3`-V)YH0Gldi2(DZk)L2aqF50caS
[fdpDKAZQl6-@ECBPUE`hph4H[UU"6i6Q*!Hc-1`&@`Ikm'D&Kh%B`PN!GdfBJ'j
4HCTU"m93%EY8Df3TqhRr'4q)5NrPaB,[fS4VG91fYJ-!kaP$hj[HB9(h+0CPh2)
fbVFl*8+,BDFYPNAk-k&K$)L)hUhTc-&C@hSAR(-eZmq)bLYj!-&k-9VdE))JQhT
NmkHmEkShGLlE[L2,l`kD&D@LDNMl3IA,-ULhpijqa`*M3@kKYXb-CTLedi9IT%E
FFLC[ZQ@6rXi,RqkA2fQ(Y[cVJcpl1d53!+UY%VRMhj*D(U2q"TYLKR*+(r52KcG
Q@Rr-mXAF1XbFZEjG0k1J3L"'cb(%@eRKlU$ic#i1kIk1B4IJMaT@hL`PbKll#SY
3N!"lh4#LUmKF5YhcLli!36HjIHd$pEdAmpDp)QmGYGV-I,K@-H"rMZQG&h"'9Le
qL!6GZ5[-hFh6r8XKT%Tj[&lf$mUN6mA2I2apZlN!HB2U#F52a96AFi0QBJb"KjU
X)L0h6++$5jk6C+b9FURekY@bldRBFDqfGK(p$63f*QEJ!Dp8fRXD,Qd8X$hiDRL
p+c,QqNI8!"dDZpVk34)cDZ"4rLY*Tl,eLlChh(*KFX+#J6dDFF@CUlpj2(Q`k,j
ED,jE22BKC,mUeUINS(LB3f1II4"DCV&$F*H*FH(3X"65Fc1CD5F8d@d$&d1AhZ1
NjdjE5ZH$0m2#XYR&4khfaI+T6KXl9@,d32*a54FL4+VfN!!%!8lHZbGjAp82a@,
rE[4aV)QipM1UVj+8JQfDr(UXIe[e'iCNh&I90Lmc3j[)@Q$3rm,3bG,QQHT+#5L
ZLbBU%V1-e@YeM"m'S,+'$&QHkXF46kA$$T+)Q$fb1q,X`fTR%`d&(HY!9ckEdiX
M1*B`iRTL@(Xr`A)2P@jEMSKHl@$Q*-39GF8!beUISRB%@qifd('d#-QUZKT1i!q
8,TR5)ddV4HBP8k99mS+"GGbjR3PVfpP5#L*r+qC!C(Y-C#[JCkdTSRlL5TFm5-T
Fi-FEG&$TXk[EdM8Z0&AhBC0H1CZ8'ZK,cP1L`@e(ZSQdJSBd&G(N9Qp&Kp"5$Hf
Sh!@h5J,$j'F`Lf1mCE'jL0Z2NRR4`#raB,6&qbjr"lMICfBUq"2lYGG3*V`UPSd
qZSdaBkH3!-ZBbJJPEh(D0"HPJdBC1#X@T*h8DSK[&RViI"kMhhiH4Fc9$J%I)fl
@ir4'0BQ$Ael816iejcTUrS,kaqM@X)HBH1HXPDK*YjqM,[E2+Ek#!#VXb[L,ZIB
X$+i(GSKFB(6ZqKAC(24S5j-cV1)Q#9G'ZRd!f8lqZGqJ0@8FS30`*6lTLa&8TMX
LIUAm0A($cDaBhJdA!eCL$NJ,lP*P6"`"#-k&UM(+U"S@CH8GE91%`!"PhA1'&fL
f#jX+'VFH3lVAHNK@QD'A[I2lfMbB8I5er'aLJNKhKmXMlBTql0a)e(`1hE0LYMe
plQ3#-1X!mb+BiF+l`(`EaV@GMVq)Ad%A3j5N-LF[`f1pr%C8QbdJCHa1KlJGMAb
"5ZiJfCZir4qTS,'*'I-#Q*L3!+R8cG$,43B4cE+MLBPRQpLfX+3`hTj$N!!laA!
j)LX51rQ-03EqZN$@Fck%GaH1'eBK+jSm)"8%dP'j+"M@4l4CY%pRpeFUe#C1
m&DV"@Ir$M)83)jiH9@BRT$L9CANP$aM+JX&Npk!KUQMCQ"V$V*k$fHrZkT+e5Mp
['#qG6D(kf[U+[pH4$RM`Z9'*Ydk-'h"&1T,["'!6mHGMU2DPI1)ePdXh)FUGU[$
kqdN'RbiIUI+3!,qUal)cZJJr5kKeCT*i0JK'9@IU5,(2TX6K,fABUl*6KrekjK!
dpb%HQa%K*@[a"l4r,4aldHK+f&BErCqHFNAXVHY(C1bkiN1hH3B!jBj(@eqjZiS
$2pXch9el`$d1&qjQe2m!$KbMR!Qi5ArTLJ)P@81+lG$J$bAUH2p!`)-i"!BR''5
6c2$Mlh$m3VBb8S&MH30T'lqmRSkKcaE%h`J(R"$B+Z)b+p#rT0KmdT9KI$@MM)L
pmIXrj2'"r)0%!2hQ*44('a1&L3QpTF&ja&ZY#p&Dj5fQ!Aj"I%GU'p!f%&dp`cR
H2U2),kHTR%D5$"M4G$30K1BaI$2FN48(3Hce-YH&!,3BU0V6B(CU[N"*(Pl1eq&
48%+feU$cjF4D05fEC,!0a,A[,3I*C1J4F!rE#dCUBb+`F5A$33H4mZ3bjTk"IL4
ICC!$LT%8`LRE$M5)6INFq9qp#6+DNM-3(c10QjeEmJ[c1C1KNDI'$(*%iU3'!IA
2[Fp-1,NZ%!c'0eGVh!'eeKHAQCM&fG0`cl@(%!5P4+"pFebei["Y,#0a(e&4PS2
F`H!3G8M`ja(`NNK+DN8Cm`CDEVpHf#,rddU"kSc2A,RT!qdQBQi#Up%bJb06DDB
F8iLEZ@HSBZ#Q6HB0qfN&'VkhG5IV!%4&mm[a'MGa+j!!10)d)cdYCdIV'E5'EC'
,a8)1"9%rm@qF'ci$pRbdB*UVc-Xj4@IkPh+YA5aQCFXrQ@i-jN8G`f&4b3p"R@R
R*KReJ3(35I&-K3pe)8DIkm[+!j!!c[*QIX11bfmba%dXZdaL4cN,HU6&2TH@c1!
)#XMp@bf+Z)SG8&A#a`XC0KVd*kq0rDTX+,2HJ`$A'DL8@SM[K-r4[k)l8f3EiS!
eL1T&1hf)jB0G6'lQd5D*@dY@"d[&!U#MUiXfqDB(A9UTmFM6V05q-YXH-86e%ia
*6e*PMZbR5'[a!6YF@MChpRAc1+Dq'98hP68r@f3q5hTK$hbHZ*eVH1N8!3k1p3d
!+#CjpU("V%b[k3DMEe'Lj41Ib4!XF-#bB-9c(-@fH3j)Z['m,Uj`(CaM(Pkl`UQ
N$EGqD[kNJBJrer(&YL"&fiK%`%i3VYN5SfcAiiMBU5qRLhaK,+`I1KL3!'F"BTb
D4E8PaXFk',a"[Dq!L@@&4qJ#rb)*VpQP&eI+RbN)4Ip)2iFY[(DZpG%ZLHXHX'G
cqS*ZBm*#Rk,2!,feQIc9$lclhjH6)+XN%bYHE9-C"pMmr#L&+ki%Y6T!S2bS-LG
($V(E`a3#FYjYfZa@#i*i%*TV!2j`rN[TQ$!r3QrjPfieL+eKYKhamEh58k!lr`3
id+$KTdq'a5hC"!j*Gc[38bV1$jJ'$lY3qq1e&chUPQ4[CUB6j!Im0GUY5`P3[1J
Z#e3!i36BM5Xrl$r@V8VU9YlZ8S"#&XMbCMIRU%-5lhJGUNYMBSVf5KHQ`cD'!XQ
ALcBCYm3@ZmjPIb0d1j)mC-T2RUpRJ#f3!,i+"0qbe1hF6#LRrZmmFl6aQ@6ZIZh
L@CL3!+&HXG'-+UUMq6p-lLHAMk6!Hf-4R8RR5K)'D55!'8LfML&SS*PN14XUI1*
-6J2`9&#hF!"iP0FZ12fkdR),3Ndi'DiB44@61PEI4KdeQU5I2#c`'EA3$E$Nja0
MQ$qFG&q*dbZ%%4+jBMDQ4P,k'29UN!")3bPVN!$dZhJ`6Zf5-IDJ"+*jK$M"lZq
E*QQ655qP'eIFbe*3[Ik#,YceU+9Qj!EeVD9B*@,Dq5"kZ4`EiJlJaM4F$f4*+&m
1Be%K2FKD'MrM#$%m$LP1Dm*QG%&e6NqlJ4$imqGI-X1jCb0L`I&cU*NX+V)J2)I
GhhTSHCrEZ0JELLM1#X"BAdd5"Ji&,8G'9!dr8-8M*JX`PJc+mJh+,0J#Se@SE&G
F8Y"Bq"SS`#1kY5dSG3C5`"`3F6"[lh0',6KPS,Y%eDrfq(iX21(CNafR5Mrb'iE
4md@'G!U[(9RDS%4q'Vm%G%VK&2E22feL9i1`$YVjVlGi`#YJP-q+h1V8VDHQAd"
`D3f-&rGl6AkXfd3jMFK,Y&SiG2CbldB0FI0,)6PQZRNXq#UcJA*E9[f1pP-N0QG
4LV$-I,MIY"Z1$TQA[*P`#'(DhVMl6hRkdE"l299+f2MYheSVY1lb*+5QK6#5)*Y
2cF)Y2dX8ZbirFB$qU9AQeFkqc#Tl3ad9C5k5SAMFpCZc*2Q2p5K`e'R3-Z,"k0X
X@2*l#f!meFQMI#Bl$[I[f0lE6$kIS(eFk!f"d4DI95"V8+Fr[#("(af"#f0)(9m
j""99L"VFJIc4hhhVUNh[5eJU1i-RYR3+AKihHIMJ@,4FHKq)IqfEYF,S3S2#fcK
@f%jfA92"cHaZ@@GB1#M'$[I&[eLeKYkbEd%(T,BliXf"$@3Q)(j@-&#*Mm02%,+
*ebcKJKriMhTA!iF,@9YaXlc*q!c!J'UR`0AL`%#V8)&F%3H4Jh6R0e2A@5$kRI&
-&Tk)"l3U9p60bp'(DBbl960#C#[3Fh4MSRShT,B1cEZ8I$IGJjMM+[!JUXiAKHA
M23q)&c80#H!LklILC,9Ep`Jhqjc&ZX*4rA[c`IKT+X0qX8cU11S!Q1N5@2Ykp@!
Re0CHc5)ca1TK3KVU!((cZe6-)lK#YR24d&a*Cc`VMX&[q2&4m'q*AA2Q")A''J'
&49(f0fp8mj1KaaaQCJ`SD6PiPmBThh-!d3lNE$"'(CV#JV4JB)F3IeEAE3I-pi6
A5*@5jAr`XfbP'G2!q&+`LAJ5leNY)U13!0[2N!!d[P+XDH%SPQV8CY2%2KUdfR)
H1#M9G#VlTEdFS(EEEV`A9NPb(0TKqYrqjfFKJrcbl3DheTXHJDp5UlANHJm`B"`
kGYLL+@#QCFb9X9,VAZ2'e@Ka1K4NXG+C3bHIYI(J!QJAS2FF!KcQd)fT`@+SQMc
+V2@BLBX'1qC*SB[X(!#HVeqaCe,ZLU(cAh63VclbGR[DV+J+(VT0*D*-IqDCMmM
N94q"Ud`Jd%+*k*)fFdTLh,)1'+d-%aRIML$P)@'+THrkJ%M$dV36hb6@PIKL9jR
pe-LDY4lUQR`&8qEZl&!(9kZMAkNcp-GFhZ88M`c#mXp(Rfj"r48@(eA3%k,aHT5
81AE@'GHGjAC&"55aS$E`X%fRaAF"MQqp9*@YbaJ1KPjQLqpmaa!NYJ3-cC5!%j9
$-A1[Rhl)+(3SmZrUeFJU&aheM[J5Abib'IC,L*0(,&hkKdCrcRaNZ,Clm'L%N4&
iK'mAbFUhJi'J6""Xq"VbTa@)R[D,r"Ym"mqJqR2A&&IKm&UF8",936[CV-)MIK(
mhk(,`j`G!kbPZc6ZrcIEB#Cj[Dl`eM6mpRkKN!$*q@-I6$Yq82C@bbq##RXD[QF
IXTdrS)T-l980iH6l#A6'FD#U,U5#333[TPX["mmJSqeDY%V!PVErc#)pqfEUBBZ
3!+$r)lm!88Pm#rr1,('MCZ6Y0#4A0@KKhGI[K+jZIjRL(&E[8q%YUG31aLQ#Y%P
4A(-ae`4246,f$k#rmfH5r+HQ[DLJ-jqC!kS8DLj(3B**)X0@&lSIDRHbZXe(&"[
f2S%3ESl9V@1r!1!K91"6VF+hHh+$SVTNrPUJLIL!,3ABNEEGJE*q%P"3@3rR6FS
12Mh6p*lG(1f21AV$6"l6jA4kr,b&VDT0!J0EUG6KBl0HC!`[VdKTMPRaFZpirCb
dTShfG@Mc(M5"iZ!l!`3!2p*D@`dX&Efi6GYlJ8dJ1DV$1"AIfSBY1,--+Ui%Xl(
3f*Da46cq`[2e5,bdp)"hhiL`r8VHI`@P4iM84XQpI6SSdb8E46&-VZ)-90,ZhQ1
&F!mc8U$V90"c,-8-ejV9BfQD-aF$ViYb5Vkj#G&D%hqIB3VT@*Up*,5ik0`!!UM
'FR"qZNrFLfq%N!!!TKDc2@F*1a&fq&hqQNc[Yc5SDjE*IblS!a)LhVBAhI#IpFh
B4G-SNi+4L)365%Ak5'XQGi2-I[*S3'a1C6HShkD$K+Rmm`D#Xd5lhl1jahXGHbk
0pY"`rDpQTZ61@DBejB2)S38+@$hma*QlPRp2G3F3mM1)Ae9fpNF$)qeA"0@C$l2
#XM@@A!!UGeEYD-hYmH9abVG@iVp5Gpp!iVIEq5M0@iRL$EGjq1I'[miEX39j5I$
(kFL9d+hT&G4Ck)dU25G8V[Er@8NR%dN!0Vc`jAFUc@VQ+NUYH9$8rq,9RVZblXJ
r#NRVcIl-Gqjke-6m*%p8X-ZXD8hGh1`[6lqG#-%%Sj05cfC)!+R2p%h-cTJDdZG
J8CYS`-$Haq*Kf3K9+4FBchC5XX'H%99!rq$Ti+b9$j!!N!#kN!#%b)VFe"a,dKp
F$K`02$K`S$Yp#XAiY-VXMX)0NC`#PkdHq)FIL9D`D`i,[1QF@dBY,e*38+kCI8Q
&QPPFJ%i(1Lkem[cDS6P+hEKVdG&,k$ZRVHF!cLEL#T(K1FZc&"d5qNmRXS@mQ8a
A2RZa654qKJ%*%alj+*3IC!3'Y$iiXmbcKr8LU#e80DI0H"dNVH29'bBhYD$9SdE
e"mR'RS[0kd-mIhXcLXN6R9S&h0ihrbiPPq`D4(PSZqJ0mcPMLI9q9+P")%AfSYN
&'Tp&VC5`r--D[SEP6Vi,K53YX2`T,UT4VJS9+[,k6VF51S-I19LAaeC)K,`J%dI
%ApGUe!&Ca)T)p+B8E,L5`VcA@0qF2NldMFq@C2Mr4b6LZB&khpT)lfZ"Pjej@M0
(m6*b-iFmTK!jSE%QXZDPR$PqjES2#(A49"2e"qqIM@kXNrGTRDBGXLiXF5i*c,2
k25@L0CMX+#iFjRUIEB"%,J&AZ,@V8hDXF#0CUD8+UU5A3HRTUrFV&fLlH!T5+B2
jIIL9ZQ!`NQ"cT['q`KRrbqEdd0hL'qkpcdClGD9P9VD*BQCXMfML++8RGqdAG86
LdV3dpD&cAkTAr4+!FiMZ)VAD6HD98"dDSah"&eV#G[""3h&BDKmQ3T&LbU('"MY
mN8+%k5#eQP"Hh*4#E@a2)8L9@&,Z(`'UmZY$D[854M`[a(&R*5cUrR4YhGFXaqc
DjJL,ir(ape9MXkkNG1jDq%fe6AR[6el6VbR8N3k5RXe%9-VQSG0`XI6%,fq(Pd6
MXK5VBDDXeH4#fj4pRR,MER5$19M)a6Jq&I0fAmS%TM+cV2)(T*NVJ6d9llU`kN[
Eb%NchS$DTY&a'ppPRNCBRZTVGI*d1G!(HjA[jSFUlMe(d`e36)jqieCQDPQBF8f
a)$0J3F2*djVLXRfQ6hYBL0P#F@M)XeSd3e+"8%TDY$4&%%PVfI!5IM#,Blf6$Ih
T#k4qG*%GrHBYAG'`,U'[!3eDCYPhbHLQ&KCG[!544d6IUaP[HX%PB4c,0pTGGqD
lq,'mZml,H[DiDKZEqMpD!`1V*3"(cl6l,4b8K90fmJj*#4@Sem`K$P@*QSU*f[*
jQ'(pk(QLZEZji'0Z'r$3-+I--PI`5E9VN5i6FrV+&86&GD&H3h[jpKF6P[T9a%4
VqeNmhCK@Bq5'6E9bfi8D8ahpUNJY,,p(LIN%`Tf`Ap0!4!IPc!Sb@`AcDP"Cqam
*)9iQPf,m&GaiX*&)9fE2CKkL`N9f3)P2`28N"0b"VNY(iq@+6qI"pBp+021JLU$
T'8eS(e*,GFR#Jq4[S1YbhZ$P9!EXp)ESq9AU$Pkbb!!9#Dp"$-IhCA"PkQHNEU%
h@8BR8FACQG*9d@`Ub2EJYAk,Ri&'$KL+Sml(Rc62pN5%+L-IDQ2I#F+Q$Sd@hl,
UYJ5Vda!FkD*c"[p&0Y2%YcrpK-86X0rc,+A1I!'mBiLECAX48eBYUmrMJZiVf-C
8C9+4qBk"QI'L908aZ08&mQDh+2ELI+&h`M*TaJaN%!!ceqc'f2"JM$5!jm%R"Ga
*UjF!rCN&8",hNS9ZkXD#'FiZkFL9*&,he8"6KCfZ1,V"P%&,2)F'@%Mr$`E+1EL
M$UZGN!"+mpF*@,05J"[SYaB!h4)[*JFmFYXm0$BDDG9eU!e0a#-pBrD3!0UIQX5
NdPJ[R&EBe2$6qYjIRb+Ba2Akr+b[)mT%2*YHN!!qeT-pGX6i(D6[8@M6+V,Z)[a
NCK0MEU"U%'cE3!4NjVGjU5k,QE-mS*jq$Ki*ThBiZb#mN@FlK9pk`&*03XCEhUJ
(Qe"%qK)cZH$2rJY4)ET82f[HRD1MFXd`GkLXM$$bLjeNSadI#i'@VB*!*$cLXAL
)E(f64CmVi%T6*4&D*f)-@Eqkd#SIr$VQ#l[6&YLbfG1qq0M6FP6d@LYYT,GFe'9
b6D)d2L5Gb(4bkYb@q2ApU&(2G3TGQ"5Eda@[%lqQUZMVSLSKJ0-8),S9823a65J
*NEi"FCj!k'&cYLC[2,HX42dj&bGSBXH)*SMlLPTDDdLZFUj1+6fG"maV%XFY+2@
Q@,3AYdb0b+Sb`RaVfhh"-TL$qVV``Y36U6c)[1FA'aKq&qCfdK1-IamHk`l60J+
AE0C+!kc9SJF33D*3R!JE[S(#eCF6AYT&(jFrb0EYccpD`ThFie@"Kmr[L,@92k$
%bL0mfM+#j2DKl92@ql8pM4E-KDKmGQjKp%b&@!6,G"riR3mLYKB3r0'2EST!j"c
Y"kNYBq3A,YT2&A'CL&$)50%d'KBb(-6#+3(bcL@mfqkb1CZ[1U0B2kKkDbZ+r&X
3Qh2%0qQeIRmZLBZ4H2aLQLhfKH&8VM`T-H#GIGRf0&U,5YEZ@9#Y5,d3U"PJ3C!
!GI"q4IFr"ZNQL+QXZGF*,q@4YmfkNSFrYpVQE5Z0f3Q!GY)S%J6)Va)EdICQ+H6
arc3#E#ITJc&Up$T2!aVK`$Yda@lp+Q9q'IK!DLZET,T%X(GY5"Z'9"bq*Ah3j56
6RFAV!+EMfi63Ih@H[$Hk(d)J2Z@@`b8H9"6T)MLPIkFr##3TbemS-`fQAMbZa(4
NYSBQMIVZVEJ55CMRe+%fL%3kc9XX'brqJ189J%-p&54D@EQ8BFim)!M,mZ)b9&j
#ebTlaH&5#SQ3!,LYr2PjCA**'219P@IRBc#QZKUHNVSeUTbR3)qMaIQ22[`FeS*
hh6UYM&VT(b-B'E$b[Dr(rMQDiH599hkP``ChD92@*p+Z-`MVM[8``H`HGp'1DrQ
mPbAQ38UYQNdSpZ35CYGZUUH,qQ0`TVde$Gr-PPEFL#Qc18344kcZ+%"#9`@-*f2
dbpV-f+*1C'ZN9N`j)YY$Y1-l5E2%NFVJmZb'bq4!VVm&GAjD#,2pLa-pEYXc2G'
cG0-+[LL8QY'iC,Pj1+BER4`ljh&hqCP&#J%rj$i`H)I)ih!1M*JX61UU48K$(AD
[k@0JC@$UNU*E66LJ$984Q*(m&&4L`UE**GK+I$C$$9B!'DkRK-G*2'*9iPdq#CM
ZGJkE(L+j`#U4,Z1HiJ5[$r(Bi$f"XH*(BRZc(E`4aI1&&Z9T11YE*0i6jcBLc6l
BIQZNS9DSXe,8HDDD"h$2D)Mp&#a0*!liDhd1I1r[*mq5PEXA8C@4K1Uf3idrC#1
+Mm(S[VCMCS2UYC4Hqr+SSrQHFKI9,36[br[SdiPXL-pB39f$N8Ye@(pZ,Si*,Vp
,Ujp[0`TqIj[G@r-hJF'!&(T2%h-VIG"[k9%'N4EA&,SES'V"##9E,&[G+A4)c'S
1j&4hK(LX[&@@q)KJ[EDJ9hPZN!!(4PAqX@a)Y-UC,mbi%GTcE+eN#Tb&GcFH#`#
Gk9(a#+QCQ[6XHApS![kRm[4$T8866ArZGH5*i(akX[jCM+S%3P8[*EKGfl8LTE!
q!@B8bfrZMMiGVHAK6S6DR6QbS%GU-EcI["1eGklZM%)M$*[YJ+H4B$XH5Y`6$8a
UPf@R(l6DGieP%"0Rh`q0hKmZL5FA)%ATDpBK,!`#Je1U1m#4A'L&!M%"CEZ4NZ+
m0'e1m5q%T,lfKp)TZ(%aZXi)XH5pm1iq[CVkcVYh@YqXV'9L!kl!$rmKGC84+l)
ij#P$`MaFdk*Rjl'"Y&!35Mm`jA,&*4r,2kVM$T6Jfq5VhcDm)e,8f'p[P(`Cqm#
1lDFYVhThT8Ul%[dR)&8%RP`+YNmpC9[LiCGFjSH!XFUV#pmDN!"+Ua&906lRB9b
&5$E-i4lLSQfKBU285aeB%+C6)KUPkAmLQ6Rf&LJqM"Z0V$(hSAL`UI%paL#BMd[
`a@U+cZGXr4rrI"fFar*3*N[C9JXq(pkC"Ki[JYI'&12(e+2brH)9"6T*SXcZQG4
A,'6IK%Z%B2Tf"a$HJLZAEqDVG-*X'1!T4ej6f02pFA5GI6#(QMAXjC(X!r([8I$
NNka!`NYmC*263ZF&[k4lUki9HX@!Q6Nm*1)+NKFrmT)9YT!!XKVjD-K+DmJZ%JH
lE5eBGq%-H8fBi$j2Vcli@@#DdThZ`mjV"e#20qlG#3&DeQ@+U5EASK*1HBVDaq,
VlfeATq`j$Acm0ED%HP21jdRI4JJm0Pb3!(VPAf361'ZPZTiD(,'LPUY%[1%N"jm
Ic-3U'm@6lPpFMh2EjjeC&`!@Nh(!$4Z,YiVSYSCZ9hAHVN0X04GFP&[+dIc[Y-b
4*p3Q(9%mU[Teaal*UQchHBl$@Va!J&kF@IElT!)ITdlYKdV+,IqX$4"6Q3%@'kl
h4e-F%kAe4aPCf)R*J(M(E,Q#AmH"TL4-1q,&$)68S#Jc@f3)JZE-M6YQH6J1%VD
#ZMTM$(*qPdQ!3EZG,6RZ!FYF9f93pk*8LEGV0I+43I"3p`adI8E5B3iY8R#6XS1
bXU!!Df0D[r4C3"I@dVAR[l,kMPL%('G'Er3PrchjHSZ3!"reUSdqlZaZiiEQ$Ci
$q)C81"&"rhbL3mQUj'qBrZ%EjiNp+I,d4aIi#CEk(k3S&FARZC!!q(iY"j-BeFG
qa@3eIiPCPk&hG#q"q6`MZmQI5,EUT#U)Z8ZkTr-&R!1R9dI-"kl%H91$66jdNNA
RX"%E%GNHk%)2AH`Y0'pAlGRSmrXl%9aZj#H"b09)FHjAmd0"kMK4KRF[4kdB2-k
$'%p3adhm2V)bhkG3iqCVLpIirh%%9p`340TfEJ5`52H![Ud&f,Ja`frHT$)LXR5
m8AX4rT4!#k!%AV41N!#RAT0mH&RkiAQD-r[MD#MX&Q9UD)hd(K"k(G8C1H2dfp#
(HRI`(G@$p@`[,CCRVrU(b2HiC'd$5$+Z*L!Jaq!UX@V+%%pKYdBSj-PY,$mdDad
FM,(KMJhX&eN30&U`CK)U3aN`kD2#Bq0)SYAk2Z#bBDCX*Xq0mpCq!$NP-`8Q!jS
)-#q)MD1mM[SpQ@)"0Nqh9"!UA3B+#TB@6XFhB'b,SpGJF'PGc)l"DjGMRQ5lVP"
#0Upf+-bKE$i4XIhqZe#Mj09BA&`qVdZK$a!P0('%XjqFT,4E"+8A5lkJ5d2qQE*
4+Q@1lE!ZerlXU"e"baZaedMU)VU+E-J0mUfVeAYQeSApcQ,AR+`de-j'!f5L3)c
a1`@K%Nreb4A[RR2G*QhD)MQQmlAJP!c&M3'ZqBSNXE"QU$R0C)p0qMAqLKfqqGm
*2p0&Q#)D#`a-+L6fe%,B@FDce#4#0Vb0Qi)5*$hpQeP$F9pGG@CLFckaALZ+p)K
N!p&4MJ-I[0%(j$EeZb+,1C6K(@BITh*pcREj*$Tp5Uc18D'EUXhqf)HZVN[2GQ*
KXJ%L50YY$Vk4*cGH(8aq8Y1-8!--Ai#3!*kfc14'"ALI,MD9!D4Z443823"-AaA
[b&VNiV&#ZrI@a58Pm*1MUk(%'KCc34kP,2B@LDkFi1pp4aZX+"+3!'eRqQY6DY0
IIPBVB-Ji[`U50Z4VBm$K$4GUJ,)XdkFfLpKcilqP1h&1P93M)%(!j8hcQMkq)-f
kmqdkHV`cM%da[[D$!e[C5r"FUPU*RqSMKNmVjf"pT[a55,+rdRI[arNe%qQ+#)2
@YEC-qJlNN3`j,AmGZMZV8!mEU4mH#-rBfE4SR&JPUDqIPF2c4Ib0L+Sm8p)[69'
H@"jS!Afq9bF+,p%pKLj@MQhKA8h'KSCZqUj`#)+flk2Z'`fq`-P)f@Kc93`ea'D
!N!!-d%j4c9)Hc3)9Q9XpVq-`TC!%!3!!3!!3Yr3Yh,Id,G`!!0RK!!%Tm!#3!mi
!%,f5!!DKVJ!!(1B!N!32!&4ME&0SC@aXFbl2J#jiE@`!!!5*9%9B9%0A588"!2q
3"!#3#S!!N!3%i,G#`G654D@ifiaX9r5,'ZbL6H2M69`9C80S#5('%+Q3!+GI@2k
2@'Bm`XqY16I"JB[%c3$6aH0SQDIe-5JDF0rb,B*1&m9Me-8F35ZpjDl`(&e$24+
i'EL5V#q$pF8*QSdXH'*bm&`!-#JDEjb61bcPR+2ZI[e*DX#f$0XTcKTVM&A+dp$
Hhm(rk"BFYjl'IrRqUr0i'+l"(B6II*&kU6ZGZAc!`!2B(Y+9q2Y"JmF)FTPBCL)
PG1dec,jNjFmeK8MR"qcHT3-9#kHV9,@"0f2h@i!KSAK+&VSA+CVbkfhmq)3T6%e
9YT(2$G@IkhUM0-&R$*[D9@J,ZlR"-Bj$XeNBE[2UrkBdR4UZaSq9lh-TiVfUUcl
I5V3r1Cc1-J3V[$'8"K@CZA$*PF&r"%6eDHP22F#*GaC#04lpV[HK,9m,2Eef0Fb
"HRkmq,%Ka5$m+dGbFqYCR(E1ISXHTdQ3!,(SPL!8rRcc)FaRF@aR!PPalk6IMl6
RKJcpYBePZ`2h)8p,iMX',[DVI9S@+6MHHE(mRTTmVESc,MPZ6"i"Z3VrpTPpJN@
XZ3XRN!!hA4ME-f&h-A-8i1aiaHB8BRdbC!5Dj6aE@XMdiSljN3aM+m3FKpPe0CK
35Q&F3-5kIhD4%&p@T0h%3TqGpRYP003!Hil3lf6c-Gl$TPc$%9@J+C!!3&MMZ98
V3`eS,TPrj#JbrQ39Nk#PjGFXN!!r+aE55!V)X"4V2*mM,EfQeJ,`Cd&BUR&M(1@
lACQP`'j"`40['8J"$lCf#hXG@'p$p$'$``B%hDZ!+FYQL16@lR%Ije2Cr)bAR%X
-A$11iLFblR2&(46YQATNF'aAcMTr"i5p,F&GU#96b&`TdXVRfa*30Yr3j%"`Beh
'8Ei-Tj0)Me+*"jh9CmXh(CSEXi#I2HRI(@KFk[ErNQqm+N#-iGEl*1Vq5Se9KPV
A05F@8EG@l`d8bAi,5D6JB[fle%(%NJ'AV&NKKkeD2"d--9'8hp)BqB-5Z$Hj#Zj
Y+&NiB3IT%cH48fRS+qQ5'5p(XqifN!#*A2q-`R9SKf%K)VkVhUbk"F+hDcA-eak
0aLEcbS0pMXEPF0S$X#qLANM-pNa"00VZ1Jpi!dX#CZ-UE"CaVb5@m!BYPP!Ffia
Vj8Zb*e$CD-1$%T1)#HGSLV,Bc49$!CLmM"I3J[JFl[9[``DlHf*MJ!B$&[Eq2%C
P#4$3p`5ISl+I&d`R8A%'$#i*aY`2C1HYr,@aXIaS'+#N66TQUqqpP5i#IhkIH*`
SeZ#6E&l9L!9cD'Q056+N*1IVPQ`fq[R[!+-2KJqU(mZF(J,Ue'mHRYfDSZ`&jk8
lEDN-rAU'ldXj$L`K6V'1f'Tb)@Jb8*2f%qYC5hL[%SQB9&+d!F-H0$eKRc*[1D8
#$JIkZKRMGQY4r95`A,hk6rFmI)TYHI@I%FfSI&'jKJXNJcQ$lYmb8"j2[2#PFI)
4HE3H'U`@T$S8+R`3Pm0jmI4qV@5RG"IFec+[hjfD8N5+!3rHk#DF*&3TKCDh5cL
)bK65pi-1$P9@$)2mq)CZ82(@%le),!Y01*@0%+`4$9(VPFFla135DI)lr!$8V"L
mY*4)D"mZ&CRA,m[3Hb$q1EXmB6eXel+kZbXADD-J'INX#9f'IlbNV('*l&H5m9@
jVX5VU[!6NjBR!akXdLB!3F*1Am`AX`QbBjY#f`[`99Md@6ReIGd0V1SK`*ZLMAB
22TjJGjKVqd(Mj`C96Sp(GR2+rV@Rcjp1RbbelUVD4`c%Nm&[q*1SeLCkID&1@)3
'SmBRCB#%QY9h'M3hcZk&CDr-e0Gj'R6!hdLi4pADqYpbaCUbUq&cj(3&q*c9h$j
D`ZJqBHa6Bfk5VUM2[iCMMbeLj2hDD+d'*%$E5X*#Z*a,KeB@+F0$QZQdZU&j,eR
'dirJ`(djG8mi@blMC`*8(Y14[!IZkfYS)iDAYe!qe+Q(m3(RI,ZRD#U90`kj`8S
[KNajk`9hfT@P,VHqTNqU51S`Pp*fR'QUbp&39&`&QBhAY`aQ05QBZci18!#9YMD
lpqI(r3"QXU'V&$*Mirb#Kf3KT[KL'jCIiM@VCcZ4M3DVJKb@HYVhcdcfTU)XLYQ
A6![X"qNHA"B$hN9,pikLJ32(hbr+&$)m6-fq'&!mVlZiG[ReJYaPcb*Ip4!jCAE
I$QHem)eLe"LhKUdID`S0-DUDQZ96b)%,kihEp'%,1DjN3)rUA**G2@H-JVG0l,H
EL`G&6B0U+j%q83CcVhr-4"81i!fj4c%kAjJ4S$hXE&JEQdZ(f(R'jC@PJ8&pA&e
*1kX'DqS5+pX&LdTaQHm%TSjD%#j`Dkm9-@[S[C0"V1qA*6LbE+Ib*3pFQlS`Z&Y
&rB03-4dIY!hE)MbQ6I)NrCjHeH561L+'N!!TL3AiR)1URhCeGj!!-XYq[0Z-'64
ErPQ4,`[a(+FP1H``fd*&qhq`A`['e2-UMN@S&R$5'V2jlb9-*DRXIq[',cHQMN"
MAdqYqBbcPpSc)m$Z`#KJ!)3p,,FR8FlrAB99LHhXiaBpG,-6G@cDCY*11LKAUf%
"Bkfq9lAe6@f(QqNVT&e4m'DY,E[GI*)3fE"4!Y(-YUjr1XA'P&+rdI+AmV@GhEN
8eE#qZ5N'H"rSmQUGr!15aH8#@PXcZ22IAS3PZbdTXH1b-cLl%qrG`&q9ldiJd1`
FFKPl1N-*3$8[i(A`-$pA0#S+BmMiPfEYD,f)Z+c$9dU[)6A*H'2S2iF'",rmY9c
,HdLlE&!9X@QE`#l[1$8*KN0-BD`X+GSdAMU@JPPA*!XF8q(d9`Ya$mX,%T(9!b&
+0*N1V0RHVScRLGC'80a`NU++CNdI',M,L["Qh#R4+F-%+MDVX`eVG0ebE0'9'Bh
aN60V#aQCh3bcqM'-j+)lpfaC[h0'JKcG%43Vc93A&'XkUD2#EHG-Aip,A0ria%M
!0YhFG)4'+c)-ccN-`hSbp+PQhCPHj3[$dZL9pb#QYcbaXle[YjG@Ha41NK@q)69
B+f(jQ(%EjkLFQaQXF#k!YSmFXfr`[AR9d5IT'J-(`A'T&l%eEm,`,"HPT3N8Blh
#H#%$Vim9GcCMMDqm$CfKD'qR3Q6Di&ld+,Ad-dqUJKD42D"GJ*2VVFN+[@T,GjX
3NlUPB[0FJIk)!)'T!BkG3`dAmM`YBTrklD#CTQDeJD,Df!5`G%9*MQlBAK+B2#[
(5X)[ZjY"&)d!Q+T5M)F4Je3i6X2cTPd!lf%T!(U5'XPkXF$9,F-d0CN$T`L6p6Q
2`'RGB3QMc-e&S9RDedB2,[3I2U'-Lh8E$K#$4B@La1!eH$2'ACEKaUp+kH-%+kI
44LIV&bGmd#3SEVR+"lZpL&jCm42QGJq2)N0fSjDD%F+*(apd1UBJJ280cT86M5E
i*("[i(ak'XPJ!Dli2&pp#AZCI6YSCNGNRkIM#"R"[K"V+@SjIY359%D4U9BP2P$
S9q`AEhZD*H2Uhpj42LjId1l3m')V2K#J&lNme1Rpa4(ef5aFHL+5(FT60@+6Yr`
)NZNmr@B5`@&Lj*+!!KeMr10J,!6XAEb&F6MELf8ii"l%9BDIf$febX3ap5[@!fY
S*83%Zi1VlT5SCZj!C)YaBj'Y$SG,8a2R@qNDB,%Q$%BPpU+pVa6iBRYCl-pZ3+*
l[[m-!P&LS1-N3crR-9-KMc6V1#(H65JNM4"Q8J`d"EN[&,j,F!483S3K5K+Rq1#
`'+6D$UAVF+IR*Ch+,Ic5Dhb[4QjGI(2T$2$'CLdPQDN@'@!'bBM[lk(%BNVcTHI
cJeT2ANS6m,MT1212,rm2@Kj#*bH$pAp"SU*'KU-GJ#q,fA36cLY3r`VP&+(%r"P
iTNk!pGYEZ!&CYVQJ!D%DSV5q0L,lkpk)ed5mbbaV`j*0Bqjjkrl#XF$LiUB8T%9
bV#q'HKIJNGYj1-`Mh@j2VCY$U-,Z&@jYE)H2BL81)M!Apa!6mV9HI'9Z`5'6)X$
km#!"Q+@AI"CN,hj"YH1JV&jB!A[iJkiqGJQMjK--C'YkK+K@DZd#aMq"HaKBNKr
e5&T`'hlN8hT"iHhBPkQf#5G)5KeU)@M$M)DjPc!B5h0fZdHLA%)$q-c(F,Lh)(V
eYQ1ZN6B+Jp!aee+RIk(0Y,fNLrD5c*`02c0*pL4`3["S1!0CNQ6i(Ne#&$#KGYR
H&13E!A'I*E2(iB#@3X#L$RjYmF($di1qma*!hl!)d@8"&Qe@Q0P5*02'lZ8c'$F
4jZ-E4#X6SjmTrMA(R+V(0'cYE)108-2Tqa0YIYm%dS3fFi,FFSi$A!5f,PST5fJ
k[qq6RAEAJ5E)U4Z)A%DCB'-,1BHIAG$meUP@6F0Gr%kBZ+JfGb$fcL$3Ne,jeBZ
dC)XKDR!MqdC4r8JaKm#EL5Tkm%c%8J*L,I&"MaLKJN6JiF1A@ID2`&c1SM90JT@
ijYm@0KF"RHl8'6YGD6+"Zf2PqH+e2LdmNVU$L94D#9YGl!YRkp&Yi#iC&eH,`Rh
8X,[q%[GL*CL)[[09YL5Z*KU#Bl+D(,J'Q6C3-1lJ4e656q[-qNX2f2jj$fkriQN
c"fT%ki62R+%f#3G,UIVd0@3NJJ"YiFBa8q%)YB,`lS@R##6-$dM(SkDd1lkNi-m
PIE!jHS`&L0TTLq&d)-3le,#CkA(+Gq$FCl#%c5@Bmq993EVbf)dNY8U'alFJhjE
T`9+U'd1V`%+i23-b[BBM$h3TRXbFaT!!,0IkL"R-VlZfkq2FQk2-dXF-kdhL%JY
Xr+B`I&Z#YQX3jGCLCN4R$r9-A%5US(UY)a@3!!D'!dbfVSTa)0+3!$03%pG%jam
'4Rmjphrc&S&"HRi#S0p-r6"*D[q4ee+64amPQcdKMjRB,18NBULB`B`cI)'d`%G
QEpHR$B%+lpihZ5TEPSEB@`0h5HKJ"cGJr1rqYl4H5Z[(SU)Hhffqi4TH-ETil'9
,)$XL0cGh)19iCGc,Ek0ikDmUFHN+(6*12[8KAPKC`[adkdR#F)c8F)SYeAc"fTZ
JlD-9RVMCMVBUf$ErZXI)-0j,T464%E6MQh2EY8,EJh)!6Fel,c24UhJL1hm4%-c
40J-Aa'dK0TBB6m9Nj83*Z,ad25Mc$(h-9-U@[cFVr+*m'GH#q[`p&3rG#b(fZhb
+K6kmS2CU*&ZfB!+6D[PbDJEB'cCfbc![6lL[*)',%II`DpV8cJ-$j8M#l8SLV)V
@kf@$R&96+lq9X%94LBei``2DSpFD[G[m4Q-8R3LkTrMLCQJ58UdBSij'#2CCVBP
3D`cCRe0AmI3fI#q0ieUYLkDID,1rL+c6H4bNq0j*i&hXH@S#&IkaMJf"i23#H0!
'j"l)#1FcFpIMa`S4[rZYBCpQj6'YXE9l+Bm#*MkE#(C*"NekmXShmMhP"Ik&YHr
-e(@`'5`pZ0j*HB+jl)(0AaAiibi&,@#R2ZGd&'Ik[9#fVIU3!&+YTh-XYVJ,&BZ
b(KJ%H6Abi,5AYK3*9X2bS`ZKr2Z3!-(&0TUS@%hF3&SGRdBL[,5X)XQ3!*GTIb`
F5U&b8%CBpGJ#$S(5-G$!,E'fr`2)(`4mK3bZ6mfL%99P!32)j@XV3D2-Z(D&2dj
#@5`%Ldi38XA![+PN*D$2jQfXN@-NISdGr$lE1`+PYXHSi#ripJHYbpYYRA+&N!#
JG5A1ABpS0`ce9X-Z3Y89eha96$mX9eKM5Nbf&4!D4-0pRl'HA`9Na-D(2ZMi+d)
)0Nj2A#2q55q(S%6+"RH,h8ll*YqMH%JLC38IaP!1@%PHpKFLZSd8695p,H1Y+j6
SYLrKkf9B,9F6KKbjUU,4$baC&(!&2M+IT8'%SIJT+8mPKRe%%16(2,Ii22UC6jR
D[6)HR(0J1F+85$$$4FaRP@@a6,I9C)&lLCj'NL`50[aA+PSFlSJT-bl,lBaihPE
4NpA6P3HdV`$lN3N!cN!m`iA(3FY4l`3bMb'9U4C(MZ'UC!(Z51#Z#e@q"Idk1i4
9#,L(!Fr[*QDf@0)PSX`VBf`R)I$aBD@%LYJJ%1#"cKh+THYP`fJJ9U1Sb8!N!DC
PE1LYiSj@&XI3I5Tb'%GY+RfMkSXP*UB0J4jEi+p)!CElP'(f!F$1M8%3r(J80CE
lFdT@i,VG11&40Ai#6eAbPMh[ZMPY[FHH+6kRjVEHGk&0238h1YA0H8iF!N,@GYd
eH*ZmieQ$*rkdJ4$)rA*l@8aiEQ2XT'KGN!"Am2$qX`4P9CikQ95@U"HcG#3beN2
)r!30X@(Y@[-Vq1!If"a*ch&1*N+!94ApD%@Sa*E65&`1%M(V59jq`Y!Z!8['F4N
*1F-Y(eQ4jHC6IDHAcJB,hRY0e0"li5P,ErP4b9F&'9A$3mSJcqJ!kBq'%FSCB*M
SMKi#QBVBrHfA!!a#0k(&%I((Sl8KaYPf$iI1!d,j)6ZC1UfK3c[rpYF#RV(XZIi
99Pp+9'5P-$aR@P9`6MTDSbX0hADiB-+c1S(YM$'D%aUK(T3dFB9"MKeSi$SPRL!
%bD-pJ'Y"FG9YEaLEjje8ie@&R[hBa%JdARmfTVqc(6F!0N(YrJd(@)#fHm&hVEd
CfD+i!ZcFcEVa!-6RMP3VR",dQZSP49UK@a1iCbEICjiI2TGb,FrYBUk6NZ@KT"j
lp$G0)8cL!2#XVpJI#P#1)T)#0qXIA%VmYF0!100HFd0Y$hNbIiT1'MPC1j0!!cM
DYC4d+U'Kpd5I93N#1LNcLhL4SA'j!ia1Da5@lGV`B6'EBNKX-J5CIUU(qERA[*N
e%3@8&$M@AA`KQ%0e[Z`eQUh+)@Mml$kajf'F[l[BP-cI*c0RL0'IekPE35q[P2Q
3!!p$Hp`'Z3i%!e@)qCIL1(N[F[K!l"6&U6"&CL`)6bXCjcfh(ZPL0A8IU%eVTJI
l([p%eqlJ`PY2SKDNE`#8%qa)hkaDMFZm%[k6h@!e1Xch3jT[hDh2GQ[9c3&%TZZ
)c3YJa3AIdqHFBPR!)rQdJ4Mar`%L!),mTl(MiHhbd#ckpaA#YMNCLlJVmUD%c9C
S@K6INqep@f&QVV40N!$"BkPD(aPCVhr'jR[BTY'ql@'Y$GG8MG4kikHBGf4,3'h
EB0L(cTk,qD#,ik`lkCP#qI)RK@&8T&q6c!M9LM%BU81h0!40m(T(&YRjh,6P*L$
&HT,()9Pk9FNBDm2#lA0Ua1-KP$"RCHKFc"6!9XZ['+r,AlFq8r*)Q*mE#)!*Y9N
kqjmqLiM5R*8$V4(HYqUF!+ef2NejX9KD)q4%A'aXD*QRkR6c!(f89-*#%66j,Pm
B@r,YRC3Ni[,,dV1Gcm5,($(XE+Ub+&,ML[J,b(4&S!8"LJQamT!!c("HMI)+DN&
'JHB-LAb63`b`$ep'c,0I!U#'fppB*AY4Hf++$PK!q#9[fhNA5,d3,ra'0()ZM(F
3TcmU*,@3!2&,IeV4RaF+KM'KCD-e*pl0QI*Ff"8*T6q#bL,a6d!#-!Sh"'Uq@aR
-Yrk6C+36DkZX(UPP&T+4CQYIhd"%Tr5,(#bK0pUUa1[jFe"S$SJ6)J-RKfMNr&N
Pae#%rEFNeHLm$*)%rB2a2#DI'D(%p`91e+l+#LijS56E8j5C10mBe*2D,!YI+[P
SRdM$[k8#aalelGCa[kK034Im&qD,1FV`S-XbjTl13b$T)TY#)9U$J$UMd$-(5+&
&YVPLk,jA`4'!Qj%fTVJ$aA-4GZ6`aIUQ`$br,L@XTfA[8p'%dT1SGf,+$`)K9D!
iZ%p-jr8YiZBcGF)BEQT-&p1d'i0kRfm[rD`kIq!Md[@V-!jK-d`4U%#2'f9*PB5
m3C9UrE0lDA*q3r#)F'[Mm*1XbY9qGq$Ke84bc9i5`Z%cpQA(AHC(4T-jYhdjR-1
&N!$aKMV+([N5ZXq5"XVP$eFSRVP(+[Z5JbT)keaQFYN3i&M&UG'MQpB`I$Z2&h@
'8p50p#S!%T*'cP1a,#P$jY%6Cc0ZecQ2(LNZTi+Gh06mAePl@0a2lZ#ClPZ5eZ)
j"HE`SCQM85Ya"%@-+j!!`Qr&`HE'NkeCQj'TZ8(kB[YE49qQS&Q%mF!ia8R`U5H
F+i0Ck+5'NmF-d5H!L*lP*[bEcUpHj%RR@AR5ref,VmilSak5A'#lGlm*)QGM(JL
8mA0m'[8U`4Mi6%Be[j%+bjQe40lm`2P2$+Yf'B#&LmPUK92L"ZRe"F9`5-MMN!!
MDc2qFJ1@'(K9pf9%T4*DV`H!-!,8!'fcZJH$8LRJIcIe5E+`Dj%2AhL2c%h(q6f
AGkp,@f0RqHU%!['!e&9Pq4#L`D@GJ"KS),QGpNkk5jYaN!$)3+U!+$&Q-S+&KbV
fr1!8)X`(![L`X)cbCYe#4,-[r)&l#'MGfAJ&A0pEk'RG*j[K$Lf#8!"8)[dYapG
kbmiFP&6,f2'5@CUrKmAQ,frU5ZQ0,"Gb!)C0PqY8&[iqE9kQRIrA6DlD"j8RAa!
k'Y[)1BJNSKeqJpa3Nk)p8RPjTJ'4qbVkCb3pJ`))E'+-bR,'80$1"II,bjqT0@I
Q&%Y2-ea3pYa&2Tjp$0Hl`HkX,0mM*"5D`EXbJa"kZHCrPYaE'-[6mpJYVi`MIHF
)#CNUcb5N1,LN3aa&L(rL6XC[,QN%0ENdqj,15fR2alfM@,9!%3SfYTVM8G@V214
8%[@A9,C!dm`Pi"ZUK9IcS8N54iR0bchF+)HHSNH`!@U6j*LV58h+fRX-HAKL,RP
6Tdiq%$R2148'T)8Cdc`(R9k`'f3cp[9X!EL[X!B1J[J4)Y&ZG1r*Ia,4,d5b!59
8YpL#APh+fIicSFA'8P)R@`j"Q[qRQ0D-`FA1)XJ@XcE8T-M2fX!R@YhDLDI##MZ
#3ChQK,lZb6FKIEYTrp(+SC,rDBAIacS`&bj+PFi)ZL#(VE(RqU,8JG0*KK8,@CK
Q4cfqSj!!'4YaZ**LmbZ82N'f2IDSc`c"[+H6-*e`1YaG6kBkT"kLiQ2%RlCDJF6
mYahQqfm)jS&($R'1ZN%r"e+G&hX,k(PE6jA[`B8"PAp[P3fhBD83VZM,'RYMmZZ
lHYdP$P%XhVB,ebSf!a3bhbkD(51E9B*QP-rd!jTVV!mLTE#i,P*",ZVdE5+%RTa
b%Dk5Pi6-1,NTmGA0!hZSD2MLZV8rm*'&IJ@GS)5EE49rmPIKF*!!9SP9K"h')AM
-1L"lIbHNb"f(2V&p44*6F3$N*Vr5Hd#pJP)pp1Q4"UFQh!%H@GkQk`&5qP[f0fa
Qb#4UE*IhTA3&C31M@!C@Kj&Q[lIMCl3(Ej4)(TmL5`5288CqklKTNHPE`'4TUiD
YZjl1hj[eZ$S!&kKi&'E"VFY%q['`J+#PKFA)b,Jq1@JV'!9meZk4HUZm0[Q(KM)
ep43UP46rBha+K-`&6`*'lF&8i0N-PJGUCf%%q*ZTXhGf-AiK+CNLZ&%RGAUN+T8
,[+B$emiIZcN(ClI,+CI&2F@)F'%Sad$leLZU'Lk3!2jNm9VK,l@P@&c-"cZ#cQ8
DUD&146ej#qBUUG8CafF[S11aCrCeC"mjq(9GhT14p+Q&R$f+KGc!`pUH6GA`Yb1
JdajNT@jjr20qQQXH[Y0ZART5&NapP8G+65eaAB*UKMp!#1JdXI0G663*TRK%P*G
@Zb50#6E-1lf(ZDF9RV#d3YK#mF`rLFkckBTk!r4pkAQH1"MTS1e(qK&%6k*F#@j
aj@Gb*`Mr0R*lqea@(-,Lq&aLZ`CpN!#5dBqj1-J4Q*0lH-LHbFl,0lEb,$Yc$3d
b#VlB#l,dHLVZ#%3rjL3Jd(R(F%+`pERZ"qI,eYZX8EkhG)b-d9N-+'19Z@%,XlT
)rK#',e`%UZJSia6+0!SEllGNMQk#Tm+RbK`[f5LKDC1,VTQT6hE'hNGCD`,)Z!d
ZUj!!iD-"T9#$dN6BC(r,jkRDMSR+(-APiIpUYfB(1L+$pK991ilQJ@jpMEU'D!d
KBLJr0U"DbZ$I6"!KNC+h*ijN6i'8k[cf4Z,,HlI`+bF$GHNcIMVk4I[ZeQ@!!+@
3"!%!!$!!3!#3#3%-TJ#3"mi!!&kjrj!%!*!+TC!%!3!!03!!Y[&1mlEa6[-!N!2
1!!%V"`#3!h)!"BT,!*!15@0[EJd!!4)YD@0[ENe"3e0!!*!2J!#3#3(Q!*!$J!#
3"!m!3X(8iHr%)(JHNZXl)T0$PMe1&X9%h,U"-`j,RCS+U(NFRSIR`'$MA4ifZ1e
Np(bc"k[8Tf29`V5Ebi-dlUp1aif&(6j6c4PRTLP1eK5a-h2EPVY&cfClKmZkIGS
2aXQ*%PIPjC5M%Hph@9&a(ZfDKkIUBkh$)JJi(L3&)ZG6@!#PN!3"!!!`!%!!N!N
"+L!!N!Gb!!$NBIq3"!#3#Mke!!!"!!!"SiS!!D++!!!&5`#3m``!)!!)!+)"(!#
!998!N!--!#J!+!#Z!8i!Y999!*!$$!!J!!J!SJ%F!)*993#3!``!BJ#5!2!"Q!#
&998!N!--!%B!TJ#k!GB!KP99!*!$$!!S!#J!G3%m!)G993#3!`i!+!!S!-)"T!#
)998S#J#3!``!+!!S!*3"%J)!998!N!--!#J!+!#0!4F#!999!*!$$!!S!#J!YJ%
F"!&993#3!eS!!3#3"9d!F!"a!+`%!Np,!*!(5J"9!41)1P0[FR*j,L!J5@jcG'&
XE'&dD@pZ)'0KEL"[EQaj)'*P)("PFQC[FQePC#"[EL")4P-JGQpXG@ePFbi!N!0
D!!%!N!9G!(!!F3#X"!*25`#3"dS!93%6L$T8D'8JCQPXC5$5AM$6)'eKH5"LC5"
NB@eKCf9N,L!J8'aPBA0P)(9cC5"TG#"hDA4S)'0KGA4TEfiZ!*!$8J!"!*!&E3"
Q!)%!SJ3#6dX!N!8%!%J!C`%$L$*6Eh*bH5`JBR9d)'%JC'PcDb"bC@aKG'9N)'9
bFQpb)#KH-#NJD'&c)'pMBh9bFQ9N,J#3!he"4%05!`!!IJe6#T1%!D0Y!1`,FJ1
dXM)V+q0E6GjElfVhTQiQei!a!%!$!*!$ZV8-J!!*D5Vqi!&9%Lcl5XKE$Z2PFlU
&8Bkb2mq2rkiJ16HX'[J4bSBeHBCLSfGVm+aH2`AZl![!X+N')MK-9ckpkmZYSaN
$a4aC5aXi#`#3!d`!!J#3"6%!C`"&!+d%"&&eDA3!N!8+!&!!(!%3L"T9EP0dG@C
QD@jR)(GKFb"cG@0MCA0cCR9X)3#3"3J!$J!S!#kJ!J!"!*!$e%&%3e)$!!%5$9-
+Qb3!1iU)LKA2&Y"cV%4X%28X2hmrl0HG[qIZcJbR@0KK*5TBK999BZ@rm35aUJ8
,XQ8l6L$jN!!I!93NQ2Se[)@RhFACh8h5b(U5[AdI,N2FaCI(T3X@qBdi9dq9p3X
N2%U1NN'qk(5em(4U&CSL2JAQ6XFXGBZPFi&Plh`8(,JebXbQG8"2"b%-6&H8@Cb
Y`EYPFb)Ah(i-H"r`2%#L6q-DV)Mdc!mhH5K3fic)FDZRR-9M@e'jc-h@kB'VP$I
IbIX-kIp8rmPY!*!%EJ!"!*!&D!"k!(`!YJ3#6dX!N!G)!&i"*BK18fpYC5"TG'9
YFb"hCA*P)(0VDA"`C@3JBQ9MBA9cC5"dD'9j)'&bC5"ZEh3JFh9`F'pbG'9N)'*
j)(4SDA-JFf9XCLePH(4bB@0dEh)Z!*!$U8&%3e)$!!#f$9-+S`)#lq3%RIe6X3r
20R[6fe4df-HFLZM8#BTkGR2ZaZNi%!m91faR93P@9C!$)GjY%k[k!3Z5$f#*[rQ
3!!&qbQ3heb8D6Gbbc@3d6L&F`k&$E$C0a1d64BTRk$3aJ6Tr03C62XCMTU55r6c
p+&$rDmb$1ckA3(pH"EjQpH*A)Cjm5p[plRC3rBR6-dfULZ8aBdPB,[3#NbC"%Qm
I(D`#!*!$1J!"!*!&8!"C!'3!N`3#6dX!N!8$!%3!5!$SL"P8D'Pc)'&bBfKTGQ8
JDA-JC'&YB@GPC#iJ!*!%5!!"!*!&4`"D!&X!P!3#6dX!N!8#!%8!-3$SL#GCEh8
JD'&fC5"PER4PFQ9N)'&Z)'PZBfpbFQ9MG#"`BA0cGfpbC#i!N!3S!!%!N!@U!)3
![J$F"!K$EfjdD@jeC3#3"33!"!#L!@,!!J2S!*!$I!!"!*!&D3"M!(d!R`3#6dX
!N!Fp!'!!miKF9'KPFQ8JDA-JEQpd)'9ZEh9RD#"bEfpY)'pZ)0*H-0-JG'mJBfp
ZG'PZG@8J9@j6G(9QCQPZCbiJ)%&Z)'&NC'PdD@pZB@`JAM%JBRPdCA-JBA*P)'j
PC@4PC#i!N!-H!'i!KJ$H!H3!"3#3#!%&"P0dBA4eF`#3"KJ!0!!8!2`"HJ!"!3!
"!*!&!qJ!N!18!!!"(d&%3e)$!!6Q$9-+j#)!hhB$MR'R6XAbV0j%XHBmX)IiV0j
8,+HJL(G6Cr8c`3!G"L,18R4@$cZXm[rIpjiFhYRYG&J##k#MF"NjQKYpM08c$@f
cB&cB,DfDBBi[Q8@'KZhRa2eh1KGblU3+QbXZmrjdJl+K'E8"E#iG,'U!L9ATB$8
iH")""%H4JmH*JiXFe$A2[B2Y#,$K`U`5"0`DJf#cY2MX*ChTT*3S[2"4)pjUZHH
r$Vc5*(XM!dUL`bYl#@3++G+qArAV)0Jeii&kIZM)c)ei1q,`DdZCb"5#5`TS9m8
NY6&2mINh23-MRM'-lh6%63iY205!1aPr01FI1[ikDb1j$**hNU$CKaEqDXNA6IC
m`&pcThAf4L+8'Sm@!!!(#N&%3e)$!!`S$Pd,V))N2ZS-hqrZ1!QK5SG3'UP4i34
(3(PI"fEcS0Q#K"92C$K@P-9HE6bcNT,DRQeBDc[aqqT$D#eNV8)&DdiZN!#%#AZ
,hfper$l&pI[)`U"CYD61l#ke%eX8NM![bE+N5i83d[Fl[Hr%iYTckrF($HIR0$%
"*$3M04p'j!kP$U6rDXM2CJM"X&PTH0km2Rc"[HG&*i[#(f(pFTmm#RB-&ck*PBN
HVS0Ka)H%LDfKbLLS1)"iAb3)Jc1%ji')q4!C1e$+EV!VUAf-f1i`r41*8jqrIEb
"rEcklR#mrrCRJq1ZiMrE`$GKa94jU6lIZC+pD562CdmRci59Rbk'XX9!h3"XQ6c
JqBAi*cH0kBALkBGRaJ2-hYTYaHF0X#p)F@%Qc[1G#a"XIL%ELH@5#bPrb&FN!i1
YP[[jlmh%-jAekAJS-Tbl-E)iZ1NUIe-VBQ88rJ9pHaHLJ@Eh`JAEM3p+f0FSl%E
'6qCa%KQ%2iP,fai+q-jH!bq+%HV0m$2&U`*Z8DmCK6Fa4b)0ia2aZ@G9,ZE96jq
F'A+Ij$iHhQhJ'jH5ilPL0P@@RLYfq+@YAja2bVlDmpZP*2I,Z@h,"(a8`Dpi+2Y
+*E`HZ4D#c&!IJeYh1f)'[V4[2$Rj`rR3DRRZZ4P-krfTLRlUKe(i$rbX&E"H4f%
A%L*8[*bH")%13M,hk!)G4+,3$D[JBV+Bjf8aYbL,qSpN%HGN)5K8P&!iK!STh+E
U4DT8TGX$6l2Np#Xa@8ElR,`XQErQ'&P+VqH5XPaq[HHa,'[HLHib-$qZ-$#P2h3
B[-MXF"J%MIj%-2JJ0p8U(mB,prl%JeVVm1,)AeEZm%SE*X-`5BE*-dbU,YN'[m&
EE"B'2LhLq,L`#pHl0G5RHl&m3iqUh@40JD9(e*HQ86pSY4)kbiIU#Uj-Ef"*EcR
J+"8ZAeLlS$BFA6-Mk@jidB4mU*AB2SM"$YV@c)e6ZP[!58"@0Z$l&VH@lU8)$TU
qSJ,ad0G!-NIYF!j!F*SLDT[G(%-YY1+4d3cZ'8#`BSaZ+d%dCmC1$q(@5Y0rN`q
4-!-1ha'[$Y%FkIYAp)0PY8QXb)b)T$fUCG50fMlBQN0K$6RbLSHeq,iNERPcAVd
2Qe9[[+(EK2lK4,8$e9plc0*lJPa-QD5UA,mZQbUjH0&"TCi'BkrrbN%mb,j!0r3
@J3lQ8k*c-HC8KkQMJU2r2aJGiYI$JP0PlehjamNGSp#DZrFrd!Vk!ik0+iAq'Y,
8GQJ8b+FSE'$8UEldrFcdS3m&(mk+)&3YAHAqXNrYkrZ8F[9L`#PmMI6H+Hh-((8
LkjhDFB"S&TqEeBi0Ud!1!(&rJpk4f@N&#pS'J'H20CY"b341$fQhhDmiND1JaHN
Q)bkIkK@TGT&k$DIBHaEYcql,N!#4DFY,JhDhiZVlbQI`3@$8hN,c!hH0%aR+R08
FMJhh@ECjV+P0"-Zd6F35M*55`k6eCJhMU!Pad[(@4`i-qC2)FY#qJMUR`YdCfbM
k1+r3R&+J)(jr5rhl5'YA@SKK9%!H!r4H%bbXF$[d"pU$B5U'iClN)J&HiL#@#!(
!L2qjUqG!m2IZ$Cj[E,49[EIkj1P%RrrplilrR[f1Drp0IhAHNmemXqPLE,dL6N2
c[MTmebIael4Xb*KF8MHPb-KfkFhFFMMC`MmUKV)T*T'3!)2Ae6fjaI9)fU+)ij)
8%AiRFG(NYp%@hXk%(Q8Bbcj6m(CIRC5SP#5r$ZF!$h4)A#jj'S*I+SED&@CfhK6
FpVLZPQrXXH96Uf02NrfU[bF5ljA5R4hMrU$R8LQ8U)lQ'fK+'"6Di#a18cl$iNl
VlJp+rKN84R%G82lDSS,c203D9B&$eBHXGIk'SJb-+l(rfG(,Xj!!DEJPcY04,9,
L6'kQcY'!L6Zfbj2jCblQ4rRY%feAMe6hl#aI[L&2l*K[(6A"U@*M-"M+KMFVMAc
GZp+Y@52A'"`acI,B`SqD$mS[&rh"B1df%Ajb5p*qEZ6m`5(6P)mYmKN@+"XUcXl
6Z!R*AdRCJ'RkYmE9`DZf)5QrkCU0"KZBYS6dV(%l0b3&6'8"2YK)i5r%+M)`#)5
pZK+HQ)46m[i,Y&`!4QcYX%5[kfc2IK"GY2f`6%#!Z-*dZ5E6YM'#C"Jbl+%p0VT
KKR$,KbILh%H2ldDLRIm$L1&i+'1D)BP#Aip8rh[I9rq05RFMf,P*YLZeYS1hZDV
-RSReYqdQ+T!!rFbi0"[YfR'cUAf6'*A&PNUqjeSS*)5cKP5GFBQ$Lem4K9,T2`'
9dfT#+q'86&fLP-,`J3K(+Hi(,C@*R(maa1K#99,Uf&MeUrA*%8pADE*328BDZ%I
9arQfr(+S+E`FXbE0J9i'#D503$%DUN3FZMEEJ3Uc`S,"3PUK'qV+ecpqDb)@pld
!!!'e384$8J-!!XJ093Z8SX6XB342CpAGe5'%+QYY#3bBY"a*C-$N"+Jb1CP)"J%
Lhk'N*4q6$L8h((P&ILE*QIaYB-%fhNkIDAH&K%Nb%pNN$FJRfl0MlLe$r14lMUk
jBj1#Qf1pV+J3!qd-q")[6T!!2&(NN!$XH$VqIIf-lF$JY8&`Z,`m2Kl(N!"fG26
m(+Lc@!dY,VZ@Jq32[ecHi',DFQR`2$R2R"FmEhPV5TS[8GIj4FMFPUJN(S$krrc
HmXjTT(LK4Sf51[S8m0FeEMVMk6SYm6VJhLGTV1lRVZZ"EaEFUUI2-L@THq[lVS3
2kTfQ[&34P4,qR6LH8leTcUSC90r2)#jHlq(PSQ5$"LU+0r@-Q$28$kPkq[BSR&*
1dKE`$GP@`m[M1pi1h+5UIP(#Y$f["YEirkXd45,c*elIF+LUHqKZJ#aQ&Jj&V0F
0QfVhJ%U,iK)b8Rj5bF3(R&Ge&@C#A#EdNS1e+6!l+jT"0GNjAjJ,"X-fS4558*P
XpZT"@GPQ4BRK,$U&MK11kK6e3me$R&PmRZBeK3+'[KCeKV"#+i`Erm##D%'$C3Y
&%VFINEJ[pV`2cNF!!!'e384$8J-!![3093[FXX#Y$`3R*l4pR,E+,9cS9G6V%Tr
E2UVLrRe&k`k+#h8laU81%*IMeD[KZ&rGYQdIS"8K,pp,FV&4FGX(#qXa#P`NCE4
GVrbAd[T#VfM,r3Re*3ecY$mEP0C#pVha3DjUN!"UKaJA-eeFRekm(d!DYF'LjIV
ki@'lV9ff%4XfTid[`MqGTkrIr-H08Z2RQYdRFfCm%reVr)q5ZeS&TQ!EF&3"+6i
#@"Pd!%iQbLiQ6TQbP$"D+p3#T3k[%+J&a`QB&HN9`e%"!i@TRSpq41E'-KF*+ef
Y3YXIdm(#Tb4#d[D[L[pkkf4+c-ND!HN5@EpmG)mZV-J)Iq[a,UXa*kPPGerLQap
2iR2K)Nh92bG[iR,lp(Y)jfcaeb8Hha*bcRH98B[[d(Y'VT5,%hmEqZYhrMc'4hL
LD&YQKeplle"Flhfm[)H#CTR`3'M"adK5D0hlB4H60&a8F401Y5HehLpe#)T8"HB
1aEIS)*JDH%-bDfGNB0V9N!!SjLN38TkRF"(GN!!D('BaRVX@iB#Rb*UTJhNT&Z6
12U1%V%JKlaXIpiKYGiKCQC!!pPcYm43#!!!"LN&%3e)$!!+d$98,R"6&p9%!hb4
j54VAQQc[Y9QY`(p1RFT8hqPl9Ri9f!Um#Q`&!,j@MEDeZEP[lT*ee`S-%pN4!cN
3c9F'jrI-mC-IZ6ph6qa+GR0XIaXS4q,T@IMkII8#j)ZL-j,2I"hr[[dG9f5[$5+
hcl&C-MEhRLRXdbr01c3U2@pDXFKTGZ(Fmkd+U6kTDI&,cPa2DK3HSITrrZMjP+3
b2#K9DT5&AV+qfqSU!kjPN8RAV,ZAk&6EX#`0HPbi&UGEc#@dD@[,*"r&Na5l5B6
%*2mZh-m89c%6-8#Y$3"@1i0ALf%+#b3%GfQXKA05lq9S`EPBLAj8Eq4&D"r!(S2
N50#kmM&4LfJ6UL#,pS82Ei#*`@k&G+U'aeJmj2p$adlZ)&Le4LV)+(D3!!#09FG
(9'3)pJFp,$-Y'EP2#-b+Hr+4+K!XLeb+8j!!Q(9`F8!kMGP!SAJ2#fMEM0Id#YU
*1Sl5`QdHYK!+Q1GUP3%(P8GKhIi2'&60&Kak'&+irSc%krLeDhBd!J!!"$0"4%0
5!`!'G`e9$8-L%K(QAQi3C#dC4'Vb4#3,%&QVTLBRYcf,M1"fjmK*Yc06mTPrGlr
[fiSm'pr-Yl9!NYA1l-RN5GLq1j-4NZ9@j)QXb1mIN6q6RmQmfGCf%8N@%l)h,FN
L+%$L"rp1@BD49%3iU!XlH1)RGL%XdS$Y8-@K&RB5AKr2MQN-Tdqr@5Tb%b2*lEe
NEa2deYr0KTa,b#P((lQrdKDbpHCeqFBN#8XTDGMHT"F9Nj*A@5m3r1$*iF)A(Ra
+`bCSd@*%bYh0[UE$mLb8Z8NZL1FKb4cpaH#,'S2Z2"A0G593mh5B(ilNbH!U(HD
q*03V2L&LN!#Glm-GLj)350pE&JffVadV0j9c-)PcYTmmT-U'cCf2[lLr"Zb,Dr,
j*UQJ&eL!@HMeXIT'U5KXK+Zi)G(%4'NH4P'P*SBS*l2%Ke)*Td69NE&*%bSLi2'
$"P$iBJ#e%QfCd)!P0"&UFSY0QF0BUD3IT`bXGDL,fZ$B!U8fSh08@--BYZrp*)$
#,J2%1@+BZ'k&r-qa*h(XSZeGPi*0bi'TkX2@JbVR0)ahG0E&J(3EJ`[@YV@,-D*
-cb(Q-Y`6mPcZfjMcBMp"cGLljK3Rb&aVTMai@-PP[RfUT+62k1U0klXYd-Kcq8@
f`RZ!4-@X%K,E)89)*H!)2HGQk+!L4L(61rDKE[-93T%lT4&h#Yj6*Gq@)$NpfZf
T-bIQ[*a$ZHi9U@$-fpTGbR)EqIHh6JN-ELhIr*F2iT-R9S%)rHb*!9X*2'JQcVG
5aT+bk)"66"T!8Hh@RKiMNZDb1RCPrpLBBZE'f'*+5Z1k(+rRjMiNk%bc`$2Y2dP
bk)d[lP"05[[rh(fm5+9i5KpCGN!BDPI(P8iGH))aB&$'@AMak[HhZkICP"IAk`2
0U"30ED$cl3ANPB5bhE"dKJq'UT!!'MJ$K%Ef[#TaY#Qi5[JiZdp@*Ek(V6S2"5L
GMGP9XcSTH`kX!)Q$@e`Lj!Hc!YeF"G@qBdCpV(kpX(EYJl32qi0AAhd*'kUV,i&
`%M,25lL3!)9HJTA-Hq-JNiRVb1C`%N0V@&,9LJXedG30VZTedYBKmQ8[pD@$C2L
X$T!!US[$LD0[BBPS9ake"Bi4i"NpQ[B5,S$!l!aZkDY"[CV-MSM(ZdcHrYqi$lH
RmXQ0Uj1Q&hdZmV+6dc$Q@CReZ"0&fVV&S"Ua`C3d8JpM+h9[1peJ#QP[H2ESABr
bfDQ9EXl,)rR"Y(aV,(DK,&e(qXHCLJYTG`ceq9R+jqIUrhj)D3VcIeGqcX4Q-Il
fpqABR&9R,NpTEKEkTP6FE&CkmZ##0U6Epj,8cI&CH25LN[RmcjI[Q)F-e2@eAFB
V*qph(["`34I,9E@$fDIYZ+ZVJh8&%Tl"cXY,fjl%2ZKNB,XDjI@RH3*a"UE`8,`
*ALRF`jGi-!Gh[Rked&R$@pIN$J#3!``,9@j6G(9QCL"KFcS!N!-)"b"QEfaNCA)
!N!-m!!8%)'pQ)!FJDA4PEA-Z"&0dEh!E5A4PEA-JFQ9YB@PZD@jR)(4[)&9Z8h4
eCQBk#e9Z8h4eCQCTEQFk!*!$,8&%3e)$!!!`$8X$@f`,YfS!N!@S!9[Y[`B'!r!
4fr*r#&K#bBm'eKXaPa-!N!-'!*!&$3#3!cm'!B!!N!-&0Li`,M%b0Li`,M%X)%0
[F(PbD@GSG##T)$%j16!Y-M!`-5""E'&NC'PZ)&0jFh4PEA-X)%PZBbi!N!-L"J'
!!*!$"6BZ-#ia&90dG@CQ5A3J4'9XGAKPUL!f,M!Z-3#3!``!+!!S!(m"F!5[998
!N!-J(kNJ-6Nj-#dj1#""E'&NC'PZ)&0jFh4PEA-X)%PZBbi!N!-d399c-J#3!`&
*3diM!!-!N!1!!!%!J3!#!))!!`#$4P*&4J!$!*!$J!!"!)%!!J##!!-!J`#3!aa
KGA0d!*!$!8P$6L-!N!@%4P*&4J#3"B3!N!-A!*!&%!&+!!!"!!"N!!!"%J#3#*e
"4%05!`!!U!eE#PT!!RIi(&CeCqR%2P6X%(Y60h9ff+'2YaYlZYfEEiHc(faB9@*
9*9K9BMf'(9B&#DJTT[J,i1(,8`"QDIbQDRi#lM$$cBqlU)D,4ASBB5rYZ5acTL`
96)r2pNKjl1M&V$6BJ'b3!'ZD%ZB8DBKG0`9Epd3(4ED8d&f,-,R*JQ8b36(T0HQ
lAa)VPkLN[F!r*`mLD`#3!jp"4%05!`!!UJe6#T`#!Zr@j3bJ[U#@m9XCReQCTDd
@cmSkYcGhYGkYfl2&Ej`"J!%!D!"JC(0C'3!$#DJTT[J,&1R$QbkNIKkRaq`VEU4
dMCZYeC+69%EUD1rE8eAPM-)NM2YcI8"Z'lbB&D-,`U9`KYT)$S[40NdGA$B!#a9
f-0*INe$h8`6(+)1+dE24hj!!*RCpBZREE[)VqZ-BbIX1!*!$6!!#!*!&#!!d!"S
"'iJE8'aPBA0P)'PZFf9bG#"NDA0V)&i`)(GTG'Jk!*!'#`!,!#X!+k!#"%X!N!8
G!$3!,3%BL!*H-3#3!cS!!3#3"6B!K`"+!-%%!Np,!*!&!J"&!#m"2iJCAM!JBA"
`C@&bFb"dEb"LC5"NB@eKCf9N,NX!N!-B!$`!3!#d!CJ!!3%!N!F""`!!+!S!N!-
B!$`!3!#d!CJ!!3%!N!F"#!!!+!S!N!-9!&3!C!#,!BB!!3%!N!F%5`#3"!G"8&"
-!*!'"e0PCc)!!3#3"!G6C@Fc!!*r!*!$"e0PCdi!!rm!N!-(39"36!#3"3%!N!1
!!"rr3!!J!L!!)J53!!!Q#FJ!)K2N!#)J!J!L3!%!))IJJ#%2m%!L($!J*"Rr%#J
DLJJb-SSN*M,b-Nid"MNQCI3b%Q88*!KRr!J%F-!3!MrJ)!%"J%!!KX#!!%!"!!!
J!J!!%q3!!!R)!!!%N!!!!!)J!!!"3!#3!i!!N!H!!"rr`!!rrq!!2rr`!$rrq!!
rrr`!2rrq!$rrr`!rrrq!2rrr`$rrrq!rrrr`2rrrq$rrrr`rrrrqIrq3!crrrri
Irrrm$rrrq!Irrr!$rrrJ!Irr`!$rri!!Irm!!$rq!!!Ir!!!$rJ!!!I`!!!$i!!
!!F!!N!1!!*!(!3!(rri!#!#$!!Q"!S!+3J*!#)3#)!N)!K!,d!2i##!!#!K!!!J
)J!!)#3!!#!S!!!J-!!!)#!!!#!J"q!J)!r`)#!F-#!J'ImJ)"U#)#!bJL!J-!BJ
)$3')#"Pp#!JC4`J)'Im)#"``#!J2q!J)!'!)#!'`#!J!!!J)!!!)$rrrq!IrrJ!
2rrm!$rrrJ!rrrm!2rrrJ$rrrm!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ
2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ
2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri!!!"!!IrrJ!)!)-!#i%#J!K#!N!
*K!)J#%J#%!Z3!!2i##!!#!K!!!J)J!!)#3!!#!S!!!J-!!!)#!!!#!J"q!J)!r`
)#!F-#!J'ImJ)"U#)#!bJL!J-!BJ)$3')#"Pp#!JC4`J)'Im)#"``#!J2q!J)!'!
)#!'`#!J!!!J)!!!)$rrrq!IrrJ!2rrm!$rrrJ!rrrm!2rrrJ$rrrm!rrrrJ2rrr
i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
i!!!"!!IrrJ!)!)-!#i%#J!T#!N!+4!)J#NJ#%!T3!rJ))!!)#%!!#!L!!!J*!!!
)#J!!#!`!!!J)!!!)#!(i#!J$r!J)"``)#!Crb!J'S)J)$+#)#!`"L!J0!BJ)'Ad
)#"P(#!JCr`J)($!)#!ri#!J!B!J)!E!)#!!!#!J!!!J2rrri"rrq!!rrr`!2rrq
!$rrr`!rrrq!2rrr`$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
i$rrrq!rrrrJ2rrri$rrrq!rrrrJ!!!%!N!1!!!!"3!!!!L!!!!53!!!!#FJ!!"2
N!!!J!J!!3!%!!)IJJ!%2m%!#($!J""Rr%!JDLJJ5-SSN*M,b-Nid"MNQCI3b%Q8
8*!KRr!J%F-!3!MrJ)!%"J%!!KX#!!%!"!!!J!J!!%q3!!!R)!!!%N!!!!!)J!!!
"3!#3!i!!N!H!!!!"`!!!!q!!!!I`!!!2q!!!(r`!!$rq!!"rr`!!rrq!!Irr`!2
rrq!(rrr`$rrrq"rrrr`rrrrqIrq3!crrrriIrrrm$rrrq!Irrr!$rrrJ!Irr`!$
rri!!Irm!!$rq!!!Ir!!!$rJ!!!I`!!!$i!!!!F!!N!1!!*!)Gd&%3e)$!!#!$9-
,@b!$!kCJ`kTUXc#`!5*LB$G,XGYCPD!JBX-HkYR!Q&8a#f-UZ[HR8k`+#iPMb,E
LGpB!8LMpiEh!JNUia8#RBdJbMUrCpbBL$VrTa[llf*mk9dmSTT%&(C'kJKQiSm8
DVUKU*k42-JV[4Fi&!*!$9d&%3e)$!!%"$9-#h0B'NrI54Xe&%fd!Y2Nh,VcE64Y
Q`QbqU`[IK0f`fq6GGYA9G@%!#6LPL2pd"ISD0+Bf([[%R@[C6S+*X0-3qX#ck!"
SN!$&[[i%[JB!N!B")N&%3e)$!!1+$9-+Qb3!IiC&X0dj141`a3jG5dj2(GX"&32
EXIVB$&EecMiSU&KpE-&ZV1V'`$pMIe6d[rp[Mr0f9KR'kJ!,Q680A&D0p-'14[H
Z8aVX",2c+"6FaH)b3VE8Z5$*F`Z3!0p[JRD#kG&%G-mTHE-6hEc*lLZ&K$2-5eV
UQP++(3Xq(j[6I`6`H[ijkXV6kQVrRepZakZIr82rqj'@*3+i-fUMJQe@`8JQ[%@
VE)a9Y9jE2Q+EYiAYB49ph"I'dPT-T*5d!R%I6(k-`pHZ'qD(TKRU8p[f6Gd2ZK"
S@S!R"-J!R!"-[ISY!2lU#3-4I`$`SR,K!K!FJS!"JQ*J,6L,N8'-h`a#j")kiZT
MNXbp+(%I60pdq8A%+fc,'!#3!c!!N!F%!!$rN!B!!3#3"`)!N!F$!*!("2q3"J#
3!`B!N!82!!!%!*!4J3#3(S%!r`#3()%!9#[r!*!DJ3"8re3Vr`#3')%!92q3!e3
Vr`#3&S%!92q3"93Vr`#3&)%!pID3!e6fN!3Vr`#3%S%!pID3"2MfN!8Vr`#3%)%
!pIEfJC!'9[IfpL[r!*!1J3$ep[Eprj!'r&EfN!-Vr`#3$)%!pIEf9[prpj!%JIr
hpT!%+rm!N!U"!2AfN!2mrIG@Ij!&Uj!$IrEf+rm!N!L"!&6fN!6rIrCr+Rm!N!0
89(p@+rC8+rm!N!D"!&6rpT!$9[riphmUI`#3!e48UrFVp[p8+rm!N!5"!&6rrrD
3!rcppeC8+P53"AqVprEfrrp8+rm!!)%!92q3!e6ip[prpRmUN!989(prprK8rj!
$92Mr!!$r+e6rrrEf9[rhphmUJC!%V&5V9[D3!rrr92Mr!*!%rbY8rrEfr2hf9UX
UJID3!i&rrrIfN!2r92Mr!*!'rbY8p[EprIG@Uk[rN!CrprD3!e6ir`#3#2mVp[C
@rRrhN!6rJIH3"2D3!rIir`#3#[mVp[C@rIq3"S(fN!Ahq2m!N!cr+rD3"[q"pj!
$pT!$prMr!*!1rb[fN!2rrrMrrrMfN!2hq2m!N"$r+rD3!rIhq2H3!rEhq2m!N",
r+rD3"&6fN!2hq2m!N"6r+e6rN!98q2m!N"Er+e6rN!08q2m!N"Mr+e6r92Mr!*!
DrbY8q2m!N"crq2m!N"lr!*!a@cP"4%05!`#qeK"9$99%%J!KBZj@chfq1BrM#%F
)D5V"[)53!"l4*+IB6%DL*KF0jj%Qab9+C#`j2prF+56a0JC*AIqF8k)%%4"a'FF
b0"8'NS!K@*CPA*F*M1eBeQA%8XC5PPT,U@A&XGDa0XEFprGlR[IZ[4K&1Tfrrmm
!'U@R*-U")%L#)!JL!`"GNrpaeIPA0D)c#(cI3SDq"-IikiS2QCUI!#RaGirr`"d
hjAhkhfSV4Qp5VYjr'eEFm)hD#VT+a%'qqJB4YG8((AITI[-C"H43lIjAHb[X6qr
GqHlXNGq"f&Nm8[[ZE%b`-6i2@[VIrB-64+S2"cT56T!!HjmBq25RBGY()&QqqiG
3mTGVR%20bcmFf'YqpcC-Imr6'CLZj1Rpp(Ud)RlQmfISp@K&SSfR+d%8V[[mQB*
r!JJq5*qd%b!JMPMlPj`,abeKS!)eRVRmUZA$JRm#(5N241EXjT@+k$Y)[Tr2,cq
PXV"%T@lHmqHL[e"*r-6aNfJlTI4Ir82C4qDAR!N3Uk,K`RL[qZI1Af6f@RZV&lY
[iHDaF#&20JE'c(QrbR22iUiHYQ&`8D"hhdGZ1F!8"X&1AA[8h[NGXF(RcS3$%9!
RMXmDFckRBJ963C!!G#ZEbP+(P+9U5QHIhFir[qMm"5A-40-[4-0Ak$EMChR'&'S
+61(Q$+dj-%81&5q'0JkTDjZr%GMXf+`5YFTHV$p5PFmNJeFkdXlRMja5MMhr@A3
HLcq2aCpALG*[p5KhE[Fh68PHZQ0kdT3d4mejpdIGVMe(D#Lr'JXlR0rkJhRZ',m
Ue+khIHX28qC1ddmKFqP3RIHdZe6Q*1ZNbRCpCe9qD4%46GYfGYc9BD1S%(ZdSrr
GfD,6JiQF8R4+'a&+jH$0rbTH"'LiTlZj`qET0'KArPq&F[RL&"fSXNZ2)V&4qqj
Y9Lc4&m&d"L)CEENrI9*Pj)-%M(q)PU[3AbpiTIH(5R8[c1Y6TSF(8mX,AS()NYM
fXiammapRcple[LS'3K6VrHrH%VETBaY""#pBQ['UIl(Y%mdl850j+&mCKLe"j!G
%lKhU[YIDF1H#F%3I'cqZ[c(q[&kLqrA8q#k3!2e66KSdchjaa(c2+SA&0-h@5dC
qpr09+J+bFh`NjADmI+8!$2km@FApEcffb,l%#Up%N55rA)2$EMHbP2[6hEZY$FR
qF,cCcXZJl(JGSR*X@%$+m49Yj$[U!!&Ia@Tc(PmN$SpIX)a)eD[Z!'8-(VC1`m[
lDc,@[&bT4cf-B@QPb*Kf"M'icXKJ@dRGMe%3[&)kI&f%[#m#jAlfb-XTS+6RTS#
#PdEJZc[h"YjGXA()EZp!")51#)L#TCIcffVIAD(EI$G6F*[rk&3pmB+T)mTYbdd
U)Qml#PjT8fE,r+[,NqEH(q6GhfZf@#aj9mqD*Pm'A4ReA%PD,'D,,kX456hc@$J
@[IS!0R%QD+,(jD!$r0*X+8rQA([rY(ZLl5r94jDq&)JrpJdXA3`Uq+(GAZ%N-Pa
(JU)9Ndkpj*iqHe08MIH2(aZpkGd+C*EAYeDf0R8JF1afLU"SlQjf0Lp%*-IrDI@
I9Z10JCG!&)l@VY#(3MQRML<ZqA-dF''jA24!84#,[4F#`8rb$U5a'D0Lpb1`V
QK@p("Nb6GCl)Je8GLEfe-reGpq+6dA9V`Fc&H5$Q15`IiYSJXX'jPr0$b9%!hZ0
,2kUdre[A2c`(i,YVKMlN1kIVfV(@-9mU&-m$38q,c[YSV1XqChrA$(1H!a%"ZpA
P[-d+M6mrV@6Q6Y'Gb0jR)RYICem&S[r3b9!S4p[3R+G&'B!C4+I5eZ(ikH4([61
[ap'9ah1fHr5[p+&c2FGp3B1503C0,jMj`c22AEP1G9h$RlcRVYMYAI-YY9hA2hG
&1ES@&FcmQK[LL*U(i`U6TEKJ-JqM3+KYlm&2U'$H0mHF454F4)9hiPAmbCmQ%$P
jj`)-Ai5S6Nh%+cSSDJD!$*)Y&450DUkpiD[QecXiZNrCQVp(dA,+"RCAM$mh%U8
A+$Ur*kih!44bDJ6e"KJHV!Q3!(GF#Xm*m+h*#P*9H*rc!A0HUA,Z94&chY**Z9G
5P'[&CNeb(k"AKl4ANdI8l,ISEpeEdk0cMcM4f+CQ6k'rG92ZMmi&+$GpXM2C5"I
LjV`k"@#YL6DSFA'[LQ'l0d[9l0ITEphVpdER6PTpj0ih$k!BR,AjkbLb[Vj$aCe
TjVaCNp'0S4JaN!$$+CS4)%*ZrM-35kTj[!f4AmM`V122P`H)iIh%lRG@4a[5c2-
243lfcr5EVcl32c2$I-hD)fZcAI(C%qK[hB3CdqCQjpKQ(0P2l(lR),&epE**jU[
VN[[lC`E-hm'P5lJdDHf4dVL(e@Pc*c9Qdp*R6GB$Km%U2KUcEh*6M0REQC'V"cD
k9(IcH(m*4jIhM9XTqSQLbXTZ"b$9hr82BCFV30(%bJCL8ImeKiS1+G['3`V4`5$
C)N+5!V2PNI)5YkZm@`a-d%#p&c&Y0Q`I0,6jrbmR8C6UMhK"B83!fSLKdGa!4Ne
a%I+CiANlZJ()hUGE8EMCN!$G58&Ad("NfMI!Uh'(MQqH[+A%hS6&9)bA8Z$@',`
XD2#EfahX#aSm+Gh"5`Me@mmC2-!5MVUYY#pZITdq(82f2RYIDc1bZB4+Y2jC0LU
6-V@fBj*8bGBrHcD$m1!4+++UZeap,aSfK9,)hPc`$S8844,H!f1IH(ZA5[Nk563
iXV0$-R[DRqmq%dT`PTL'5jGTU)bJ,&FjGb%#)dD[ICX&Ujf#e6jLYrPe#RcG$l$
GT@jdm$9%Fm,M1EY8TrHB[V*3mR+qM*Me"-0L*`,BR!I`I6&I66Xaj(`Z,J'jbmU
"[`2dJd5kLC!!6*RfqVYZhJY!ZBX!rcjr9"p$dhTZ@Zjf&G@TI6LZV%JHDm,aKAT
Yq`aQ,Q-MC96,J3BQDrrlpEif5[b%LmpMfCN3Pl[3A0Ze(MmhBpJUIck"e&drmk!
C!SJ@3J0S)!U+Q"F&@I3S@&6R,@pR[P5lMd%`F38CSqkIN[N5(9apLhIa&(90k%d
)XP%1A01S#%PpQdhpAFGc6!LdlSlqVY-5TC+Q4J8"ZREPDfK&ef(dFC@ck),'6aU
,R!NYLb8J[BJM`%'mYee-$LHIfpaeBZq1VY22pACG(VhTIGpHFeI9k%eG!k(VjVK
4(#LefX2#LiI!3NH-SmirX)jGcJpIN9feh&cl[Sml-hmiMLLC0'V!iCZB)8p$jh3
8!a$p$mh@-4*#H&TJmd9!kIBVaQ&ITQTFHhUS#"%D94YMG28LSZibmR(*l0`0%-(
Vq41RP8H!mqaPc'#"YdRP-T0H%BqcS2Ul@X3abcc#mcD11)XDP@5C'!i@C*ED,if
ZE*DC8QKc1VqBfAADY`r&ZFqFGc$0I2@#U-r"aH9P'M$qC8GNBaUfDk8!$"I6-R(
-J,2)q-+hbQK5!%!64GT$3#T%$VI!l+H5[)&Z$6ddafe!)"j'!mKV!"c'jb'rdMN
V04A-ZhE93b@Ul8Z`S[VP&JpG#CemT9SeB+Z4S+hZP*[a9I+daDe&b'c[$$I`pSq
-2rp3*Qq-5+KVPr'fPHTMclE%U0J8JdYK+[*%@dPjL8&X(*A+88GJVC'bN!"KC%'
*MU'G[382`fJUM52r6K1B3-eRMe8Im$5ldC`3c3fHCLZD)l,jR(H,!fK1%mhH,ID
J15DD[9Y3G')fSNmp8Ej!TpXmi&FITUpq51"A(d"[-UV3jlL"',fUNa'L"f$dTBN
D)DC3YrDZQpL%M+Bl%*e6Gd9CZZb&q1RFJU[fiY&e%fr'TL1KBQ4ej3!Aib%RE4H
1140Z&Fr4kbEH3KQZ5IN3DBmQ0kidiBVB!"QJcAl38QRI`jH[-eaZ"+&Na(i43'd
j$R`32drcTA%ZM+GJSH9E5LEf@5XRp[P82%+$a1C2Bm1R3"Ul!CY1#AelMTZ2QBH
QDC5PbHX6Fmc$554raZEMbK)bqr*N06CBJb9EpfdTD@ULDI1IRA90!)FSXJF%aV8
`m4Ub&'c1EEd,KCrD3LC99e$i+3RbUQ5Y5Pik,`BK`ZJ+6-K+F-KN0[)$mGBqQ9$
D2VR0haq`6h1d%+UJm#Tf@Id6R)F)B2[$B)jYqS6T884LplQ,GDYrN!!$cZ9j16J
pkKV&-LX3$Gd(iN3A(6J3f$'Jlb$JSK@CX@i$q@9THD$Z!CLAIHdd$'!DX,PlK)$
)J`4SA@h1Jh&B)CZ%I@e,ci'8IE(E9$8Pd%Y!%TR[,)LHQQl&jA!TE8pXBMQ,aHC
Pe1RB$I"PQK4S(a9!K6Gdf5q'Ljda)BbaDJH@ZQ6%rr#Eae9JS'S5L,)99+a#B"8
(A4SETj4pM!96LJdR0cq"B565+`G*V'*)8aGH,[%H1(A'4J4,mfSfV-3Ki`mlkbE
f'8L*6C`"&Ql8LUYjMRX*@0N)d`,9cBLH+VLdj#,-6Cf@VURA(&A$5@NSk!e)pCQ
jXLpMBk6efY0*-[hVbb"63F1!k(PZhTKS,@`VkE#"Y5CF-H(R3(1VSiZ!Yli-hbB
*6[1e0fX,$Gfh6f9jZfN$YCf'EQ9PM)d()`$jV)&H)`-LH&$JD#`IM(#6X[XY!!'
`p2lfRSlqpT!!HIJk%b%a!3Y)@Sj"$$GlLkf-r$"lbeJe-[d+'R3BL4aPH4,*(,8
C&c)!-XbJ&jC@GC`535K1+V$a$,bB*BUpe0&Nk2MHXDk+G!FiI#TYVQLDc9ZjNSm
#D0R&B"J-(-0l,0qQUf!TC99[F(,arIV,JV@dkGBd)2+bAIPd'FJpKN58(qDRecZ
,3XFIRhQ$IbmDZPEdMbhj`$Z)`%!3p1C0V$!Z&Ua8'6DUA2)"#NCN!EDb'X-12SF
AA8hia,Y@1[[IMfY"(Lj%iR!4f$+&l([(E[!2Ur+)"--FC`#d[ZJE`6BZ"(m9*Ni
UGY(jT'$H1amF6C)`i&8r1+Vi"3)',a$*iqKANIGpr[aMPj!!bIDrlhXM5S$,2AQ
pkrS1"0i+4FEVi%8MI3FSfqXl-(V6$4PQ[qAE48b!ZLi1BmCpRPF[HPqP9X&%,R)
H'j,RcF`)k"Z(iNP+40"J5MLm-i)$krS1j"3YLaj+bX2EMrMc6d8q'Q$'$dL`iCd
k2`jB-UpJhKZh%'ZpkjE-kre6a#D[8+%!Xd`%)"PR,TPRVUbiTQ0S)rl*$ki0QLZ
RrS#+4AU*KM`V!B1(`SG%`rKc'0"HZEGbkU,fVdEA6Ih"j8%X[T2BQlU3!!kSbRG
hLX%p",bqAimQPCK3-#m``'!3*5+L%-GabI)M0e$#qMT6,pM&0JhAQ@JEqA,)*Dj
%q-T"f@bj+*V6Z$P,0SpDppDfIp81B5aj$3,T,*KhGYdSJS@!bZGUfbZl,S0SF!,
,Z`D[(3#H"`VQ0D`,fGZ"PN4ZV-iJiHmB$Q@5qACE#A8,AUNGS'ijCD)Q2H!bcHM
UFf4QjeD14ITJ-"MZe$-2qXQXHe-h#3d6Qjq4YYbP,J'"SNB8Xm)$RDT')I[jV+k
Q,fE49Y(F5UAk($-3!6+a"FdElU2T*r"ZBbB&0"i$JDp-E0"JcU[+*d2M,Cp$T'A
)3&mMEcQQI$Cjq*EAU[+0Ke@ZYEi89[(#,j!!B4lET%H@BT*E4`Gf+#Qdh8pVU--
N%r`d[ddNT3Lfqrea'A`!pPAbHZX1Rj[%LXcK+f4APC4-i#c$jKX*HM([eeh8E25
Lb3QFa9A5)"S-XXaA#,KBX%G1qNKBPJmT+hMZ+5ViPh3K'aVcjm181S)I,(er)`*
kiBjeI9@ATe"f"YCLeKhKQ+9r`D[ZEQB%)&9i"E'qi&Ab#KA`#U-34NGGa3hiQDF
*'L+SA$)C"c4i$d$6463T"&kNCM$JZ%lI2Z05KDLVU#"eEdXiVQ$K,&N@,*a`5JV
CIDDMEZ*R(A902dMR#%,2-KE)a3X%FU9JhZElr2QFN!$XeJ+rA((`UkCE1ZU@,-"
2&iB'))KErIP!qKHpf5UF'A3jL`VQ&Eb,V2),hND5&0mXQ2F['d"5"%(9-@``e'8
!1T3X,dh'mPi+`jM'9*UB*"2E[XZK&"SlLd[MYFJS)bVLXr)Nc@I"T&6YMPH('d*
1cm9XFE%Y&+',CDA*[m$!"#jfmb5061(TBK*CYE9r`36"h*'#HHX@AFkASZ1JRL!
0V3&%Xf'[G6MqfMXMcL'ep)Q"%6-Q!+9rZbKXSQJf*(HZ'eqk%35PJPF3U3'bY8U
1Q0faa!0h`Vd0ZUDjBjPMPLS3`2X1EP"a1#MUH[N+J*!!Z--&ZlEV`KBV3,C+r@9
+cX6j+1I,j,!*R6Y([QT$*`ki1FYbPUr%-4L&,TSMD)jKNP"a[)`i'P3mf9&T-c8
N1`*M$ibThEaCBDT"4HiF#FFHS%e6MZ'0p[KV*f6h1P0$I!qL12lL)$,%G[f0Eb"
5Gr6P8@@c0X3IIkHiZb%j&@ZieJ&bM-m'aQpli!`SZRHp2"`hU8,VF'*&l@BFABM
V3jB`b0apH[lKB9Z9+JkPjVKpEBI2J-K40QHhEpq6Cp5,b[RNP4f"RBqSV&!5Vf-
[Re&PUK#SH&6I13+Mm%dEEXmZZ)I3JU*kC63J6FGRFN4J)8`m(5$U!Pe'"YhPL0C
VG!lGrKK-24d,eS4MeMAKE[H+hJUPrh`@)MGT@*60&NaNXZ"rY@!@KJIFkdlAjj`
$NVKV6ailJmRaFpmrGaU635+PBl,-&hS&aJRUfIppA+I*URG1(-FNZHpN6r8lQ&K
UDfP!mRM1b9UD$&CM4K-PrJ&aTSdJL%-4aeRe#TbJG6[1aNm$[)m%aY`a8i2MYjF
T-Ym0BPC$mN9-UGMR)%2(LN#-*$[#$5,3$ZMj5i$5[rkfmeYeCXGB8A'ic$'fX6K
X`UFKA)LQ"TKX+(FKMV@&J!kK"+%YYP)bS#ZcC,+[M8AjAZ,$!Bj'9jm0qQ+iSY`
a0PqNL2UV*$+SXK&cGh&B08eIS(`V([q'RX,,"Bc-XGf4Y04e-&PQp#J,3Sm8S3I
!ZYdBRLe4XED-PZEie%'!N`1I4'dNFd`bf13f-NE*8EdKQITX%%kYAS@(,'Yp95r
#X2eh()d0,qG!"#A%B#SfMjQqDHf!Sle#I',Kb&0$EY2iN!$E)EZI$b'5HmJ'GSU
!&Qc'iQ!R1&F"EB%`F$S$!`TP)i6*!-)mGV8llVpD$RL5"ZL(L4a3$14b22QBDV1
F8BF!&YGCNll)H0`G(drJHMHp(QQ&)G)R)h5%M9$DRXGEf&3h(e3frL@'&Y+3!-Z
[mJ$*JJ-Xh%L['(eE99Dk3iS03qSZ'&+SLRRJ)@DjERbcp!)Mj!9)@"&%ZDB3bE!
1RJ,1-#$JSVSS)Q(')%#61f*DTC,)U#SX*M(Fhr`6L$Fb-SJ-,X94Fr#J!U4mQ)`
kQXGTbCBEpD,`#%8(1SYKL*i+PbdB1i&-0h-d($-9hj2RAQ%b"FE'kc62#)BAGL5
Bq(NV%ZN,jh3f+T!!)K```jr,cMS3CH-NJ6**`K"B#h'Td(iV#!%1qpaq)JIdm3B
NdQiae-C$XcX5'&CQAieKhIE2q1+$5!Srqc&GrM'EAicMFRCS(a%Gk&JFrc3I@q`
jeR6h0TYMZk1Y815T,@3HYjU)UL"*I-CLi1ei#rKpRi[0#H@@m%dq)T-ib-!A#bE
#aQImkLii)iMJN!"p),!9Lf1k$3ah-X-Q2X*"a"%X0UBY&L,qM&NXml!S(D4PEk&
,UrR5ChbNPlRV,K6cGSD2hUhKPJZ',f4bce`+i&"mMY[M1I-e"1*&cQ9KhF+"`-J
8fLd@#6)pc!R*#9!ANpKTdD[5AI4k)J)JQXd')PiKb+$GQK-kaeK-e6C5C[A,!HP
`Uh@IG%)eY8Fkh'+bCaT)EhF@8C6(2QF4S5fFmLbkBMHq)NH(5*!!IYCBj(-3BB+
k8l-ELf"@P(,df[mHT1NTZk3$Yh9Nj!L#bQdBh-1$efQ4*c)5bKl(UaGT1"f!SD[
3!%Ed1mGhGF"4'ahB2(m)"1$QpaZ,(&dSPq,faEj1[S,YK21#"3e&lN+Y%Ha80B!
GAl`4a-I$2l@jR6&DLJ6A$&j`2CR&X&--kAc%XdL"KI55&9@%@`R*)JE4qK)4
-RLBH*2pC1(eVM-+T1!2@HqfrmR9l"M)JhlH"K1Bl'LbXUHfil%Y2@"2[`kYFVl#
QBJ1I$B6F6lF[RUPVJm96X6pB20*"M4GG19YN-P2&Zc$H5"(B1$Pdm0LjRKa&TSX
9FmJa(36A$B#hl$3j'@iM"m1@CCC(8A`VGEYeC[Y`Q%M4rHh$&0Q"T-CF4$8IG)(
KmUk+9@eG&HY2*keGLJKlDkhN2"M*dSSj-Q)Nf@49r[a`3&ZkH)A%5c+(%pbQX+-
F(U'YblliG0,Y'3LbJG[X&d20BZJ"`e"AZN2hL+%fle#BF!@`*)GP'CJVYMb+bpf
B&TC[b0K4PG'f`GpEPA%kD8T)Ci#b+!%ihN9N!J")K@)+3a`)T0c44GINLq1RcTd
8,`UY&-fA`XF"aiT*ED2cq8J#$U0BfTP4MbL)1)UMQ!8#G6G+JF*C2C'BjR8qUaI
jZQ@M**58Q3"UQ'36"ZcALqJL*p`2CRbI$GNmj(i1SQ*Ym,HUp#,244a*`3p$0Qr
8!(X62A1rLCaUD55NDM*%---B!NfR0JfVYXaIcFqB`P&U%+bkKS1aNl)[[8A&-1R
%")B3lXk3!'P'&-6C0)hm9cZI%e-'ajU1BKF""XMbKP9aji%)%A*2(BH3!!qS1Ph
j!Xii'3X3UA"C0(#NqmK`XMch(li6H0[YFQjZ5ch`RYdqU2BGGP'`T+Q6pB8m1AS
L&MN-Cj)Um(CJ-m#%'`@TF5%"RCN@fV6bD@+Pf1Q*G)N3J%*CEc%C3dB#&VT)UJJ
@40QmBm3Ccl6!l,'B`$Dmq+CiBC-[I+Y#5CFRDXV8hrk#&T&K#AF-q8j9(jHHqpI
h@dZ)R"5fTHV)@1E5eAR*c3T16GRl2EkcGjGjp0+1JCd&Q`IbFcI[#,!*-@pbX[V
X1E(*dZeYmUMBC$4hjfMQldB,4Tr4YU(P@5KC,bGTBK,Mb4Qjr*!!JT)+QhK9+&i
9L!Br4Id6k4V4ifF8%Y-21+@jJA+-VP,,N!#8+3qPk6qLC+2cF5VH4&)'aGrJcYj
!CXCS)%1TIF@p1I8RHqVeBkFUI@I$Vq5Fl)(&Y(lbh(jLXkPM0jE,f9,X%"%%,el
PMPZHFHkQL'RPU)13!!QSHj-hc2IcdPkMSK)Q+48M-`iZKBPZ"8!1L-TqJ`4cYL#
CDQq"KkV%d"++X0N8*3)dE5LhQh!*iYUmH@FJdlqMPc-rqj51hGLf-'ME1EcY"MV
Z-N9[2-Y!A5Y[28(EHP14la-"8-fKbC2)lP8F34@aYec+'d'Na'KS!BcB,edG4E,
JBY,Y*02HTReBE,PF1RPcE2Nf44U%(+d2EbUkP"HYXlm0mm4N1(iaZH8Ce9h(i-#
YIC59[c@3!,m,#,-cG`Hc[X6mapd-QQV-kp+,Q8#Nr*-+K+k93F4X9fM#YKF#UIj
fmfl6EPrGP54G)G53!)-faZ5JTYY*E+@)&!NPfbH&ll91SLXI2d0&VTSY'%+41b@
cGl4!`epfN!$1L&0)#bZ5aJiLHX-ddPmL35Lj&(L!!#&rEhl"`-jR2%ZkhIc(**R
2TdK8IHp#9(XkKLK[kS!j@Ef20Ze`Q+X9%QSN,VF,C0%iNE+S'&bh'%&5CJQM81b
6`r!#TQ8V3TZ+)%T(lNp08@+K#QMk'ThZ4jb8JAhljiK@j12*mHP&a9k2((*hJ`M
L*mq(3,R+qLDrf'2Gr,fVNEcUY'kqG)de(LiXGlcaGr-6dq)eKle"&m[Je09N3f)
d,iRQ&'bB#QQBC8!Eq-A!*cc3mU%cGR8I6)CkU%LB@&KA4-k2V@qL3,h"-Q"*`m#
mlM5j9GM*JGVY[B)&IijVYq`VNSeN)0F,Ff(p4ml(XG%eTM4+BZ,!"V"J#KrNB&q
#!*p-!9kRI,VF8KLDd'DVpaAa0ZYJ*SKYj"DmJ"&iPIAfcq&9i'L'a)4"lb*l!1+
0c#$%1jSdTIPLG6#!R2J*PQ"Lj1L@'aF1eK@aD0qN5*8E3D$UIiB88*J@#b3"m,X
'52,-MS)GJG(FQVK#`E8#b&+X1D5rU+b(P&q+hMHd*G1qS[mG!TdB%&X"N!"TIKd
L)r4Frq!)9#pS@GFhLG#8CMQNBT+4EdT'6#J`SPU'YTBb)13@1`I1ef""F@)&QD%
c&%Nr-eb'bjYh$)cZbXfJD`@M[m29XXkGP6he1CAe2ESI5&fI8epjV2iFEfJLB$b
D#401r0MF*SUqK5-%aaBLT0RF%8ZP0jNa`EmMm,Z-r)&-QKJB)Q5&BH&9P1Q"k++
mQGrE[HBG[BrX,-MFZ9Pk0aLp*95@c1K6&N,e`JfirNCH6R`"6DlZ5Ai@Hq1DDq+
FJ5Rh)4V#"f3*M`lcflZU15K68S4`X#1$["k#l%CfNHIep'm2j!GkGhJCN!!,$N[
%!)"4q"3bL8,"G+'QM1(e`)lF(D1C34Flb#PXLS,m8KiAL!jVY5S)Nj&E3I0U#cS
)9,qV4&YiEMif'-MhlbMJK5mfrr&D3K[E2M!J8HG5RMAY$FUS*3UP6)L1pX8[rS+
p(SS80Tq$'4fbP8)NBY,JDIc1)NT!,2PNU!LJf2[5#i9qe3j"j2aS`CZmAD8Tc41
J+EIE-J!a[KLmA3FA&2*6-'rjdBBLifX!!DAT(6paZMcqpl10ai0Gaem0U)*[lN!
4INLP1AG(aZcAKf0r-4D1Li!jLB#"XJ[6FNh!9'"EGMbcXd"kU`S1$Q6C%pZTb0H
+MDBT(jIBTe+aU+(6C&cF8E#CVc@4dbIfM*DkTX@((S#a@C6!a*!!ABq'P'Z-0bf
@a9h6Rl"jGPh4'hRN8-`+S)1c5-QHMc0%',"aGNZ1Ga#jeV5B3%h,'*&Tc(NG5Lm
LdYZF1Kk-!pqifMVjHpF3f(dT+!Y'd$d&i5#a4%FK!U#JHBeA@(Jp'Ba"m!%r(G+
UZdUmVh@(cm-5#T821f#H[0j8@K5+Y%mk*9mGakY0HYVj+"DE3FAZb&*Q)Xrk+,-
rXZ(4kK322H'1(hT!lkb+GNL$YTLfK)f4jM@k)a`K"5p#5(8NS,kE)Ic&1#"5"d-
'"&N@XL3YDqa%`FYCB`B9B%VcbU,J4%*8,rVP50fJkmH@m+B[iVTBEKNI`1Cjc!3
L$'fqZL,(Ql4)AfG(*ed%3E00!SGkp+,#`F9DSBQ$354DkMhB2!S$%T%9%b$#aem
N`8(i$)kYj#$iA"iX3*eI)bY'eJqdFZ#`XhZL@88BYLqB1DP)"e&QRp64kcdmZ*5
G2Dq86"UAKL%k$hQqjK,&0X9e44f1STL*VRiPf+PM9Lk@dJ(aZM5GJZe0$MDBc'U
L%!+Bl4@!"VBB*5#0S9Rm*,J-NbP[!dAd"++E9!FEB4*)kd9EkYkc9K-X&41[pqE
lci0QZE2JQIaG'4k4NSIUK2'@bI+-ILH"#6kAp9(+9RbkGG,hD&,F33!AM-2qG(S
%#VLqGf3"[f$dImBAF1hidFr&J%Z(LNL!B$(QCB@$ZUcpM)TISZhhM*K*EFk#ack
KcDNiF"`dQDrHF)3hM@`DXMq$EC'`PeXa5G4&"YR"@mV'@41!!NXBN!"!9!SbN!"
lU5-6&%PUZ0lE%+H'HGk'"$@dH"XLe,#D0iID+$K$@l*X`Y)M6$5,EZ&!+MB%dYZ
l#[bM[BrX+-J)R0H%H5d*dd4%SA5%Q4dXc&@P3TMC3F,FV!PcPDe8#M093jLTl3S
c4F+F&bc-!EN4*b)Z&+9S2+4ZQp!4)c%#[3Dmk18G[)8"mq,PAX"m`X"SCJCmUT!
!JPEBNaLik,33@SfC(V#-GRFZ'+XFeMT,4iF!p&p-SU'crCRD!*bJMCPHGX-XdeQ
%5*+6p8S9B[*ri13`&J'mX5R+3`k%YM2%@G4H3X82R!%qirjFE[dp@@`6S*@RHB2
AGQD#U,)$aAaq`D94!C+MU%kNK0S,"f8[((MPeV8FH(Z3!2(6T)`$$eRd,C88H!X
QPhL,mQ,+E$SiB82%)Q5ZFf6')EahRKGeAT2Cfqp'r9l"0@RS`mSh8,ce8F*Jj%l
1,)SllN64d8IL#bkD"+2GJP%ELUNq!hK4E4NiUTLa0&(B[QJYm9eL-'`-%99P'mD
q4mQ#"QT+)5'[[Z4#dN8%9$U5AJL29Gk0*H1P"1)'XR$GPFES!mpbEp5p4L3a#Ud
$`3@YVe0NQ+`m6bE$kiUN@$c)",(mAiK&b'6RMN`[()[J@BNN2'eLJU2&$)fdL8M
fd`#fGIQUJ`ca2-R!0'6Te)6Xp@%FeHP*h$UNq('3!2H%e1lI`I(0fFS`(583!9Q
X+dT%NQ1KbKkC`FqYK["S-818,8Y!+[4NDkRVapDe2K6!848&S4!$1$0QiaS3N9T
,kk$5#eYeKP+YTB35Ka4Y,X&r8jk"R0%Vb"ND3XT%,Qf&T*!!h%U#5GkYZ&L*pA1
LNd"J3FMSp4!bY!,E3BaMRf8SY2GF8'M$H%R2k%J*%+`#,"GU#d&bYjL+4a4BR4"
RNB&j6m'#)`A[4K$"ZTDF84%!B(I@&EPYdZZX#e%a59[eHj,+!Xb6A'X*M%)ST%6
JdV6$T#A`XBJB*mT,+CR[PX#'`EMaAfi*6[i$N!")*dR("h6M!"FId0eK3Q3"r43
D$V+T2H+J-[FHQD5X13aJp!%Di%e+rZ[1hQfN*-@a$KbEaFFk1N`H4%Q)SdcZENN
3Np[r2TXD06'$$*G1qR#l'pqjMBflM"X$f,JJl5LfYAQfYE'3!&*-"NN6faD+E@e
&[1f[6G5SJIY!#J(YLmf+23)[CKDp!*6Ff+4LBZ-X)I$LQX0`5"-0m!+SEj(!"A`
U$ZV%3@em8#FIC$c%SGV%)FAZ'X#J21$IRUDA3B"S66KXk`lDYrf$9Ri3I0#VRS9
i`6f4c&iD,ZCM8ML'XJ+Ef0VK,Y558%X@8)2d5*0fpR*U5@aJmRJM8iH4486dLid
kK6FbX&Ia'Vh`CTQ[lq`0bM'h5J4CfaI"$`Z$4E#@$lNJppqk`cUhIpKL2IL`eeR
Fh[*A1+&a3U@'Jicp+B&j@JfVSiU!k&1RXj!!d(6%e$qI5-'aH'mJfed&NRf-Sc*
Q(5q(U8DF!,EVpRG'iG$$38l+-l)cHSrDhFl!P%"faYXC[@iDPZ"KR6bX8$Sp[j4
pL3DQD1#PYbredS%LBQ-+C8ekYM20khL3!0MFia`bX$QX%)N5JGUlQ$33VeDTTrD
"A90DK!f,QFPr2S'4QV-V823+NeR*dQ4$FL#CN6b4$#8[*LFN9bGENamNjbHR*fF
RebAliVCiFE`mIL"ZLI[MRm5VidIMJr%(idr&&m6ciY2MXq2ViRd*@b)V8CTS5!`
N-K+q4%pL@Q*YBNkL2A&0BPCLEQ*P*"ia48BL"b)$NBb),p)6Q4CC'RNfmQjNAQ4
4j,l)UXL+Y&6D[M4A@Q1D1He5f['dR,4SfQYT6kGeTH@P68ql1@e&,"8VLlPLME(
0X8Za-l'MX3QaCf2YX@YLXf*cBbYhahChlKlClGbpDAIZlKGhRpPpHRIflQ@lahF
[f*fhqkVGYqfqIIH+9$a9Q0UA+NmG6'e+@91A8LFkqp6Ii5Flib@hfZd6h8RFV4,
G0lPV&GfhZ$XNZSpcYdjd(q5Z,VT2FlGEG(r*hBMSMP-hYN*djh"hPHJqaGel4IF
*lLi8hArRlJfLqb&hfd@hQEYc4,H9ZfY&Yi@lNdAh2Hi1Lqj-lRiPZZpbpl,SGR'
h3(6IjqkBk(l+hB1Lqe[ZYSRZ!Zk@LHjRh%f*lJI86DX3hIr"hI@L1iqlYiVZ2h&
hPZMq2qjH)lSEZ2XCTR2a%b@KAU)Q%J!0DZF"Dd@A4C`f@A4CU'R$SXYL62[+X08
FhUT+$*!!$'X)m'2Z$SQA,+#d1Y(P)%M6a9ECRUd+a3!@4*S5A3kLb")ar#eY#C(
CiUM*2'#kk+lKlR`aI"!rcr,`"@)l$Sl)8iEYRZ)"b`a0rmj08A'&N5Q5)lSF%*(
MKJ1QmI#!SHPaEKSc0,h+655![bIKm5DkBF"l2%!6!+0K4"-!"hD#"(#9*Vc%c@+
jRh2h2Y(pJVZ,a-9rj1imd@@2PAKAG"Pp%mmD@&K0,#3QB2S$r#cM!4F03KRN!G@
'+j1jk8@a*AZ@4+lS-K)Q0KQ3!19c(Rj)$'#2RGJM''H"*%bLqa*hik,lIkNEAiR
TGc6'iVH)lU2FR@%ijP%k*[i$3p0DEM*kJ+HjDBkKk6qiDDQKD3dhA63dr5Fh93Z
frKFIrBNBm+riQF)$FX8!&RjmNf#8!bEZ&-12%0,cF",![a$kDdJGGaL1r#GU5PB
BQZCadbTaM3,c#$IGCfKLG%c10ecl*6GT(S"C6cjP'-""ReaQD')[Ni`DQYUjU9)
XEaT[iKEG+G`0L1i4lQi@hEHjfbLkJpaeLHlVh0dRZUpaeb'kVe*A0BRZ"1iZ&ed
1GQD0ZQZjHlm3`4-NI'*@D4NJSick6(4AFrGcdIdcGpH)lRpb&kT`e(b489c"j(q
+,#BN1P4F(4I#T)bq5VbJM#GAG'LV-G'K)`q)#i3),[(L2p$*%KeLa#3k9)a'1Vm
6H#R`YK&%U99IFc0S!e8*4L0iiFJkj55(mY*-*1j6NB[Nj*+"Q@ZimDi6b,3m6XL
cB%Q6NDK-2"9j8IiPEZ"*HB4-18Y9NUq1mp8L+1+EiERkJAT@QC9IA38YS9HT5kT
(R9%69)Yk#Yd6kKSi66L+k9@U8Nf'3r9&DJ-kbe3l0ekPeT30U9q5N!!aQB2*0%b
HF"r&jbPh$ckIZb[aDA@I`DICI3+IppbAmARAI3QI6peqI$jc@r(j(ql0q2`rpbC
m0VJEm-Pc(m6RD[FKI+jaPq2cYfiGRdAZIIKFlql%TmpGL-pLG`UIRlKK@@f#8p'
d(-1L*HLhmB5+ZcbJhqI*@3$ahX@5"f'U[64jQeU6[$jjAh*PFQjb9A*GI)mDMmH
5&A&i-Y8Dhj0F#L$3%Hp@lI%pk%C9R[S#STLKCURCb69UP9UXPJ1F6#@,SHG)6lS
`b*NF!f"T6PBPrFN[NZ2*-dNh!-aKhZ!'-!ZMlq4U6)k3!%I&C"SQ*%6b-L6%E%a
)M*-`bF&N-LCIBI)Q*L6'38aHa13YmULB6-'%a2Jf*KC-S0B`Z4q6ec%K-Ek'55N
QVf)bJXP5mULB2)j*0bE,-,&KmLJQF8c@)M!V-2QrQ#c"j%%b5F2NAmQMBV)'NhX
aJCT204f6eCKFMmQIbD0LmM3Qmc$j$d`@B2)X*LfBr"L61CKmL!N*S!X6%X$l!SP
Z%%MdMia%rj14D#%MdApM*,U2N@J')p%I')PZB56k)b24+NDL2c%5hFj)p0mCLGB
c%Yh%5,51NHKI')PqcdLdK*(Seia%+c8N5Y4**',dqG3A-`fTIj2'kSP1!hSY#aH
55JAZ2"3')3#EA-8ErMe[q#0Y`rLYKJfAmBEcjBEaqBB0*iG(X+'C1cGbT`drjIL
T``qFFi9eYa-EVq!PIBfAp%0H8J8[D5S[D5+cd-3Xf$dXA$D`d-`Xr"I"JXA`+XU
[rNQmF[&Ra*!!'F(3-'iU)r@##@kB#iG9ie#KM3eqmMC[&)F6X`3Y)ISS($LACP+
P++ARkG1BkIeNl+*2FDEhBkBQYC3l6[US#A40cAdXbS2V(S[bbj6mX*!!VLGeG$4
0l!NIjmPX0'AcaDIN"C@0km0D"kpb(i[q465F`a[mer"TRK5(kr"U2`CYSSDlrN"
'P@5@#K'1#f6qGi(-,3+CC`TNEKI)[%!Jmfm&-RmJN!$jIc%bIm()2)q4qHmBQEr
$b2`$4ZC[-$,2BQ5qKj&j1L2ccaQClfGNrK8Mmcp`d0r,3AmE"rerjD#Ic8%rPi2
qCacd0iZJ2q%*V(raq@X'PH-PTGkG&Ml%%kK1SFN6raLfd@611+,3Ll(9FYlm&lc
jVEcj6mAQ-9DMC&4ddXF1k[X%iB&88qaKC4m1Rd-B5j'$#+GAfF6%bCVDK2k[B%k
rCXYA-+dR*rYcG1ZFhBd8EA`Ee"eYhPqUJ+K`VVk*MELMh+PMdmJS(2Z[JE,eTk(
U%qEM%bI$J1ac8R`G9rB@GT!![i#k%F@QmT2(ilaY0SJCPHDp6A(Id6[H!-I908A
)FH2%e9#p@$Ga6XD4RZ[qd-b1mMhEKL0399!(Kj16TAFal`e(6PrPh[G3jF3ZjC6
'ja-rB+Dl*LiJ)9,Kle(-80&K'mp#0&l&8TLe`YQSVl)F!V`9N3QGdTbB(*5$J2*
a+a5MZ8R*IHVI4pV-lK40IiQTEM8Uc4$QCkeiBB2$DT2Pfd`SJQ0IGQKP-`ihrl%
`eBP!)i2Dm)N4SF3L#b@I1p)pRa6b`@P4BZ5kDk+qjF8aGbacdJ2C95T8P$I*Ya)
[R6!aMHZ4R``14[@)HF`bKXP1emiIIHHh#iphk[1$rcjG@,mH"1q3!,CXIHL83B8
Bc2FVc(P`B!DM-USb4e29j9dB$'qc``GJDT[Gr",-Fl2aF`8rF(cIh-E+#&*5C80
cPV9rj[ABUVCpJhiQDB1LZCRYF&5%Ui1Y2m+9364X#21!F6,dhB"A81rG[`"U@[S
XrHf[Ke49[N'Nr4M#3ZeI3FHcLHmqVES,fSDGfGcr*$QjQ8''!9l91)ZGV$$#9'd
QTX+(V2hYlr[+bA&KqrZlb'`i5Ji2SELMmRJp1ikZEAmIMJ@l@mijLc`UH5TTUkm
YCUIM6YkSP$B#3E$rMVFK"Q&`HKXlY&M-MLlkh$SjM5H98a4*a*&*-aFAdp!!KR*
e!aq5FqiSR1j#UCjhi()-e-R*UXHTk-c&,UN!`2FZXlC*-Y4mJU*@b$%XAc)i,Y@
fmelPS)R#Q,#TZ9i6DdI#)pL&,0KCr@I8r9M!'68$'lM8$2cFMjpCq&RS&I3TNla
SAd`AB83cLpNDS'C%mpjQcYZSY'Z#ZH*'-YL9!fl9b)mNK,#*'8Xd(k2AKh[9V4k
9EMG,"XN$hY1UjN2S6lDHB,3VlUqpBGKqmjED'kk`m[hE@rC4&@!YAm+*#b1,Y98
YULdH-CFrVaBpL-[@PfUP-K)i0lMHKi#"dG'0qk#+NEcpmZCAHGXBErAP0KKB9)1
"Lmc!Y,[2`$GZN3bB9Ym"!qYCYC-N32Hh,m22Dd#kemL4-ad#im5&T-6E-mJEq1Z
e39X9S!dA"LKl-('S)H!c[TX"M8cK0I`XmbT'mK,6lA%iEpmJAc5Y4j3Z"`8LLCq
5!jkI6U4ZU"'k*)ABY+4j+Add-f6Ti1"[rDBLN!$"PEUP4Z"P0ke(i!df,5Hc$!U
mT[8YAj)APGX@GU&+V+B(B8)-pA-rKhU-FP+hT,&!%EE68[ECVIqMS5KmKJcrKF+
+bl[biA"MLYRI1U'KL*eTmiA@#FiL%J5V9QPiF$1+&,c+G+QRdKp819YZSlh%FS[
pqB)e(beBHf9!R#@%1*SK2aQ`C5Nal,J8Q@ZFSK#`4CX3f6S@fETJNIeJMa$CG)U
1EL@e*YQYjfU)ll@Q94$IXUEeC+M-iP[P%4q1Z#X%TG`9$@NXa"dD'l6%@4"TJ*b
3!$AY9k[4@GeVZ&EP$B#lkRiKP6JZERBCQK[CQ,d*J!5rE(e#A!dBK(*F#S8FhE0
JeV9m5BC@90@BTKK,L)F!*Pb#DENH'S14!cS!@Z#X(XVRBcGHJ3d)CH"`aZ4BiK8
CUIqS+E6jYd-aL"6CZQf)E#f,E!f,E%N0NG%4Qp)4QEjGNG'eFY&"CR*Rh`8L3l-
MNSl)k+TZ%*PH3f4,@'6VM#*6M%c#)Hc#KmmJF4ia&-hC-++Y$1pMS1&,rK64Tf$
HY`Z,9(1@1bBE#A6GKS"@fjG$3-qbbF8+cNbAYr"@Y$fbPq,QB3PZm)![!@40TeG
Jhp4-DSck@Xpj&(N#M*2(1lU%eib3!&T8Fj3cRV&NR0NC35CMiHR$QK*"&T&Jd%U
Q[+cHSEd,KXVpl9dbkq1#0jZ@JU)r6N8rc(IBl*FV+k6QhG6X,[FdT,LKc-1`bfh
cGUL3!2B`,i[43J35$*&Ycj+UZ[KT)6!S-a8[ZL'UDP6LdRp$06,BrKY#j-5SJm`
4ja)3`#BB*ZA0rQrRl(qGP[elX[-pTbTa2*4-f1H5FLj%Hq++)6Zr&d004M"%J$!
T1Ea$1Yql(Fh6D`kY!I635aF-K6rdAM-!*[Xe0QS``)GT&p,G-S@Na@),16LP)[G
--Sk%jBBY9`Tdq`VqV162%JJ[Tk@640Mk5cBSP3F&Lm08$H%QVHiATEG)4Z39S4k
c@@0!LTe"VZR")*F3QD*-"HS@BNRe($iB6JI2)I'`jqTm$X&h3iLUi!Q-26HQ$5"
P-j*&il(Fp-6fQ3EjD20[c&l)`"jl5AcfY"l6[,eAYE"*eESB28G%"BmcfaqX,b2
N")Sl@Xl*jX[4[@2Y$hU52F1N2P"6F'R2)q+VhYqq'Y8LT*!!%-X6@hACmqT9)NE
G[5AYUrNBPqHBCqY9r2Cd$`,C+ckVT[H)V63+X"%#S5SGJl`*JmSNd1I1*080e54
HpLLVf+1X6mHMJ"5LH5Y4BGJU!e!8dUSk50FEhAq(hSJh422#VI*'+RP)1h!E(SB
h62qb@LimBBe&9#YePF``NSA'J)'@MJARmeYRN!#kYGDMcr8+G2dr%X",GXmDbeN
q[AIkf(1MH)AJjXfC1@G5)1,##a#44+*UL'3q08U8P-Y+f[LS&6MiqrMjNADN15m
3KH*P+"GAUF1Mb@jLp421fTmF5aC+T8*URTBaD1`BNN0DX$PJr,qFNQVfPIa5HU#
%B([q"@`[$'B4U"8#3mS!iRD'a`lhSYjR-fG&HcMcZB8r0r0R,VDjVH@EP&',l'L
1*q1+mF[1),@ZXL!LpFFaQB8CPF9+N!!SFY5EP0ZDT-GrUCD!3F4L8*bp!!A`Z(d
fLT@R80eDl3fIfqp&Tm9q+bA5@B9*jbrhl$@hE`#4LE[rcPe1mZ)!r#c#cd,mc-,
2rIL"fMQ!b5CmMZ0(KlH-F2%p3Jl9eE6Q$9#TMqX2Qj-fIDIP6,,EdTSXC#+#PFJ
2)))kL0b!l+#&d!q635BZU%3hEC&-Sf5chGjm"Dqbq8UKPqb!E'%pPM('DJrl+2Z
#)dUl,b60+rF3S*H0a!P3#5E0CC3Y8&@@jMa8A93"0GE4Y8IQ6YYLX6GYqZ,1&NT
Hd`8-KERc!4Hb55M(TNTbc9FM#e[J*#q@Yr6)dQNHCH"GpJ8!erSbmRIPDeXF*%D
ZlPNrIGU#D(@CpL+'5RjS+%KJR4*NSF3j1ID$HXb21"XFSSaFCQca,!&i6%ILi,G
QIa%Vh81Qj#G(LXdC%%@8KPM#cU&%T1@-XiLGqT1CqQc1$Z-G3j'#5#iqZ4&8"r,
4VFK#[b#J,fa"44lc%+5I-40$6!LEKCm0T#S!#Y4&-eI'eYrq'6Hr4Kp*d-Q#bMT
XdBiYfXAJkr!DUV$XAq"RN@H,kl$&$p"TjqEAC+81b3Gam3SMNd[02RcPEaZ5%Il
%$X2aDc+9`8NN$c)p43J9XX1TVaXr(X3E-6031Tqb3`"@pfYC2*&ND#0&b2bqYjK
39e&4'4J6)+&L3)p8CAmJ3FGiclC"4hK+&'!XZMSdA']Pl25c"4m$ZPHBh"(!
p@bDq2QU$DZaLE9"B$UV5PZd"Jpqejm(VYG[RJj9E'!c1Nf"`mjHHK0iYSQNN#(L
YN!!)*)QBj259eB@rlP(UAH-eJ5)LB&J90a#`6Pak,Ce,&8**pa+TT&[,G0K6(M@
#pBM+5+'`r8`QC-0l3+kB)j3UAbB[5JfY2hd1#BNE2VZFleRi"`cqclX3r+G,![5
25G#IYUJ"mSY%PDDHQDi6HKV8Rc1LIY-R%cHXM$6'5i``J8@lYN)i%m8epRiJ#l-
k"T!!qJ"m&,Ed3(Q"(m+UN!$H[Pc*$'ET5m&UqkHrY$(CqLJ*93jdD31cD`c-aX$
(4D*GXV5Fe&CSP4!-kjC-b[kP+PmeVh%$1cPD$Q(E@Xq"K,r5)TPHf8SJb2,@FeZ
S-&Y-PAP69GiiGZ@XVe3RC6+S,J#%IdT'RXp[HCl*Z$j@l,YB$`"04lJiDS(cj-e
8S6Smb9dYj)5p8A5[jDj,$k$+mc,G$a+26UmXBAVKLeXb[8TXUq-0U'UM`pDbPil
aVAC'M#SSJLG8`CL-R$LY50dm4b,GLJLPdrM*36H!L9j#%9+I23DP"3"qEU@$8AR
h4ke3)`UP&bUj%"@4a$qpLBU0C*j!3k'URKa6lXaM4idMTj18R%SqDaLq6!k(SI,
e[08d&kQVcbER+,3&+@G-3X@'+E*6CJCei8*2jb0X%*!!&Ak3!'IQUDaJJTcc,qF
+*[##+TL3!)VZq!J5@kQL4'aImk(p4D4H!YAa4(hlc[1,jLe`*VHF+LiMTkGP&1c
Vb-0*KY9FLIDKb"G4Ra-'p*5piY%![R@C`4HjmDVQKb`Sr2"M3D#1YF)*CY-Je%e
@KK+iGJEGDBJ)XSR%l[rQ41TLfS"9m&Gle1hDI!hmNX!R1$TZ2Q0iYBFVl&rCr+*
H4%hIhJG9-b`+Z93F8SEP(Q6PIbKiI!6-YqNP[)`X+A48%p*#6SZd!&SqM3,)j)Q
Zd4dl+e6-P@'S&QL#60jErdUT*hr[DpZ96e9*[A!&L&NX1kmdNMSJHj-[p8!I$XB
`MbS4[K5fLB'N-P&$4$681K%&K)5id['6PDj"1)C9$L(,ch+A'3Eb)(kj*PL9ZQI
E3N*AkZBm"4*!SbA`G5U-B[a*@4"NPY)NIZ,i5H!RJTmdQk8P4Mq&$a%kh3aR#-N
M%&BScTm)Ihjk0AhqN6la&N!hrb`R6ABjQ@JRa`Xe&EaIb&E210JLKECI+DS32d+
HbYU#*(N-hX3drV!RfT%L#U46l$K(')9!Z*41GQ+5&",C6CF4m@FMaB&8*IBT9Vh
L(FM#4'8fjh5KiQBP1l3C9J18U6Q(6$DaK8-6DqfPUR`#b-Nc'%M%8092!GTp25h
%J`4a8RDM$@YDkc(c!CKAR8(98*`UX%)9Y`r+B+!#!S),Ei,MTl9)*%$a9p0DLT*
NC4[Ym"jaqr`Y!AX,SKhA5KAT[Zk(L$3HTk%MeXY[3B9lR4&8Ki-RRk(cQS'F[@f
NQMFaDKK)$AR"$8d$KJE$aDD3!$FbQ!6`MNX@`H4Kq6$0f80aKe5a6KGe'RV1cb,
ZjU%QUS)05"#K4TQeH+10lDe36ZJbqr&T-m-jXEf9%Jl0YiYSdPC'qrY$R*%VGHI
QHKrU!qJT1&PE,ad9Q9JG$e8MBJPmQDRLAli$,jN!bNI`NrEeGe3Z)Vq!D[MT4-$
%`bG)q42q[Lf4FAG-S)19e,m6fZL2-,T*K&RX(%Sp*)Di*!+c)eZmL&dRAmMLcB2
@[@%k'Y9#19*LL8'2,3$eF+E3fJCkq)"(m(J88(#)6k6Y*@bLb*`qIKPUJ4raQd%
dI331!acmJLV6i'Lk"MaJKIC3!UY,5SleP*3F2TMjrGS6TkTc6jekjjA3C[qZBlZ
UPIF4&eKCd50)UUA#m)"YMe4CZD#0Y,`)J2F4J,&3dYTbARZXK3G,5SjIZ1PTMd0
)N`GSN!!9h&['S*,Y%Ad$UALLL&iif"b#kXf6hXUVR!RI)9E'KFH6J+I&i0V'KRI
Fa8*"PfJ-[4!kjSid3T8R'p'ak+,22e2INrRpFcheYD-jamkFlDNre[0+6Rdk5jB
,ES*6Ybb2S1&NYE1F99AhpcDYT+Vd(5p4elG(L$i#d[K+VPDKh*qrAd&Y836Uh6j
hG"'$65Yp+DMR0YNRZXXFAF5HD%UL+E)IM,*3)lj5S!h3[QPP+!P(M)p8Q6QDE6%
jLkHLUZ9&HM`0+bN4X%SR3lkaA9,`%H'"k)&#U0US0-rJ&+Ya+(DARFp[)mG&h4d
41,ZH'&)Yjr@LYLJjS-ML`LZkYrG8C5ANNR%Upqb*R*-jhdm2(c)1lkVfqipjR1%
Tcm-F--J+%63Kd5!A6JV6i"8[ZF`MMmKU,8R&YTXD!e49JE&CHl56k--)U)'FNq(
DqNVfQHPa!5VaA38R6jm0Xb)MX![MR"S0!LaPpN*VN9@3!11JfA!J15`8jhe!%HE
),*HAQeeQD+j+EBiq(YdF48&64Xh%)"8i!"e6"8[*Dk)+@58Z,d%@6dS9(G,l5&8
fU`Y',m(GM(!XYRRR+#U`b[GR`"PYTP*Cqm!JPLDbR-eR6eDI#ZH(L0pcRLTVYFG
C)FIQB,`6BL9PA9QKY81dJ'[YY)!V%RbDZN)XB"99NibIa8',D"1[qMM6K-0mUZ+
N)idM*-@5KT3cYNR*lITd,'NhPY4QU,ih#`S1X#MrVJcTPXjK`b,mVr3-R+fZ&`,
1BUDjfL9N3b6N"$&C+46Z"EBTj'+MN!#p6*'bb[e#c&-RJ+Qd,H`m1DY"Filh+PM
UcIqG2aHZUM1KG%YeA`ZfU&EJk[UHqXb6TqZh%rM9FZZ+HEpji&HX5#r`LDh01c2
pd'm5f1(225rCfRcfA1M8ZIT!IDMkqp+K,V&&,)@JB48-ACE%RBT5`G$+0R0j-%2
Ge1`LJ+3Q-h6a+m&-5X['h`3MZIQMQj9Y0aM)2AAbH,S(Ib)hq1'#hqcJ(bkTHI"
E1(KA!4rYZ!j(lkUXeJk(+NJ6(`j#hrU3!)NC%!Mb`i0D3&c!3#FeHaN`&H&4!0E
M`3h@dk1,L1[99IRdL#SI5dDN1MF`JM#i"&GqT")VX+Y!GGi)KM,VFdkIKADIhT1
9J9FU23@3!"lmk#4KIR!5Lr)m(NNZ9EZkfpkSj11Cd11N&-clF,cQijPmq*Ti2*1
88*6-#T-MkQ$L30*m6IZdbSK&ZHZm$e,bi5ID&YUMPRbB+lE`21`-NK5mT0FcFNk
'4NqI2&YpmN4e[9"1ae8$YVa)&CCQd+1r3#%Q-Yke,+Bq65KdIDe")+1A4RIQMPS
mMM5ec"YC$$QXc`+"EN2E)#SfdYABemQSa[9e8K9FqR95D(`)Rfj9KdqRFZ*6TJj
q28-Gq$U8HkP'I#+UiHZCDMp!T,JD`LH#"ajT!GM8`K8d13KSSX)KGUpZT8TM2Br
adbH"I#6X$dN'D&Mm1-$C0RXIc00LA,(H`p,8p"4-Z%!LmeIP"aZTH3%*-0(*6*3
a%mAia03qbeFU#cplU',#TAL0+JG(U-V$TCQBkM"j(1-+iMU4I"ljJjPIPbUGTcS
5&K&I*30V%45X1LDG@U8&9!86JVS-5V-rES4Uir5()@V&-iJ"1QaCMS'SaU(XHkK
55LHRb0pklf1H*0rlf%5*QC3i0#@fbpVZS4F-5qI3&!j0EIG3KcM8X9@(1VEL8!F
1G@ch8*-ie-59&Gl4S4F-5qG3%`ieEIY3,bMYVIC,"%IEqCTAiZpp$!*&K$Z4pci
@3CIDcZ#8BA"+,(pEJaf'`3l"pVB'Q`b$6Gl+aHbNNXR4lfG6U3KRMBXTLU'ePF%
a@I(JE@,`,94JY`QPQlLdMLmYB3@jfU9ej!(l@JJ&S@+dQp!rl#$NJ2*m#LiLCP8
)SZ2Y1MQ86R[[BbB$165fA5AFB0)DbSZi)H)C)"Y5RJ%P-1ipB+r!Ta(4#PqT"KL
0S,C5ZQ5ifXd#5DRBHaqMkSe'6i@`YiJUA0Zi#YGE`PR)@0-)15QUJBdG3!!P$pR
k"&A9BDm!-CDl-XUB@$%`C$M'','XEdEbk3(feT5CX+,Be[@dE-2LYh'CVV3q!A$
LM4(rb&N3#4jhT6SLh,b#"'83ehDh31A(KjShZ)S-PlH#GDLPk"A-CfNrVGp#`RN
&Q5HNHq8"R3)B+R4S-#Z#%J[@NJT%Z+GLRC!!kF,!Fb(cKM+Yc[)-*ZL6)Z$5aTI
M8&RVEJ`a8CP-THd9dk2FECTe4%4#*DJBYYZ*12I2pQ1aaP*%r8E`+D@LNb,IY'*
HJM3Q6Tke[B2ME''UrZTKMZCVrqA)YmeSa!ZARbSdfjKJXJf5`mP1MMDY!-&jXEe
TkjNKXqKMX32[%82iP'C-#Ea%T["U4ZdF,e2HSJK-eq'"DeT8QlZFP!6RpQCBX)4
aUML`R-4c*k*5lQaHjNjaN[%J9k2Zf8BUrR+DFSGNe"c)ldI@(5%#r26Sl#1cMra
G(kPT)+9%fK"8dMYYh65UT[Iqk1aTXkGp"bSRlarP3C&YE62GiNak)Q%56UUq-k@
Ra2,Ec(PNVUe&$T,aYCi3dGGYZ9H+D8)1eNBYSeSAMfI5jaPdiFZQ@1@AZq`9r1R
M6j03ZPjaQ+TDLaK)C95YN!!&"EeCQ+JlL`c%+%4kG'm89CZ5ST'0)L+%42QedMD
UXR+IEM-5%GPiICm!-lVCY&RcM+Q#abmE6,PjD,G'XK+$(!@2"`e`'"4"H%PKGii
)%+6m4d&rMm[JG*K8dE')DB-UmPB,U6Pmb)(#kJ!PK%dhIPS-H3@1N!!LC#K2[Ye
V#Nm9MG3`KHI(%L)dM9093D"693HCa!1d3[&'AJ3SYN%k&QJT4H4'S,a9MAclM#T
(0AqG60+RKlcS3l-*cCdUSNAdhT0T+'M@-@%+e9Ce8"6qAl@q5K@(8N'!lYpiZd,
CZKh0@kLCUZHbHaki#3CRMV!3(Kj2)0mY(#-NNC!!#5R[FSd9H)[P3UQ2XB*Z-AK
f"cr3&&3m&BUYG+Vd#alp5Z8VeG9)'&rjh@K[TRdfNH21R3eAmU1@$41j"JrZaF3
i+(Srb-3k()V2+b&5'lfH+SZAkZqF3hGfdM"Hi(S[B3i4'eeNUV&,Fi,4"l9$$f-
l*i1Xcp1QT%#DZKdQMRS!k2rR5f4ZV4h03dZa@6P[[l*MU"rrj*!!Q)N1iKFhHik
PDXi&5#b[#%"SP!'MB@)DLQZ(l[U@jr*+lE+(4*UK%CPe+e@KCXpJ4cma)X)JdCA
"*'@3!*%&3CQ*bek5-LVGl%9P,iG!M1kbcdG`f0dkAXr@[iJl%+hAhNpCkhbqB+-
,00a)FSDL83G&Ra4Ta12EJiRpm+,PSr33"DQf3A+b3CdEEfmE&!N!'d8!f1deN`$
X-A8j@&Ep)bk)D""aT9)QLRKJKCM-6Zri'c2Zc[%mc&V6@qZ2i`(d!,,K%e1a*j(
C3$(e@DV5'8fS`"UGEP6eFKEJDaNqaDViaV0URpU(cdIU)lc18PPiS5XGR4%eSUI
qmSkiNBr!jf(eX(iKH)c$fKlP"&@%%e5aKpkK`r$"B@M#BHMJ-(6+11P9c%N[(+B
r!Q2rV"%VM*@ck,(3j0r"'C4&AjJ9hTdP2FP,1Xc,3'H2fL-&KDCb9Bk25lR`!IL
!cb&e#*mk9BG"6P3aG4C96Ke!8i0U3'HrfSr1*MJKqbi,@E*h)l1(6j%UHP),dMB
mPZ"fQ6c-6+,6U"U06++$4kE!Cl2DM)pCQI(*9EPr13KLC2K*M@'`qL5c'R`S`)h
8"GjC(leTeZQf36Jp30*pkKRTP5lRTjq8PpG%03FcTlVPCDjH'GQ92lrQ8(R!hbr
h('#q@`H-bFYhH-$RIid$2Yq+!cCT"d`XhUS$D+K*AZ3+U#0%9%PrmkX@LFhR9Fb
iJmePXGa*Pf3QUQ@BR-RGT'@YaQCU3N9IckZ@F2()mqTc2EQd@FejH&60dAI#iqp
jf+bH[B!Y%(UZ#V30dJH$f["3L*ebq4A,YmFLQITScZBU9Y&ebC!!YK&eF@#RV!!
!)Yr(LKKEe4`aqC`Q0j)LlaDD%S2LdV0mLD+YSh+iQBL1-rZL&#e2TNHLF3iL@Ti
&3A)I%86*8-B`Q!A$jPacj&'#lGZeiKE4K5eK'a,4Fh`8TGI#$Cf)X(ifd++HrGK
[YfHfX,+%F3cDjf-8UPK-i)aD%k*(19Y*K"l"9Trfm!%%E'%6X04),2@*3B2@AL6
I-iLdb@D%2`UET3TqeBSU+91)J-RPk&%BPPB8QfZRMS[)E6LrQVV',iHJ!PNi+ja
0S*!!'%V'Z(X)S"124L!+GP3YF9b[cmNjPD1IVG4h$(-%`Fl+d#XpQ6ei@EYr2`e
a23pM"MaeaIlppF2(kMRQimNRGhMR1r-02Bpk0iq$-L&'!VR5&@@MI%5#mP)ej`-
-UZB(85,aFPB)dF#K$$lh30JdH9`+Hai,Zm`688hH9SNUH1H3!"*T'2BmL)Q*(UC
4(Q%)KJV0a)c9m(U$S@+l`B"ULq`M)KJ'1"K@')+"3@K$-,`B&!`VY'#J4Gc0!$K
fjQ41k5(ph0QMp58pcpqY`#!`Pihjb3[63pSXT3SKm!L1bf6e+&2ca)*-NPfZ"JU
XAA$)VR2e1FDpP63(#$)8Q$QeUT`$)8`UX&-J8U(k0UT3KadU1f!5,!PrG245+)M
f4[jAm&DdKEpFKH`I8,A4"clZK4I40USJ!KXEQ0VC)Dbf939Y98DS6FPkZf(6EE0
(bBD%4bJT65J9&k93+Yi93ZRd#NAEq'i)TXCb!032N`(Y"FHQa,'0IpeM$8+(`44
Ap#%AEc)+RK4NXXISV#'HB5h`K8-+Q2i&*DG0hZ3dAD0XhQXD6Sk*kI&6M)m@)BS
0&iaK)U4XQFKY4'BR&3+b`+!MYeQS"4dK#VN-+aa`qfbD)J+C0-KXjFG%62QSFTk
81rli)Jd&[#+K!8L!8@Ak&%P$aFDB#J+#D!JPF0)&K*CSKE(+fTU#(YHFZ2CCfb#
*4VH+ab-UPj[m1R9(bjI*)L&@+MCecl%fiIcFN!!X#RE'5S$!V#8A&[RbpGI@%@2
bY9""RK,Xf@TZL-BA!e'Z3(VQiLT#6m'1bh"F+EfSHGd$b+C-2r,Ki6+$"1dhGN0
3`fdYpP8B'c[)#8qjf"M+3Eb'6PldmMi+*&fT'JaHTRe11S*K&H+@T68Ce3a$$D)
S3q(Yi1MeQ9qEJ8j6MHdEJaTQ,RBE#B!Nh1kPk4Y5H4HJ9D!&ic96MYjqT$i#miT
#HL5DNHZkCm"!Xf*N90mC*,JcAZmC(!8R(jP#AH`Ai!8(V)Cdqd0*-Lq#paIH8(M
"ES"[$Rk`P+`,[*dj2E3L*4H-10X3)3)PN3I%4B@pU8Y(PNAeT&%XRJkfr0-JSa3
I%hXIaHYkX&5aiM9[jfZ,[*erZeM6Bpfc2mKMS@#9(ZYIfVI[X4J3*4@eYp-QdK-
3N!!)Ej&,k1C"JCN9rM[b($8$9**`$)"Z-0+l)K%E1`Sa0X[08br@42kQ`TT0%rX
ZD2+3!&rN)mBBXr)+YqF"J%4@16@,-Njkl$D9#V4+GIPZ-eIVRj4H[HNi%f!GrIQ
-3#Rj%#MN`4QSfXG$4H-2Qq!a9JN2XY`Ji*XlE+b'JKjrd5'GiM@")Ue6K05)f0S
NXe&%+CMiB@M4R9K('hS6@C)!kL9JG$b!3H-DHT[IS@56&0l%bqQMpm3$M0lGA1c
XK@"+LI'q%#1mbdM!-'Ecpbc`*,NDlc$*T4'52kH,&fDh-U[663DcFfPZ43m5d[e
"p[&iHB4)S(f,bK8H1cMb`D5Ur1-"%K*&2@*"#HpbqRb'jG`T&c2e+8qaHUFFY[M
kKhT9K"j,`1hA!XFpm-'NBaEAK9Yf'VB8iTNDm'`TLZR&`pU@hZJM6f'T1FDHT8A
RJ,$iRNV9ar4(+#RN35iJ39r+LecP0SiN3228@e`50FVa3U)-JTB8U8mYCk3V""K
&AC0%MdaXEk@(p4fM+J-SSkS`khM`!i$EKN#ZQ0$fD!f80C%($dCCBp52,TQ(YmJ
`&[pENA%MBE,6L"*JLc,LELSbT9Hd,`ik"K%&&hMf,S-#C%990"a9Tj2$bMVje"i
$m&9Fm$K9d"q16hRTCfm(XVqBA$YAKrQI-PDdcbDH,)UpZ$![ZF+P%-@@+JHkqI0
2T+UQh,IXJqaMLhP)3NmXAFD#+kE#YYcf)-4lmdX3qCeHF%p23*6&4XF8B*)G6q"
KQ91PXG`kZ!4c`!Q$#BNhajT**"3mT%rRm8)bERd3LE$FQ"0%r`FRkGflSNH62jR
j`D36Hhlf0NF-Hk*S4L*im0'S+dPHi0KFS*`$$`S-`l()F(!aadE8F%3T!jEBpZH
c8Eq$(f!A,-`G4'EJ3',F4)#H*c[4(Lm)&CfVbF'(PbXNi9-542HCC89Z[am6J(J
P*r(k$%Nm6VJENRKI"5AaqMa*[)4-CSrHG+mEP9mk8E-iK256jTI!V*rB+f9"1I!
JCMPD8[!XTITd(p*rHRhPmA2k+jAe`b&BG0BI*`1dZjIm&TND4%+2#J'"MR(AP2X
914ETi%)i-dU2"D&X4Y)@+CdKaSl(D)V(%UR6#Qll+JC*phM!Xd-bJkbk!#"0(h#
55SNiDIe&8%E5*B[ClmiaI,e61m`B8ILAGkKKDE1fI3`p0J"emjBDNaMT0BlHp#Y
cF((L!B9ZUPMXl8a9KKI,jGAlc0X%qqF%Ec@ef0$4$4fRS@25SRf#4'9)PNc0feD
b*(eKXC!!AHa!`C!!9#5(ijj%+&@#L%*KfaX!I)NB&mK-`3$Z[[+Jk+0Y**0%FM&
#"9M0j',kJ0f&MI4JXmVa"hTX[clabU(llePR$`,5r)0hEeYkq,"IA@m3aD`D5Gr
BYKU##q5DLDbY2Ik[[p!,$UDNdRD5IM#"6`9QI['D6MqHJV()`dJ5aK9NB*RF6j-
Dc+f8QGbA4%3r#&*JQimV6!AJFT!!UVQqR)qRAhiC2p6YCZ#hMBb)2Bj,B!UVRK,
Cq#%[`89NaUI1PC`iHDjHpm&f%d3k)XiGUkirQA0K4X`0fSApqm@0i)bB%bfrUJJ
Q"LcI*d(0ZAeE33V"dPFedLET*GbA"fUL1+Sr1ZLYJ0[%$r5)bP06dk+QC(S[VM'
m%"ZmV#&"N6LX#*NM44)c-B8'4@XH#l,m`HdLk4Nmd'G0X$ZA(%GbaY[$T*e$'iF
3Dk8e3K6d-*(+D4dMGBFJ&k-L+"6KFAL3!#pJb,`Gde)b#Z)(QH3&1T-eSVXm99N
,P8VdB*26#G&iX54!9,GQ9GkXQ4*66-EZ"Z%kbC%hF3*S2FcH`QK@i'RiJCkUbZG
S!YR`!4-dQ(&2i`+qP1U%-eX!*a1)%HePhdSm4-Y`8"-HemlY-cBeQD3ADA+bm,K
b5-r,Vb3"T@RSXZI!LE0jLGU3!'jjIH)5CL15IU,1%hJ(DS#b%*)eqNB`b+`9ZPP
H8Q&)A8Lbm4DD8fGF5(jCYfElj*H+Cl@-4$cd!6)rBcC9F6%iQj)&[&B*TdCkh$B
TlHjHm##cKC11bVS8iLaR%"@4HafFi2hKlGT8R4#%V6hb-6UhMF,E))&ZYb$iM3D
c"hG*dTATdiA(E50,U`DVhS*5ca93q@N%$e%FH%NhhNTNGFrPBl'(p8mARUJ`AK5
(TlbCr0eK6aTfEEYB*i"PkQ)#@2Td3mGPk"3E5A2"j+[I#$Qbj-Z*BpX#&Bh4RNa
JQMP4ph[)Ta1VYN9!#fE([R6ll!3Gi,VM!pLSZ&0'&h*#pC)rAkMVk40AqD(40",
L0X#$QS6HG-5U13,&)M3$jMl2-5!Pq[1pKhK*Y9S@822`p-"TJp,'SiBP'SkaG`8
GXr##Uc-R0Q`2)2)XlE(IcM)8!hfDb4K&4SK,h3D4e3"iK2Ukb2BmTabD(X$Bp'c
kL`X@BC1l"S!YK0md2je&qlFKaX*d&PJUAKid,,"X@`#H`C(aUQd%b5G"E1qr)rD
-39#MS$%5T4hE*dVAc%DCJ22BNp,iJNeY4VSiDX$dj%i[%"ebN!"LD"`8P0d&"G[
32pFJjqUQl522YT	ZpS-2YIFU(Ah"Dk"!IkpVh0YXAPpAMfqHN)ZXac&5CJfa2
eeNB@'#ZdY(r4Ar[E#ML$U2eYNbM5CrkfiNPdJcf19k``eBM)Pkam(+C5)pi)PeJ
(9Gf*aj)Sj3IK)C,D5(ckT,P(0V4RUIT)'jb*P5EeY+A6%-PbLai[,6T8&"4YG8C
GSU)1S10KQrV*@fK`i4%R$UG8pK%pAQ1SLiBqd+8H5&(aD*Sp50ITJB9HMZj6k3P
*kd5hR+[[1I'+Vk6NXB-[)a&ai$!5%'H2PCcMD(pkmi*iGIJ!aIkAp15F20Yc$Xd
P!riAUJe9e@rGGXI5hHiBEAG-EJF!pdi2+$-mHY206j1Kcjm1NY(lreS8hJ2`hSp
*'6@L-ik1-+Ud1e%XfF)(FDN6aTG@-K[%Jp#0H*)l@64X+JSb2+BLJAAS5X!ZIH0
-5Cb2rSedJ5iCIrQ[j*+)3,CpmCa1GcNrHh"VPp-d@e[1crir@mkfJqHd#'V$F[$
JKR2c3,k2d-3r@$8i%KJC,!r3)q3prMrKI')r(K[8JFF04J-B,mB`0rh(Hq!rK-(
+"NpJEL)HKHVZXhY+iY-G#Mq)A6a'iP`c-8#6B(DVM!b2b#B$b`l"XZ-hCrRXEm)
b"2b6Y9,!2eQl03,qbIl[VS$[&MT!`$mCN3,qbFM@#TKCrLi+H#YBeKKZSq0&0"X
IE!"b,c$4MViFG1cAaE'RcYh0)qHkrrT(EN@@SafjqEZ9H6",If9NkHjNlHNapYh
*SVH'X6[fG%4D0V0aap2(6j@mF2CiID@fAm1aRZq(kM'mGq#BamQc9!U!K3`J3M0
HRP'f9adX6Z5N,6TLMIMdaVe8"3P&[1LN1N-M&M&k0bfY5KHp05I`d8eL-5rIV3b
[m4cdA14mReCN)''`XcX@D+[r!S&UTK$4SA"p6r@TBlp"`2Eqj4bic@@+!`9*c5%
I`+dqKZ!Va10Ne8&l"`ji&N&BH4+'M#qN%iB[#*8M6GiYNUSq4KehQ@cm'BVRG6P
E3LR&+ZbDY%el6P@IHU%q*leGYfV6jHPZqNSSY0e00mT(@qA-h"k#`h`lNdXG4#k
efkq*IJa(FDDN"YT(RGMel,Pd0T3)GGJTQiK%I+$fj,PhAUL44Bf-h[5(E(Df%U1
)M1dj@[PASkrc(%9"4!rc"BqpAcFp&VhRI54Pi,6Pr3A'j[1H&qhZp)CrfThqm%r
cDV+lk[,@X4[pYT(IJbqA2&0I@Cm$[$YfkRMpXG-pi"fjDcUC0JljBrChkC!!Bm'
(81)!Mcd2dc3N(MKKXdhc+b+6d"%2E3ZlMb'3!2fpar$r-Ima3lDfA5p"YiiG5iq
GcUeLjq&Yj*CHEM392hdbLq9(e1d,40R*9lGdeMGkdqdj&$80&T,Epfc(2*R`pMI
mlqPXQ*j(1fE)e+9M`+J,SfY2$TG8eeH'Hmk8H(1LS#$8-MkUk+DB(Fph3R3Q8[K
LeKi'LcaXUdb)4qZ`l4eY'HJp+f9'QU--,1h&jC29,jcmrVQ5bP0im+,6fqA+H,8
F9r%X-UH1ijN,lQ!TC$$(PrTakCA+FfI1qRUf`qYC2d)fi$HJ6V%Z54GYQ'5*c3j
5CP5jhAeia3&'&,(MGMCm'4ZHHUAREZkSDMSEqH-kpXkQVIIBcaVpGFecDiVpMP$
SK6Y#)AUFi[E"kKJF95jf4mJ"UhlM(D,4#pY%)l@eD24#665+E`8D[A$hdHL&ED#
4-C!!9Pf["G,@C[$E#+3A,XKbJdK48Er89rIBbiHG[k[[bD&FjjecIh1m[JHaTqF
1r)hfhi93Il`NG2*X6XRCfT!!GXE,*kX"aCcX1C96XUZkK(i1P`b3!0J"!!!ZM%&
%3e)$!&0X$e80463#!'0'lM2[R6X-)b)bNa%4iD#S5+4%CQ3Z[IF1ep6F6fCQVTD
LL'+ad)9S9UE[[61b(e&480(F6fEZ(j+CN!30,TI,9@CUDUj8a(h46-h-#-IKpli
ci,LIrZVr1qI[qcrIfFphcJ%EAB%%`42NNT63R'pl1M&aK[+!r(L-9AkF@re*pkF
l@kaC(X%43RGcCpYkNEU%`$UNNP9mPG3`PZUe,GD1V4dV@N['VT!!Vki8jCIELI5
N3'hq`N4C8rkMkIKq08QFTRPX+I3IBM,rEq&NfDR-e@*YAHKAiM(qIH&X18j*iem
@IL'[9rkT,E1jk(aaS&CQHi,q4Ab'$bVm9Lj@5RPqi36jYM*@Hp*@63H,frQ3!-+
KmJ2+GpTpYR)kA"bKf@hhdap%+jp91%mZ8KCS$EBh%qR6iK[mNF+TFTebNFmXI&"
q8APBHmPfKNi4ch&MBA-C#8&EDeY($@+#GYlf!QdM2XmI,db5Uj3DRP[BAakJ2+9
pEUZR`m5&@JYE$lT)r*Sr@cK(VP"'D5@f4R5-f)U2+e`X0e2DmY'&)q@1bRLYeZD
RH@*l,FDf1j'q,SEce`UlbUZ9TEa6B@pjLI+f&QTE46Z)8EbJm%IjhmSIfLCE0'd
XCQQIf6kQ[F6P['GK(cP-ZFTE&riUIkMmTVeXHj91&'GS*fe(k6IL+rch`ZRb+D@
G&Q(E6(m52q)r&lD8VbQ4[%RK,r)Dj8rYAlD0Y+QiK@FAhReDIPr*d6k`ED0Aa-[
D!GXlp,Vi,Vp8Q#R[9lTVRpMq4[Z+HhLh`XlbAZ8JleIiP[aAjE$fRZd3c4#$YC@
f&64!I)lI+`b4pbNlqC(#'r*@jDbfblD$TSZ9h&*i3CD8)1e6f`BD++UDB$04Kep
8(()KPIf+!h826FM5Z-j6q$&qQkrP4hQLPUJRTL3H5lbGZ$D4ZjbajM42R,BXZBZ
q2Z@BU#B2A#r*Keb5V-$BA"XSiY885IlF)mRENb8j&UBDjKQBp8!@BH,(T!T#C6!
$Pe@Uk`I'9USD6DY82A4pTDS6Hi`#Q8+XN`)%`CRC,4%q4Q`+XFXBlm"B5AC#XfD
@r'C*6Y%P@AG+XLYCd5Cp6V[ih`lD&VSQ02*Dk#VrfiVk3F4Qrp,!&4(qQ[!"ErU
I9erm'X&5j4HMG[YAA9NHlIrJ`c84SIpH8q&I%4hHSX)IjSq3!$HHprHSrFM4BMF
45PmH[HE$05h3jr9JbN*@426SNPE-Zh`D&HU2$[5,QpG%,)rqr`4TDJqP4iqHp'[
8+9&0p'YqTep69#I(6#$4*$ZjAf2@la3G6[,BPmM)6NfL6Y([$03i`6T&@A0#2j'
%(L`KL"6,R9M!@*L8"#3H&$ZTC[+"%kL6F4"J!Y8U'5K'JH#!0Nd%&1SdU8kQN!!
b!M&6S5dH$'95UGF8EkDTC%NAf-aC#De"6STZR()U8#TD-1G&P3&q@X3*dNp&XU$
%3%5&&@P4C4!6i%98$23*QLLYp#QJ4B+$S%AUVj5,U"$NBbmbb8!&-a(#,9jJ%)T
%&IH#JiL)"))TQ)'%HVp!r3aAD@&+!&ZNK#5H5Pi3@d#i8[95L)Il)BakV`k"Q[d
Z[lP5GCQjhk93dY5`L5J6M)MrUSZEdGhkc3l-J+4Q%q'5##2i4EpCN9eQd3)9,Xl
B961CLEJN2#k"L&*SJS4!0#R8C5)Vd@'19ki3-"[LiIV83!4m0*@mH(QQ"9%QF*L
&5T'3!1D&+")#U9PJ8RkA`dXCA%8fhbm6)k3c"q%EP3a$m-K&F+I-A!S"+PF'NR[
+FKJf#kiPrY2B,T[!)&l`+L$hhMRC8c'3!1Q&LRXbpfRJTl@Z"!3K`#[1Z#hNqM4
G&LmcPAe398*GJ&q,TjC3+MVm[Xhd8H29Mph@F(TL4&8JL3"ZeVJLb!5MZ!K'2'X
'29K`5($"*6KF4!613NmRNYlZVX*Z[-E-&Z$Q@L89"!Y6,e$"*([9%6L#bT!!AMM
TJNmrJb2)i!iNA-"j"3P+K@k43"D%#``-kfG&k!f)CfAN-h3`ibF0L+MLRF%%B[a
qKFb4HYL8+k,UKr8Yi)d!62$+!)XNTK49"RUA5"e%6('3!)83$"fFQ8Ur`R3*US+
8S5M8cka!e*SZ-*Pi2!%"'SS)03"Qm3*K'+C$CU*S)3@IdNS(i4H3!$)G%#9ibZL
)TmRNJfB+pQ&`d##RRjZGh'@@FPbF6*!!qFe12aCqXL!Y+0NaXe0`%&'5p#!QhQ2
AM"80U`S@838,S4),%p*#-00$p*R!ER)3RFM+,Z+d'`35-d`HHhA"Uiidk%b%D#-
kI13)5*91E+q6V3ASqG6#9T8@KM+TK!i(8BS%+`C#@4%[8PJMj84,k#a5@%YBK(`
#4k#T9iUFBJLji%lJR@MZR)b"H0`T-KrL3V!`#6'!F4"6*+"Dm+Q&VEa#k$L)P1#
0f#`Rf316KA%394F)H)iQ&ba-[CIG"0)B6DCJ,b%mAL!)D-kZ!RdNSS0LN!$4aRX
P"3*(T*T96JU$fBLdAEXQBTAr['AelP9lG[ZMe%hKYH+0fPfl`eGXPDk'Kfk-`'H
&@[((fRG4LcZ0iE9Z#qPUa)EP8D%VSMGZM[JJ)M*dplr&HfiVET@rbM-jL)b)q46
6M42%LF3FJ@j(6$"TXme@HEEG$DI0EQE5[TS,G!ZBIC)FdQ#9M3V-5TJYST`HM3R
H`SaK4-"1jiKbCKqBE*MZSZ9H$6YLF'Jmb5"MpK(6fH11"#*QG`Ed6TLdJl&*FN!
r-FFb6GJGr['5b%fESeIY@)kkDA4ST"L81SAN(0-0-6`XBR2dNRJdd686ZJa@qIX
iXY#q,mCk)0CYB5j#p6UajpQ&PEXMGX-9%D'4lXki'89mBG+qA`AQDf5KIDpL[42
V%*M1NKbF,mT(-X@J)rZf4'jD%KRUAh2heQUmV"2"0J3Q&k`R4IR'D[(kNGc6e'c
G(1'fNFFYVI+mDY2G@mMKTYkNcD[$C!0CD21fBHh%r#"-0##9LR*f#D!0Y&VD*,%
0#BcDY'4jq*j3Ik5mLEN5rTph"2,YB3SNqHiRSL@RR-N'4B9',iN))m,U*ZEJcYU
m!XK2KZa`Q''3!'mQbMRPSRVcCXpbQJ,F0hV@GT-fUaU6CM"eNTcC6T3[@86(,9+
#HNY5QBDp9XZXMH`qIG2QL$fEPZk*h"fp**3"d'DGJSJ&mmX`@C*m29B-bLQ2hji
Fk9TSG-5jcG&VPLq*aSY4e+ES*HZ)iNRDV$`YSFTd4)aF%aUp2$cqfjjr66$1EI)
YlQk+C"SUPkrCZ$XL2)aPZ4'afJLNNeP*Q#1GM$L[*@bdbJRC-&GKU*B3,!YiBAS
V0$*dPA['1$k6M,KQZQAQ'B'F-`,jE84hXY"'p-&k0HC0B5CV#GLcK$j@4d*6!Z-
'JI'Bf@M%c$YNSaqF*Zf(@%cmC+(p8!%iHCLIJ9QT*GJ!Cal-31[V#I1IEHh`RpL
5(%re$kG5QjdIXV8IJPQ$mX0P`)M#T$0-%beKJAYMBTAEm010b3p0@'25pdZB*M!
cV(F6NSM'accG%&FUf#'PfT!!FJCf5!R!cX5N!NE4fK3G$pCi#+!E['#(+!aXCh6
AR9(IkE`GS)fiKdrDe&LlY5QlHB112rH3!+lDN!$'*Qd)0Rp)5jK*@K[!DE2&QY2
Qd%0)id1QDN-jq21YmP!Ac(DY$FKUJqc8jUVeE*ZNik%02D-0aB'SeLEiL&ZA`@p
1Kd2$MNq(3kqDY+%8Na#bd)CLBiCqJMNfCQJ6V8elNLT0hK3BY(c6QMfVGkm*4@*
FZRYje1C)iPkQB6BQLf'Q5[,VBD+P3bEMZ"#e+A`h[JLFYbcG(4iD!HRKDGV`8ZP
XjlNR((GiR6BF"mM9fL!RY%N5k%+"(K!SC[m4D&q"GK0SBi&@#24(JAiPd"+'lB6
A1S'@#I4AJEiZ8&@JQ`ADRdQr+p#P![e-S)%#rCG!"`[8`M4HCZ&eYViUd*m&@XI
NG)'1*(9EDQ9+83qT&+K$*+q4*RCA,G!&6"fN2aES-FEc082G*p#A8@F3k%bmpc'
pVc)Bi`@k5+$Tl#*)S-m*Y,G!4`[d)i%Q#,3eUlN[C'XE1mm!JEbQY@)8f`@Dab$
0%ZJTJDB*0%#JVc"&NaQ*K3*p8k"r#,5+N4)Qd'F%HNfJ(`TdV8!(#I3I$(@4%3H
SiI(`BYRL(L-8c0F&qTC![a2S$B'1&HK8JEl'D%TRVRqHdI3,)mJUd$Kf@S'G%jX
a@D"A"2UH31FcN!!+Sf#930Za$5J@D'H"'J5k4k!HJCi6U-Jm-N5J@3,0B!I'AYj
QIZr$cMC#S1d&QX1Z&c&DiIeRQAFQ#I3TGSEq$%C(GZC5J6B5k$X#c4GS2i&q,p#
M!KdMd)N-f$$frb)MTBDj"SICbh,-6ZE@)`)pa(B,`1ib1J$lYrJXXS*jm%0fb%H
Bk&D"EK0SGbEk%I0q2A-F41F*p,"!Gi&dYMdad-9bcfDf6l1CN!#IUAk(lFI$!Qd
Qd-m&'L,3EpJ"S-)Kd$-#R5)NhXHTB[1hMmNVbYibVk(TaJ@Zi*AcDrU%jCCP("T
BeITUNY051EQN`kT4fc2h$cR6,Q*+E2U1Z48&8A1UZhmbq0cd8dDc+NaUfhAeD2Z
9E52UQN4163[Cpf9peQI$L[XGr2Ema&F62)%ETMAVY(4aqH8$`bqf[$BclXM1f5d
D4bmXlE`hIpf-NiN'64B,DerI2GjkpreCErljVkHA"Dciji#HbrXrFILp[ccrkiH
2*eq3!2lEk1h3-3pFHRIS5cpYIVM,f9eIIIhM[jppXZrIa[lppeHDk`l6IcUq&Ml
brT`2IRMMPc@2V,rhh"HIprViU@IHqZZJ&hjlZ8e+d+IrD09lbEMlVVrchBXrIr6
JX4YE[qraakC&Yl[YQE$fQk0&CiAP%Bp4NafdmGBGj#$dq)23i`qk6"EDS+jBSaX
CP!8c3c1L)HrA&)hh)G-fdaYelQd32k&"'M6R$RhM)050"jZY3B2,Q4)!(9b[$8T
!&4qYp1#f[NN$!(q,54A-IQh`IY+SLA+RA*Kj-)-*![e-'BcIHX&BiqZT"JGVJip
SaUUEZb9dKYR'X*XU*"QE)Z'TACY@K8EaJk'4QlC'VJU0C'ZLE[JYUM#"Qdi,,-C
C&PVPXB6NaGTBe+F'SeBk&T@bX3fD-30JFf&)e`cU$`m4X`pI[V2#XcF4-$C5'iX
+beM32aDpbpM,QV(268T[(,jm-qF-EHaXcCLA+Rd@dYlD2DYb%CQ&fPLMeYaerF4
D[pY,3EjIbdGp1"qpI$lUa2RVY1CPclQr0H6[eI,$Y1CK9hc(fV"l6F5MU1cPCpl
#`GkDF6jkrRcdq[PINS@@2acV8eBr1[2mU9TcAj@`1DX5BN+YQ3R"2P8I4'hkk&%
3-D(ZMN4-f'(5*L$V63JM#fe#"0E&Q*q#bGDDCrZSb2"4dGjk)b(iq"I1@eAM*m`
r[[i`B5$djPR26KMQAZmJ&pS%[(j0`1YAATT[VH@9!Y8D+06jm`5YH924FXRL"4*
IY`"[hN%Y$rXbh`[q-Y#SpQ2E5")m&akf1l,#ckjZN!$&RSM)hFXMeV!,rlTiNYh
90IC9Akli0'eDmcpT!GGdNjD(ejUmU@5"VJJ4A9QXPJIhMII!&%[bRcBbXH-aJYb
kQNK)PLD4lN4[HQK%Hf'i[$"FfRLmZie(hKLI$KKf-V(6*0(5fX-d($lH(apj&IV
8Ah&AllY,pFUPd`ji5'aH0i`ICC9(Pk@kBA3*FF2i!Na4KakY5(,6'$*KE[Kj)C'
!'dDjdlVTdG#DkJ`#bD@0aL[#k!i`V5AjMbCN`Tcamd#Q*--,`3YJpHDPrl1R4`r
84Z**f5m(V,+K4T4rR)m*dSFK4T3l!*B"PAm$fLX$QQ!$QQ!$QQ$$&V`VchIIek9
SV4m5Z*'a*QdN@[#4+X`45@i-CaU3!1#DSeNci*h0J2E3J*Ff`d!IA,a9'3K00Lp
F3fZQrDd6crN3A6PbK$D+R"EEdR`"6[XUe!E$N!$NMZl(J04K3%Bc`0d'0*)'E,0
K)m$khEF[rV32%HJSR(N8cM`+N!"'CH,-jG#+mcE2Xa1(%VJ,l,5'J,C6[jf@f5Q
"[G(HfCAkGZ&lYr$M1@4i91MZ5&jl3M[NVlhM#iQrYY*lH6FmiX10SI(%VI1q#B8
`E(c6-1D-VfQiq6ePc!jY6#A,L'0L60SB[25036iCFdU5I`j%4JIP9AD+A)r#!bh
RfLQqIVA%J3k*FVY!1d9ZDRR4EJQVjbEH5ZYSEX!6SkpG03f0A#AYkfL*Ub5Q6QR
VSYV4SqSYb&SmqBjN,4jXFQGK1BeiII%34Z[L"5CYFC,9-Lk05EAImbRTk,#*iHK
B`kp&q(+X0bb2MSK['G*p![%NM0ZTMBY*96N1MI8iR(iF6YmkikpHRS`lk56mmFc
D1&6(aU'Y')GZF0aL5Ckq9*5RidAkYmN``6$lBBT&HH)-d6)aQ'RZF"29U6R[eP"
-@Llb@#jb9qjq8(M'4f'raq!AhBR-h3m9U$,QiT0MlL4*RT&QTaPfL[IHhfI$p)1
*%HR[JMbGR+*85k3J',X2qRr0Y90mh1aFJAN)c#IS#)`Eb'[,G[D+@QQ5dqMlfZp
qmK64+[rZhkSPjYNTf"CSr98mj,$MHVV[H[Taeb-%e9b%kppmelqjA`pVHh4,SQE
@RFQH&0HbY2@aAH+1&9RYpfprS2bqXLH+RkPqX[5f[lCYaj*'c9V9$+Mr[1,V&Md
DhUalima,&eqXH[lm#qIq[QkYXRYeq+V3T8[#PRrfFG5rScGYr"HkVXhA2VVkiDY
rrH4[HrI%h&RJj91[R$`D-MIpl*(,rES&"3H%h-2m4[EG+cQCPbjIccMFlkhZI6Y
hDrpkepFk[0fTGjqH@Ed+ITca6G-rQrc5lUH@2lIqGH*[dhqImBfYF0*r*[phfMr
Qrr2,i(Y[qEm2QMGVa!p$KJlrcMm`mGY"JmIQ6mJE2hVNU)$XS,XhVQ4HbVPqH%&
'pmjp(jljB0,M#@f-c3f*r2qY$d6"9#PYq(6PLRh2lGLeFqZ@plGpX2rG!qmFHZq
4JeiRh&(L)(-#P9@(j8,JZ#r'd,QBpeqF1qcCTqCB&Mkpk-*A8kFm%RLm$aVrFE`
2'[rKjS-[jRlPRhhD"hpapm'BaH0bq`plDXkc#aFYH(VU)e11mm&02h2U6hX)2r)
!k*Br*G%lDlM&lhMCpQirqK"rlJTLh(k+fbp4iAIqaA0V*fK@([A[q01i)q##%iP
eh55[h1(U0%8h-p%l+$M469hM[A8V[rPqPBPNchAXC$,hS-b5LbrMDA`pMq9GH"a
+-"9a+mBXh)ma83r`FRiI,q02m',q$+rQ6r*5P'rbmeVHPRIN*E`4EmCEm4SqJ0I
cchN&raTM"(TJZpp%`ENh-"VQ*Bb`HT&AmHIjHIi#5X6qRDp$k5KXe'kqQSHME&d
SAmUAm$#qR(r'2qC4r0mmQQr#F,&rm8LqKNI`cI`DriKIj4rb9rPIq5ImEh`[hi0
Grlp4m$)ra9rK*e%i+i3RT[1cr!Lrc2[aEMb)"r-!B1pa,rS'cqChq4@H`c2j*3K
GjaRm-%6IiYejApiC,1hjkl`VIiehi'rc6V`hlm0lmLcHLaI`(rN-rJe[b[rN6IJ
[["hrLEIN2r2@r&FqNIr'Tr2IQB!04BMi*2iI2TRrPdrMrq$cq6rjPk$M(U"mMpm
m2SZ2i$r`)A`S(mkri`2aqjB2iS2j@*l2*r!m2Tk2jL2j+&#HM42F"G9A',djS2F
`A`#DZi2@[[aK2T-rb*2iicb"Yq&'hT`EH+,`rh`@%&&%`-3VZF3hm%rj5Vk#lq2
2m4em&pr*Yr)Yr(fqMAr!pr0hq3(q$Mr%hq-(MmX#rcF+6QF"$"f5ZFSGh-)[m%!
qMRr"a`!lPh[4rIPLRXZ(m@Ij8h`1K"EbTrNLL(l&Tr)Tr"'`2&B@D-crH-`X3!4
X22&@@H!,d2!9RihIL9RJ,rMG1JZ-!EAM3'pr8%cSI4Ed,N)@H"V82J*kEjN&Z,D
62Lik8REX4(!G*'(C*"B@NT!!GS@%p5YC@%"#E#8*aiD3!&$N)X(q*3R&8558CV2
3QB8Q,%`PiABX#d8X4,"`QBA@,156i'G#rVBXc#HKGMX,HeQB6%,E&L3dUQ,K%!R
0'1"Ql8KS98c#@NDS`J#mcklI,5AK!![[a,(3M)5$l+LI-04H4[6H`55XCST@Xf1
(-8H%c@6"3),-''5""-Y&%Lk8XI!U#k0*#'31$@3(#qT(3M"M#fC%"1pRi53,M24
J*KV!$Kb`MJAQTJ$'($#2K"!R#`dX4*+3!,kDK'a'5[Bf&TLkl'%Nh,@c`)jkPfh
BPHiXc'D"(IA+("*bpV(!YMq(Z5c(`J,E`KcQTKbfcCNE@6M&!J1@Q8$#T@J@XPL
BcJ)$FiQ4FTeYlA9'k299,,$MCC!!Sp)-2mZ$KjQ($TH`F)i&jUI$M*EZCeJ)C)&
jT6Z$h*HapBeKJ@RY'm`#1f[Ii5b`8hCQHDdcBq['GU`EBq['D1r@Q!9'G6Hf'pd
B@rX$,$#Ufc-!l98@')#ZE%qk9V03`3,EKkjXClSbdGGB(ZR!&(@iaJ*PJ4(8JIQ
e!mYPEhGLS58,,"peBXIVa&4dBV[8LC(EUB#&+56d6Q-KM)9d&M*BB'QS0cY'lb3
5qM!9IGJaqV$ddBFGZmqh,"K*k-R5D%qf$6hC0[4NKqr*FQ[2)bb`Y0+6%GTc)!X
Xc@@apL#,Z51,Y40CE!Zc@*l+BXaCl*!!@60BB-4P-F#p@,V[a9*f,qE%AQalHPe
PJE9$[9M1kM@A"ADN!ZDJ!TE(#jL,#eKf+@$%&E!mrL2El"p*lT0rM0CjV&RRh@&
DQRA0BpE01f#Lc,T1B8EJY5$,V#G$+,R#V#rEEpE65XakPd#cIXaTeNZDQ29@0TJ
NXeiM`%6$"-0-0Z[eGKKFI!k'ca@B96!Uc"@BTM"6c(T&+8`$$#iUXQ%QQ[8@Z@D
p4c&-2F`kQ*d`Hf'J[!H8Qp0dhEaBecf#VTF0dr@DqETH-92A@p6SZPLZkkC4ZLj
"B!8@qfESqR1(G(eA'8b*VZmmS1YEkh9pbd@BcVVq(Llf3QJ['&ECGAeT#jLp-"N
`8h4p5C+ZKjA#E0$ekLY1[5(3UEp3kG6rIYkTVm9NEB&6VpcVe+9XTri1Km%&Mdh
@HA'bVQq%X5AVcJ+BUFPkFN)bL)E"43S@,JLjTLAVbaBRkeh!e'9qXKlA0PNrPT'
Xfk16pIYR*1[PaQ5pl"a-EV,q4!P-Rf5pH%kbrN`%c'@BbFPkG8@brU3+-bPC,rA
$()!"SR4BXRjl*``3Yk(`0KKZ0iBC$J2&rMUB(6#ip'I#I!N$3,9T-&8`J6"JU*f
AV,Ie`,4)eMZZJ`("*3"D!U'5*XPk+`S$`PT"F8dj6#N-%$AjbIU!P6!id!!30`"
!kcq$-56V&GA*HSZLC,d(J$@!kFhTbATG&!`Bkb$i"Kcb"JlcaYaNrB`CCLm-L(a
TBV,q2"LHh`F6R+bIGm,!'HHcB2+5p4Ff`)6"G))C!J2(RiZ"JI*c9j2eG@"FZaS
''k#!B"%!"6K'J,#T"JB%QN$XTpLiPA%`@f!Jp"`1Xk-"CLNfYpbMmcS2FU&(6q%
HhG8!N`k6kp'AaF$dJCRLdG-%Q-NHIEdG"KIV"hVdf"+BM6"c2(UA+SmH9q(4MaA
$C(VdSM+2ELhbk(B2$2ASj9NH[4K+RaRLdDY2HI3R&h[dfc-mHPX`G`53!%Da(Vh
9#)pH8qr4kb-mqZF!8K(RdEmqkG&lK(Rd0d$BQ652rP+)4km#XQUd4pm"TEY!r+j
f(RdR#0J*a0CUQ#JB!(UrNdII"S+fJ@(E-)rq`3'2[Kq%[4[Td3p0p1M[ABATkY&
Aic)FLX+2H26PNcckCf$kE+P(McCl-2SGe9jL&B[I[)'80+FTT##Lh'&KCA"-@61
H9XT65*PVUeh0T88Em28[+*IlBp[b,R'LBcYhe3NbaHFFI(aVBk0T+0Z,4aj*@m3
EjqUj[BLRP8'3!2Z,q*-#8C((C0'29I(l+fQ$1iEFckG!,l8(cHH,R&%mq5,+lAT
9"LGY14%A!0cZ!j@m&Q9"Lj8ElqlRF@9mC4&I9mlI,1+Y4+*j#Y-Fb`ldbm*+QQ+
RT"b,$HF"T&9f0BX$l#3hNIY0XZBj(JH4Epe&+QQH1iVjjPi@AYVTD*jQjbR0"1B
Y'a%GCVpRifZ,k8+H9X46YRZ[&T1V+IClLr&hjp3GM+RDHp@1%'$HE`pTaa2,5KR
6ZRMIJkR%(T,,MjC9XKZrf`e+(1D+!@APh"@(9k&8I,%p)jI[hPE-(iM$hp6JAEE
cCiTi[CfA&2&D86l1pBd*3kP[XY5ZjK2X0,)+*K1V26MrdERl`2rSlJ-hZr[!mHi
qF*1l$k5kZj*qkqlZk84dY2hHG$L)A*efGkjAbEeFiQiRBbTfGhIXriRZ$S#ldm*
i@JP2&NqcZPMTR&K4EM*+5-GA'TUqJrqG6Z2Rdm5F&VcC6PkAaQYT0Lmq`qm[jl8
lf"lJHA1#[j,'BMG%fC*ZBU6-&2hY8-3DBkCLl1UmdbLVfj+GZ$9*mjhX!DdIQk"
))F!&N@Z24A*!l'1,4**i+lrH`GhTD)I+@Tb!VhX-I%cCUK2`BAI#Yd4fNEI,5rQ
H@2j*#AmhPMpC`Xr(mKG,H%-XKS6bRE(mZ4*H'F[&%VidPYHAm)kah,rAQdfk8k[
9BCK#(+alf"6B)Q*A-DFEbFaUpe1fR%YQZ+`J5h-R-X0b*9YHmmfdlN`Yfa!XSh`
cmh"lGK'21E169jGa+jVEBYjaqqQ8ap*2S0daPj-fFlh9NE5&l'FrZcS+5I&QI-J
S2V,X!'Qd8q,F-[`UH`"5JX@P,Z5HFk5jCd8i!TUlq&'RBc,qUTSh8aQYkF$&e0!
-XXNTXGj8PNGdYl4M2*LMqMcVAb#,4h+pdd4rY8,G-"NB!0AJeJ2ecUJ-p-I*TlL
R1"l#i33b5ZFmIl'B0a6c!F@m,6lR&22Y'(`R-$B8QHJMU(hik8@kff+Mff+rfk,
+E9'GUNLba#NmZ9M`!3m'm0U5Jla,YHMBceh9hSXT+(*Dj1d!!iM%GQVKRQU6Vdp
N6%9K2,NkANd)8*SF"LI&39%PAeEYpDLKL9F6TLep8SHS#PfqHfaS!NVYQpHKZ(i
mL9FaYX#h5%!42#FCL8(mjfdX1a9)!@9&h"AVRV@hfi0cH@hT1PjdRS`8NYGAQmM
PD%*G!RRPipLZPDQBG'$mCHLMD(HHiK*1e`*#N!!U"E@C'ca,HZ@&@Rc35Lj2lD*
*2B$481413ePUJQlVMQpJH2Yq(S[QYKK$[Ed1)ek*C@GX%bBpj[e+R(Il#9TEH)(
GM2maPiqca06`#KG[9FBrUZCYUhPi#FII@b`VjNr52R`IN[aUrLC@$E`LeX3br9`
#Mj0T1r)@ckDYb6XmQikb1SaP6(!HTLk'R2kS@@aJUAT),"D`T#EJ4bASIRd$eiP
&!SqVjm[SA"iA@aQIVDYB`X6MDpFYABKDB'hF!EF%FKC(A55AeR2m+9rV'934P8"
V*5m[jLJm5E,`BUp56%H6lb(FQkhMFreSdG,pM&YYVeAe5YkPQ)`'FKA(ec"p5Bf
P"8'05-ep),*"`9mcXb[h(V$cpG8mMQEaMLj@Q@K+RV(2fS&(LGq#GNjDcl)6d4$
-cZAM'`lalADH9Jr![+fAICjA%!8I'IF'Z[F%*+6JLA&P!NqZ!TfqUdMlK9bH9rF
*ppX9LkZ#$#3LkQE(#i6ie+dq!3NTdRe9SrZbTlSEJR@N+Z)[@mQDCPGUCGc,ZC0
NmN"c#j)dd,1Q0JJB1CfD0)q-EpM#6PI1Zl3ilR4ISE$VC4mp"dj!3LU%p)mP2+h
D(I!'HY'EX'jZANLcF$'e%5G9M`dR0K1"D#4RTMEU-lhYCMPYQBT,mV9eepaf1''
"BTEh9LLf9i[ijL+q8H!VGr#MjAaP(2qY,9pjKT[XI&dDIck@RbRL2Hbm[S`hDNE
#Q9L#A9I*(cc)2el(0jHC#)c*b%`fMYPJmNf6c,+XMMC&C(B0UH-UQEd+SICNGS9
mkb5ccZ4$*bFHDSVaPaA-E9MCX+U+AhA'bK+r5XHUZbrIQGZ6'FRV-mKA8$EY&!m
XQR`fC3QK+a,XI1j0##6"rQq"@rqr!Xi"F0D(+"aSR1mE"b0[#KGNkbT*YU"B`S8
d8EDLk)%e#ZEU#YP+66F9e912'dB$r[L406HASh'6mYGLM,2!'VZiihZXJ0a84N'
f9i#5G2')C4VKGEmT``f+`eKQL,+p%JB&'1`9+f6lQ6Z4Q(km#NXHRNSjaAX8Ii`
2&EUd1*lbL9ZU+lCEFZpdMZ09i5Lq%jpi)4Bj2(9NU"qeDa[N'F0&qIjcSZc"8,1
kRD,mK&'J'*+e['bAI+KmPlbMJbJAMd+aALV*'b0&qIBUE(V`H`l,&Jc%K"-NKf8
fQ9j)Nj!!M$$&N`%@6V,3MS9m%J+fXl#1K3J@qK(@J(N5-J'CKJ$!X6*4[SHLDFF
`[$PpYB4"GD)F0dHdR&e)b5$&)rZS4Q)Qe6b)Z@ajBl8h$L3bDRB*VC5c"8R0hNB
V(GP,LHVX$PLh)aI$*29Z9ic`[MX%blXcS4d1Z))KBA%f8Efb'YJVVdVUP@$)A1P
1PUfa(%b@Fl$-5C2)k#ijVS1SjT`RQ(f5QK1&qa`,@6D4,$PI8M+`2l-Bf-akB$0
h5'VQ+6,,P[$!JG#6LI,5FAC4[D4!kY*qA&k+PY4,4-HP$-bbb'`kCV2*E*JSGd(
Pq2*"6%D)PXYGDBa6`&JZ5FAJK8Vj1P,&p3KF`Q5XNq3-l'+AHK3ZMT28`h#'H[J
FX36-i3M*FIJb2@Cb("j#`df1IZGT$j1PAe0#XY`23')hL)khmJL0hC'6Zjm"UPj
8ZdH#ZAXJ-#J1P$BBQ)%%Nb$*IH1!JHIklJ#QEibNpL9ZkQZ8j-j9Z%+"X-jAX8"
D68-Hk`aRGLX$0GdU-!brQd,f5qi'YQl4"+X5HjRBaX61J+TZXh%,R5V+9X"Z"er
l'XEAIU@NYPm&QIB4Q(8R0j1T(bmFViGK#%jM3,5,mZZ$*G4RbAQkMT,Nebk+mM+
FXN-,5He`!,`GSL6D`8pQQEMUMLY3q(BTXXhE1`RAfjf`EJR)Edq$e0[$X4a0PP1
al'5@e%iAb3aCS"-13$Y"PGSTQq$D5fV[0#al)ipBHSG4-TLlGcU`'33ahiZB)eP
k*k&3!pj9kX$9CjpNk42"XR#Ib`64')K[[3JM%$f,*%[2Fqc`29G*DXq6"(N%b*C
Hj%!J&`#CjC,8V#0N"[+cL"HcmL5e9e[-HP9*PPjA#%bj&l*A34aS,'L'Q`)FSS#
iT1!U+E+)eU""4'P06,D,MMqDd"L6SfN-#ArD@E#4d#55*1)QSiLVIMNJbXP*j&-
B*S0*-8#*I$`BDC*r`T86fH5RD@Ji5(("Lj,PCcpaJH2R3-,lmd$*dIS-dG8k!d&
Y68llkbH5qQX)QH9+PSNc'-fr&8Z1k5`j6rp5FXa))p-CdEXXe88d%4[rj%V*mH4
RG,G*,P8P4qNNQQL5Ef2mTKq&l1`fd9+#5cLU"#2Sl+Y&Z4'+lMB#FIC$SU94%cU
b4T!!@pNNYBBNf4T"XJcB6K1h#ijk1i&6Rb3j2Qp+DdhbjbMQDjdXUKA)*R*&Jf6
"-##b4a8NpeCN%pZCf!*b2h%R4HQqBbe%Llk4T$',EU-D"N)lfdX1C`'F+$ZRSL9
3i66d&A&)-XN*NX@cNBk(9-S#r28Dm(G*ak$eDE3McVKX-4)N"YPf3DR@,L4acKF
GAHB6#Z-`m#)@6I@a$%c380M4E-DLkR3rqU%dE%`jNZ4pD1A5qSQ1XR2%ff@RD%H
%A,*iSS5f-XP2p*(N*c!k)bd#6m,RN!#,CbSJT$i6J46ac'@'Q3b-A&dK@DVhdh"
X5[88H*fN--H6Na!XTGKDMk#@NXc%pL',A*B1)d6HhLQTYh'MhLE*r6E*j,FE5il
E`iR-E52CI$p5JZT(Bq,`4a1d2j1K[b6SA$$8STHTV5,8eJC+DLhD#8IY2++m,Ik
F80X@),i'cpHRdI%QZH-kT'Qm$A9F6"aG8L%j5UU)cK*XYXR4L(4$DL0d#CC'FfN
L-NBV0#LY`J#N&C8FVBD6JpD85ikDUi5VTJq"8T-[b3-md"XS1JDX*"S')%'V!bD
"E3!mA!m2,eXY1ZSr)jIeD$RNHJ0`H-HSU-B%)i0EB#Mm-V4-29#$FH&EA!-5QfZ
J+,mj(418#Uf,NY5k2($@'5Ae$@3PaaYc#H`cCXPaTTl3FQB[3k"Sm4R#Y&*d[$5
4S#jZ`l*1Y&49XYDm#Nep96!j4Y98bI&m!CNqEj3FjbZ)p(NdQLqJ"h5m-*@Xck(
$GB(%Fc'5jGadeLDG@``UcU'IFS(8[k-dD!U+RDrE4f2+"-[De63'IeTJE3,e)k-
Uk%"6KSX@%8j#ZbBL5`LF1&fi,$P-CN+dUBD&cmM1Q5C"(PA+6ff5ie1@r9E'XE#
&A+r%H2Q8,&&q,Ppbl2#3!)XGV'U`BqP1@SFlM"D$fe+DL3jY$Xdcb6UU#CiGSTU
#rN&f05$*B)K4-[3[Lj%F'$5)**Xf'Ape#N@5Nj%qeU1aLGe)d,&SIVY8dA&)PA%
9G#4FGUaBXK59-C5eL+(Xb&Ah)a8PBh6kGJ86p'F2R-)%T*5$5LI-%a-aXD#1"-$
1HY(ac""dUA)ea(5dK8mLaHUSX0j'1Y3E)fr13EFVGm3Tp50SJr$&8dG+E68#'Df
HA!d!1$1%kp'AQeH*MXpML,S+Y*pQl0(A)!4r0d6Z%BDAePc4m8B$AB+mJ"h5jS[
b5bL#Ud&ee8PXr@LLlRQ-'F3(eKIU5&*rB3U#j9`6ZJK(@iI4R'MHem+Imd5,NN3
AE4FX3L90,"FXTYCd%D)85aHj"-Z'HREjkD[XFZ88GVP[*lQ8Ri[#-&*4hJ&(aiL
1(9P)GijGGD4LXDXG)@"RPH6B'NAfDHX3bE'YQ1cN0T!!pm%"8JACAdC[Qp6pb'M
UZkJ2b1p'5[)"$+&%UHah8(Q5hfQ*8BZLie!,dSdFQQM#mbRcVSKHaJ,mXJF19,E
jc2k"!kFCMFBTKJ5$BDV&mS2"-*0Bc)H5HG*if%96MdC!b'J`*$(Ne+00JJd'3bB
`aT!!T)8'3m*S3r`rBi,aLa0ZarLZb'9H!P(aE3+,#BD%b@`f0K8a*YpSI0M)#*J
*&1KkF*6&NQ#a629*6"edr(U-dIJ)'"+-6aZ06kZU1Y-iK`5#QZ#G-F&&JeAfEi(
a3B["10-,BNSED"KQ5I)*2I,+CaBSH-4)U&jSp+%IR'0*-Nke'#a-DAm,m95#F9E
)&B0P&$4De)A-+Bm2$miH4YEaL&`[MjI-A-ER"F2BTK)Y),ir36r0R*6`i#+bHJV
6Ke-j4j,C'0pbP'mbT6m4bSX(jh2@JXIR'PipF,,)B-"Q[h#KD8JhCD5b5(bTqp0
rh[YeqZ2XAmXVEE*$FYTN"`3TIqYciFJ&CIqi*Mr11IcdR((MP)-XK&r)Z"X5FUA
0NGHRrM+eErZTIalT2IAhM(X""5%KLMVjQmQ6PD0ZTN2rb3K$%C6,)3C,i+mh5-#
IVBamZA(crlrpHhNEbFE'**+E%rljR5r(Ih'dh%L`4p0YaX*r*KL("hij*I"Sqm#
[%,*20M&mEcKka')iqZFV,HBB4Kpp"pRLk#m@`mPFGC,kV6VHJ-dY0"JQ'!bc$Ip
9[mM1[@)aA+e99FkA,EhfNb)mr*ZL2$,cNIj+dmEaXlH$ARmVD8UIS(6ma*F#!T5
I#UCd8QCJmjiM1jJe8rP11DKXblbJr%`fjM#ah94PKAT@jGjrcbY8M-06&rj5ifI
l+ER2j33'R%d2YY`,$!MChciR+%3a%EXc30N5i!fr"$30D"d8mK[3R`3d#ISc51Q
JL-Sl6F3i*9mC!CAh+G'1%#KX(jJCR(-N*%LT$&+fCLVd8NKIc[rkF2UpG!)B!!!
G(d&%3e)$!$,1$e80C684!#*MlP1rYLr0Slb*ce+cQCK*(TP5RL9*+aIB('#ND3S
qQYkN0K'M0`Gl0E3XNd!hJlNF,dFEm[ND!MU4F@G`cUb,lZ`1-L4%CTH$,-GE'*c
eUQFf-+L-KqYJF"AGb("B$KZC$2hqrGjVddCQMVYhlqFI'kBR"8'3!!4"%!5!D(m
AjL24+&jmbb`c3ENCf*ImkpJ1VIfFD6X[-5Q*lc*RR$PASH*`QMmF5fNlI1dRG0q
b!L3D1+B+PM("&*rcHdkBkD05rQ"E15jq5!6Z)`*2hmiU#hY12&f*Mf,jih(jibi
Ba'6$MQ6b5AM)a"6JPc-@RTk+M&0D35HM#d6iTF*SS'*%ZbFerKbIrZf`iqrE('e
NP1Ujik2L,EPTVQf+13jh1XK8'2eqjfLJDL%0bhA'"KDdP*PlKlA6h+1GK-e(rRR
[PZPRjeIb3l00Cf%@QHNMXeceC@MiXB5[MUXZll#JYUeI%4VeLXGiZ&pY`rF3UrJ
a%E*FB49c$%!4Z&T(,c6c4'U-*)ZFA%ADTQ5DI8blNZc$1'+`MkqpkMM'4cYGSXr
KA5JiV#p[%UU0B@)4-i6KL#mr2Qc%$'+)#`"B21rhYEQkNdmaJQi[6%'UJhr0+mB
6iEMX0*)&r'Y`L-P0mF4STjF%G%-iT*pTV10arfq+p1baSCE*i%J-@DIEUIlVF%V
6h8K@"Cd**1d-hCIH8'D+Q%*c#dBF!TEAir`pF'mq+NL(m#H)9$kN(d6PA1aJDK3
fqJ5@8DR"Q#KAZ$1k,S"#l)DBeDiNB4$F-QZdJp#V%U&Yh8M@VA[4kh5H+Alap[V
bH('E`[@**DQhqjjIjp$R$,LdG')(A@Z"2[&K(TeJJ@Y,4*aYqQHrSNPXJheHA9G
GNc"m(m4fVp)(N!$#'N3#Df,*(f)U3j5E[Pk[@lqH#MRGblCb%G845Mm'Yh*M1,N
q-+EU9j!!jNX',kh(p@U&F#dFHfE9X!FIF19Xe3S33"-M0JB3`qY"'N`0Ef')0*)
p2J-dY`1!C!SG$ZAIR98G,3-`KZUfr)!bm%e*aKM*P'QM(F&K1i,Z,%("QT4fHbR
(KUPXLmSPYZ'2Mm'-K83C%UfMC!ak"8Ke1HDi[ffdXq`PrGf,UL0!PqVQU`*H84m
2VeceBSNi2"i@8q2"3rr4GQ4K@-'3!&4k52Hl&i99,c,@C!2@UmiSc01(lFh6e(!
[4$V*GB@50Paplpq8JG4S2RRl,@c31qYDA'jf5*[6YRfB2NdrdhdSc14bE"p'1Q!
hT@VHJLTT*Z5)#6E*6#dY8Fl!4J)T(9Arf#81[eYVk)RU+ia4UY23r8[qiUH2iJS
USBJbN!!A(lkPfrb8RZB38Yb0E6(ZG+m05#N[IEbiC33fC##P@Yb'`6*+jJDm3QT
3p`hl3YIkVqRL"pej2iifR4T0YDbr`T&#eEI8LK)iJi(e9*JQT)45pMSFhDBK*4J
)BA#G$IN"+3@4GS`-l1c`'XaX`B'#C*VJ#Xq05dQ'G)TK$UI%JdUQI%SQA#q0jXD
e6(YVKEJ8D353!"`IX"%j45,rlpA,V@XKaBb01TNZjS4q6#Ne)SRA"#8ak11$IDj
*IH@SrbqF5#`9I0JdA1mcHaRLS8-V+%`-p%)p%H)Gib+)9%CX%'H0D+@%b+jT5NT
U*feh3e#YR'dN!H8bfm43Rf#V6SpJN!!l@S!KEYHd$k"abFH,3)RElX6J!QT%T0R
IlS1BJS3H*k5TT52T&HhRJ#jQ+!34DAHBRD&B0T!!qeeFKjY@B!&ZFCD3!!%6`a@
1*#G2Q(i'8,4M1kIIlL0QQQ!AVYM0-E83T1,98h$p2MF!dUGc3lXG@iEUjQZE!1S
fV`!(Kf1ej&MJS-ef5e4m&-,%B8b8[0cd8BJQ'T[U&MHLfpjKVPZM$hd8@JD(-iZ
qNB18RZTHKG6JjIb6U6pb"a6eC!ij3"L6$IND(MKQ`dBUU,Zp-*qPRXaEU@q@$[6
h281JHfp*#XQX*5AiH5FIc1h5-NYhF&'ljbF"3Ti4(+BTT'fD'QSDe2BZDPX8m1r
64##BaqNq&`#V3lYRb`jdXjXZG@UEZK0,KjU#fMfEKjSZDaZqk2bL$9hf5r4hr+A
l$j9ecQR0L9UQZ%-2[SX`$EbZF`FY8r`LFhRBaBi1q[8JJ*0mEmR3NbcaAE$%4iN
NE(c6f8U)4%0e$lS8*FL8KaYQRb'8Ma(Z2Mr#%+'@8SX3'3Zf6Z5I$#[jT-aS)dD
p&cNc0mKEXElh[r)%K"JVQPQPlUYS[qV+jiEDVfiCDMmQEfLcUDQZIcQQkQCklUL
lXZ62f+Y@"ZpK5ZdYPF)J'%*'a22MXdf2,I+C@DFhQA@ZrEV&ajRL0S#S,`$&"i(
X5CHr-,'mYqle(CDk`ZAAXFMak1%G@Pdr,H-mmd%B"5iQ$0@9P!ZC0ZmNK5T)j!S
@0b$R#ID'GpSR"U-ES'Td"XJ0'$!f2E#2qmCGC$3M4h#5prGKm"F0%CDU*K3Rhp$
Z)`LcQ4HXU*[23L41RK%`B%Q1N!"I9MUK[[eD$J`4!b`r")'ce-P%IhKbE*'CYKj
L0d)4pL!PqKdBih[Zb"4V)5)'3[p*3p)9(%8`ED3U,Bm8ZJ8A-U%*mL8lTLSG-m`
6&SN0SSA*afIkF-%Y1*6JmdJ(-ff%SE"Z*RdNN!")h#ZT-GT'FLmrc8h@@aNHSdP
5#3",ih+cpI4JArULe8+PGM)DT8mNebF`k*FT,H,HrQ1%%,64PQ$lc3J(81&SH3U
GbqiMi8+SRC8BK2!,*-FaG(XBUG&ld6b!SI,*J2Ga"@BFAG6-@JBERU-Q@S&R$LI
P*LrYS06aeaXC1'TGY85F3,+mYreUZ)LKD'q$Br(S5B!Q#G#3!%Pd!e2pDpGFQZP
$`LDYp"HR8l"&k(665NCj8PrTh9p9!T@r@&Ej#$V+e%8ATd0"QRQULUQK#lj6A(1
p2L"'$V*,3JRKkRIDEaT3dqHcZCi(#$!G@9Pbj-GrC*Zi'MpVR(cl(k##G5+"Dkk
"iABe5'a[3%*5E*F)[G-Th08GfZe#cP3A[G4cI(8(4-0&[k+ZjjHQ#p%28)Jk2LK
&JidZ(%+3!-*GmZ'-V!+GJX,dD"P+Iqm*H&20XHMA"GY4#Dd4N!#@V@KH+IQD[X4
GG!Ne+cT6SIKUJd2FMD)3X'UN!-#D8jA&Eqlj5JUF"$l1VbS6+8[rc8rfPR3,Zl4
!FeaVqEQCZ[J,Ba"AilN4lN!$%dUBa)"SY,fYa%2X4qDp9[-2MlkkQ3e+TJG9T$"
S'JGY-'J8AI$4c!82$AVpm8mH+6(bFH95ULAFm3q2HXAq@q("r+im(,U[[hlBmYf
lp$0PJF2ep0G9AhcYLB$ZHrR4BD1XlI!eqZZk0UrqLEBpJ5SKiLD42aV,qrT[KIV
#8(XD3NhJ+P,F-!&DARl8+EkIHCe(*kZh%8eBU6&SM2EN%VLdDPTN@L49UZDRQFk
[0(KNU(dqL2dHDEKppU)8R2HKB1pprilfM"F)mjK6bi49FJ@Ef[G#(3P,ZD6+q"U
TJcZ"a+k-(+,6b(6-!4&apIQ9!Lf#-)[S+AR"5P3ZQLVD(cBeYAIj,!`PrFlNTVe
jhR2(qhSNCq"UL4jTf%&GFNk*j-3&#V66CNj*3hR#1*qE8L@bl[NJ0KDq#'0&UTU
%iD0K`rMT[G[-5H3cm`qkd@M9lCMbeZ50CQE)'8FB4UR(M)j1[RJT,$`l!0Ef-U#
Efdl-@d2L!"'JCMk+c4S&P8+16ZpK@DNA99Qq08!KKJ)SZMKX(0JH!'KfQ0Zl3R$
C%kPB06,8hZASi2c6+0$2Sb53!*VG21R)H@3@p8,4dXeqRVZLJa(SY)6)r![)K#q
5Ueb9A')&9pXIhRc-Ml62lI@TL[BE$fA#)e"(@0K&3Sq)B"bJZ*Dj[4kA[,%XJfB
X#*3&D2JS#%iPU505!j!!aU1Z(bl&YU[A%lbN@lF&@c$Na-HG"PGEU'K8*#-3PKm
VqQP6HePrA`9hP"9b!Jp-Af85#MQ+&DDd31,j%[I8Z-F5YD(Be[heJdpDa$ZQ%"K
ESEUL$#cZ,&MF!&@1XCQpUR6arVi`Gh5RKc`Y$INd1q66pSFp&YlcTlPX6,VXq*p
QUf-NMPGLZh0@fchp+qF-MkjH`)DAI(A$XG'9@mTRZ(lQ,lIT5j08e01EMR6rDSJ
qk(*JSJJmMbjQp*PpL@pIq1X(4HkCQ0&l4fCKlYdDVQAS`MI0G,8lfH(qR3CiJZM
NZhPlbhj",feXd6*N8ST'Ia))Lc(E6eiNC"eQVNZ"NF6DYLTaCdI&mrTiX*13!(8
B5$ZXl@ShH&%DD38VT1dZj'SRQh!madFYhKq'H8%H)$cad)rbH$ei6mjbEhhmIf*
U$DC8Hq&h1859c,aMLCaTf##`QTaM)RiFlkk+4XHiRVLpIPR'DCLFKNJ9#I$-iD!
+Bc0N0U%"Qf$&*XKX43hBLUcBLQ3f[3'EEX@Qbfa+!cE&LNf4fA)0f(*@E$QCEDS
"fj39fe6)P(0)@qiTU1#Vjk@VT@*9DX(!#jUUQ5UZ9RGH!cN5!'(N),'JGREYhbe
mMZrMKI`N"E,95T0j-lV5`IXlaT*#k9&CA('00CGU,9,$Re$F+qlMiC&FVe0[V0q
AH+#1T[C23Yb#d"K"8i(RqrXLDG'MQ$U-rTUJK9#Yr9E&,b$190ThU"65II,6ZeS
JV*mYbQRmk0jpR`lE6PcEd*(-&I'MQdE%Zeqif[BFR)H[EHL8R$(2h5rGhhB5cQ2
U%qpYD*AFb[MG0mma9P12eT0P&V2-m38a(bZ#fiTCYjfF2,&G3(Gl0--B!lTSElK
)Tb,)I!UJ#9QPNhXZ!I&#"$UjA9i[V&6iA38BU[kf1Iqahh(XpE6`4H-9pC$*
39#LLEFr1[`p'@&dPJBNT0Cl[5@kCG%M'DC9H-!hFYSS2V(,-'FUJJC5C0lGP&F5
*19Y@F6P9F!S+UpA9RHZ0'HM5ErcUcem3SkYpH%'&33@&B6D3!)Bbe!TF&1H`64a
*XcYJ%-',X4FdC,rJQ-2,ENT,HAr1R$MB('jIS!NX3+@+p[X+'5TT'F@F0k-*e@L
RY)3UmfGAI'e0Ae&k3N@'&*`%+KM,+YVR2jp61FcjZ5T(lVUpX[r[T*K,YA[dFC'
'$M!#idJqRmJYGhKQ[`%l&`+Rq64X@L9m5G"#LClE@P8bjF`EYDrZC488,9EG+AF
---m'HfQcEQZGj'Pfkfi"l2A2P6i#pX&1QRUB6Ee&4d+B16BYENp%FRUlXN[lRMY
2Jm[G3%N-lf,$rqYR(Dj#L3F`EEXY--NT19@daFqeeQ![XD!JmY@RB$5lZCrc9N9
pSp9TI*,CrdVHpbHp-*MBJZCbm8m#4IJF0*FEdZGPFlNUIIDEb`ATma9cH9ckR$'
A&dQI&mhPNr6jc0p`253YeeUaRB9UeZGp$fB80@c3-[fhJZRT'a(hqDc*q4Z$e+L
e-Rflb94irBj08$$!%&%,31a-5J*kJ6083i68AVkH9-f4UrQ"kX33M#96,&R)d&*
5F6%+Q1EmAQ@FMVf@+YY6rVQi8[cl15iGILil5Y"mfiq"0+)%KVNb3*M6N!!!-PF
'$A1U%QMQbN"L6N%#dP`CA-`CPm!e9`BFFaC*J*XVJj!!15H[hdNJ*+8")2(SaFf
pZ[XIke2qKk#@`QVkbP#ZDDBZPP#9!EP'P3(*c$-4FAJrNNmmrPZG0Fai`0AY0'F
1ZC!!6"*qHr,mABFHZ&NIS%T+I+#Q&H+"mraHjKKf2($Y8##9d2HMiA4)2`Uc2kR
"q96J&6RPE[V#Y!h6iT+h&Alp-Fk6Mk2JLrNJ5p*8VVYeK21cqX5b(kfVT`,SfmT
9J,f,QQMG4Ml'9CM&[eD-Y!J-TTA2FFAfGZY)DAlmhYBbQ-[4-F+B+cfmNYG@04k
TAI8$EL!p,m4X`Fk`U0K'@pHf[PVmddHaR-Ih!bjka6!p#K0FpZYhm!$5Ppr9Ge!
`1*dDkDD*rRUP2QaJ3E!U!Dd+CX*"'(-GXjp`rY5'&&V9K6a@'Q,Q3!4SbQiIc-q
K2PFcdVX&kcTIVd@`k23$%`$3G)Fj["!0+qT!E3IUpF&P'5bVSJN[2*6"i83[Aef
C4ZIAqJ"'ShXlJ!AP`jVkE[fYR##&aX-m*U1Y`-+$mkFS90bPcYQ9XdQT69F1UGG
65*`M[*fZ0LRi,SAk[!BHPBVLd!YTFRf)#`4L9`DZGA3YT[Tf!I5r+$ERPR0*q5d
LkcjH8fMeD6c%qk(G6U1-K1#N[j0BEa([B+NV0Ac"@FXq[,,MSM2*2Ll,(l-b`aA
CmEbcQAh-N3Gdb`ajq@0XKPj![K`-"Ir)%KjX`X113SG8!4D%qUH0(`#FQ)Y`)e-
J(H#XS2(C0r%+d1XSUaaP&4qVq&KPJP8Q!Y9G9$G39Rp'1FfRG%TqKZB)30%p9%R
jrqS%Tj!!CaXN'B$-GYM92B@(,`Spq@HJc)T'+&aGc(5iB-MB'16kDlG'Hm[mfA5
)SqU`Fb$6kBS9#LG,fC!!56E%KL(LDcAj5aKJ+CZ3!"U(''#V+Y0CFQ8PYR9UTFi
,5l0,#'r8[&B$BBUKhpLKQ6kVTF5UFrSc+`Ca"(qSI[LC2fKmT3id6L-CUFYm"!)
&N!!'dKTA'HTlAh'd%*)j5hF',UJkP$%9k'@C-"MI#+5V25HiRY)!k,L@H6[J5Z*
R'LVATJ@d$&1XEqE`#)pZ5"8p+AfN-$KeLNmpp+2X8!%rc8,5EQ#`iE#dFB$-88"
hp6[rKr-90k,4A5a8B-80KG"IpHDCQBF!X8'"f41T0"RabB6V[CqU)eq'j`&dm@i
Z&D3d`YYUUK(HpL`3hSpA$9q9i)Q2%J@1S'12ih$LN!$Y@IDAYfh'bjYAbA#Up`l
rN8rpqJ4h4-lJi5R2E+1%b$#1F*Z*Q*!!"1T&-I4)Pa[BjT05T%8,'1kHECcTNa'
Ifd4T#C!!%"N*4jS%%BK`[EIKJSjjLUTE&*!!r"e)MQ$42")--38"lq2$0KSXc[Y
GaYHb2rRj283DMcKGQ@dFECRTZh"F,SlFmB+LXL8YpNXUjU`cHj!!2-mkh@RR5,@
c0Zf-FH[PFAhP@ej"cDYiV+Th#!#"f48%lDqLQjFGMkjK)$#b)+K0Jb"4R0k@[p6
`5fc$(![FX*amUGV23&ED52P!LC@d,GrU3SUQ@q6YUX9f*Em#-2F#!5BT6TKQmqT
R3a)b`r!k1k4d0cMNm2q,8(mD2EfI(%HkrTKFlGH"G-ZkZ#-2!%"P'JKh+&+%G6q
!NGUcdFrpB6Hl[MMla8`I8qKj4Q!c#Z1)P9U[hA8FQJL&@LUZHURFRI'#54-lEN(
Fq[%BJ4,iDL&26B5(@8FFNm8D)R"10YC6dPD!q0-LG5-l!a8,lBhPH)#!*Bj6Ta'
fhiI8(JhH&Mi0*8)29k#D1Z8,S&2h8'8M(SAY)G&PUaDbQmb4mq-l)A`m`DB0qY5
JUPSTV53j@k8K'c0d,3U[TkTLNJiV#D28IC%!jMr"+lRU2i&BI'9f@IUKD2N"&S(
#beNB#iEUJdJF6$h8K3-!i1[rb#eFa-[2$6`-'fHG&lB%fb0'$'R)HNS!aZdHQ$j
(aRi5*(#TU`#K@9DGGG'V%"SmdJ8K+PKJU[iPJXqZ)T3@bCrS$4D)0Kp*MDj32F3
PM8,*T'USAM(dVAb+(T8P!Yr4jL#TCbGN6,jPVY"Gc5*-`a9&U+LZj+MC0BBI4pL
3!*@eN!!GISU'Kc2kB0k5(hd3kJe(&,PPr5MAJ"Mqp4-m&"Ea'E+r(UjbP5ib&+U
qC*jGFJLG%0$RQedZM!Z9Z&jKPjY"*H4bif*"r&`*Mp(Mf2SS+b3aEV&(0+mTh"h
CPAC,L)%dkbi'9YC&Vlp-M0N$*KXFN!"(pbQM%E9k!!k-UclBaGhjV9cEH)Sf&bp
X,J3IK#Y5YmNZ(@-AQ0BR#23E)9D#3D1()+,Rm#Lf%'B1+*YcE0+LKi!3(L#%G#f
BFY+*Mbm,q+$fE6`Y`l9[4qNaaGdJAm*A4[Ec3@l'UjpEm*VK'PjKlSpmbNMX@H$
!r[4!dfjZ`Bq'Rq`3+Ad#C3h%L`L%T,10NPJ#-F%!ZR&A(#q$8SUXS-6kql$&()&
4FB3*[09YRLfQiZ,NMEZjLX!`I!j$m(Zj63p)"8Q2F,9i0ir6*#S'TS9P9Y10$DD
P`5J1N!"[blN5iC-)RS'S3Q*5fFd56r'KAlIi@PfHKBFHE!NI"d14+dN-Q"6R(F+
8H+!QI*C%*%Df$FDJ)PE%ZPJM#)A4piAAm'h$[iAJr$!Ce1Mi)`*8McJdL!)&m5c
Dp5c-&$ppp-!Y2GdBJ3,V#"biUAZU(I@"!brSlQV(cB$Z2P#I-Kri(JQ,DIF,J3-
[l86Sk1XU[EbQGAL%kXK+Ck)Q3''r+"59rI8XP,ie-J)&-8*"H&#L#(c9+#b'`2k
Ip'!E'PEc&B(84[#@drcI-QKN[SkJ')%&HJRkLbZZ)fLYM[l4!4aa[@@&T9V-P"V
QT&iSD+cU'![R*E-2`-'@Z%"$#B'VZM&4K*mi*Z25*+8Z)fjbT!Hm3mb6k-Sk&M5
*iLILKmY)Fi%a[d*,9+hmE13A3%)*&hf6L`MTB%4#*d+rc8!9KiQI$l[,kXZZPBK
'KJqmm3K!$*56N!#L'[dbGZL(LX"3-m,&GL#dbh0%3+!013`i%"TAFJ12*lq*)0%
hJA)'-@*"pB[GK,BZSd)NGQ*K5k%)8B'`3hD$PM,)31Ka4QP#QNkE6FLikR88)Y"
[pK-d"Zj#iX,Slr01qh$8&9eH5@@Cd1!LiEYVYM&mVqkV0U"%6l#J+VRV"B&LU,2
DG"HAfS2UDUX`6lKhY(r&06rGXI[q"cV6$ADGDJ(l(+42eURqRMTljPaLhkQQ5E*
,V+ZZNVV0*VdVrRp!8M9bY9@U-V0&dlE&%[$`%VQa3pZfQ!$)P-)8&AKP2aiZfmp
e8b0#ke3+2f#Ummf84BKReA()qdV`&U@mC8H[ef(PZ0c!8HK9G%Zc)0LU5EKUlDU
akS@`V+ciQE&bK3[rq!9"Nc"N**,#8c54R0EDQ$(HN!#$%Yi8NXQRb%R6#-Lk)Na
R5Dr`)T8B,Y*Yj@j*j*5'c`XiLqF&mJQTB5DchNm(ee[59l%LFpDkkNYkXm[RrF&
Ee,8&DaS!*@P(RN!%KZDNhE&lUiPB!FqHkE)dd)l8jHTK9Z5X34VdTL5L5CX-,[b
[J,$JXe@$@Vk3!$AEI@RLkI!hjf8+AFrl%,MKTSGdEFejVEp[am6l2"f5@4h`KL&
$lb-ecVIDSllXh0D!D@F$aed0()qN(9,BMKfT6"Dji@"KANcKXQ"GQ5P"bIPN1$X
TK`DR5965Y(f3!!JHZV9PfXV2(0LHGMYYH%4D2AB'+4%@X#fdf3q!Q3cK&FYf8Z9
M#Q*eQ"4ZXfGKlS49`,R#VF*LUDP2`Lj-Kh(mmk48hS0rRk6RVk2BLFTea41cV@Y
jeD'-)cKC*9'G6*N*BjT%-F%P3[M9%8CR@mPC%0B9VrVceJIhVZrP+3L,1T`'R++
[jF+kR-Fk"&CJ!ER8V2"45,)hjBGjY6QA4+M,'Pm3DBmN1Tp&NB1kRd,k%3C8E&G
ja+kbeklbN9ePR9eP6pirF`YAcZ9hm0611YjFJJGbH$11dm`Hm6i)-mCD[U@CJPD
6l'K&30*D0,MS`5TkD,hjJqk0q-4a*hj"BH#'I3"2qTmTR16059q-*ea9-)$Em&'
#UJ-KV6C[X`QI%5b2(hefl6mGZXh-ED%q-&"K)(D(G`jepPje#-Yb!Dm8Mm2-S"2
kk2jPahNFSU3UKG6m8c%%cY6*"&e@%1h$D53KJ!92Jl&B3,JM#XcArm0d#SHPclh
XG9EhND!KG5dSUKr2rTRPi,20hc$ee(6@p,lp[FV22fMYV(Q*`MlIq,HR6frU@GZ
leE`0GI2XXrrAh'mqDflYk,R[fAGk&[hchEmqm1f((rMGiX@,rrBh26Zrr+Zc(4q
qf2)[RhrAh2jdipqD,cbparbpTa[0IEGU&Rhr`mmr0rqp1A$m[a`qDjljQpqF0Ir
[ApkkpQ8M!!!m$N&%3e)$!'NN%&8,E+F!d9bArl[2Hl0XGZ)Dec5%0,NXbhD*b@B
*NNNPD0c%Z+iCNkkT$H,)eY&G+dRF)jkFe+r(lLC4SeLDLV@@i6$L-$3+#8PJ,*-
kcQ)c)')j%Dc2T`ke)##LiJ3VU@MfrIc[[IZm86V-1GrR"aZNTbJRJL"i%YNPAYl
TGZ2&rp3X')"qH4H8UhKT--CKNLalX0pRE3+U9*S@L)[4[`[M8a@6!0Qf5IXR[C5
bL+G+Aa',a&15X8FfC#9YP4$'e*("jZ)@prcRBclVGp-ZI1JA$Hd"TfL"L#Cj-"K
5m11(---fk8fB`#4bQ%[#J!ic3mk6T2cjU[)e64(4Fl!)LZF&fd$)V+RMkQR[J(,
kdi*J3#4Mhh0hFcr%)iTi6Tc&&G%8LXCQ!95S4Uk'pI9rp%VA!a1SXj5YL6H[#%4
pTibqRk`+1@h4N!!'hCV%3paI2S[lprYpTr6eDlf@)ReN4V"U$4)(EHJfC(SUcAU
8+mI,[YFPYVX3KHLN(*e%p$S@RA4KH'MiA30)'P&9Q$"(Z"mE&YEFlCll9*T'1Hd
PaRk[*081dkV(p@[AVqAN%VfE&'0F*+1RY*KAE!r&D6NBER)F5E6J4#4e,RPS0""
Fm1hSjUTc1PHr%j-N!lA$M#D1F%00IY45P4qeMC,JLUE"DF#EBqf)H1Ce'*6cfa$
CM5aeab&V[ND-JcJ'K!1fHQ2F9CD[-Bid4BMKmY&eZJBFV"''D$qDKh%PEKe4!#U
@hd5RFGCT[@kRNN'6YcD-&IYj22FIa2EA4r0hX-J"V8LRV6J%`!4MA"3'"4fLE2!
Fa,4SHPC[&ZH[5Xh-U)XQ@j2I"N4QV`d$#58ED[)KP&Nq@*T'!d1N*R4$La#lrpr
*3QID'9K)!lAr$Q*BD4UfEh&K)'6Z&6)%,)r-k+NU-(U1FRlHfmYeTd5QB'5f*!D
)3)p-abBbaVEGX"JqmL[(Ri"4fiCr$@rK2QJY3paPUrYl@q")%cFDd$`9U%-cK@C
r3%5c!mhr#,5L1B$QmB!*c6LDD3&r%m#PlX$X4+-"b)#jBc%BC3V906P69INQhbQ
BirS!k*cL32NEqrdTflQ0RKP5C'!a%@6UEaM3L#r9d61XSriQ*eKZNVXj)N,8!*3
X(ZJde%&e3e"KrG6UKDLMRX5qjC@m2K"0fB`QR@A@Ll8KCFP,06-M(5AkrZBj)"B
mLYF!Mhm!B`$-6EEd`[4#)%+YKM'q4GckVBRZqBDY!19e[$A'"mHiHqUS',8%8lD
ehJ2hBTXdb+6VGART1EV!8,pBGf%b1f"aNff@QJbe0Y5TbBC$kY[(bql[5I(dY&$
dZ6ieLF4kPPLr9')p%JGBiX"5L30LR83Q'QjLa"*S5G@Tjd21"Sq`15CYlPA2fiF
)84mc6[%NJ%Xf'[8)ZN(q6J8Uqh)E4k!j%)JM+-qfHN0b`kL)Bfjherd18U3JRmc
IQ*le"-qKaV8B(m9a6R*XLT)B''BjNc%ZRVEXFQN1jYRbJ)"k`Np2#!B@arbELXA
S`@*NVhVaG1NZ9ird'DM3HiD$SKrE@4*GP6i$&6&",**0j#-`ecVLHCBCi(EVZHN
3EqIqp$5BfrpSj*lc"!iT-hj`"EEa6RTaL%!d!2iI32J[RXST$0XZlC+L,-%Tj[J
KhXCpS6LI"4X,9jA@&HM8`m93#fZm&4V3Gh9j*!%)bhVUM6!fMqTXIJZ6T-EA!HS
'&+BUHN)L9U486,`PlZ&Y!5H,1X49&UP3*&Y8T)jF1"Jk(!"G86`&"[Z2Clc@38F
"&1%3$p2bERGjJY!EDC'JpV8X-VJeEh4Fb9VkbLLZ'!ja(b8YBe0jHUq8*#**Xq,
U+%5EV46"Jbc#L!K&2jUBT5Va&4LZSSr6"aLR5T[eSL0#fUaKQiQK+MkMp2RF3la
46H)eU0EMG8XG`+YIEF8VA@f"3iDL%PKq&4%Ae20iPDV(m6+UPJmH!Mjd(DpHG3b
[J(S"VrhU+&ifG4#EZY8K[&+U'DmkY4'G4935ZBqb`cekY4R'kPQULhdqC"eeM6S
q-f'Z&MkU(%hc(kb*SkU9I643dmMjA$B`@XM&&ZT@'k8"b-X0!UP)@8HYhJp'f3"
MkLLLkZ3S&k+UeGiG0*9Z-0m!qD0lakKk!&hPq)dK&aUAr2YTB[i6QK9qlPkfBp5
Ib6T[#l8`YXGa[FTIC94fA1&qIa8q6rJIdZX*kApZe*mPX5aNFc!YS*kR)j%k8kr
,RAA)ad,G2D3q)(@R2S$22kP25GeecI,[Ifj8[34!UI&F49GCRLDm`Ti4%L!+`0A
pUSc-$ecK%('rkkTdVc,A80!ZCFNR5J!D@PbD6j!!9Gf2AecN[Q05mb!"*FAJ-F,
AaVBRi*63J0pG0K-+S1KR)i%3k2RZ'A!25Di$U!Fb2S&GARQ,"hME,#$M'd(ZQk4
ZD`ki&j&*91(ZLNp)q$f2N!"h$'9E$%Ll'!A+Ae&HG#`THRU+J@j9A&&CCrjEY-`
Lp`Y`NPJ81h9k-3q,TbjZiH&BI2)Vk+)F5l2PX9c&e%ThZHdF&MGMq`ZQ0ri1Ib(
P*N"-@iIY%)q%iVI'ZZ"%deE2##B+40H*(`eq62LKj2Z0A&Q)S,Xej!,SE%8f09!
fhG&,R`!UPHij$G`+iJ$LIiJV9lZk%JeFEm"K*2&6$c%$!p-l,L-6Kcpj#)Vrjbk
mV23MGqBXSFpr4fFa*)X!%6"ekS#)-"[`lc$J8DN$Q&rQC#R-XH"GjiXm#N+*!+3
qa11UJTF#`)SApi2XNL`cekXYH!f`V0l+XRS,XRU@H`)MT8i!hMTG"!F"cm63@!h
)bjfVGjHrb-1"T!!kMFfiQ-Z!3BS"JcT'f'EeH[Uq5r[dpHZ#8i2''dJ)Xq385dB
`Z)-b@bPH0HT61pJ&["V8"ljr9#eeraULE(EBq[UZ3SMmEAhhU8BFRGRpkbPQ#[M
9dU[eABR8k&B5"daCpmV89f`Jld$+TJ6#3%L!4TBA9686S3R%&1#4J4K)#H3ba`$
NKCam+LE"S,1U0#e86e&LA1b(X@I9&$0pTUaE*cSk$U2M6SL"JcI'G4UG*R5+V1Y
"eVfU9m1Q#8#[Gea54DB`Lc[HMU[i$,22-(dD0@*rcVi2dV&&DS4,LjmU%U-p1(a
NDTrYU"S1J930GDVB08[e)6,'2X-J"N6H(NaGK($YRA@*VAG06E#N6Q5GM($d6+9
l!T+Q&352%C(--I*S"j6BD5#4M-a40$0k+Yh68U0JfkXd[DehLE8EMUUGE*SLTYP
K+mSD0dR20Q'5G1KH(,UFJ5Xd!kHpb$kY"mN*kaRf+U'AhfENrPFaBD!qAJ3V*SB
%"H+iK#'"X14JM)l,9!5f00jS'EGS3&J8c$*Kd)YqLmX!#(2F&6+,66LZrS1l4-m
8mm&pUAlE#L'6HqS`RBQ"&KE83A`EdNJ"aY9'jNT6B96d2QS3i*M"XJj-1(1-bXf
Y'0bL35!Db,KqC%mr6"9c+11ZP$+D(qch&!3TN!!@XU"r@T1UcjC3"5!+cA,'3@B
0bBiL3)Z!UZrS8kZKQ"Fb8MD6%`rp-b*hXXJ,3L3E2&F[1BE2eA4N(*rIL&H-"6r
9rK18CIa(+F[i(k)!bjq*epIqUYBkre&Fk@4G0e,ArUZB2TJ%e6[qF8I#&p&4-!,
[S)234iP"pZ03ep&a'*-XB3iPJ[RSh,0A(k@ZHHA(GMfEG5dkZKE(GAeBlPTFUQX
4AHFXeE(#1KjMhGBlZUdIefe-lVCq5Gdb)0pX3dFK3V0Ef6'EMQFXZbiEcNSf`(Q
+(3485J6mB3!%[eMRZGT95)%i82lMS3kacTmP"-,'HYdYkL8'3-Kp&83HZ%,C4%*
&!dk!VQk'R#,3SBr6AL)5!0J[QMQ#VP883&Z2UJS3a9AA!-JDDY(miRM'LY9@EiS
6-5jUY(H)!EF'1J!@[i$j*8VQPe$p$Pa3ZbPBe`#eTZc&hFF8%TCb0dc+Um+fXbc
6l1L$DScPS&bEhDZ1CbcB"NFh+0H"H%-E2YHATNR"YaaNClPRb"Qdea$4-4EH35B
+8R@e83JB*PM`$JCQKDi6-L$D,QlaA`A!A83!h&m9UTG"am"h-@aM+`%823G#G43
(4biQ&I3K,5m`'i#JJJ`bdP&MQE-iM%ZK8Q%"e5JXS$l`F3ZSTIB&e&*K!I85!+e
Pr!*D,1Ke--"M0f1iVB4J39c0A$R)53PQ-QH6flBh90F3Z4CY8)jR,2`mC49VF9K
3--96T-Vfh8k+E(JG+E+0%+R$X-Np3je3p8jr)ECKd$6ij$F*S&i!N!#C"pGPT3R
)M(mK$1YA,dTLQTYk23ClQ!e[VaJ"iY#-L%)NAfI-iIi*HR9D%%FaJmJ+2a-!V#J
3l@(N)iB'G$i0JTXB!&C-*q%YV@eIkf`$@,-93A(3GjdN)XELGp!('A$aXaJ4li[
GjERmr-iS&RmIKe4JT4mS663&5@fUI9aA,8)$`Z$Dfm'XjSC)3e++q0H#3Fi8)kH
-(TXDNQ6SATihb#qP,38LZ,V+"B8G!'r#,qrkeATdmK5bZ3r''60e5eIREKRNb1"
2X3a%jTS1+$8Ej5#Fmmd)J%8deRdhl9S8(H3F,kYih0!Z"FLBf$jNQAeNL%eCb4`
ff*k6&R!K-qdl0NCAB!"639)q1K)b,&D8$lB(`R*RqaT@)'V0B,Z`&Ch4!Z8`$[F
&pPp!)"mkLkADG"H+IDH&BKqcN!$cBaI#e%-h$h-F5cTqq[%$!JfCa90N3$D[J"'
d&PZR``$D$l0NUpK2#68jlR3NQH3N+f1UQ4VZG2cd0l4*$'j)YT2*JT(qSM1-m'-
)V%p0UL-6*cUVB`ah-LH$9r!KKTVa)BVl%06AXUe[bP[I"%Y%C+81!+3BC5)!l+5
8V3J8,RLI6#'8(39`**RJb*5%`6M*6%Sr$A9m[f!3JFpP$J$V+#Nrmef-X-5!LC)
SDX(Lp$4GSaUC-4KiJpQ06#M)#Jk9!GN6JK1eX8Q29h@6J6Uipf%E*c-T#b,L%U+
k1KJ$8L"'lBBJ$3pC+%+&)K8Be3NHY)-%Yc!"CZK5VR%B-0Y`Y(!TV@feHPF6)M*
JM%[*1X[%JA`-k++,TBREJkX6-V*'S18#ISlMafLm+QHIBRPJ0r5qe8%fP@Bf&3X
,!2XCb$j++2IUS2(#Z%[QdL*MhEM)&Vf)VFjad9&prHUJk0%e!T-*UR&-(442qel
L'S0km#)ch$9,cF#F0eeFSff``N'BM&(,,NZKFf9)dk`*Q644"(pq&[aYd@LX`3'
r0A&Qe+!+aLKFMGJ[!d"VT!i1RJ`jQp'*NcVa1i,36Db6P8)RGB**D`SjqMDj[j[
@q@(bE(-l[0AKM!j30S99M)#V%`XZYU(j++)Rk106M,Gi+(iYm[A[NdEM%+Sa*)@
M$X'N"k3$!531G%VZkqh4PEp2RN9@eBP'0NVQYJbf5iP%jS*6X(ZkS03c`#kTpF0
d(FDq,2F`JDX,*+4!Y*&((R8NHC'dq3+%"T&9fS%l6m,C"!YfcH)80-iRG6h+'BS
mAr3`"Eh5lB@+ERClHiSSm-3`+ijR2%N"lUUBP4!*N!#,54)2A'M(XLH!-Uab,j+
#dJZNITdhc6ji1ZFY"%b[T[T[UUBAVrErqAra**,'(+TV2CN#Rf2++K$G+)NPe$V
mQ2(6#$)FN!#&9"TMLli994ELl'8bQR"*)h`b"'p!9Z+M"#SL$'QR+L6*p06GF%#
I2GC1P3cS%#991eXFj0+45LClH$1lS4KbpA(TQRKhrPd"rdfi%XkF61lh"hGH$P'
&%0EGP`B5a$`,!-Aj*!&maYU2A4B2IR!#'E*$22KF1UTMR-#8Q[A*$k'F)HS%6r*
1[HE$B1BYU+`GXU"!Z9(Y%"6im&q2reDSj28`MITjKj%D%638+F,eDi!c!-M(mQ!
ZlEL8CQaf(B9"jbLR4LYqR2MTJ+#M%blfIr[ab@L%)4cMSJd"XqpiaRfE'mEqip6
1RdQ6T#NLm+R'&'2#"-9f,"P'95)JeYa(!)H(TjKT'9j(pNlA8C8fMlQZrZp[DV(
+Kfj%6P@l9(YRr5!jr$PKKSY4*lLH`Sq2-IY2PrZdZU#3!aGGL,TGi+U2VY+91br
r,&2V5LX&(PUE8l6C&JP&FD5[AP0Q6JCkpAQURaQDpS0`00DU#4H)H*l`@VhIK"'
NPGr8A)N5)4PMKSMPA20A-)"%j5aYU$)j2Rj`6%D5hZFf$`cdU-*#`Jpm`)+0ELe
3,ChSf'`E68p$GVJ`G)MIJ-Tj)h@)RdAL$5brRjEfVk*2rGZ5Z3M)qb)Fc[ik$k+
+B#lD6bjLP'8&Fj&rhJ8+d-*!J6BbKI8'1@8!T-8[-'99AH2)D"DSL`GC9XYK@Hd
5*p0[+E,3IXT#lj9-(XX3$SU1@mkXMC4KSEiH[+Va*Q"+[)(U1+D,#bEd@0-TLp%
2MQ%LUS!d8a*BBY"1#*RmGI`Hk,d`)"NlaIldIIEX)aP-N!#PqNXTZP0I[f%@0l(
P4#M,Bl*"a5Fh8K"'Q8U$8-V-,%Md!Fdhil14IDCB!1QM!2)fS4XbP4[Nkj,4*GB
r*K&R6M$&YCD,Vd9hq'PNjYU$)6*PGe#fJ*!!6YRaYX&RkC-b4Sa69Bb#B09'%P1
4+VINMM)3[9qj3)DEe(2RC&$@3D#-#DdT)#1A5REFUSR39ed9ER0cDCS%l'@%EeK
'q'"@JTJCSR[$(U$blpS4T[RR"B5TD6Y$*()!A+hikIdQ13*F3(I)U0DXqHFT8!&
k@Ff'!H5+)935BQA#KZZkL&A&4JQadKC2@KmcD5J32V"J`MXa565PZD@4"8aN#)h
i#09j,Hc26rJ6V2V+9bhFqURShab8a$QI"@pa@3694GF0*rYr(cI)JH)`!N8$1Uk
(d+RPKkZZF&YaJ%6dA(hB%3#q6p1ieBiUJL6@Iaq*,i-j!k(iKf$d2h*9EikQSZ,
BX6Y&%9@Y9MeI&LjN)[HpHSfA'(e&('ZUdNUmS&GCdU!iG[A29ET*2U(#)J,096d
p#S)8$TKP1SP+S2bBNP'8k8p&'Mb51`F&QlIDa@31K)'fFb(r`d9L%X0AC`3cYiY
*-X&f`1%MB%Ze#9I)r518&-6aikm%4'aYXhG1i$XN"mqh%$ccU6BP9-m8V'%35fI
ZEjM6adYfSld1DM#raJ*MLJ&'XSS2LrC(S3ME65dY$E80%Y+b#)&Sbf5!+R3bMm!
Nc2&4(-*%VD9%HDNhIlM+U-(P+)NkSFTYCP8cS5![H6Z-cP!K3diYmRjI)Qmb4jK
+G-L!Z5j"*5IR0)dC#raUr5r[SQ!GKllQN8*bYb3Rjj[UmBa(h`(a)9LRj+aQ+,4
l!+5liIk4XAe[q%#iX$30`F)JSFki[&i`h)cmD#)FDSdYiedGQK%Jd"CRd!!(9+"
'%mAi)q3mY&#-2dQ0BA)N!Q)d$+HM2QcBK!")8P-J6QQ(BVVp6!YPRD3Y%P"X83$
bBV'@e"1UL[#AZ5PVD4T&#-F1!Rj90,%0U-$`Pc8afQ$5fR!6AE@Lqj+'@P4VJ&2
%JphN,Jd5Q-BU@-jRe9d9FRQ4"l+119k6krTfk5+F)$k%`VFCS'Bc((-`,,jS"%i
XlJ5FR8DrEh&[Z%QUj&bj!kU#-)qCV6B!5)RN+2)K@-k%eNGZUL1-fFIUi&!k9qc
@'%BjM+F$8JC(94BFKQ@hTCFf08BCb0b'KHFb%$FANi3$#*L@1F*pTe!pF4lVE-J
f%2!CB2)R)(XQ++ULc3*$DmkZ+@ERI1l&6p$5Pp-,T*qkPMF@",-QiVK,$Afa1)N
#YNfP!aF2q0*CeKS96i9Y)KNh"aN3*Y@K&5*3)K'Iip)0V8Y*X9Zq"0-)90Ji'4@
h&G1Ki3-"qVB4Z*4Nr,@LUl+LFM*)&XBMc@&1K-U#k'aN)P3*h-kTQLd3r'`DGPE
(#'IJL[X[%iPZh34`1L!6k3e56c@Dd`KDC$*0kRrN,5)edYJjRP!TQMDa5d&$EbV
1()!p6aE@F8DLjpaEB#6)$M8cjbBF,+SS3ZhF1KGAXiP!L3`0[F5%V@HA3*CV$,d
L8lE#TkDBQh"B0)&M1I5UjJH$G!"eDN%`Nk(d$'Rb"P)X!&,C*aR5E56iYq`5PCk
6"b(fGl8Fl,AdX82XXj0(eJYb"N!'@EHN$'#$!&21)1Xq*`%Q4HKXU'[&e%lr2$4
Q),@,)A"YP5%c)hh603*2-(JmL-TGP'd#V6J-0f2EG(I`NbYYU%)&emR9a#`B+SS
#(H-[fNEC4Fk,M4E'dRk@lHB5maTUGE,GCM+IX'bh5HS%fDkmVMd%F8bJQa'&X($
#XI"CZ,r1Bb4a!jG,MQHX[9dL#5M6%NRDb1a06TJJbJZ-N!#6M*!!HeK99VSDSq1
RJe`lGGaP%cY!'jQ+MIi4)RaQ'&ll16&C)ZkeZAELA[Xf%IHf1N08&lf!kb"cl,R
*%5$28Yq@Jq31QVEVei3Xr(A1%$2Z3H!F4C)rG94p'q3%NBd*aMkHXjmPm)f)V+-
,I!Ye"'@c"Hic`HHXkY[5F3ke5ee`ldheLJTh((+[b8f4%5-V9FH0aK1#1F9K%[+
-4e`f0Jj*"U&Z3RQ`i5MVTP!DBX"!&f#%bB'Kk(%B-Xc,MC+)&'Jm912XD9f9bep
B(E6e"T3CXf$fI"P0%8YGNSI6!p6kNLd#P,LC6@8ZXQip!VbNL)8Q[3Qdq@eLRdR
(qDpc5(+,dP9F-9`AZZeY51DqcK!dqC-3D$)Bf"9BU+1&G[@9d)J@K`*l1ZhL#B#
&S+!N$E@$a8FSLl,,Sk(BmbdaUlh3KBqje$rTG8c6#6*!F$lc$!8ApjI6X6"!l9#
Zl#k0lYN#8HK1kpChQTCRU@Q43AX5UL)mqmP4lR,2!VJXVcR+Hph$3%aQkjqHBY5
HGM1EYPbSJ0Bd-1N1F[BN8bl3%8GL3mf%kTN[-[*f)N%k`%NGG03`+-`XNd`&F&4
9D)T'QZL[Y!HP-k$N&11e#$("T1A@bFb84!KVE+2)F#3Zl%l9$,m6UaQHFXJbr-i
K#*''TdM)$X"*"QqdM9i#m4cU3f,[m"388e)er-la$%fThJr&2iQ%5L38N!$lKd-
mXCJkN!!h'U5+'k3mV*`-0'3Kh&Y*S$IId98p!4rk`CBQE*Q,UL!!M&5j!eQJJ`e
5Y!%`B"K9`mm1cm"VeR$')A3fr#aHLiGRkHh1N!"8NBp%k[hTZjc1[hTh[a-J[TP
FY3Z#6)bJj,qlFl&HMGeY0pi58qa$ARBBkJPBT0NSeJ`rQhm'VeRjXlKNcNE#XV2
-F-[BSb&MF)I$F,Z4G8D)*"A63-V0!$1JUP+8[ejZ[)r'4ZR$3fDlM46S`#80eDA
eN5RQDh#UNcZKLU#LI3(CGG!T*pmNjhT*'@)4PI)#!Cd&$SqJ8Zmj,)+Z@S`Y'UV
'rC@"#mJ2'4NQ%[V6"m*LMU0`SY6XA+FcL*JQHLP0ej@4R1a!'VY*4-2*B3fU)T`
$9&&p[T18K0"aNF#kM@eSCDi6D)Lf,QrB5J"HZMM&E"f*`M@fa%T'GK#M"Jk+53,
Vhcq5XK,`1h3U(pFQYHXkEC*M)MNT`Q@f&9[R#3N3)VE#`%Q(*#@C,T(6EU[f-3-
-Rk!PIBA84'!`F,c-A5*DhVS51[FQ,128[1FA,qk#@S$Qj)cYfDJ'JDDQ-DH*1c%
SM9feP)LD98Kb$)qjZhG59)-'#k8Ek(#mT@R(NQ`lST!![4dAh&j#`iKJS6#BaX!
8rE986Qc&irXQ"UNLaf-r"HS"aaSajbmpNN%(B#K22'$CBiKDHX-j+hTiX`3mFCL
MJE-hq3JrX-MYpH9!XBfQ5,&Y('SKTcBF8Z23kjHERjbC&f64VrfK-*JJ3`fU,$3
f0aF(8hQPVeM1PIEUUDJ8cFlTC,J9Ff"`)D@rD`4!5$BTk9DJp3U"K@LT55G'eX"
F!X(i0G%5dp!d(--EbM64ap8K3T@05IBa3Kr))&A$dbKMC5qN#Cc'"!MC5eNFNrM
+-BQ[G#EaPGBN[U**a2*+pcNQ85p2`L*2`N6S3(SDkcL5iZ*ATVL8#G#&mSeJFbQ
U-(`e&YpFD)q1U8Ki5NT`M9T(TD4["+hAT8KlN4H)I!",Gl1PScYIeA@QEkJPKe3
J1UDVh($4"b2XL[*BDB`I85dZk`6lCil@jhQYce+YcqYDRjHd2XrUI+CI0+Mb!@L
ULPeIDhK+!#AP),fi)*``VdbpK%+ZAS)#qa*)hp-Gp1i0HbDFc![L@$IIhU-NeKj
pCZ64K0JfmYU@h&ME2IX+Jq[J1)50*m24#8AB5!Hrq2CF(P85@llibIRY#9'jkR`
i0kaF0Y'"a5jZ(4C0Z&!%*jTLGL(ZrK!AiNV#*qVrXLdK4UiX@jaE(EQmmXR+IF(
Yqd3&fiZaI5rEER)2BlY*5AckhhFX@Td326H6'h2V2*GERbcE(G`'3A4h-'cb*X)
4qB,'hB8,'LAaZb[,[PbA%+00VcfHQiVHmmVHi1U6@P-m`ChZlGMX9")(pVaIYr9
6dA6BZ5MAE-,3[h`jq'L4f-BQfLC2Y0Qp"GZEP85ZSAX&QqJb0Y'9mN5rF%ad$l[
3iIiF&cU8a2,Z(kTXSNNfd9DGLHja6&4dHl&G9"*r#NjH4a0P,2F`PZmPPV0T4ZA
Y2[GkE2FTL9Gklrq5$SJa[8eL1KbbjQkP5N0!rGQ%dC!!Q4pcVm2&Q**`Zar)Ce0
HaUDmNNfC,V8apVG0`!Hl8ZhHK#[95Q,ATEA6D0VX!"6j!2E3!F!N04F()%hEi#l
("B15H+KRCAL*"l$(F3"(h01aq3KB02Rr[('E2'3f&63FNbP"eIN58LZk85%*"i+
QI#4$lSRSB%K*22Zc[TFC'jBa0JK(XJJAF5KQcSi&hE"VBqieZ$DQ*%jr(RpV#3G
M!J-8D6ZUALe@%R-kRl["MZ4e1T*lT504f1%9XdeEP)4hp,24fq5"A[d'Qd,*jDG
T)1,&$F-b8FITq("KNj*)REhq,AB!!q`!kYN"&,+$MNm)LQhHiQ!#TU205[#q'9r
-fKi%idf-m8kCmA('bMLa%PeZ9a+V'c6raKMq1M(mASRK%JPlk(#`ECf5m2Fk$fl
i9)bc3FDP)B,*mpG5m4`44X"!`H4ZebL*GFmrRQ#X(@#XVCHRY)J%GHcSjf-34@a
lPj*il,BR*M+@QKK,RBbPKB68b406k!UEfRSPq0BIIN'+M6CMiiaNic*V*bU*Rrp
AfqVEj-*$C0E1P`E1J)X1Z-#&B58apipr[iHQb&JEPeQl6mT#1Uce+X&cejd,PX"
DNj`a*5C-9a)c(lN[mTq`pN-P-IqH[bfK)f@$0$N1rqFb@i@MqPa*K)ljYa*6V`b
!6F48L8dH"j1+f"$,PH"2krThE`Z+N4%6@%3-I8%#"rq0VIN*kH$GmhlJBS#aJ`$
MI6r&*)V&b&m&``VEiP85Hrl2R!3lp"hXd'YPj[f6D2Ta-"aPfd#59IrMcf(+i"6
JQ4AV!GF"aVLfX1QcB$M#YZ%iPMmjC',-H*UBFINE6li)GZ`42Im#pV*0b$$260[
B5f3`dN($[Nm10(i5$,Ha,5#88irqcjQ-@6XBXfSG'5@1JA[B0M"UcSp2'BP40+6
U0QZhUjXa5JR(2a-'$T+HpLr6pB`"6l1!i4Y#`1"J%Si`pXq(hfI$lU"KhbF$Sam
,60UX*$BqrqejM'af-,+T&B+!R`L6"fQYZFG`8Q"4@,&HG&eN`rj#M2q,-'b!JQM
Kpb-X%cc0-X%hj119KLfaB,f5f,UQk`F-U"#622IY'hH`j8VLmErmkNQ@pAD`V&G
V$diGKiX-fMlP5JN0R"eEI0ba58`#F3krF(iR!pj2-e,rKTh8JbIP3B%*Fem+pc)
fY4#E&MJ)29JN-`'(dPIRrL8lZPCfG%NCJ#aF5p9G3HT"0'4QJ&aHR2hQVpNN9V*
*,(1!Mi85ZHG4PGf&Re'9hHe+F2iENhj!j(kPPV&ZK`0m,%6(HqfXfIR!8cpRc'X
KjLe`!)jJXF`B(0C[61[2h%D$SJ+F@KRB@#J09`!EB41@Ml,&ed&FFXrFrlr"#`*
Bb3KJQ4eX"2IB5IYNmEpYB)bXCBcFX34')X-GbcfFpKdCLB2,VRjmmhK'#Z##-FE
$KVC&#IkYfZGm&)$VbNS',TEC`B@$+5$air'9cl0-9mY!a3iC91Lb"4R[rS1(meK
QDD(-XN!#&JSE[J-3r2HYLJq)T*TD-I`iK[BLQd"8C`)JUEUeYrqB@-%BTXJ-+f)
NX%FQ!*!!qEelErXYXB)GD93qdMerqHeIcq64hmrNmE8cZDRrpjS5AE@)L3HjIKN
CkVFN*J30(NXI9'A[@iNSel4FAHC0["8m`L@cV)cLhMl#Ek+HMD4d#Dk[609BGLE
ib+iRGjeE-*cpadq056(bC#(lm)SV0K9HAABNDTf3!2+Rjeh2'dl3)Mj$0ApbGh(
3PiF"e0jH0#&BVBB0(Ac6,TrR8Yj`80k3!2M$lT0R`Tlc'*jChR!jZDE)[X(UFVP
S5cUfa#i+A9KdZY!hrf(@b9IeekiZZr`dVLE#+qlEP9GHc5F%IBQVbhbH(!`TE!e
rRFQ&K$rX+MU$lI9X1dV"&4))%&'5cd26#(qphT'%4@B@RFNj#3@[ek'3!'QUH2B
k(9@1'@!NPCDh5-BB9C&0#rMJKEUZ8l)5rjUX+U%+P4Ld4l"+9$hf#&5Md[P-6,C
r[+H,+q@,2H1()+kd+f!DVlM5VU,4Tk$)iH-eHr4lZL![U3RD$4lY'P,LqN!dU4@
(eE$RF[ZQQ42fQ$f2r1EP4!`9HfkUi5LL6YC&(rRTlX39,NDf&#)$GP!'&&r,,pC
ImaCIA($AiC6"a2AA`Y(0ZbB%,bjipr$HmJiHMVSZ@Lp5a"Gba19QG)D)If)4X8M
iYFq+UB2eL0$YB0@i$LE+%G,epkAVEHC)AI3R*bhG"X9qq'kM'(Qi-"bjh%iJ*r8
T&3!6EQ-I#BLhlBk0TSCD5A`qR-fF9),LUIceqjA8eTqXhcN[GEH1'HeMYSErSVh
925)8dFLUD'Dj4f"%mGCF8Gmm&h+Ae&cCpH)[lQ('38Ci6e3iJ8l$ZIalA-9V([I
Mp36hi$8I&Bkbh-Yj"+pXVZ$PjQe0j*bH0*TMU0a[K(--UY,p+,r$pES1S)KR4P(
YIj0Nj&ZZ0-%SB&X4Z!01Rk[Ni8"JSe1X)iaZ'J*(c,$)$%`QjY3,!dr&2PBYYMk
8E+ILU'p"*$BEjS@"&)FM3jb+$B#Mc@%iJrJPNS)!H*im$$0%@DM!6!NU4h'%mLB
hZ@Vb$hLJBfJkpf-j[lc8CEB%6,&Ba!#MlhaE6GQU8#X95XXef%M1Yr-0Bj&PXdj
!1'ef,"32'#$+R"pUBFAAJV%N+(@&i!KH1qY1*S`UYp9m'B$,@Hj"0"!a5HIkki&
'GYdRA'mBdrrjcMY*K)3Z"UJ,5TKCKBXRA&)(4Td1QN)DRFrc%%PPf+F0BpB,H[j
m1'8P*hPbNfSBbcPAQS1T9-aF,X+"a&f"68("J5V9VPfYJ!dYAA)I4U%[*95dV2C
!$Ad3H+d3KQT2[(0RjNjbdX05FmC04#-Hl&[`CF$#+LZmh[GPJ"b$)H$CV614pQ-
hfH)f$(b4pT,SFK'kG-kkNjbL6C8d82HLc1D2BAmM%G6-LFBk!$U`MhA[hYpU`BF
8G4'$@9N*NSIK@YT-5`FkG)jp(M2f9Ndl1[1Rl"9c@9`j-N&'A3hm&SLC$)kABE!
qRcf("&$Cmh-[Na%epdk)&RNV&S+$$SR%2B*CH(rBJLMQJXm4*2+9drRIF6Q#0KB
%Eca+l+&Z*$HAE!`NHijp),R2dkX"J`CYc6686-ZdHR1#ee#Sa,3XZ,DKQIX'KXj
cLkPi9c6f`9eNG%-90Sl!0H3'kf3+2Yl+KD!43lk6&Ael'88X3(c0R$8@jej'eAd
IZ3Q`S%T(e$Ec&5*(PNNZN!!J@Sf6d02YRRR&GcH%2AG58Fd#!i9X3j%iTRPNqXB
4eE-M'Q2Afl5[1bkAb+,6K60r+NALJ%XDDUCC@H6,D2C6*B1C[j@Ub`YZZ$UIrX!
f0N`$)j&j$N)Di@kj%Md*$lCJ3#YS3%`F@qQqekJKdQ"")9A[ih#"6-iXSL+kClD
cBUh[e&f%a&'#i6TlVL!'DUdTZdXL"Y50U#T(FBqD'(2&XPF$b31iQ8U*YTMk4XL
&$Gq9"If$dK88IYa%696l'ZPEP$dA4[fXl,N8C6fKcSDVlQlTm24U1S%Z#bACZ`P
d`'R)"'G5&)#-,"kmP#C[KlM@Rf+116MBJ%Dd`F@*#e-eGN0d0YXkmV5'#)F+XV5
4L-`*9mFSNPkfGk)q,%5L-`d4XL58F(1UdXqZPcdB&SBVGIHpXmcC-L905je05m1
TfSbX%Kqhp3J+)E02YCJ%DS'*lidaQkib0d`04De%CPAI'+&#DZSB-e5*'BKSF6#
r@BIj*S'T4LVCrcfcP+pjVbbGrml(XC6hr'FXYC-5&IHdDE%dD6iL-D@"h!kNkN"
8U&$'Np8X#'d0GE,1X"Q9%QIV&6`N3*Fe'XHd90eTDE3+GY%T)%A8,L!&"EbdS0!
+me15'rH!d5H,m##5UCJ-dR3+%GH`&F1D6'L%[G$FcU'a-G-f3lFBIli6KG*dN!#
)ZQ%XrFkGPdPX1h05UMh9Mdc8jdY[8Jmb4+X+V0)[)c%R1H15+pH@S$'UD6RY*G0
A#kT'5XkpF*6bMGp5"lA(Hh)bEad@YX'02b+lq5llZ![VG#r%0C'l189*`mRNlXZ
(q[-EaAk3!24&6''3!*Vq2$4[IA5&eqCI1%5&a,[c4eR#'56d8Y0c'jT@DNDFD2C
MmprRTp2Q@RHqK5AiN!"`RTV+6M5[8l2Y@662BR0prJhD[-+G[jmPc%$##@V'ldF
cNjV*)66eE"#Aj8%dX33V%Qj5XhBAQSHTD9U&CKlE[&IHA$Lqd+)B8f'Ldke9PAI
!cDqQI!Y%k(U!f(FPG`pA98'cdH+V+YpL+cjQ5d8*TA$,+)AEIFK@%$[89e#0E8F
qUXVI9b#kbJUSf*5DmSR@UJ)5i(e)(4&T4a6E+*c6P6rqI(*4eSaV03A0@,L#)N0
8N!$32UdLKf6NQ)UZ3m%RT%`i4CHS#6YKRPQCRdJPU$$cF$@()5)-88aqiYXA)IC
Ek9[a$d%Ie)[m[$"8C6KpjS@5$qrQH83*4[r$Ze&0*DU&K-[9M@4&cVb8D(*!8Sk
A,)iN&VBeQq8LpQlbbcae)1F9mB!V0kVJ"p@3!-1R`JP4Y36IT#*5e"aUa%Ae2$9
-SPT+$BfSAUH'8e3[8D0C4+'lD(6!A9p-6jJ5"(+U2U61UPF#%"`Tj9ele`6pHB4
iK$qVjYrH@mdY*c-JK+D+$k@l,-+P,[%!95hYrhhcC[Z!Pp&JQA!0!pIiUU2q@(9
8J50eSG&XbC1kVB1b[HkN[jJqUJhpr+f6q-%bU,biP`UL*FAmXpG3!A)2A(aA[H5
+qPrUM5S`5#`8&J)Cj!RJJ)(N%r`kHi6&@EL))T&p@'c860+'3bHiX5#2Q0a3JkX
CI)c!2G`2h-EUQUU#2(S3"a*MDMeY4i-F25BI'Lh)5kHL,Yc8*%1hSf!H$cd8a3K
&i(i[d2@GU2lS"M"qKjDIPKj5CT49cXQ%`c&e4mAY--%pUcbiZUabRVb0#VS!m2N
Y2TJcNSH45Ndj(P(blJAQ-UCK3qbfGb5iJ9"42YKfSUXS2Be9q9Z-DSP5YkfXZ"m
*b01QAPSJ2FhqS!+lfdN6(+$8mlT6TQ+)J(6""GAG)V%)aArXYaGI&"-+-"+T%#6
YUkaJRbQV4eP`R@%UCT8`U3-IR1F(+6JFj3'rT@rTU`$iZh@cTm45S0XSj41(&FC
M0mJp0Ni2L+"#cJVfd1[,RE4&Um,IL0U2B,#A1GXV61P6Q0+A3S469R*DU&JUf9"
LTJGb5'Jm!ZrkIbK4FAJq#`+hkGT&IFQ2V5JV+0bC`T!!BVDDmXU3!%D+[PV6P3#
"&"T08X5P)(d+Mr0Sm-#0DH`*FYhB)VRjj4TEf`1pB%%a(K&b8db(k-X24IX%9k!
`QYP$0V+P)V3b1kN5HL1j*%S4pA$(9YaEDR$C[E&*4F"$D$G!kS1[PUEC$jJaN!"
)jcbFG1)X-r363Q%Ja8"bRd*44[4T2')J`SpEUli-J)`UU$%1E8FJcdp5)#maRDl
*L1Xk`GQ!UMbR**Il!9C4X'8TNQf9R,50RDa+C205'eUN$3bjJA,ji(jA6F(,)+Q
bLKQ%qU#B943R3P@r#@(*AJG31345"C!!aJmKMD@%cNBZ%4(H[jHU,)E5U5JZA8+
c"G26K-)BAKmYH&P!j3,[VA0UjZ'("9k"IUT1Lb`,&CNUXc@-hEMj-a(*'N-l+e6
c*JYihP2Ad@FCdr#S+fb!kkeeK&$&NKjD#!KXTl!8R-hm11i8,LEPCC`jDDa+CZC
(SjAV$ahelbr)aFYBm%a$dK9L53pGie)eHkRK+C)E*q@%6$6ZSNV6$A#,D2"3THK
SThk8ST!!N6Y$bU'MRX-&ca"*`B'f&ZS8-S$Tf8YTM!dQ9P843kUi!dD1QXSZUNM
M2b%8840UC"HVi3Dq0&'"Q49l-CQMe"8FfK5*`"SL0(NUFZr"+iaB8+Q@GB-#4b8
'XD@Aa*DSa*Ejf4*Ee1X5@e3,X88p6Q`KFQ1*6dN-8"q3!"Q5*cH+jB6VH-3@!h[
),2pPCil(MbSJZXbj@I!-$9@RmQj51%#i2QUaV9B20$QLFl4,C*pkr[q'IBaYa#$
ZlfGJS%8HHPR&1i4#%i1H`-1+S-jT+([GId)#KC*6+!U$H4B&#ma#&BpKFUB8h#K
CN3TQ+#Lc#@N3#LMa3j&f6lI9&2`8NcQ#aQp#CMKleV&+'Y0#B9Y0j4p$iEJCr8m
2YILcXYd3L'6PEiBSKPl6M)S8D@GHk!JbE50qc*L)Q@Am-*T(BU5qIiLIcc%G%dh
R`4Lj4MpiLe9pLS3kj@+p@YP3,mK$c4''@R08EA9[ak[&[CQ@UqEITD$"-af&[0'
$Y
P@S"Zb"@[J)i'0cHKUa3A$FC!X-ST!!djV+0D%kQR6!pdP[pZDD[Zb(NE8
ICd"V%T!!Lc2i4#F$8bMi0YBlf$p,UXi4DN9AE5KFS&iJB&c%il$N)JGZ`S$9)lZ
#pa#!SU*%HR,KT-`Pa'$9H3Na#+6$l06$$&khF'3AQ-NQKS@H359(-a@kcDVURh,
ISJmi$9QC`hQ28*dINb[&j',kf"3MfriQ+p*Y%#TQc5pq&+V()+$B2@M"6b%jG+m
cD#2f(5++"1i!m!r6`ciB%5d-a6p#8GL9lm2)99Aj2P$f(PG0j50kNaF1jLJ-8YS
)44"Cf[A4ZI`@Ha3UZCa$Y%&5RG8h5'QbdS0C)PD[8$JAMLb1KJ9SeYX)eN3J#+K
8$i8,&G*EUFUZ`aM3lQ%EiP*")#J3N48iBNfr&X%"j3S"$eKa"Uad'[ZAlSifYFG
J9MLKr[$Ieah,XR&E,e2*MdTU,L2Zb)eEMZUm9K4VD8,*e[J"bcS,HT!!qGI6Jk8
!E*B"hG6mYU`J&`&cTaLRTV&9hQD2)S@Q"5L68"&m'cP6MmP&mq*BkL'SSkGqY2p
M&%kXlDaL3C*)P$8Mee!N`l*A'5N0`!6m+P`8YePHX@q$F4k'@N4X)k5!'3HfMA4
1(Q@L1cLAZMFA)$!p&[dq(Vh#NMH$Q$E$*'RQ+Xb8FU3P50%Eb-AdP03*#Y55MIk
HapMMXkSTHS1C2CK2'*LI$5b*aicSQ9&a-`e*$f"JGjaHlK)%NTJd+4Vei`2le#J
U)`'&),GAQ(Xb"F-+f',QlGQC91`NUP1J+38Z%4XbELBK(K6-b`#DUpYL!"d%1*E
E"##iI,%Z!&`q9aH-!Zf)%rKE2LIJH06@mRX*0!C3I@Ij[H-fQf6%'RP!jm*'2(T
,"Q2,C`Z,dI!DfSK"f32-3*--*5@3!!m%iQ8!%k@KM6D"BAT-SA@`r5+QMHSmcq*
"1E03m*i@3+GJi(IVQ,V-SqNA-DRa`0f'iBB80R5&9C+FKUL0)5Ffcei+["l3FA#
RVJp,AA[Q1!T5#ESUXk@+&eRC*jB%f2lTX!cBFQcB'MU1#`1IG'Hh%Q$,jM*JDa4
aR3#E0,RX!BUS5Fm@#EKPRj!!J&ZfVqC!YJ&EZ!6FF190HL$Eh#hbX)`JM(mH3K!
rA[P*FDCFr)C)JLTNH`D0*N("`fG-5lPlA&Hj@riabYebKh*RpM"ADMEC(pqJU4+
VjZC)Jr+[(iF3*bAPlFH&5e$`R!e*ZhVhii#NhSeAUP+F%GZ)eZCEe"Q'k`)5-UU
0L0Tk#AbaBN9(U6!rZmTR&P3qmm&HN!$ACDP)C3C+),*`kd&k9)4+jQjN0mTb
$$&TKfL-A`V12#[X&!)J)L$FCbKfN#B*e$hpb"D"2Lc`I[#@a4LdJ`M9$$5)b3h(
cffZbPYZNB$`P"q-c(-&il3[fB,afNK5-,j'm33)KK@HKD)[T(drB5fF#A6+[Q#`
2%BA9!"RSA[j-cB(Pca*T)Z-qJi*U4kHBUAS)'%iSiJY!QFX+cS61%T+!"hBq2X4
4E(18ZD)2hBTqkjc$%5"qV$kpMi)qZDTiKEfUBQBp3(28RL4h&S-jj!b404AF96!
ee)VK(-G`dV&K+JC`(*X'S'VJB9PD*SP-L@c&QXTj+&3[Nij@1P+BdPr32@b3!"F
U,rQcY!rpAl0e$Mh'd%dqIlYZ)6bbFKHA6@#bJ*D3!-ef9)iA4'!SfTL+balcE''
2Xqa21h!0(r5)eG!4%[*3"N)@,UZikE-bB8r0Y&j*L%-L&KJ8T%XHZR)T,E"HTpL
H%US-$R+IK*r*3%[ZJ""Ujk'UmMAP`qcP4G!Dcpq(i23G-N5kUXUfBpYj9eRCA&G
CCCCZ`"`Dq&E`!5V5m2KhkA8H+25%&&!!R8!q#P#hlBTDja%MchHL#N@F#Q9rq#5
UH[-IP@4Z6&@9Gp@0dFF9-Yc[MN8bLSljBakB4VXESX,"8(@,U1AFJXVZp0hTZpQ
M562Z1@`B3-A21GG34AUKb!M[aY4L'j!!!)CQ2a,Ud-0p%T9&DJTkV0kZBU0IM$D
`3Z+fc%j2)d-TL33ET#*3-Y'KQ4P2-b*$K!,BLZK)81`0Q2206h[9djqL!%-mQ!9
9dL!$KlL9K0,cb$$lSj+UZ$3&Slr1)h85R8X6U)id4"a6U#R[JUVdmY56dL9DT#S
HNbr5K20IPNc#CH[08CfTej5[TmI66Le'J9(lE#ITiM(1*`V-B%bBGkfQmMbQd#*
P2ck,XF((f0!*0TadX!'&NBN+#f!`R-Ifk6"#N5+M0fc&a1"MqmmY+&Z[Zd3CJ-Q
L$pN5eR%,D,1jM5f!B6p@63[N[m`@D*-LShl+&-`GJ@G2N!$BjAPIQVjR'URqr"P
N8B#(qlZSmLkILS`m55FS)(00eIGkm$1#Rb"q#SqAcBX2YZ2D*1D1-4k3!*qP,Qa
p8*bX)0ilZNHK!YrKF,3)"V6-CdcSNPb#FVRAEZl"id(,5R)r3YDTl0+TAVq3!&3
!3X!!F(+cQ2%6K4d#j8r&4@5+VN*D%%3[I4C4SH38!5"DiUY%X5+9p)K"&TaPL6A
6dU%`PQ6ZVkQDPZkHVfddP5V38[&PS4C(eEqYU&D%)(e"Upj0ULarH*`CpRBbe3+
NP@`i3flIY0!aKA9ISY9p#98fUPJc*!5YFGT1!5S0NMlSFBmdVETadk,LN!#QRM4
'UI&,X)#FRcEm(%C[6EJ34@CG)*H!V'C(*FUY+2`*aS2&!4JQh-C'4P)Q9ZNH'AT
6"Bl33q,TTB0P8ZFPe$IUH!`X*M#F[k$FLdV'9H9HN!$D'M5'J4JHC5L8L4Rqb!!
mE#NV(kD#bZb2lj!!#YIA0GI0B!G)Nc"HFY(Vr"+2)5NaLJShNSZPQVZNiGl[T@Y
$Z#BM88dSMRNq(KFehiim68[2HTYP*bHb8e%J+RU-F6P,&D@ikd9ZqLr8e%3a109
i(,Eil6lZ!`Mbbae%IiNA#LADcPJfGmNX5pHU'SH#-M)fAQ$L*iH)88F!&B9E8[J
3f&)C`-Y8H43"`&8%#jV+X`6BX%6j)-b*4(!ERmh4-E*+eGIXB%-Z@"m2MGKi')q
0[PZhDKi9dI8GKp#BXU@rN[k+B39e09M(05KN"`r`4ZeXN6d%!FAUm'Vf#!5U-Sa
"b81#!9#h+Kj%bFf"&NCJ6XENHPN!K@+'(Yi09P%A,5cJ(C!!Q*1L+QkN&+Pd&F,
@IIBVf4-Sb'aLkNC$(qq8h6d'L*M!k#BSm+B0!$Kk69GC`G[di&AC6)i+)c[V[M1
3!*Vj[`lGAI!f!UKR5Y2DUllFLD+VU21i"&bD5EQM4pBb8$%iJ#)(5mK"c69EbY!
&ZFHZ3Qb6kbia(K8)pYS!)p9D'9c%VrAa)3#$@6,",P`b`8U%LZeAh&Yai5B4m*&
F2MS))KE!#+RFDldECMY3HaPN9F&4jTT(+"aM5B"%"`3-`#K36f"JLr&D,lm&`&8
[E5[)h6!E881bJaY$L6J(-GCAPK*k8RN*(mR+*Kc'MBX)#JP&&Jjmk@dI!C9HHU1
p-Lk4kD3hG3djj%J(SBP#iNLSS5mEA8$$NT*l9jdRjZQr-NU&QA5,0RehemP*2UQ
D29K-STe@IAGr&&4Uf5"9*)hVZdR*e`9BT*`aXEkpF+pZ!53eH)"5cdAJB1+E*Rf
,`+QrL"iI,AVNST-9AN3P9+c&i1M"4e,ficTr!!!aL8&%3e)$!&JL$e80CNB4%#(
MlQ(rEEq@U[6QllUqZClQmEQZUhUUYRT"md4f8MF'l-S#[@iQXl2)RmI@mT!!MZZ
EZB83`KAYjjFGF-U-L%k21"F1%fZ5m6cVC"kh%&l2`RU%F(S$)i6P@BI4J)%QhD5
EI6-HkqrIhrrhG4dJ[lXNlb8[2`!9GeiNmb!b)K)Km3!4)JCIDC6*@!`rXUpC!#N
Q"l"*#+,Cl%(J*,2SI$2R`#a&,*AJHr2q['r##2kqXb$M29bpVCBKMfMd51[34iE
HEQL4%lI$KBTBl(HrB-@$B+jGM6BrC`6lfrd@hpH,T"&%q"T@$+410j!!4@%JAKK
)i3`#k3*IHS**R#qRYL)J,1e[ND8i)MNQ$TH4Gkc21GlS(r!2!'arf"r(cf9eDh-
FbU)b'T3@haK-Y,,iV`'IKIP!,"N"+lJF*P`kQB3*Qc$Gr6!E409iQ6GlL[rD&Z&
L'9UPe)!-6NmFp9&,I)b,MkK'r0'2c$L3!%D,Vr@S5eRd5mQY!)MVa183L-U,8M@
0d1mlFmVaj4C(GiTKcq$X4AAA&I'!p[[1M2*!Trk!0Pebe'9ka'9mR)bSmU3+fLF
YXQG$KkpCR6!d@iYX4M$G$"!j40"a(8+X1Pr'Q(r8j[!Eb@*YDNP'r3plQY9D+[k
SEHQZE8#1@mCY-0`U)p6I"B!Jc-X3a2PSHBJ%mT!!XA'`f`ZS-51J4KBV+Y$IJDA
fE!q$%F1IXX&rD2'8'%'93-U8GA"Tk@*')3Qm&''F(5'FeAQqX(aVpf53!&-A#,m
rbphGEhR#D5b(%QaejY8H)pR@$Y"iZI,)4H@4+*B'pYiI$ICh'5'("E$ZZGXKGHH
M(kPD3A[qrQ45@H!A#mlZ-T)#eLF$V@%$j6#bN!#6'Xc3EQY[E2GGBC0&!P%VLZc
kSM[5B&R`'6PTYTfJBXT*HpZ*3Riiam&%0M)T-8dPTNNaR9cZ!T!!-"R!T6RXX$*
S-JD$rI2lT1TZ'IN+JN3A-c+mi[4d+(8k&[-P$5TX3)XRN!$+kJ&$qV#aF6HVTKT
[6PThRLJXHCI[Y"K,"+`a[+AYY!!kUEXS,fZ!P+ammFpDe0655l%kIpBP3AkkPh8
[e,UeTQi@&P)hQMH1)JSESTYjXBQ8mjS-`i!#MQjHD'BPbN%a`IdX[R63X26SiN+
Z-Vh!4!(a"M'edV4Z'kbI9H*N"&-c-Cd3ddQT&pDk&jA#UXUKQ$l,kT2*F"F*AMc
bX#*i+Dp6)IPB3$llD'Mh&l0aU(Xj2-r&m,T&h8D9L2V8d4"[-)ZN"ch`UAM!EIj
q$4)K*,"Ymlb9TR2E,GKd+iXAKYGYj(1QamZA)@$mjPa1KJ8S1+9*fAD#0qDIpiR
#I%MeCh,5m#509&X(LeX0#EL3!!Yq%KI[3b@jZ#G0G'P@R@'H)T8%`6d$``'B"'K
Pm`&8d*YQSP@!*BmZp,YFT3b+I1q*4)&ArBQ+'CfKmJSAXe+Sr'&-&+T(VmV&4+A
GSmY[Y-$SFEQTDkk!e!B,`4ZBLU!B0LP#VN6e@h%%UPr)UeKFb2r5ULp2UcLP0Ek
b8kRkBMT%V5F''1CjK48&LJ+LC1Lj0N2ERER6jqHN+96[cVR!q%HlfbRiB@ESAJB
*"bA`U6+@N!!#dVLlq$XmQKq*0R%!&VlZeCKjFLl0aEF&ZEMmjccf5j(h([CN,NA
a8h%TL"qAHZdU#ZDCMC-K8LX39qaVf,3p)pAHBep9ReCHV6cf9H8+jC9al+Z[ZT9
A)GVDSiilU3lHSLrFJ%$UAf6-DfK$e6!T,iE#l&cB`L#b19NkEQ[XQ#iYD,[['e-
!ZQaE1`[hFZr'UXEHM9AkZe$p@fR+jJ-)$DEmb[`L4$LmNBA,bT`!iab"a`1X9Md
MDY&9&TSf'5#ba1*-SDThHGX&UEjfX0IVAP&Hj`rfqUZEP0IHBei$JYfmS,`-%E[
a+$-@kC8h4D,28A!94UACe5,Y-mq#J#L(Na$+Q9`1XL1FT#2#Ci$Y!"-6K(lJid1
BC*P96YQ@'+6hK'8lY"THBJ*kE`6e&0kJZ`5PXe`&Pr%Z1X"p`&6S'-C8hrKNH0)
1F[fZE$h9m2A(a3B5cK)V3$K0Q,4GQ"i@Dd94G1FF6(DC-BpZY#,lVZ6`hiC+K,N
b#+%"AdQV3NM-M24h!"L-FSFb,#S5+M4YairjkhY3%GTE5-p2r@hBUJ4rGNTFeh#
5cAPfN!$`,Qf1VZI!IQPcj%0-U[j`!%NYQ%2Nc"m1q1adV*@1E6ADh4)[I1KN03"
8Dihc[H-)X1d,-T)9+NkNQ83RXjVM(5*&`3NJarK[$p`@T[CIFBKA[#S1`*a+Lc8
b-$DYP@4Qif4bGf&m2[@XB)D1++Q(PjQaV[brpe&XV#LkHld)33ccarLFDT'FUka
F#-fp&+Y@ar("j!qh3h19XAAUSPi8X`@YK3e'(&kFh&XIbQqAFcB`U0A4I$!@bTI
M9Y@*,PLC*SEAZBJYa[)Q$MHiS#e%E)P9LV6+rmArLr`2rSXHmep3q8r$I`(mTaq
8Y5#&C!RZ-bbEiAce-2i3Y&#MX#)*&K3'VE%Krm-KaC!!DrlKd%%0H3HRGYQ3!2m
,Ldj'EJbh+NQkZK31hbkR+hMb`pM#YRmiK!FZ$Z1BZ8LUAFTb1@h`j'pM#pD3!#8
@bmMLj22eEHdK,("b9kMVR@+MN4C!A0V&L1VLfl#NfkJkNa*Q`VG"X#F!cC9E65f
N@M5Th!C8DkVPVf&TXES&l@*)69k-FTSJYLj@9a%!#a1LJ2Dq-5#kSGc1C[H)MCe
(2%lUA#ZTFlQSFrQSFefQcLAP"C!!ZdB`p[r'fi4Zqhrpjihc&(lAe9"Up2rh5bA
Gc-SMEjS@2#SH5A3AVhMN%8kp[h#h)AB*C5eYHfUV+XN9C()j$#-CI3-pPK1VBHl
X40Li@#DS3%`UR,MD,0p!2#E9#Cj%@2&M%T@&ck3&2*b%0HdYmQ0fi)MH#dQ')+`
J'jbJj*YKIV%8N6L@$dr5i9%ekSL,9l3N8[cah[@qT*f!Q6KHHdQ"QqH3!$ke$UC
mL8b%%FbP,U9qpR$CAhj[LC1k9)&MY[k&bl'BM+T)2(iKMdR)(H(*h,XbZSJ#h$$
Jm5VTH)!2hd9BLf3qAM+6Xq8FTkLrQjFKX(ZQMm1qbL1BmUdJ),5GpjR01#-48!C
Mlc2Cbh)kk!p[-@Lm!S9L0q)%Hbb$#bH)6ma@Z-QZ&*i8*qABV4-I$q$`2rKNY"S
1,(m!161B[)'Nf8'JNRbF+U0l3HTf6!DI[`pJaQEFHdCK%Ik*LIM%Q)4VjdD!r`r
(F33A"5$22GZ)bCf+K+9p,2B)&fMEZD))+I%b$V"`j"r`jrfX2C9(H-8-,6QYX$2
-YZ$2CPJJ$XY9q8a)#De6`k(SdU)3e2+pkmPKF$d9q#J9q$8b(MMk83H6FLpe0aP
TTFi(!!*!JcYV,rkMaL@3!%GIeYkE,kkf,B'JYmhJB)B!,dCIr4`aU2H0Hpp&1$j
XCh!13&lBQ-%(EC'"M"`1QD"$[&Ql)emFX4cXN!#U)BG8$6e%PZJEN5qQEk3i-Z5
3!,SKKp3GFmJDI52b4[T'LU0$$UNGFNMYN!"$e'(l)'R&LcaFVc3qK%ALQ9QdF,*
jppSGp`&MCXJ`iIEb(N)4Ga3r8G@!i@N`%1Y3dkPm6MFG&TP0L'aLlhU2G@DT),H
dElh[[2Id8Uakf)kIb[lmSL8eaJD-N!$k2CK1#Ca)Em)dbYRG%hrfiFpU`),l12h
&6'4X(pLh3a`Q!@bCJlVD"k2D$P2HKj[Y2qBN'G`V%Hl@JheBKV"jYB(Z'PZaqmh
HFdd-"pV8C1S@+c"IrS`%h,G#cE%#kH93C3mcDhhM)&GP6-*kTlLcpjh(ClXl4Hk
J*GM-LJdiHPT@lPHfIJh"Re'FYjhc[BD,VfMNelekGq$$iFSAe6X%G3-`B#Y4h(S
h81#'D'T!k3c*iH#q*45G4Td!`I9AQlN6S)KEVe,#G(2$b)2"$SHZEdQ(J83URUX
!`1[NC9QBkM[[R(,je9jFl[A*8#(dr(dbpHZ$hAPLJVYc4J)dZ!QPm0m*MN-(3"&
qpVXJVB"YlAKadTFN!1[N@kH4TMf0"&'A-GrBYI!0ISQ10SC&*e!%6EMaSV"110S
c5!i$#0['YaFMVhlT$Sl-$QIPUjZ'Kr1bF3NC#B,HAIk9FBEjAHHcmpXXFpd`mcd
!'di8TPcRFA0JX8,'4J'EU-f&`22hH@0cfDcF-$#V,3E(!*%di,),%rT,[cXVI9Z
0%!UmAP`5p(@!hCXb'hG[!U%ZB8*0!(ijJmEm!'jH(0fS9K3#9b+([b35%NM5`6f
a%+!2GI`"LMR-i!FZF`-lN!#FB+"LXTLb[lZKDm'Q&(!0Gcmi42%&DZL4PYL,8MU
kPQ'Vdc+@(44CpABGMQ9PrEemG9Q4I1YHGFPSF#ai@Fk-99F4H6@,JcBBFA8YrY4
`J'@FIk4%XN)Im)iI15a0Q+L,"!4a`k$,Q3cdkDDY'h%ChlMBc%ZJhJFJZLR2,)L
,iB("amUAAUUZG*['$rpi(pb9BA)Fj#$m5k,cZ833&bX(+-#`DQY1HJUmJ&h4AAr
U0VhEHCN4!N(Ja9EK*PQ9'RN!8jaLi6"jf0SN8TqSpYRU2C1"Cq3NJDM,Vl-4!LX
CUpl,TSeUPSY3dR!"-,$DakV,Q*K-4I)D!#&Y5bFkri$Lc$Eq[E1aml%m@2YaZ&$
#U$efJTNL2Ji*8qkim4a[$JR"F5@3!"CKMB-)b!J4$Kq4%6F4MiY%1Ui8Eb5#FJ2
KjcP2FI((q#NU6Y,(VZ,Pr&&eFj&A9i%9r+Q8eAAUiiN28IS`N[LJdBHTa)F`IDK
)I)M3KpaB3-h!T&ZU5e4M,1#1XXM9CN`M0%hPQ!(lR9L'D[ZVbacG*Sc%9i38EeR
"!5,rZ"(BdJQMFrhk[T5+-Yh"K9m`hANbC3Z&Zr-IGN`'QHPVkjL8D&S!&Gaf%L"
Tr&6$8l1XCR25efc%1EhYC1C`airCP@ElN6HJ4VY)M6CIPMUc!IHD-'r%)pGYSJe
*@3Y4Y,*bp#4Tfhq$VP`Z3R3K9!LlM)8p*I1DfrT#BNd6f`#*ECc%0TA'6[H5f2T
)E(G*E-8N0!F*l5i*65@4pDU1K,"1*F3dN!!3d-U%D,)*S43J&+mLP*k%8-b%8%*
#+%lUCSrDi-#H+36kfcIFJQ0IYkI9S#,bEYcbPmGIL[8HrhG60VeaT"l&-1qdq,Y
m%kPEl!`l,Blj'hb5FUfad@(KESm'1YS9+EUb@XV315R[#pb*")3'eF$XBYM4XH,
@l4FTd)P8PpbH8#!A3"4IUA%p`"&@J(iD%cRKdJf((,LYXFTj[T-"D'aaV,VQp$R
E18Y,GDh6%VA%DQ-ah03j,5!hHChFm*C8+kQ-q-'kre"JQPb)b5'-P4S&"hBi`GH
a%lah1l0,LZ),SlZaF-G)Z'%5kiak'Blb5#f3!--k15e`K9ikPEQU3(!MaRN'Ga)
2T!3M)MX9b+lLU!F!BFQEiV9bL29J&hPj[hi46r`lq%a&Crref9J9UJpL#	LpM
1J0E,&YF$!S!%32KEJJ268LXQN@2ZFRkN*$c$hf4aT&`kr!TQJ)3&L'PbAQ`BX"9
rY"UpTjS+9p9Sd8-%X`d#CKa%SDN4QTL8%R4QfKJHqj,NZ,D8JSk,p,T)$jCL)`T
XDd!CUqR`&(l'C+EB!KDQD",TiBeVFHPYTaSq2q*k!!8JY9e3+AHj+p12eH-D#kT
cKBeElZX-Fm&%qM%lL`35*h3""Jmifbp'2ZPQ&a5jcA$j-j%e[QMr"FFY0%KbVQU
IrTN)r*&J``FdphN)i0JLR+XHRRPEA2ba2TJQ,fBe-)+Q%GIN+L2TQF!$%1"M+eh
XSVm`mcC8hJM-ZKJI#r6a0KiCME6J3c0pQ%AaM(*#cFHQNH(Pe6EZ$V'41r[P3p5
Jjk'q"rc5i--bX[48`kYRqI+a%6CehVaR$-GQC-qTKN@EH1@p*RZ-Im)$5$AK*rR
VXc)RQr'6P3Mqq2JIm%hb"r`#$k'$kCrYdSHIX$cVKp(l*K)E6,MialjeChpN$FJ
f1rU0Z*0%YPI6c36Gl-[`6I2ha30aqRLJ`$HPMp$(T4+j#KrEk)&LHS$9r`L4rHd
m*6DhR"l`d30la-*)Lf!4m-)V@&kk+G"0MI,3KiUcdBMlTQJN46GRk3C`Ic4-BLd
96%YMqi+GM-d8%%%I$!3TC5F@fIbQC`!-a@TQJe%mqiaiFElY("-J!m"jl%$E"Gc
B6cAXhki3)aRCCpJCMMAX)"2[CjJS[IrM#f#,[dALAFl(i8mEMVc'MSB)&pCLF3m
YGX2dPq(#fh&KCf%qfXlJ!J0(!!IX2)P+6dS!%`*S`-2PP!cD3dHAR@SiA-TJ,hT
a&kQ1BUik'Npi@@RGRQAi&dA'MN[l$&H@RB0UXKB3iQY`30VKMLXU8P5pP4Y9'AC
dQK9`JRLrUH0)%`F35X@1ZR6*QL'A(L$$3CVHXr*+j+V'#`a6@N#j*!SYX9#i3'm
Z`Z,QR2cH3'`C(I"ERiBE&5N(J!baCCjHC9-6T"$X!(&@('RL*'4XYC1V&2pa%e8
UIL958Rqi(P[P"q-mLHh")hA+)eAL)m3Y*UDL'NaF5UlE,bk1+5mDmBqLDk@3!"`
BjDlep0S4kPT+9dp"U![F2Cqq2[)!0lF(ZrV69qM6V1MS6pm%HrQX8"Y2[cEbJ!N
U+U9k`N41IkXf+k`+9FlIj"0NGLFTY#3T)TJVYKpL*C6QR*89c@['GcH6Qcm5A40
&aV,ff@%QQBeG[Y(4q(0G$Hh6d4[YKF#@qaa133(%3F`#chGbN!$hA45%l(4m)%%
1Y'YTM4P-a8ekJKZXFE)"V&1&ffL`c-jPjVGh&aNVF1cVl8cX+BM)b%jf@[GC4E-
cBT,BC38TDR,dX)L'D1'd"NHQ886*AfIl$ql4"X*T,fN$8-@T[rq5e"jj`jJ[-KT
abEpr!iH%"p1E9QYQd%%N6JQJL@Fd*+i8pL%fc!`l'YDakTVeRr30SpY98F,PFC!
!,j-GQAjkKKmU5&pKC[j(D)`J)rJ"-)DIG6+SFVT4ibiZ1G@C,%KrZmmk1ArXTDS
j-6V"*0"U2FC")&`aaNPq6V-kHj&`XKImlYC(E'H3!"cUYh##IM5ipkqSi*j#FGH
#!HdX"(EICb!L'fmm[@$RT'AMkHN8295,Kjj5Ca%#"JprL3VIE$apZp6BH,LHLja
[&d`MS"`YRlZepkp!#JFIcr"KXqb'9+-XS8r6%f!HEk'T3`dYdIJb%0T62KQlK%Q
YCpB)l0D&bQ"GAG6#VEmmbDJ#1+YhXb&1NRX$Zp-DX,aZFIE#TE116!)Q9c#C*%I
EDE(*!Ac8`JG3daVl@i!NIeFHUk,LUN1&8l'['p`34+6cUp)B0i,aFqc)$cB2iRH
LU$0&J(-b-$DC4FFCNcP+TpH`L`qcK5`X%)"+1*`eZb1(mRGr-K!Blalr#BUFbEh
T3**'Z'k41eQPhLb))-"@X-N6rh%C8(TY3A6EC%&2!TqJ5hk0MBYC00'`3qCdGZe
8`qlVP$DA2T@CA$$I2FBmGfb[fAJ1cN*-IPT"GJ"*perJLKij5GX(Y)dZRe-0`pj
VDHaBB!+9kff4136YYEdR9GfC+ZPiJd%1K1`VH5ZqJQSQMM5Ilq4MP3ZR"Lmm@di
-QqiXX)I0G3b&LB,-A8C"iX'-)3U68r1h8*4lk,26B)FQ&#Fe1'Cf1Ea8SYQCc%,
P0l2+6hF0!LMTeBZAQJ18@58$heZ8C$XDlpaM"j!!'aHSN4C"I6!bE*`6DS9mGPj
!X("f#V(L'N@$H*q6R*MX**!!A3KCGPf-+XUdN!$6aG)3TfBJ*V[2(A8XUT!!+F5
THYZiQE$5L')2QT1bFVc2EMLR'VEX9-MkipaKMPa!35#4N!$*UdiU(V1YZr(@ED(
'Ik'1mmFI0URDiJprdie09LQ&hNU&CLB%RNS)TahLaNY(NhLNX8@QTQAeML%"5Tf
L4JScpaDC'4l0YXm%-4Ncflq(-"NSBeK2)l!$PmH"bMCc3S3"XQ(K1"YTDqHJ9IB
8mLC$q&%i[SR8kZq3!-5[mZ1M4hai&"p+m&!3JUV,cY-&,AS+K*a+5dPPQ1bXj@q
R"ZT`-Q2hUST2IFf,D'B[[FCpIkrRNL+iae8(1i1G3eG&FDI1b&+TZTcRHmq[r05
-ic,I&ZE!a[$*,6D"$4CIBE&E1HL1*bF1mU6-84QKLPY8k`aJ@6@Z*)$Z`dM3J"[
ZKrAqAPm"4QJ5ff&h4aFYG"!e)"1G9R&6L3ja6UTAM*mE-QDJ6,+A*CR@#M,iR%(
U!f5r&@5reH$QCh#P,cD2r!@-[Yl)Jq&NB'Z6QU3!XKjr0LPZ3eBSN!"'E,d(9Ad
2@qXK"`,0RF8@9(cm4a6+0K3qZkSjFI$lV-#SHbR0q8Pap3M&"FE9"r)cSaZX-["
!16NYM-8fi8qpR[3(qr'2D-,5b#%KZTlpUUNi`SlQi$)"d+)QpKl!bqe`8Gd6+iH
$lUjB'E[TaNV`mZ9B$GLKT-+)b8L9BAGB'Qr0$Z$iPr&R2rlXiL%2IXQP5iCFHT%
[M3TZ*p,bFM1kNh8XpYi'c6IK$m+-$Qc!Cda@cpcaDalV"XeM(`iilSLQ#f"2Phe
h'Cb9*%bTaM2-2ieBlXN!i)l%DYL0#ZM%@e!32"REKUA#LCD@![B%k&DfGj`EfkV
-e*Eh![6-QJGr%#lLC6#QlA3aVh+aPch@JfeS4J#RbcK8iDDMI!Q),eH)kdh3iLc
JaF(!2IEqj(*53ZA%"!1Sr2eC2A53!-aHed(0,"G+5KdJmc24X+&-0-L%LR!Q&)l
+Vr8,J4Nf"kXfCrZ0D1*AjYZ2$E9#$9Q*c"J*&@4!"4P#"F@U3&!iM+T%mjiDamQ
#IF1YDERZ`b'+D,hZ8Q8m)9Xcl,c#BFjk)Y9VU,YX+K,GTCf8Br[`Zm+T%!r8#dB
*aI5q-D9dPa8(k3l,U$[)i$HJ9,*+PfK8CI"$DR66FPN5#l5DJAFf,p1m)Ue5F4P
"8++V244M[9"jX4@&I"cU68Q!pSL'V!6I&!LD'b93lK@eMilq"!*GVGkG#8+eIS)
rUe@rVLD$Ta59hi@Z!&)fADUlTJ5h(I1+6Abe1&"0U08JXrbIH+K,1,SJQTEIXd'
fr1AC@)Y`1q5#8P6[6r$`DV"HV62(3F4DG#+'%"J-&")Ae`diX)2TcH2e,j6Q!2[
J1'FqBN2k9N1$KAdE"KCDi4!8DKbBYSm#YN%MJGT$,E(eR"KSX!`feSmGmNZIjZr
hr3aX-Yab9R*a44VbRT!!1pU3!2HpaNNH'&q3!&*6"qJM@+[BJHFjFAX!CT!!iUe
`fNTm2Y*#S)!YDj,D4JVa6$3VL-i56,c0I`h%4XTpCc4QZcMCI#@)9(1B'lpc8e2
p5#G$U[[)`4*9%Lk@@bb2fKMU"G1Aak,3Iic%fRcK9eVKPQ&6Q8eG"LH!Rk"51lR
")GcebY9YcURHUC@Y4'TqRNCU40+$L8hiP3!GX%dK*bFb$0'h33fd`9fr9&e&f`p
Jqh(H(*S2YCb*SY-c$'(c(rF9Z+Q!aij2QrM6Q5JaXEq0V9&60(d)8aP*+@TKBd)
Tc1LJ0p4!)a4RPY5#MG5#l96$lrS8GpBeF'b(JL43qi,S'*a1P&ReY+)H0UBT"h(
4Ar"&jHZN)$B+pF"#JA+`FFJ[Xf!LXeR,EikM!VX8"@(SCYa[H5&&)61rii0+S#i
q8%FTD5'kp4lUc%-C[c)-bf(9!4SqQMU(V158k*UK6HHY9P)G*UQ1P!,fI4CJRir
![Xq*d2QRESB`3BiD1*hT'D$`H)$J[PFb3G9Cd"5iMcHX!hj1KDQdJ[eVGh3`Z)I
3GFI"`Ef)MjeNLb+fGNmi55#eY!q#Fca8$'rNB``!a-!INPY2J&ef'F,Gd8TUa8r
`rN@4h*HE@&9GI9GqUVMNT46!fmk%%S0F1!N5!U[2"M#**1HrCjK3CVJT3-ZIC@&
GAPPBp#GIaJcZ[fPB1)D&VrcC&RkP9PQSZ*X5$*d'B'31$Q"S!X#`@Y-"$%"K5P-
['RaNP04*'aFKK'eR"mhaPf3iYJH%iA,'c`0VA*BF-QH#r4hU'!,HilFR-S(qMP(
YZ5j(0i,A(L4$lbZ*d@MMmGRQA-$4aDrhrTAqDPR(p#G'i(!RZfYRjaZ2,mMJGHl
SMFHRCG"5B)@*4!!D5%b``S5DN!$"Qka1DI#P8e$`jBUL`P!aDTb8IENkjRm#`iK
P@!h6SEA+N5A+JAA+JA8iF)Gk#!UV(*@+kdFaHd3A)98CI9edAGfpI,F&UR8l@%!
,T8mdU$i`$(2m8(#2CD@-hN'Eh@"d!+h(!NU6)4`UJKjPSdPr[dG'er)'X59U8+C
XU3TEfX[ZSid$#mpKNJ6Cf(R-aK39(P8),Y4bH1M@)VYSDd(DQSdD%i%"*Z&9JV6
B)&UclASKIe(QJR[I'5+q8(p(6L[[GR6YI3IL#afqRi!U)$j1UI2V[HrSVaSJ[N,
SLXD3!!D"*""Jj"$"*""Ja0ER0q)h`f#IGf"EVX&('4C6UV4$+GkiU-48"AN-TP!
9AY4+9BP599B2,H5+B25dM2R[q0L`NqJ$GR@-+cZ(kQfiJih-B#2aaM[Bb+)3K5#
IBP!6,,$kEl(E$bpkp(pIP"Prhj4U662'd`YK-Tc6Xf&(Ya&[l&lBbcp`$#KK)1j
QNY-[$*HVPrK$SN+KG(-C8L(K@"K"G9BQYRUFQqc59P&NmKe4('+VqQ,HX0XZS(R
&THj4pA%i5E5j!aXXB"!dQ!dhi0f1p&UF8f9U"3m3PSdc'$GR3GJ6r4%FbM!*BK,
%*)#*KNNBN`!Q(rq)AFM3N!!#Nid-&'+S&R'TmU%K'MQX@j8893V0"63`09V12MD
rl*CR!USCEPM'+JcpG-[RA0&0R`$Y'CYi-#KI[-#!(``@fdkkBaXXJd-h@G2J*$3
HD*KSB-$)b'GFE[2lYLY`$6!Cl+S#meJ`mZZr`mbbdi8%Y6p@UF-IF+ql,*)-"Eq
kb)kLFJG"N3a!RREaX&kY5Y+Bh)0IlH4"0YalMYL--"kZGkFHXB%dJAaYj8IZm3"
pU3k))$#p!SkJcAV#X(Sc(qDcX`U%D5#%3iSD!#Z'ZbT2[jdHKaLU#SlMVmS,B1a
HF8IQ'+b[pBiATAlqN6Z,!IN3MRM(qj!!%18E1![LY4%8,icZQEcK3,,f!MI%`*!
!AcKXrDL45QYF8FH&Y9)da*Ui)Sd8&bL'r,Z$KM9V6cAmd5i'lqB#2#c8iA1SXS[
CK*fGK5@`pdRIie#65GrA5'P@1Cm!`3H8EX3(,$qf1#aJdkT-KRBBP+PmKY10%26
N2!DKHdqirf3$ilE$&YUULd2`YXj#rPNm,&-)rh$FHMr$$"jamadN2#FFZ+$"Rk$
3N!#fd!DV)TS#X&2Q%bZam6&RRSIJ`[%1r@MHV%IVa`pYfdj9Q!"VNa+`Eh*chi1
d*SZ91R50,K`(3m3-0VZC)&@!3&LL3J#5UeF*)0RA`i5@ASe4CC[aFUeibG"F1+d
Kj1!J9``UT4q2'q[01#UBJAY+*4HhB@BXDXmNAl4914V*iZTajE)APF[U,j(BU-i
T,eqET1dNAU)K3V@T[*a"Ti)J[YHAZCS!1LXZZB[Gh08fX[ZALFGD+HdFBJ'KZd#
d'"b`6QSri+4dQ!$(K+ZU5"#R9bC44,kq"fQ&dYIh)*%L2QJ4dd+Zj&KL)9I,50a
b4H+mrGBEKD[+YM'-fXC$VJH$"Bfd&)2'B63*CBB`T6B6l11Db6qGPpBCJ$JFl%)
%Rf(fTHq"hMM#A$5%bI&L`8bDB#ClB4k2XcVaXjTNTEC+HEA5lI`lEf(F@1j,rHE
"+bZLaYc9mBq3!%$Re)+86aVpaM*QHj(3"D[9mb5PQF2'r8`rTjjj%+'H&bPaA#Q
5p1`+mqND$1J)"Y3hJd#NeRL1rrmbZiCmqXI+N!#2RrU0Uj05(`$bdlYm1r-f$UX
5Jalb`VI'8@eY*NHX)0M+c59p'+,352S%d2bLfQXNKDVK$Y,81A@CNhR5q!klC[L
p8h#a5%'0J)A$*c5T%3f)*Y'iaGh+%dk@NIXPdLhXd!#aA1rMe"KAp$35Bf#mNFM
AM22V2mqL8kUE3pSYb)8Rh!Z-clJHk)N[B3a&mYPlN3rajiCE2TZ2r2R-Zj'e[d5
`fi4J+H9G5Z+&)`*ZLQM`TRU`phkNTarL$VlPEYq$JiLpM-A1T!ME29E`HdieK#p
aSqkM"2m*0@crj1qmQA%MG6$K4cU-AK,q@K,j#4)i"Z#d[N3#Va*Gm-XV&'(2'ZI
eS4UpfihHIi,!)fY)i#Lf,hmY)A#qpHN#rh+B"&i$d,c'RImlVlIhmq0`&!JI[5'
iL,-jpXl![3"!D#qF#(TB9&8lDA$4-Qj`V4L'P)Fi$(EQdDQZk#SI6985*X,,)pp
!K@"@9S-F&-Um[IF14piMNm%YL&F+QmP(9KNQ6q3KZ&T6#SNqIc$cV,1Ab5jF)PC
0*N'b+V'mCI*MFH-ZrVN00a$CjMC1*"FNc!SAqe%YQj9[&)QhQj%@G#d`E1Q"k[q
"8p)h(iKQKB!TGr3*)`4*-kE)#+Z%#(j8Ih!M*)8NB,(PRVLcRiLC`c#j'FM'chQ
dSSI8l+Q'd#`)D3TXJ)16Ckpf'Vf#`("$)KlmFr16-,VqpCrR4"8hJQH$dbr8PhB
KCS"`8,c3bdlbU)kid&Ukd#XB6,D5ZbXZK)T'[S%,1BkjN!!0(EUINYSKikEX`9$
#[AcCc!YFPX&85B1dN!!l(#8S31`I8U&b!Nd`!-'XV@*QEA#!dGE%%&[-3)9@Lk&
XI5&LMAD*)@Rj"eh3#T(@%52&m'1G1bHF1$,plQ[IYkR$Jb%p(VL($A4MJ!%+k*P
*-mc$JT@U99LTk`NfUQBS'h8PSUB`0('haf5fcY&"KU!fGXcZekI6H4l8PCLQ*M"
0F`V69$,)*U'M$Gk8'))"ke#BTDB%Xe4l-'D*#k-)KD&PQ$9#0q"KERZ%%XIR$Fa
L+TmeqVa1K1+a1UM)6B!pB$jTR@eRU[[5f@rp#`$kELCPRV#D3[2,&2e-U+%L6Rk
eB"J#HG-+!CS!e`5mBU%M(X(VTUbQX&&9Jf`8'RmQD9#&+@*f6K1,9Rd3&UhDHCj
G#-'S9AZDUF&L'1kh8%f4#D(FG9B-AFp*l"G[)mN-Q0L)38-Y'cRKX)BKXpXpeP3
lXX!2)5@FmU4`R(#4'h8p8!J"LX,Z*+F+&%kX#VI0h#A6LTU"*,$`dG@XKS),0*K
YdP0-43R&[Qj@&+4(CA+GXLK&D&'+d%p&U(%4qJHHU*M6&&B3bU@YUC!!jk$j''E
3QLL`0)C3lQH'X(A)N!!&(!jaemD!Y#FVVQ+,lk#EBPY+S(@kl8)QljV#B-)TGNC
frp%(MT9Ah6%!V9$*ErjLmHSi!pkGc`6HI&hri"XK-)U(@M&jX1L#K6YM4SJhRhK
X$NV&2cRrjJAqK+(%Sfr'm1N("5P826d84j-&L1kR93bZ3Hfa'SSYbhZdCd*[[Yj
`'T2!QcI5$Y!'8mDkLjrr$3bb'mE58Icjd`5VC[*!$rc!0c'FDf`G,[*Li5U)(,[
cV!1M8rdE$&0VNC-9deFZRCej&JpGa*r,EPRrH3aZ5fiNP&`iJE68aGL(!&eZc2#
!MCq&Xra+U)`,5&eG4S*VZ@I11Sm"@mjlrB$#d5"Kr4Jr"SE'XMD&4!iDa2hUfZ-
,XI9`BQfC2RZl+,E'aa!p$BhX39IR`Da8Cq)a-r&BL"q$8`*G#%--*3lel+6&)$$
Q"IHMJUQJE@kMKqIBj6E@LXHh3CdCU"D)5`5Q-5I(2r+!A6C(G(8VKXR9e5eHcBL
KK,(J"#Rc%*-69V#*SB,jT6[a%SPYjfF5LrVS49J3QU1@VG4IrjUGql5dK8ED`["
4#k0$&UCG8*DN,8`GZe!H'V)`j8`dLD2AQiDm0Y11[C!!GUcpU'-[$9PS(cb@Kfj
I[Yli$,q)8KI82aNCI%J-2X,NV)!80(`qjiX`+'ifRXT(i16JmM[D0h4-eflSQ0@
-C2VJ)c``0&M$piJCC[#JQ9M&4J3QH@)"haA&680"+h"#H2&+6"Qf@!bI5Y"ml$%
H3$Dbp6H#k3#,BbUGI[(U-jVSiMbJ1"-+J!kK+c%mAJmb8%,$Kf!Sq1&PND`J&K2
E"3QKJAK[5R-%M4r"$&9jrlM[6i8E#hF'4B&#C8k83@9#k35[[6f%"H8,m[E&4G&
&&jPe@RF5,UHB4-U*h41[QYeCBJ4RqD#NqECA$12f3NI*AB,pA(HQ6f&%JpF'Mj1
Vh#iLV#k`HbPLMSfhK`4'4aei3J`J#RB*&IEf)q!i[AB-`mVhSbNRP"Fl`r*"QYK
Dl3YZE8k%3HZ)[5G`a1@eZ21d&3f"bR*bi8(eSc8Ff%)d0fEbDSi$%fDL+hIT&C)
A4$(*eh"8E!8V6Mc-`a0$8CVT3DX`1lH*TM#9j!*E@6$9(L)UD34Nm`Gp$rVELGb
dqrDQ"c&XK-4SpMXa5$a8YCq(J4FEqQS*`4$bPccmqF6$6kBrc!a+k5+j012bU5i
4E"CF226lIdlrD[DC#QP4rMN#J'##*+fmbLj6NE1#ID""[$Q9QK`9%#(qF3-+1kT
1II(*CEQV4ZMYdXbi%!-[pHJ$,Se4H!2$6*R#N!$j3+r*JfaJZ)dT)j4Z[+R-b)2
#L5,Rpcmb8RFY9bTY(CNmA-FeGam2UhhABZY`jM1!IGY12*XA6C4S5[md#%e0$NY
TDLFJQUG@61ddEFA85P-$deDD1M%eD*V"e%R6(+BCQQBacG&d'kCCQLjLZSfQ&CJ
ZdM52D390"c$0dh3Fd`'D6Q%k6P-ATP-dlFA84G-q6(YT1J,R-fmQ3-f&j,pUQF"
!al-$dX3I1rjBmDF9I``M-)3m*dQ-[Z*I#6%k2k-`mYIC+2#2&9c3eBfZ4+X[*BB
diQBLh&d16#lAc52)5DC8!@`#Q(,p"BaIUderSC2eeCHQVa"CAiXrDjLXFfMT+FC
Y'fr)(F(`F&pmXTSh`Dr3[E[daIrbVGZr1RUaEjDh9-d0rYV3[D-JZ@YM)A)050'
!Z!DDHY5k2ekV-U(ecH'MJ86SYS-YFmF1[Jc+2)K3[3-TVL*RAVMbIq`Q!f@)T-h
V+(Eqr#rL$))2+YKDHUaVK+##DJYIS[SkQX5p`ma&GG-5$B0ChF@AUqCNF20rR+f
q(KZKblr'Va(',q$3HR(SfM("+[)`q("D6a!)8M")QZZ%3LQf'fHNXeGT3&dh'XH
!4SYpl2aCU61B,JX4MkRecX%3(q3)`Q*P"HEb!T3k3kJD0M05#%a9C(PdNp0E6hV
[#48,KDL`j*%+-Gb2,qUiTAaQ0IR5i'HN0j*'V`-K%9pLN!#CA((D%kF,TY+)h!&
4+)kcA%c9PiLjNY9lfC9JD)ViUR9-$0NF&m1')*(EI2KqaVkeSh#2eD8aN!$MiF#
DN8TKCf8-882TV,-FH$LkqC''VZQbKUjCGNIZ-ET9Rp(,!r`Xkr!YMQTZicN,T`E
G*SDXQc+#HP%TfkaNNS&#ZL-e5N'G&"FYJ2PkpVM8[S$,S#%V0fK*-J"&B8k2dFA
&B*!!fh0kQZ%U1DebeladEEBi6F%b8!J(@KM)Kd`@erX&e&B!!`%ALBjTE82(EI'
!QaiBbXMMR`'C9)BBeh*+SR`mFB4*6)*MkjF`FY#lFVDa(3l!IL0iZ,2i@YXj[EV
+3A'`9[INV!ifKSV*r1Yd04"DS!rIjX0"d1`k3@0)$@DS)LLrRXPc!%r"RQZ8hC)
UNIJb1I!djJ("3d3-'FlFHqbH$1-2NM+2SGMJ$",fC-K0LJh,a1"1&4bQFA*Rh@D
'G6,b-3cF$e2Vm*fL440BP$aU%F1l[1L6Y%86@046C$lb%8J)U8&(23TMBrmYCLa
L0kq+!504iF!U#M1r,DSED"`K8[rQjp+(6a+$NqU#r-qKJLc4"4Qp`9!"#E*%%@3
SAC!!d8[d`$'#M,j'JJ6S&*d9JSa1*Bk`*`6*#Df8,XKA1i[0B`8CE5C"TR338IY
JU##e'`P"PLK3M%KTe55%'Aj9#0-m5TKfQ''6NdeJU[!FrdqQPL(J0iA%E3q%Bml
Nm4-R3GRRB!#HdD'#qXp,rrSV&P4PDCUJl"!8rU%Z@YE-af*Tr#",b5bq@TDfY*Q
@DV68ULbe(l88j*!!PRk3!,E8bN[P)9VDSbaY2XM5fl68REDdKjBfdG*@CDRe@)2
%8V(GZE5PV9KkPaD@[[$#rdQAh&bGYV!8#dX"TlH)If)NBFaKhCLVG@0Q%hSbhCL
MC@6-*810@3a38L#icJJQKRN8d0j@e4$Q!%LRCl[PQqeJ5lq1,A!3&"+2$"emj1S
LJhj2GK,8-XUXmC2AP6#T&FaZe0--3)J(S!UEbk$*#&S(`FhcTaQ%b8qH)V#Ve@f
))-A$JJP5d+(4FGBq#Q,N5@,a+rNIdj,eJ(IpV[0MmFXFcXdViGaj0'1r09fll*E
[06JLD"YZq9bM`GjZ+2K!8A"h[FXbT--81AYr!!A23bDbNi,VI'kM'Tqj0pIqKA[
X2XM-*KhC2EdI$h@+KqB3M$NZ82T4%i1Rd1E@))`*Hda1-6d94f!``"rd8)3!R6#
p4,S+`mP9-*(`M(,A-Pa`-VBR@(EpNjRq#6p6JT9r+SA#d"6BYNS(%RL3!$'m$&'
B$##3!*Q6Td++%+6mFa+$P"m#b#,(2"M`p3`F9kL`,DFDDM1de-i,rhf!Nb(LFV@
M1,lKRhI5kj6qqCr,kA1(#-TTNB8q[C,fD3E(p!kT@Zq3!'T0-3M048c$RBRNB&,
m3db!DL5FlIhVraZ(#$4m+Lrk$UAF`NCF$'A'F%`D["!Nf0VDM)GiX&F!`@2i9b8
i4BG$eim1$XM'$aEre(DZZ1IjHKi`*hU1r9FZQ9[HY'"BC'Rb"c3[KZXMdT,#C5N
e#)cc2hl%$9I`m4M)2'S*aU3X0[QI1cRBDlD5iTkMAk-V5[lRm,MCAbc'4[,becR
8Cb!dSba'db6TeG+f"[&,kc((m$#T+G&e!3dJ38CZ*LBDLD!"--%9%c$RGU5EZ2&
Mb@"Mi24KZ!#3!b#[384$8J-!60i293eQ9")!)H,Z41qeCchUV6QDiPbDSMr+H4b
PpJV$1*h5aIB818pcGjc'h,TGU,Ch9m@f0feT1UbEUE4+%CDTi$J1`lSXba)ae'h
8DCTEPc8*B9K$Q2VpB3`4Tb10D8#0)rhqSlAhprqqlqph[q[h5TcRHIECjbXGC6i
8!I%$!!'3!`!K"SY4,Jd'r*&l2kG!5Y!K6ALZ62T$ap*I*G!!((jh8IUV)HqI)L0
9+T@!bfDfAeZe@$S#B-j&SFbCVTBQfHIHiN!S-Ih6N!$hd9')3$m0m2-4*L3R9kC
r0$NJqj[p+-Sapcp1VM5X)m3HGcU4EX0CXUGlM`eCa)#aJm)ql&V-[H8m`U%1'Ia
ZD"R#2qIF*6-i-Rd%REASm%mZlLPb@d+C8i-Xe,lR9lRldiaGq!PRZCfCXlcQ,(H
T2"V+R(!RhBVIC82S&YQbS-PPHpSjbjX9C*1kp8PKI4)b*pFhBG*"60)2RD8kG&K
eD-NXEh#&(#C(12E-mSDmGajJiYm&e*T3jPf,QC2@i1FG$&FkZQ'8SB$V1rKj%8(
Z6af(X5`-H4qRLBAi@4Ib2R`&Mi!J6IF#-3FA&q"L$lXi"cqhKlba2PV3)h5Xm[-
fK)(E6XK!D*'Bm0-el+Shh-'IE#L0AZSf'2Me#6kJaqI`!DB0cq8$E+JPQ`q`c5X
a2U"%$2!"*@m'6PL5KG`("(`QIG[ZETQ@YBm0eT&cM5d*al4rVa8,3PYXa[j,F)6
MZ,CaIfK4KLf)6NrQVh+Y3kRiBfiVA*CeMKicl%-4hSIM0Zk@%,f#`MPCAHMX+54
R$!!8kjeAc6ZG1FMUL+Ybq`JlIUIUH'QaLBdcd6V("a"@a`UH)"*Nb6XJl,XI[A3
e5J`MaJXBb[Lp&@99lHfqdKUIY3bee,hhrU,#9rjaBLaPh9-S(1-S%1&PBlZM&XG
f*h2hH!cj%,iq*"AG31k'@%BGY@c3JQhdSiJ&h&Z+5B3c*b`ZQq*%d*L(i4a$*(4
)a)D3!&Gf@L#Q32KaPB3aJ)8j,$RUk%JDRM29*#(B)4K2h'i,"GM4GGV#a&Zk%Z+
082&kHKV%4m"YlC!!3LcaN!!hZT0#XCK8+`,6&@AP*iU-5Nea%CE2eC39PlFV4FU
l5XQTdLmV6VcSUm3e$('Jf(LLjNYIHAPaZBlb&4R,'R5F#-M6BAUJeh&%Fepc'1B
(jBLaIrpECK0cCEN$aPTbN!$&9TR$`VV,"[4RNYY3)Db6GQ)q-18d`qef&60!m$f
FGZLJY'I9LJ2JQJ&Gl1+Hl(4rdm3U-4JX#(3%Z&H6ZGLk#849)%c1#Y!a%3pB3LQ
BE1E-mh3-LN-5(Ed-L2eJ2TNc5fKbeNjN5@QB6BF#1%2-rE50bm5)X2LHiP(bh#8
lKR3d!3R,8K+BV*KDK03EKd"VlR5Ac2V#AE*p2KBr$'9Zla426p!6!8ck"UU'"TT
)"Yc*96X'fR,[Jc")1rkB!)4VqN21E6#p$l-TQ0U@bpeI)-51!8!$)S@069VBQ#9
bELV)$THYLX4b%i3`RBRPHR60&f)CV8f)TEL5M5X84#46*F`%r4$+PV"*G!SK0fF
3Q%PBR5MqaT!!ie[SG$["4)c"L1H(QmeGLK2-kl)M)!TKa%09Qc%'aeGD""d&l)P
(NVN@@jEPlhpMCQ43m,YXbQdAL+80X32,-2e+9P2`+BkS`S)fjNA)dN4JmNYfDBX
15,UJ1(A!R$a9J8)KLP4lqbQVe9G8T9L,+j6LjmU8BV05IUV)k,[T!S9EAaDE[f5
hp!*PMHU!)l#dNFRNNp6XULiUk&!Y5)$U-6,X%kK)q1$UA3K4@KQ$S33FL"GfFP)
p)Vi!VQVLi+Y8a#(+"q-%[&6a"*(KUek8QG0dNqB-6%!Xb%e+"'cbd6'3!!mDUhX
R"DYEVK)U1RLDK-2FIi%Um!)B[`QjRL9X*a[F`aim*`CK1C)$NHekm0Q4(0pLKbL
%[5`C8iN#kCBL)8S13`ET-!5jBbN",4LI`Q$AT#JH(rJQmG3iU*m"'c9mS4PVi#!
+H$)RSE"`*k(JpCaR6YUD+(Jp4e91BKHbmiM)&DS1!,*hZcGL%ZkHaiVGb@%ac$k
,L9r`5cR)X(pKdB$4dmd1ZL-"M*j3LS0b1Xqf5Kd`%++Ge$'qddXE4VC!,AaKYmj
HQiiiMZM#&a(#eiU1fah(f90C*&UX`1XLH*J0%da@%d!QQKUVGCkP#mBq#%I-dD9
h#SBl6Xbp3'blE@K66[BY)PV&8cYq,m4!A"($"K++ld&3aK-2ZCLJK#qU#!*b4Sb
4")19-k6NXf"IZ3ap*'AKb$T3ajCU'fdT[e%LDe-Q%TZH6R5iG1'qL+#-8mq'a)Y
eZFpki&50,bArqSSC@18(U)[2Q4%EU!SriPALEkUT%QFc3S343Nhh6+lD&+4+lck
hM"(V["I"H"2b8DV"GAd`LTU5"XJb+(`ac"FK[[$`4C)[)Zj51a`piH+(0$G#Y-3
44cTTG*kf"4@Y'!LL*+CRB4(KLfDqD+&&d%K99&1CU,#T)UU8a%3@ICJa9c+B&%V
VHpkdNLjVc*Y@l'E93ZC-UmJFbEYCdBD#`AJ$#[X+86fcUR`EClZGSUKcXKY6CeE
Li(149UNB6e[I'f02MiQRHe92Ml#R*r$d6[ldK""flHR8Z+FaG@BC2HeG*jALhBe
GiB6B&LX`lRd4YMZ)k(2"B8R(%&p'`[B(Rb@9,,"VCNBp894ikX#*+UA)pc2Pj)(
LQTH8DJME1(*I[qBV29&44[aFGEIqUmKq,f"UF9bT!3Ap(P9@0Z"i@ZiQi#Ac,6D
SG,d,a,[)ZLa!BHf,2#f9`ZMA[Se+l'RCMQb@"CQXiG#LCJP5UKYU2G*kU@hq"hH
!k2ff$$&L#B*Q-*!!XNdk+[RTRE5JM2#H0hQ@L0!a61d,,U1MN!#el'XGFYR!JQl
h,MX*B+9[5!!V1Tq!P3lJhR95!#XGBT!!2T-!9[4Z0E"SkSB"!TCir+P"4UD&qI$
9X)`e'D3c$mM65VpRQI+5M(b5ijIlmmcVXi*mfSf`4&K"3Re&ULHaDkD2dIANlr[
A'3cl,q2Dp-2R$9*F216"TX86!qaBD@MKfb*RpLYG'6DK`J8&S@M2N!$pH0GKrhX
&4`,rIqGA6Cr8IU[rJ5Yr(IYThiq((cjh3EQhlElNSI"6N@GDRflHdq4SHIc4[h[
LEhIr6FHIYYrCr@rH[63k'EakrZ2VllZ[13rZr8R)C[R!Xrrd,ilph29rMrk2M2r
fiCGCTdl@92R-aSB6qeik8&*8E2fMmSUbj`Tr9[VR,rk['rrcHhq@GZ[0[*b,Cpr
1IIhbXfrmepIq)R[41fmYqpFPrc,l(eliTqIrqjVrpmUrII8rIrjI2[hZLXr@IIZ
,c'hr-I8lXjBZrrZ4(icpd2Yrj[f(MrlpPZrrk2Hhrq'fIlcM2khqc51rHZb21hG
XfVcebBfrR[qlZhmljk'jIcAiP`XHl2hPVQm1I1fHqpHZ@[RepIqmiDkCmHQTL@m
XATLr2GdJT,Hi%"ccZ5+PkMQ@kDY5"fjPR@+G8"SK`kZc96k"UTe)0LUJhJHJ"PN
SbAJDPBaaH#2VGG%%mHDpU`bC[L6)P`#b(!%5A4JIj[IC5fAXar[2AV"$#8b)1d)
KRR9JTkh5XhFIAV[Z[*9K-`HB-3(&TY9ZX6@K8cR-ZTh1@fE6R[FC5jPK%bjEE!M
G(4q$iQ&K0+[)N`HPR,35-a3*F*!!-V3r$dS3aflq`'H@@@bYG1"aeB%IU`lX)fC
$cjVA&8VR@E-d0(0'KQ4[@--(F-K6di+)e-1R#em"FeB4k3XlS5$iZ@22jJB4&&M
B#lHfJAhdkaPE4PM8!Y9(dkQB(f+UUXMS%T[F$I3B42p4'U$c$8`G9Pdf'3PBZqR
LKC-@'kke!p'1DmYa,BcTIN)Nf%j-TN6f%G)HMbarVr0@'1Sa*R[jC1SY-MQBVa!
3bLY)dG2khJLV'NCBeE$`94@lf8EXCZ%M)Hr+'F&Z&Mk#Rbp8l'DEQYf`U5mbGS-
-QKD%-S8@[EpbBHrlpp[pNB2)GVK8fiZ&&Ze2qrQ@mr+"8IN%8ij0A1`2,8*iC8L
%EM3dVN3S@'&A)C&)(*Z-IpJ*JYDiM)3F(4jXEd[)Zrie@T!!B%4kq+B*24[%+Y3
(@8K'2)$$i8JPhT&KbF#H1E1FCB5EM15`9e49k8I-BI0#hP@hFiI0`mrRUUTdGCc
$D+U61Bb*a(fVH3F"A1%$%KNZXL4bY4[i!1*BHje#[""C9T%@&CFTTiU8bI)+Ap'
*'N9R(ViU"85Gle4*A5cNUZHU8Y2JUhQTiVN5TH4%4FQTXTU'1iQkY),!V$T9GNS
j8D(`LVG1GX3)[NFi`IHlDJLq-E#YPBRJPrpcN!"AMiK!"`aZ*X0+4Z"45-6%b6B
rf*2*BM1l@9!ZiAUc6KkYGET,8(3&HB3LAK$KVXpT6"lGhmPF$j9D&GRRj`IeX`b
mqli'k)S'G&,`49pjX9*F$P,&H+VX4+&21IQFfH`VCe3(2+-%fGKAGDd),Y[2[+k
1h0AVY'XfY3IML-j@FNXb&d,#3Mk#Y$bm4L-Y#bSM,CRL*L-Y`6T0#h,$VE*r*1e
N$!@UP98+H'bmjp!q5L#""'4L2dh0cR&)"@L@P8(3MiZrLF6IDQ##(c$DIle1pZ[
ClF4QR8#EDjQ#9KS0b*aK0@6elmF!M`E!b!-QNe"T9@pd@!m[3!&4p8LhkK%2Q(b
r0kFUV0Lc,cUN#*bk8Qaa0Uk`V+kG*9-%DA0qKi2r!9dEFqMKp&jPL0LY6S"bBEf
E#qXhUa(@`AKKlFUHA,ACmK8*Di-ZV&pE%bqXKfp`BFeY,+aI5eBRV'SKCFIh[ea
aYE%5ASQmRS(!EVBd&YMMCfp@B#'+*LDZ1FB)`*hR)$$lid%0`895%q)E*i`-3)C
Yj!LSqGX6,,d5F@@'+m1Ef)SZS#"r5'!Vf9L6f0KBASh#VZfPCKbX-+Qf4U+9&A(
QQ3[BT!K)q6jYBT`i0YiiK'q!#q&ij8+i%+C$N!!f8#32mh"61+p8*Jm'S3,Uc$%
H9Hc39J-9K!$4K$@+d0#%m6S6S-caGaN*AN$'j`@j2dM,kK*,(ZLG`*310XAq!k&
11V%J,I'-fBX'+2R5lVVXb3RNd"%PEl#+&D3+9%K4U3Yep%6S%k)BX0XeKl23Cc*
LYbXpJlP3S`eFqhkNCfP16`kaJNM,A[YhFZipElG(,QKA8)3M2)4+MNmffqe)BTZ
bej9VqZQe,@dphlR9FiZZdj0Y,F0bD9T5lXma,hJQ5!p&[S`(YN1%,Vf"E-ATEL#
5E4aCqFhHC#lpJF%dLDaTIl!9S3DUN!!$b5p6C2hG+5q!b)i*dkFTkE+K!B4ih$Y
N%N)ID0#%2P"TpRma"CN!!)-3@Y0m1(daFrTL`@M"qJT)p9J`6C94)'!F*[CL[-+
-SKTE-SR`'jSHU-4U@SM9dU&Ua+SMTD110'L1FNkZfZUQK'pehj5M3LN[-%IYC!3
E,iTUGrR6K,Z1Y0I[,TP)&(1EPZKYUU*24@`Z#mUa`EM&T4[Y[+DcUSPUTa8PR,A
8cThe56A1bPBjUd#)dGE9bGa$c(LM1&ff5PbLL%NLQA*'*$2$9RNL'l'YJ)TYm@d
hQQ*Uc0MBaJ#f*iIVhKK0%K[V@PcraLkN22TPE8ihC$hTVYZ3!+84"3'%a8bJ``Z
-6@LLf9T)$6AEk%TL#a'3!#9N2M!@2*!!db%pH5-AIA-M3iSp[RTI@XX"Hk%D`!l
U!X60ZGZ`9DrBDU@"3(+HPcX[FfC&rFjc(+'RL'KTbdCeECIfm!PQB1ha[+9F#kY
!iaKbPiaY!3$Ak)EPmGPLZq2[M+4CE&9pc&a*L$GiapNNQV5"c0L,BV&6&FLU$Ai
hq"53!-`NCLKPaKEZl[%dGYP,BEQ8ce%9TMM$&p49S+NMaFE+D%-qNc,N5A2Sb#*
Z6UA"bD5E$(m`&#KN#KM23$Eh#'f-U5JFi5"N#JUmX"j,jVTX#51UB3%j4)JdQ14
L6(Q-0EPE5+(bm4qa6(2!L0!"$"(6!XQ6XG@$**Ul%@$SB1C$kTc(1dFd9+U,'[e
PMUpc5L*,M(BHjPr!9"q'M!&YkZFCA-Q"EH-1aCPK8cZS2Y2jq1$0QFiPEHAZ5SV
bLc$K`RaDeFS+'81K58EJ(3)L-p1-Vh8*`k%hHT54(iqU,pBNibCPMZq#X64!CSD
!C!aTGM`MTqCH929#BDLF!DiX)P(`B*)clJC`!`bd615-#RZ`(X#L11Ei@+C@f3Y
QMdcfh!`DXQFfa,(l!(I*hN6c,h)$&4USLjV-`S4kP![A@JLj%qCrNq*IN!!fQ%[
rVmhYc1dP4P!V+M&b&j,A`T5*Z,*!iqP8Y"HYN!"%RULV-RAeN!!jAD"UkY2"3r8
)MN928[+RKkRjqkD,Xh$dbC!!F$8FFV#bifKclSS-%KF5H'q8'GHBFX*aMVVb@kK
-X#SF%9%",L+"hVT$H8ref1ZpD8fX@)mhK#dJPqhc,l*KZQ*L45+J$d&mSVPJX`a
hMCfYJ8&e,1rNBKL,KpM@lD*!6*ZJ#TX[RP1)q$[#3P&("3U66-VKAqBf5qAJMLd
4+,83dCGq0lpJfA%EL9+'40E4lUk!5#%CkI2%"ZLb-+$TKie2X$#05$*lSJe!Grr
4$DJabMid@VEcVHH*$*SHLK29)JPZ'i8fdp"BIj%,+QRQL@U!GNA&qKA1q[G8c[V
cTETkfRL6e42,%M$5&)8q#G*8S8)#%pqM6*P(98&4)FL`qADT5Ah9pTVipZkXCRX
QA8N%MDi#j3ML1GmdpQ'M@CfT`p,$LH##afA8,e2Ip1fUR1bGfMZjkVHhSETDaj4
b62Ma+dj,083"QmU)JURfqLXfE,bE*q"D03PS8B%(9FjGScUCi'k`!c%&3Q91KXM
3fNddX16bSEr5LVHG*Kh5*Q2T&k3NHkj09-M6EA@4NJPbaUi+0&r3L-+lR*@40[`
B%j(HV+Meaj15GehR5GIGiq6ZqANelV'#XD3M+8Z%f+'#5GF$"H*!9"hHKcBP0X$
%1b+1NmFUGG&ZHM#CbpLZNehaqXpT3c`iIhjGl[Q&66[1kprYXPf5(!%f[@'`j8,
FK#ZU#9!2f,#VK@IMdPFiKV4NJ#a(-b@C3""T6JBccqX)4F-)p@T6d-L-%D6UZY`
DAHG"XhmX3F38T5qfpUccl,jJh)["#P8S*8XhKmdr$9HRAKVL"M'SA#Uj6(Q!TKe
YE",lp8B+TeaU5PqF5-MK$hRJJ"%$3[QZjP3449@,S5LNQ%mFB''6keM!H!lFb`L
3!2cN9%hMJ%Rkl+rB29l029jV&bfCBUrAdAd*rm3I5Uc9VMRY"CA6YM#RMF!0LZD
d%D'bHH'djV52iTb'k4YI*DH*SaK38P9!QGdi#!keAZr',GS"Xr$cI-KlENBl`"Y
h!%d2FU#N*S"bI,8!b[B$+B"5Jh"9QDm4@!6f6!"62FM2r('Q8-T*@[Fq5TKp(3Z
k&-+Y!V'D#K-+d@1l,h$8mmkVQ,+AQrTe*iId%1+6'EU6@5!(DUS2CfY1YM31)fk
G5dlQ98"!*f&ePaiSVU!%8l5r8GUTk`b6[PC21JZ@jS0J#'4M)f&*$D`2X!C46Lb
,SI+XZf0S(VQ$'B9B"Q($9SLELclK%%M$0`Tqapbb9Z8@Mkl)X2@kjKBb"+k%![D
,QPZZ0eCQf(`(ZB8#BMZ`*9VSVJ(-Ui6U5m)EK$a$Cmc4RF%#19,ZBU%F+HFUhAq
'P*&M5'fc+S30cP8Pm$BpJC[0,)(GKPXmLIH%[$qHV59aV(%50qfL*!VAkqlYqE#
4Hqm@KCP8el8M9h$92ZqQ'FfPp!QE34`Bd3jm)Hj!QPkSGLN,eQVL"X9P)9mX$Lf
FqV2b%f@q-h!UHi"$kNrQ5B"T3i)44AZB!Q2M32je[4MZf"JIb2rkFKl)(feF"(G
N-0H)Mfd%e1S[m@@ZEK@BP!&i%"SZ6R$iUL%iXM9LHP[#V+84`,AeNld+qf4)D[B
aQ'Y94%ij5*&D%LC1PPa4Am#RA(TdK(LH(CqQHJ$#R&p+i@6aQ1&$#pmi%)A8LBU
[C1QEk$U[kMSVVL%3@,,d(3UdUcUAm-iH$0$J`"#`*&c4`PhaLKC),)h5SLG"aXR
bb982GG3Ir(QS3`[SPGC**(r+`E+d'V#NaT(X-CC"%TPplr%"(,D'"r*%d0981GP
1dlLT*Er1,5hR@rTq09[DSMe2kP&q8Sh$iJJ2)(N0&K@kKfA6UDJ-SiZ8+Hfmbkj
eGD"V@0APelT1SkY(e@A5ZUc)5Ji`-)SZ4HYk!ef2UET'YDi9k&SZ`-UkdV3Z0-j
*Ii'*F"3IZa[N*VTHYSM)!GlSiT9+R)Z2S@MN-cf6)+hTZ"He)@hVJ$DNlAqS$C(
-G)XfK$[5JpS3ENYrJS9&b$MCUK(R,C@D$$C`ie@V($$E8BhhDQ(e')A9!f3S+$J
TSj'@1hZk3J[4Z%P"'e'A2#P[b#8b96iL"k)pmSV9J-q%$5,-i$j%(lM#TqcBNc,
D`3**Mj%#@V5CGICSRF1XFaEV0&QMr)NZ9#M$L8fF6U-1TX#f&PdGUZdPZMDKkh5
Lbj,S'N1A0G&9EZUmTA8qMmih9*f+UM-0R5Y8RD0DCa@kENpdGC',p!-EXr44RD8
rBPFT@DV8kiM)L'IT[lP-,&d!5'IQ&ApHFV,i!,&cVSf4D)*EA2k6dpGr8PcP1p$
HE[59hB4D9li@$26+0NB`Q[EXNlf'I!)r9E*S@0!U"q00#+KHHMp8-fTZa'5!lbf
-2N!IHaa!m'L3!"RdSZBZQ24lXdaXf'2f+d-2jU,blRh`@6TiHfjL+MC`KjKQh!*
$d!#-TVhUi)Cq[$R!+i`9FP$rF*@+"If)Xk!rVSB&c@rF21PQUbK8EDClKGRMC9l
A&#CUpkH94rrbXd16)P`#YEPDaEir"i'RBC@a&`'$cVb0DD),j%([SDY-UD#b-%m
R6qj$P5GhZmU!$PDq86IFi%mrI3+3!*ReXIPIjMSN9k2eD`8I'kNqQ%12F80mPNL
qUal$%hd!E'm%"F3%*KQ!FT@rMB`jdIfhN!$i30X!b'-f--md-Qdm)`1GRdR6IEL
QR"#KZXRe!BN1dijXkNlp62EA0!8r!b')#@h2D-rf+Gr#Tl*b`fRXNApL6iK$GL9
#ir4Jb8ip#!L4XTHN&+Qjh-Rh9q2N,*SiZ@UZ2@A9VSIrp-lk"B8VJ!cL`[AkbB5
jecAcfKhe9FU-c5$d-leA-eGQ6R26rA5l+K`%3RhkLFBLApQ!*HP49XNNVMDaDNB
m2kS+!PAHQ'b#6+b8JH"AL$"VBYQ0I)lbD1i[dN+[KETL1b&%YR9k&[pm*`dq48-
H-D6%%G'mPRGpb,V@mUiEc#J6-cTj!bP#,Q2KD%hX@8"NJ(IQe[(8X(P%8r9%m[9
YkZlK(4Y9@qf-fqTUe3(@Z!2'+YRUlI9XpD-kRSVIDT1kB5@TI53&@0C5%jIT+Zd
"U("-ZpKRLUMM#pBa)#S[eM(""frbl8SjMk0H8#cI3D0XqV`+cplPmdZdH)eIcYF
Zpk-aTd$S9iHVR4``EfAUQq,$Tq[*H0"c$a'a013E@+$DhKafc@3qaa'[TGKk!!U
mEPAcd2@kBja['BN-),AIK'YQ9+jCVh,0HP8bilFF-p)R8[+e*,'Q81kA+#Jh2C!
!FVTj8r#Yj%(Aj801D8pHMYXB,eE6LrH6+Xek-CbLJ-Ik4)-Y%F+-DccAN!"SX#@
DBLA#JY-c-(bK8MKNS3U!'lNbTjRUQ5HE)DLJNp+a)TM,!E51D'mr8B6'dQAaEAR
1S-(EI0hTlT+j4r@QKe1lQ9)H0USF&0ZGDNQiKJ),BRY6V3`%F`4STNLaE4J'A!,
9I$lP(*XbAlKk+TP`qe5A%""MN!!MBRU$XUPDMJUNQ0j[hS4'a[4CY%hF`$[)QMJ
H9)%V(8!ZQAXXB8+DfXf,FcV)VQD,1L#I1G90,&j2'Xmkp-GATBe0`p53!*Bekf0
#$Z1TL9!FB#iS4@F4B"dQ!G+TS1V#Qcc4T24PiNJKQ%G!fM,"h2p1LJXaFfIm%@T
6-kV*YEbkr%Bee@8ZVbkYp95AeTZU,MAbGA85PaC6ibQ3!&A(UP&+DGBRJ@`jPQK
)YIT'hHU$LBC8c,cSABhQ,G4%#Ff4Q[ARR"G"!*fMaNQ+A891(D2KaV4$(d[&T@U
Da-fq,BN'@P!6E!kQGZX,1eriq5,!&bDqk1H,'&m-@r)#H8b"ES3TXq$c6T(M(q4
BrGidI*2R"8b,)1"2$@e``C-DN!!D+TS#eC-#0C3#C8q"1Ti#eC8#G9K(@FL!,`h
l4Lj@a9*ZMLRE$'$B%X`ZM%,aSB@kP,rVcZp-lFjr#Tr!9#%PN!!55,X+D3I5$U4
IKI3$k3FbS%)'J!`!D9)K68#DJ1aA)IZ"l!FbTN,'J)`"b9d[*dUNiCJ!`S&cP@h
DSi0SJ3"4p,@Qiaqm,8!8[8&Z')B6i)UZ#,QLT@fI20E@%T!!pq80-i3RGDrNdk+
N()02fR4&S[V8*&39ldYVEMbe4aNkIA06Kj5KBcFheDi-Z@jZkR&Pk1M06He5KM,
UQMVdB4T0ac5)8[86)9a[qf4kDPBi)9U0A(Sfi9*2A[-3a'dV%-HSXAmB%flJNcN
!83M+AY6d*iLQ2ffmiH-9dC3%64S,9FdKVp"R0HJiTFYc&XFN[jAD!3eLHM6F!Y$
RM&hdc9+kS-`kN@#9bhX%Uecqe@TBjBTi0[H(GbGArGAXZYQFQ"62j[k`j1@cZ6r
-Ujr024M(jKkXP-dYR0$C($AaEf++q(qLV#k(@&fVrB1,9[rBrkkXlL*MG6R9X,U
FIlGC(4TSj9-#``,N,8pCmHed1erkTCm[!c,!Pp6-35cl@H-1@XCNM#q(jI$lpd-
Sp5-q,j4CV3R(YU*"kF*m"`Ua8%DD1Nd)6fS'0N9&#qlHe(SBRa#JcP"B-V9#0QL
@%(YqUA8Sh19pQj&iJkhiU$!D4F(BYEk2UkYGKiMVM)'Dll(rE--rQr%BQQJ,"D3
TGj2Nba"D5B-YB*2*6plf-j!!dp-q,fpZKDHr[P%d@BeM$bE1(KkZKMf-T96(HA,
*j+T"Cc,hEm@RAUS0hY!N`4LH2&YA5(rj1Ek4Tp8EFHjCrMM,0''Ebp%mIHVSMa(
i@rkibbDfCdL&S2ceeDpHIIhma15abH$Ndk0,4YF'YirD4V0'rq*maqM&dHZMei+
6ScmERAAeAi,r'[cUU%hbI`!!+qY"4%05!`"bCK"9#bfR!0&XNlIGT9l,5TCD1hZ
B#YHk,'XYE913!$3%p@jjrmY#fR9EY$SFGfQlZa6krMCYJHS`id),9N#P3!JQa"L
6SiM+B)45hfmf`$M%N!"%N!!SjM!*U5#9!1-Ka1Na$2[lIpqpGqqffrF6cjcc21G
j,aYY0dP,N!!!34!!3D!Drfl3!NBMIM46(3956*SD8P%I6-8HU9"'HRQ)$-jrKQA
m"P1Lh)U!B$cXUI#*H8eLE'ej(-("Q`c$GfMKiD,1-f,Hi!42%bUJb,r"ZKhG1Jk
IpC8p4Z1`Br!MSr&V"[j3kD8KVUN%bY+,rjbA1q5D2YbK43BrdV68GMcDjFF`Iq`
(fJ3-9,@045#lQ*MF)G'MKQLqjhDRY,MGMl8[D'K*kFeXE(!AR'`)lVV+h-Zbi3[
$4D6+1EJA,G(CS5fiKEUB82'D3`ePh5*SlFqHYaFLE,Y5'c%P)AKYaD-iHmKB'@M
9G,CT)"i3pG`KhhXJ'%B(XXVH"T&$UUf#BahY3F2P6p##MkF28`"j00hNV2!1-@@
AfC3pGe`6A8A8PF"HhZl"4[iN[LKX'XD(MJm(2ZciD-0(""rG#AIF6HT1bkc0M++
Z&rUU`8e@G5a3&RTLVUqA+NUmi0ZA0p0rm*8p@Xj`&e[i2-jLY9)5XmkPDf%YV!`
[$-eN,'BSBIl)l6lC)1rDl`i&r9XEVp5f"&1m,AA+qampkhDR0kDH6!qk-l0-lKq
TiaHdZr-bDheiApe!pkl3eJG+0Q2,p"ANJMbc5rl02a,)+UN0[+0TQcB'XKjXaqe
jUUT(`Pjd&c&fY2iG+U2Nh`MKF16Al)K"2R)@Ylq+HZ6Ar-M#hA4NBCGmC$jZa@K
(&Zj@MRbE(8PK4`EiXKE@dC([,Xphj0[+NH[BNIIP)eM@`VP4Mec(Mj3p5dI+V2)
4,+[X8V3MCFqbEUhCkpT$VkjVpjMp@Z(N(H2AA3+SGKXqESG,S)+aM&M(d+Q)a0`
9CJ8lL5&eeG(akm`S*Z[`X3,)4!Ff%q2BJ3Ydi*EcdJ2(aLpbS"'BKSmU1!ik-)[
BaJiiLKq`M&rh2N#Rmh%GMH9'GU"92K#,HX$FNlAZdYd"E4+r@H5J'a%2PLUY(m)
Uhr8DTm-&paQRJpE@4'efB$S"XCApCZAiqrciSK#'Zk`k'S`0E1X$9&eXDqD`fJ6
RV4H0`i'G(6SDlrAXJ%#9a3iFS32ric2R!b9@(,#1k,0h'HHa!`QU+RBJ+GU"468
ii1M6CamecQ8(G2R!p9%2M)2k)88Ch*4B15Y+V!SVaS!9SaNV4XZX@!&@M#&@X1-
eG!3G0ke`0d!$mBXHEdmQ((HTr2*Aa9mZ&+1mV)[bFQlaPf@AE#qK6S#k#G4QFCc
ER8S1FB'63jad$'jbPqS82CZ3!$LJDG2cJ0)Ji'S#@H[-c!Q@"B!#kZ1kprNM09Z
iT8fhD6Ufe3G,PCGQpM)XIER)8IcPZ[HP,c&S(&A&`%U`aUSq,UVKMiUB82(Y&Sd
V,VV%'Q8*0G+Aa#$HC$BLj+%dAY4JJQN+`e,UBaJD4rX("[6HiY"%33ZTKmdrE!L
f&&cab`liZcLFQHVfCkB(kIdee4&25YefXXlG8RFbXk8"Vpfl[0I5S`[[6+[`e+M
#8dPi+KG1`6'i,JJ-E01kR4TJ#E$"0JYNCK9F#DTl6IS4hkZKT5ji-UYj6G5QkK*
[D,K5((!bIlIKRGV8j%K9'Dm)HUpK@q1eV*1elb4A'JP$#SD4LlY5Qa+XmkFhARX
8iSD,KQ1%6NT"Y!k@AY))[(E!44L0Z82qT%[Bd$@9f*m!)QH[3KG*9hmX[M["`"E
crLZ2FJNfK8`&*e2hqNpQTLG(h,9miYjY[*TmlP`le)KA2CBhKhKT3CMU45X-0U8
GAHS99KaGiYLJ"+N2r["9SmZZSNN)D)+ZQbialBL5CNA5J#E9#mYN&8ZGI6CJHVX
@+9f$ES3!1VVdc5#Mdj11MM+1GS@2MY,XmEXD1hUfDfhL#6&@*fiq(3`rhZHDLSk
dSTiEZqEPQIhhpeKZ!MMrm*,[i5JD*([MVNJhK,BpX8D,T(64B`J$iJ&la9[D`EY
F!b!X`m0JTF,%hX(5$XdlC$*qC[BjmL!Je%4LDMm6BfJ+HlR5V3fQ+bfebG(BZj@
m+&Fk)PAD!DAek%TE5HN6'+5,iHU8IRMa`b"S2PD9&QJi9(DN6!@KS80P3S#lA(C
Cd4&#PY`K3KGI9ra%D-T!%e1hJUPV%--Uf@GqYlA"&dbQZUPbF`3e68BNkDd#-84
Ld4J'pjSD'j)MPhra(6qGcmcIa2BfQS+e@BdT`HUfhNYE0rVpbGNk2GpZhb&K+CP
ec5iL1S+,qSCbqMHUr,Eb'M0eidC"pKi8F!F)b$CbGkCH-ACIZ99E5JLqQ"#F%4d
-bAYY5'kRafb'j2d9qqpbGEd5PU,hIZh!%*U8)la*56k50`1%E,h@$*,AVlL9&!p
$ECd6*9!mI&pjA([BF*1#j,,L1f9%Ga#L3fhp8Mid[d4S,MHKK1cC8bj*NIh6M#"
lQN#[M#0lpA)ID'5[IZ[N)IXpJEAfIJm@iZZKjXGERPY15DXpjB3)hP1jThL3!-X
brLrlf8m2I3e#4kFEHIKM2H@XmI,5Up*EN55lRek3!',m#c4l8cP*V)e'f'B5J)"
+rZ,YeSHbbNiClpNpZq`8[@E%aZCi!&Q+i[!&"6'k"dX(0!E@Xb%ieR[,9UfAK!1
jHT!!mX'"j@d+eH-%+QGbpMARq$,X@M,'["SAq`RBQ&F61'6-Qm1B0dGPcCkIjQ-
H+e61c(Xf`maVTL"P'&Ac-@mICjk8GIQ3!'k@`VJ`h84MR)eYIlqSe[K!S9S,"HU
XK"C)r,+--Yi6+VIURACkc#j(!(B+KCl%[,JGb9j@VGdIQVe0Qi38#rVjUiqkq'G
aXKS%Epk)AGc&KK@a&0PlA*VfQEMVS@eDZr%I68M2kZScrZ0CmfiPX2,QiJ0$'$*
0h-U'E&+'E'*$B[+3!+YLRZK&U+5p6hr)DrcG3lA'haP,N!#N8N+T`4l02b!Ha4H
[QR,Bm9I2QK'BUE#I&[0QHa%-mc,KMq2BimCe#+UX`)X&aN8!pT!!I-#1,&TZ4[K
H#GHJFXTiQ"KG)CpU1@)f9%fJ8j9qhNCkq5!Bp9X`C51P2GLU&XhA0da'G+*q!b#
hKkRr@eHRQ%d,lp$&(9ML#mS5Am!5GaM,XF4XYTL&@-T#5P*$NV*Y'EFT`@TXKd$
+[%6f3pZKb'Z+N!$AcTT[X@MY#'8Rr!IC9k[B&k[1QN82E3S!XX9q'PmY-+jN!pj
J+UpN`pjJ+L2C$pAF5U#QCIc%0HJN(Gf$3[(MqrNM"GPcbkPMf6*qilb!PbTNFRN
)*!@5ULR%NBY(PVK0YrGEq6$q!N2IbQ9"6M`@8!MdppXS4)p"BdN890X!T1qHRBG
ZBUUS+U@LAXFLAkmlBML0e*D2r4eB40@lfl4qifB%acBAXZ!B1RUka*hSAL,NQb)
Mh`Ne2'AZpDGIDGK@A3QUKqa0QrY3h+l"jMjU$)r5I6bJcVEaJA+fQiKGa"`Lb!2
Ema(MQfc%Z%hG44p!h5P-h5QU-Zpea`2STKQa+8JG@&#XM3RkZ92(eBM8SHEbVGk
h$B&6YFMXf19%rUFp`K@9q-H8'TEbH6@R0BH+RUr[,8d"YZfThB&@G,e*`1X4%-D
IQY&*9IK@MZH)[l"9mi6pA9#!G9TYVr33F9ji9I2%d#P'LGG)'JqhXQ9r4aV@5[Z
UVfTbphkrQN,FKc3mYPLl+8+&AiZ-j&$ap`-mM*Xlhp$#F-'h5YJD)E)hYeJ`j@S
cUPUKDKP6p@S1e#Q54CY-GX0&Z,8H$kD"qESpPp-M(!Pf1$cBa'mEZU[cCGE&VE!
RDi2(6+#p4&JLAeGGQp*G&d%(Sa!(q(lQU!E`hF'GJ$XIS*ef,QB!c1D*&#UVRCN
BMm,%MKLVLL)L0Raf6e1YT"*bfXih`f)N(aQrBL`qRq0*mNNVEld*YBaT&Qhq*#B
i`CLpcp18IY#*fG*$UkJad0Vb%$LJMm0QAm)9Ep9F)kdjq'+J6QH0d6iES9B+dDk
TVB8Z@i88B)[#Yl6KX(J%LF+X#cNm(q'6kUZ`[lNU9!qQ&eL&q"3kN!!l*,[dc(c
%5pUV-hQNbcUeBPN$Qi6LU4AH"XCfqTl'UcCrYNaXYX0*krJSC*0UPXQ9eMCBLXC
e'D9L!5bB!&EB&8(PV)(Z4m23KJmlZaA`''%GdJ+fX3$-U%1(2P+&Y4FME5"R%`I
$JFZ"If&S`6Vc'Mrc!"fbb(&Ba6XdDpiEQK9K),Zi9dZ%hY!5pXZSiL-Z"lVL@CI
AYL,[%%FL2ad+8kJVC2E[R)eYM2-q)U4V*r3VA5EUD2lRL5HU#bpKQ*f'8HL"&-S
T#df"Q$EM')KT#fT',aXb#JN@bL!3p3lUIN#6rJF!(DFHUY9qB&b$3`NfK@T0`"`
`!(bkPkQRG10,&1`P3!369+ajUjL5%AU"cTF%3TQ*VNh'"aPJmb")I4c'alfU`K#
kRS&NkjR55@cJQT!!q3YP-3#YD%&9T)BfeVRiiR#P8S$Af3T`(+N5Q"5kG6GYTM4
R3L9hp#`0Sj-aG'l*5TQK5aK$jiTEQfAS%TQKfd*0M*fh3dKEF*E#c0[j!)#HUcP
$II(GIGS2T-[!NMF`G6H`T53a%(3eP&c0QKFl2mJQ#iBT%8-ZA$r-(ij2HqR+P"-
J)Vc"S@3M9+aiJE%mPiU-hmT3ZSI#Lqae*j!!NJ(h[J0b`i'[A4e+S3SAd,$Z[*8
d63NKb56k`YkN#%$b#)@Q($a)XkGBb$P$UjFfPUai&k"ikri$D@r@IDa3Dr1NlN`
Zi'(j8CFI(E5&Vdm@D9@G1hAS-'&65'%J+kD*8E"@[1"U*3I*A"'aCMYMU,hc$+r
k(ik*)icR#MJMX$9+mq1T`*5K-`LRXB0Ebq)D6`a54AAZ*&&b4A&'+b$ePH4K#!H
T2ihL6VFaKYFbKQm$BUq9@Cl)ch+JpXmCD[mFE1H)[4D)[CBc[h"IfTP2M%6adSd
eYQ!Kh%N0X4ZZE#jMl8%NM0@3!*2BVDNXTSQVB2+fBNkL5Q(cTcBf)bfYbMM'Jh5
b4T%QcbZLD(+(`RJ5aeJIN3a3US"[aG5pRE-Ujcf3!+jr02i63a`YCd4TP--dP6Z
ZQqbEbrhkZHh)"Zfr'Jie54Q`G!N'cF1,BFD'@RE$'-'+e#B)*B9EA+kS$8Y#dV"
-94X@aUSL2YKr!'3APS0T)q5d`XE4D,6#$br"*(qNIL'9)AaZ&aj2F+IJJ5KIZXP
HBJj1F+@!3@-D2`5caL!YVa-S5%Q&#S1i@b!@qID`$5U8$5Ta'ekkT%2[ieY8BSZ
MH0c"9%T3)`('V3JQX@e@8U+Sl1Ef&1YNbb!DXj!!UYi6318lCPD"S6Gb`F8k!M-
X@(@I[(L8ES%6-'F!h!lMb#!$qJDF!$lkiK)$MMdbdA'@L!jIiIGqLF*5,8!Y(TF
GE'pUHQ0$-,N&Ik9+(&V'hpI@id%#G$A*GJaYZbN3`C,m'"#3!-Bd[j@fSSGYCR"
LRDVU6TCmU)3lVHc"UJNX"B)!V8kD!Xf60@55G+a#NSj459)Qb%D@MXP(P[l-YMN
0aF6bD+6TFZGK%d'HmQ3DK86G'SeJ6d-+"[rQ@IHZBbGfD-NQaYq(kNmbB[a*P4K
rjG3K*FBI5b-aRX%%N!"La2JN5E2G`p*J*B9Q$k91*2'1R`1(R#5[,mdN'56jE4N
LbBXTh%X+Kfd+0d1BHk@%Z@I`N!!5jYi-%qD(T2[VN!!5j[(cc6$k2@,dp6C'&b2
2Uk+3!1GH+AQZX&akD&damVcIe3lb[0H*21q)hShkJ*2UhNG&UKrU6NCR8PfR*#1
A&L2`-Z3l`)Me$f4JEe)'L(99e,iSj,TA*YHpf1JaJ'8P#VQqV*H4kc59qC!!%1Y
*E"Q&r@5F!5M'%FeI)#(E"e@bABS%Q!+4*L,Hq4#4Q&cY3QZf-e(IB52ULaqLa&A
0`4FR)I3R[i[#CkcLK$j,EUfLU4c**22A-[*pV8cQEia#jR0fK@NV+F1F#IkFIUj
NcXidNrbD9LjZI89#p1rUN!!f+)cJ,T!!N!$qJbVTAka5dK!)U+j5Y&RCdY#!CUb
e"3H+(`**GCqdBR`MQ$VNN!#Um#i&$+KD0NM8i169I@$9I6l1cQkT',mZiU@Q86#
P2d0"K2S5qUK"jdBHpYZ##(`*,95BrIfXU(93ZST9#kP&)aH&*Xb$#6cG$F$L#2[
U26QF`)If(DD!JLhCKB89qLrEAXR+N4Q()kUKKc5%'1T*I%4J5c%8`Cc5GNEbTQ3
8@2%T$NPENF&33kmde#"YVY$SU%+R%6-S'Cq5CLJG(bmVb09cNS30Uf-9B!XlY&p
U,Za`Eh9KKm#B5rR#$NIIZX66N!#8Y"cCkF98`aAeK"rUkp!c4'XL#QHakVM+UX1
%i[+JA#%Gq5X%4D@'&C8DZ9*i3AN3"H9"Y@S+1c-8L2#b3-4'ZA%U%XPX")8KlQH
XTM$%4UF`4$XCGBNDKPLMX0hJ&)CB`m)3Dr+&)GDS&8(LSSFKMVl&Yf*+Me@,Kq)
f$f#ki9MM"L8Fi9($%A&p`ack0fV1$H8e6CJL-JqKL5B@QML"d%5K8fJ#U@X)6p"
%h29ifDH%*pC,`a-`*,1"-D,9PI,S`K-`-00%@dT#&)CQ3K4A@I"JLUZ@K5LfX4$
&+0F*DBJL-%B+AV0!KF#fUT!!E-@$&BCkJK@MP'$&Qm6U$!3VkNhGcKqXN!#EL1G
Vc'N-A05l5C6!aF8-%b9Uq-+VKLm8J&J0AhJIX2"&IBj$%VlBq$mPI,&aA$hK#km
F[JJjK5mi%6p@)H,(U%6m!a5qH#cYiBYkd`dNi3Z'8++5TUi%JBX9qJi8qT9+S8F
a3S"F,I4&DU'2DpBB"FL8KL6KS8QRhBU+#EAV)85JJV5T89!'@3mT2mUi2J82L!T
dT)FTF$#U!R+B2Nh,Vck@9+#Qk1lVKI%HhI0UfDIqSY#VC8rGN9Af90QRmGPPRiS
lV0i%%ZdhSa#Np)Lae65KHM42bRdc)(UA)Q8h(NMNL88S[*Ufa6D&0m'Rm0SYifq
)*eJKXSaIAC%S&hI%[IQh'X&@eL3aD61)bL#Q6+lZ&T0#CT!!URcDlfeXQQ4BfCb
jq6qjq1E@32b%08pdB+YihQYSC%DdX$mXRR!9PQkakViZ2PP33A"-f6S`"0D(ikG
89F3G`rEmbLJ6RRN!D*IEI3A1a(mb0GLL6XT0EAR(%F,[T4Ij!PF,[GK54EBh
`4(@B(9Z-eBXP$&J-9Lr1)+XA&f1e!b%EKNb(4f$BJl2CD4Z`HI(rSQcqCR%f!ep
"lDGHE3'Z)QNdBpc1cqiY%NCX!EZh($TfCpmVXpYT'l"lbrq1l,k@2(D[)(C61LR
-IcP-MNr0UEaEF`@CR!Pm`!b2)JN64LJRiX-H50HX`b0bdq-B,)h!V"aFBSc-Sm"
0lPI#B%Rid&fp60LEjh0J4R@-"4-%N!!1@3e"lA)JU-2-pmlF-R)MJVSA'efB@$!
QNDiP)RF&+J+,SlTSUm4&fe8AEDqJK!Q%D)SiZ8Q"K`k0*JBa*c`e0#I89()akkm
XF'HA'Ecr@PeQ5l!p'Ah6h%c,'Y@NfPYD+i`*)T3BeR+!KZZ2-I@0I`b9pqNQ"cT
X1C1R*rBqQSB(%%#B1VF9FCY$8m4BU)RB1,&#*i1fDiD[ammIm6&Uf"%`j@U"[DL
q1q6U`e6KELe#L4CKTIVLU,DT5[@eZ5+8&+"8bkLC@cTZG#8p4!$f(lPU-%mhL69
hIGDBTmP(SK0j&A6!hKr3+%f%%NqGQVmL6i9r(JX0rG'@rNR0i),N0S0VUN(J-3b
&$UJSp'MBh"&QU--&MaZS80"R&E&B+5#-bD4k`,40BbqG#iUp@%'*5!T+%J9rA3*
R,PKUprA&Nl"m%T()Dq)XlDf1T8fe0TCb42iZX63jH&c!R8+PbY5V-#$VL$%N0Q!
CPERP)cSp-1#Cc'-R8BG62QAE#"`p'+-J+3'[8,C,JPETVZe)#UP$a95+af&mDA6
+de4"!hmAD!SXb8!4Eb*QXL)H8iXilfKP55GG#b%kq#+@Ii3KkJNb6D`@mbZe$GX
br5h*l5BYlM,9`-bSBNkc+de1Fim%'BTFqa9aEji[P0eQB3EFCX%$i$Bjk1e382r
arJbicHUKm-aVcEV0'X9YMXe@hDBDe#Jm4)j6VELI9Z-kafE!G9T4HADP%JGF"hQ
idpPj[NX&I+cX22ZBmqaRcV1M(ZI*+d#(qlc"+I63[21XK`#+iMa9PP3b92V`%,T
29I6EXJ0p8H*!afEBJ4jd!M3F6,c!@FaFD$pcS4heZ	X8fe+Q26iN+E`HRr*lM
3qN)eLf&Xj`@r58eJ1&&N'9qf$LaCc*L49ED1"f3)e'C"M3f59)LXXKGTHXVE[3M
1,1BQHBSP2R5aBeYXajM4RKGS'fBH+MApC!-Yf1d%*+ZGr`JEJQb`4bFE[LL"+D!
LGHNI#$$5@-QRpkeHEM+'c*k)rhibM%hK4hU*#6Emi%'@a+%B'rRDUQ+,lZ'6qlq
9GA*[d&hp#RRB`NiA#Q&'Hq%ifa*E5kDNG,c5T3DBKZD+RY)P2IU'jqRIU1IRPpH
FrPYc4-XqY@MCJD(J$@cU$3m(A8TTa,`qGhi+H5Y0"+Er[$2h4rhm'fB&*HYN`ej
E3"%,k%,3EHV#@e14N!!H`E+N#aR3#-N-&4k0J["B`#q$'iLJ83*qql&p3qV*fZK
VU'Cc[V6N,-&AI!Nr9*G3fpL5m683ZNaA`SjNY-qqk*FTICHke-k4(#dBlSqjU--
9B@E,q0[VhMATQR%kGGP--V2&c'IK6eiC29K-5q-9N`RN@C3D8GA1b*DMdV)PiYE
0E`PM&@5kJb%F3TjY6ba,+E*(!ZCf`a2,J[H)*kcF,-AG%(FY-b9B'a@I8ZRr0@F
$E#S+$baDPY+0"1Qf9`j+6'*-JKXd,&VQ(3TZC#M,$AQF`cDe*q[UE-(fBQLEkNf
90pT0PiP`f"L8)M0R49er[kj4FJBP$X%e*TPd!"FYc3b1UB1TfcbL06-d56Vd)"`
jGGK3mp-9$T`1r)B5L,"K$MB-fir3&hfDi5*H&9*UZcfX$MFmJjH8B[,cCMB6C48
10$2-,P'dRp+@QaNXb)2$*TI,CGqM[HPk1Sd("&HrC1L!me"fL3bcZK!)0[1N,Bf
EUH*qcrp1P+T98DH("IK[L2H8hif#6m(*UV(XaU(TG`'Gd)hk1VS)(A#qLfPkGHF
M#0FFBkM6,Jep+l*6bH4"0F@mi(#kDUT&-I-iLEC,P+2l`q'M0#8H@R)K5&2N5q)
"8m@XP*-44ZlDR8d`b[[ER,Ud8&X(ZUJjPj1lbB4Qc$,q$h9)31Y(Ge&1QcP%aAP
HQKa)+T80+S%Cf@a0rCY&Fah&0YY(R9YYT@38`kR6%Dp&[1lZd+faqkDFeckV5,'
IciNIUCQ$C45kGY*V-X1,JIEUMDH`cNN-@8T61b1X-kClk@,F*(V+l8P!,3kb,-#
#'kr)r-mI0YZk+j6*R8H)IZ&"3Nj1a+D#+FI3j+-&YUJ+@2808qMIU#RcbQXU1Q*
)2i2*LcjYFe1+iha1arAakrdk9kM'TY#4DK8LCCBSbS6[i`SC*!Ta`,qG'ZlDj[@
K@JJaYqZ&AUSVCfNP[(Nm[!S)IDZY%iY%rdPD5[),hL8A#DNB!$TV4k9*6+Uc'0E
T5HC&*QkHN!#H4%f-+kb+Q*N&r6*YiFa-r)rL!Kc-"4c!eVb3!&ZP1lF[F"m0eJE
V!%P9SdKaB@XVdLc-54e-&e#-U#BfXHl'-+DFMmD&XAS"6)DGM+2LBNCa-a*f`lJ
8K-68U$b4[%UCcZj4cCQDVcQjVN0[@Y4EcAG+%D$1G+58+X$VrER+T1P-CY$,3FE
UQN&RlM!H)mrZNc(ffHr+XjDaZ1T$,QVFqQ3k,DbPX8iea(4B-@FhR61G*EdbG2b
U9ZhfK3(2I3a4'3#Hf`I@SY0fY5(J9Fb3!$'MK[G(P!RCSQ*F5h6#hI`XN9'(c1-
3J@IPjTVY-2Nl3Yd#bP4l%!k2H$6pNCeDf&S4$i0!!r'1bYF6-h02j6Aj+f@c06q
8fUTGd1YfA`fQNUDQaK6hiA4e)3YX,-"E@NGSkf(9D!f)SXQ"GiL3!&"-3El0L41
Ed9)3A-Z)R2)R-9*S'9lm@VRj0@jqTGcm#MFr8@jqJT[EP*[EF,08Z9Q+QrR+cAc
FA+IFA)HEZFV0A0cm@,Rj-@jZ8'jZ`-e0bXe0mN@V@Q'MJ3K@N!#BG`KPmp3Acce
13bkI,'LXDe&-9,jD0Xpr#6rV'`rQi8HFAECq0B#,MeD)!(0K@KN[DpPd`[!Qh'c
d&BPCC4X(*h6L4N@3!1HB!kd)YQDfD,,B$8cJ"JMF3!,,E!)he0k,RbSQUSU*URT
p$)Qik(C,K+L&ha3cSrM$0$)9#mFj*"lSPA'2Gijh6ZI,4%+DUQ#)h-%lNc6Y3$C
rJ31kUG*!D3Sre8H6-2VkEcaNF%&e!Lpe!J(f`[R8SY"F5@f4Nr!B'Y)PA#$L05"
MLckDT[-K(H2Ta2'VPHr2Y-C+,UIX5b$K"EH6bjT5#Ufa4Erd%h,U'$DTj(+`4Sa
0Z&cR45&f$"rKfarB"%0U613MT-CSK!PB*p[IV"%phL(9e046I&N09`VBNfBM8+e
+-MFY`I6[[jNT(Pqk*"%`IHdh%mlKJJTFG1,%M`h2RBThqAV&V@GJkJj!ePk@!Z%
i%b,$c(M8%h1`G4GYrIm(%qAbcFmSkGG9P*Kc"S2`!IA&N!"K3PcEr*UQTiBIfFU
-Rc,RFiS[-Mfc9PdJc(*GX#U06ehPmP*6iHP58rMd%`$T1402h'4iEXi,erR$mGF
e"aldcTQG%)c,!m$ThCR*PSSI2$S`h-d*S#PmSbZeNUh)9CTbJ"6fZh&4eCj0c24
9'jU!m1P52%CmAE3j)B[PrqJDANp`kA4lYeNI68)RjbQXPGDm#PLaS1Rj5ZYGbbT
-KBB+P@L)DiRM2ai&PN`hS!X6PbQ-U9peD-2Ba&!a6#`JekLJ)5Vp#%LmT!NF16N
#C$0$j9EI`,QpT#BP60d*PhD1'1l"#lPEmLPjN3fQp%cE![8)8cpX+28rRAJ%P9j
S11X,LmGFJr&MheYZZ[ih-df9a2ljCjHEQfELkjRqSYE+,DAccTkT#)aQ"+IhSeq
J!a99BQ1mPCSGZ0-l6p!PlT!!6R(Xa*mMGJBbb![*#YEjJQjF4N%'VX-4pE*iU1+
C(9V2mHX-TX,%4-0CI`L,1$[r-Pq3!1(dDEk8m*R6NG(X83I5[K#K&0V`D6c%XaG
L8GBhJ"KcrB@GXk+K"*BN4PY5EE#eaBBBRPFrkFD8rDa2ZRXQL)rGH8`,hidEG"[
M4hcqMQ1IG,Z+k+IRqEZ2FC0J&9)N[N!UpHc9`LrmdPmimaF,ahr5l3r6!I&'Rpi
cNiZNC2r1QH)alN6+hFlS5D%rZZ"X8T1QfIqfX-PS[&ec0)&Zde+5F+'R(,S8)h2
0E3L$&5P*AK'BY@-Sm[3Hr["KZNLZbU'DThb+YS#bep`&cNkKRcC$TIpJIY0bFcc
(j#daTa4HpBUc`BJN8YZPK#)r()ZNQN$LZ1,)"T&!V4IB0Pi(31U#&q'F1c`i0!,
A&Pj%kXp6MdZ@fb8pKJlripjbPBMjRY+QSN1pVM(,II8N0EU0k3f5"B2&MmhK"3Q
A6j)GXkQ3!0,-$8d))(GaadfAM`8L0Ih8V*V,Tk#Y`U"05N#fRa`RhrcMP'!pfr2
LMHNiMM0%eY)8m$CUR"lX@@T)"-jim@9AEK0HGrF`YBq%%H-&fG#UL8Ibk&+j&mr
rjrV,G)1,jCe1cB@cA@+G!k!NE28FQNG[4GR&i#VDSXbF-L$G)&6"A`IA@1I3`ZX
FI!U,CIaR+jBDFXX"((R"8MK!eBP-hTAC@TfMkqkpUZf!iUj`lUN3UDa[RP``"LC
%RF6'!lRPeS"RJKq6Bhr`*RhPrP###,Qih+lRZI)1h6""GBG@$8"ENEK$p#+j8hH
a*YKBqCLjEXaYTiFe6-Gc!(RZ)T!!LPHJDdVm&"!pNXLf!X4%qLS5K(2,eDE`BqF
+p@Hf"P1FUc55Aa%(+8*J`h1RmUYM*AAdFf#6Z&-mK@35h5mQXK&QS1NU5QUfDbS
9%5Li!QjSCqF%&D6mHRlN+VDBBCSiT62'@%dlB@C!$pT9!1RNM%5!8JR9&m4'@a$
MBKD6V6NA%TL[h`-'(hm19@ZBJ-6mN!$-dMH)T8MehePL,TJ+KV)QTq"$T&-UDEq
ZUEPbXDM`e`@$%T!!#ZaUlpq6Bc"!k48"Rp+YY2dXh)-(aIk%j`jYUNpTaP,EXHb
$KAZR[i),01c9$'"G%5D)G@!)ZF%6BT&rR3T-c3'-cc*0SBh0&E,UN@jS9cDXj'Q
X9ifd+35YYjRLK5KZZdS@4DkG'UmHZjL6GjT5+YSQSK1P8,[CRp6e+G+h(Hbfb"r
'lFfKjrN`rmq8%"(`(c-c@RM0`BR#Q3BEkK&Ga%6IV)LqQBNZFKEpIC[SPXCmJPR
D+B`bD`RmL%KHY@S4`bTYT"5*V(J935!@)Tjd8iYUFU0raaqXXl'069pPM%UT01@
3!$P3-Sb!0(+)3SJXJ)*%$ph$C,jhcb"!0&0KLCP0f5)bcHSKiaK--C&Z%9`4Bki
HkV$#Y*J),NBIdililDSBYY'E!%deY3UH*!VYC%V8K9&A&j,GZq1k,r[F9XdD9G`
ZN!"*q4FUd%*TDE63BXYV8jFR+ilN@lRj8e&#AC'FD-S)94,6J8Tbf""055aCE%G
!FBdHd@$X&aHXK5'0UDCH`'cKHh8b0HHhX`PX0j-)GQ#@+9CLcZUcKr1d2qLiC[1
'`Jl-#0"2Ga!C3LP'U)4q9'IX#c-#HHhk4$((p5%IT0%PrR9qi3#Z4,#G'CF!JBM
NF+Xr6J[`1faEZZcm+([P8"CKTbj&DFH[QYKkbZf'*9Bh%I1D8j8iS"bTH5&U0f@
GSRBB2cScIk+cJ166T&#k#)@Xl1)c9PN0&c10c%5k42i3L[hK3Q&-CFFc(EBKa)T
E0QNAp)P)8hH`e+m,DV9G[&+,*DIQ@bklf+AKIDUQih,9K6e0LU'(#+'bRaP'V,f
G9jmrJ&50hZ98E6I'+FMI#`#ib3H6!$5*NDXX6pp%qJ!UFVkXMQJV5VP$A##rT$5
P&Z5VrR'Q*%+1'QA)BD8,RY!GbIbLAj48lUh%BYp8*a&25b[2$VDS!JFd@@3rd[e
e8a'VL2S%&V%(*kB#$@#&f!N0i'6K*&lp5[66"Ee"bZ1aMc-3PkBL3hX1Mj!!M6#
*UI!1i5[4e@AjEh4CTMX#C988(2K+[*T$cTF9r04Y339HD&5RQ$-LR+93CKCic'`
6+ehiKE[aBHS@C-fXCNfBJ@#699#!UN-Z[Y6cEj0ERH"ZLEKpcZ+m3ecB5fihbia
aAL3h4rq5fJ3jIDQk#63bK2KHLC-JX&*3'k5iaYc8cX%*Z"EjGQVb1LI$ZB9Km(#
)G8adUddLN!#9,NCPQac2#ZK&2pYGbqFZLraXJp640*fp'MG9TMSP&6Ap()hIP#)
XGIjSXD"$kQkN!`kEZI22Kq4&r!!%HYP&cj5YmcK3V66rk3@8F&m21LVZ#Nir`K&
6,ZKqjTdPj(Nl9&bHLBf1fA2b0)N#139*RNHdQc(*qQkJAJ*LqpSH`B,4h)U2D"'
A#))[8ISJ!2"(Y%RcbeRM'`Z5)D$#`qE*CM'(KiRm,F&d09#R!P9lal,3P[+GT%Y
'Yc(FaQ#U#Na49jHKjI3i-mj[,FD1!3Nlj)2D'Yj!qpXkmF-2l"dEefj#3`FcfiA
dTDr1ZB+r-2YFI$Z*Bp"C5N[-[iX"X@J)8iT!%%dUJD"8RE2He8pI6QJ#QU,l!T2
%+&NS-S%(Zka5a(!Pm9[&JAB#`1d&3$P#M6+&R30N%+"VF#CcQRCI@a69l163fDA
,P1T@!8U`RqDNfpK[PhCFT*rReF$(4"Y5fk%'X#pQ"E0`k49Em)8K$i+rG"Pf'2B
bL5"h3(5CBKdhlVam+bir-1fbH#cd[,dTll,r(J!1!f)X)(3+2E'@b1VABI)epTG
bmqQ,jSl`QLG(M[JQLFGbRaHEd[i$XF[HfReVa8BkAL5r[-F8ff*QC!hI[-*rMpS
&"RH-p*adK#+b&$A)Z4VR`EPZ9&`I!XfCM@l3$EE!*T&E[pqRJ,S0lc5i&IKI"4c
Ih+d)TbmPi,Y-lU0*cdSb*CA3(q%!TX3SeGdbrL[m85fHJkRLK0H8XmMJ+qbFb4k
+b!8ad)-+r!$GGVl-3m%`64XER%b!PPUjPp&*d"#8A,U)A6#$&D"YXX[-TTHQIY"
k4kTdPLlf(MiZZIB6F0I)rYJ&K9EY*pS4J"DLGX3e3&qNfjfqX'YNK-(K5UV$(d'
KcXJ,pQ8rC6Si!qE8%A*IHE9G)Da6kCPVU)"8%a+Bm2G$SI2PIbSA$NrjrUN[,e[
#DqQ[TEDUUQS*2LcZVhe0D"'D,(YfhQaje[,3jem+!Ab82M20d[(2kmF*LiA(,4X
XEZ%&bbV"2hjjL6#,A[q$m(mlElEmA[M%XTLpY[5q+,cd9f(QAhFXqYhU+Fqmr0S
cRApqUM2TTDE,`MF&haZI6!Qii3ddVF2bjGUe`RqYAAYdr0H&TUm,jlmZP2kcm2$
h,cF*6heG1'!C[q1!m&q@d6[ZYEciq6Hq%[lljq-q&Ik-cafIlA*BBP[I%4jlJbk
!UrfV31XZZ'LjRXX6$JZ"ULSKLrdBmGe(PMfGei6cPKm)Edm@,P[qi6q@@fC-&Ml
m@(K(q(b#m1)Rib`a2%ci[&bi(HTq5rMGZ1H&+F,#cde2#CBC`V)R"II&*i58MiA
c`YN*`ZZ#CCcPcXmEK&FrhfYTrra2`Lq%-KbB*Ic,j`92#GqF)DcR"i)cCLfF-G0
bPl"3q2Nd)@q'm)&`G)C`3[Mf0'(b0#&lKT!!+`4Q#)0imDA``62I,a&f#TDY,rh
1NSGPjCDr)Hakk9qRI(P4H1+hPSPc+S6!AeDZ&S4T&8,C+L(`4[R+Lar2H9@BYHl
Ph`X&A`UT-dU&SAP#U1+[cermeUQb@H1%SA,Kk9HR#Ip4+L`'!*!$'!!!)IJ!!&-
`!*!$#!#3!b!!!$mm!!HTm!#3!`TB`!"G`!!!AF!!N!-DEJ#3!`&f!%ja5S0Q)N(
Y!#!J2$mm!!!L2+R`!!&+3@B%5N"R#NK!5%%JJ#&"!!4#Td(krml3r!%!,`J[2!!
!'@i[!f%!!Ua8MfG!3MJ+AN+R,ca%394"2c`%eDJIF!%4`!TH5TpR'%ja-$bTF+G
'3rS!+L+)3IS!)$!mUA#Q4dU$C`4`!8je6Zd!)Nja5S0Q!URdF!"1G@!'!*!&!8j
a(cVrpNSICK*)jq$J3IVrkP$36VS&VNcI"`F[1[rH6R9JFN&-384%3de3!!-!N$4
3FN&Y51GJm(43Rm)[5!!J)%mL9$&T!"3!'#&!!#3aI!!"!#c5N5&"!#kJ!Yr#60m
2"Nje5MJ+AQF-)#S!#'F-)%!J%'F',cVrK%je51FI"N(krjj`$#)U!!6#Z!-DBD4
Q!!%q5(VrMNkk"fjB6l"kreTQ!!%1S4SZ#!JU!%!!"'F')(J#TU!E,#S!"#SU!!J
B+J!%Pp59e#!kreDK(Mmi!L"Q!!$X9%mX5#!krd3L"X+i!aTB3@%!rd`J1[mm`,J
$'N(krcJJJ%U&CJ5K)Q!%)%@J*fB!!,3U5#!18)""q[m)))!J1[m+8B""q[m!))"
#CdKk!,`[&8Kkr`)[1[lL,cVqiLmkrXS[1[l+,cVqbQ%!$8i`(fFJ2`"+K@F))%f
J+U!VB!3J6D!M)%kJ(b"(S"Xah`)JB'!J6U!I)%HJ'h)!%J6R#H-Cj"%!!3!J!J%
!i#"0S'N#!!!IJ!%J6D"UeG6Ae%(krRC+N!"R#(!"S*K`!k#B)%dP5!!)F!"-hf$
i6R9-hf$iB!$q[Mm!)%kJ(b"(S"Xah`)JeG6Ae$!i!L!a`!TJNFJP5!!)60pJq%j
e6PB!!%MR!$JSEJ!-4rVq+NAkrLSJ&,#5E33J%LL!5S"[%L"6)Qi!#+)Z)"64Nj'
5F!"J"$!mrpP-ha`!6Pj1G8j@rmK)jaii*Li!##JZ!!`SEJ!33IVpZLe)rp4#,[r
)S4SY52r-98qS($!I1J!-43!!Eea)E[rX-!9646m!U!p96bmZrqbS$6!I2!!-4J!
!Epa#*kQE@8m[,[rX-!C64Mm!U!iJ(be!rr"b!4m"UCXJE[r`5T!!Ca"96bm)UDB
`(dM!FJ6!J@I%,blrm+QMB,`3,J!8C`TC6bki!UBJAk!E2cbJr%kk")C86be!rp"
+J'F!!Ci[!%kk!pCB6dS!C`T`!4e!!"C1qJ)B5'lrj%KZrq")E[rB6VS&DNr[!!`
J,[rJS4iY52rF)!KR!!&N)#lrj+%H,8Mrk#!)C`!"9#mZrq3[#%kk"EK36b!$CJ!
!TPP2,ca$6d4&3QHS(b!I,8$rm%U!C`!!ML"!)P"b'02",`P1ZJ5d@%pb!l""CRB
J$5"!F#M4`#e)rr3LE[r`*&&`'0A!,8Vrq#m+6VS%ZPK2,8$rr#"Zrr#J+9"+*Ql
re#G+!#KC6bmZrr"1ZKA-)"pbk0#"8B!R3!!X98p)H[ib,blrp%KZrr`[$#m%,bl
rh#mZrq![,[rS6VS+aP42,blrm+QM*'lre#9Zrp!!$#9Zrp`!%#9Zrq!!	ZrqJ
!'$mmSCK1ZJ0@9%mQ3$mmU*p1ZJ0+9%mL!#!,X)&Q"(!!B!*`!5!!*8!!(#9%!#!
P6!!N5(Vlc$mmS2`r2+$m6VS#q&42(`"1ZK952cbKQ%kk!`a86dU!C`4`!D#B)(`
!!!&D-"")`1#!FJD`J@B-3IS!VL*m!!!$2#+)(A`!!Ir))'lrc+!E98qS($!I1J!
-43!!Eh4)E[rX-!9646m!U!p96bmZrqbS$6!I2!!-4J!!Epa#*kQE@8m[,[rX-!C
64Mm!U!iJ(be!rr"b!4m"UCY96bmZrr#TTM!I5-"b"-#"C`J[,[r`UD*J`L4Zrr"
+NQF398m[#UQQ-"p)`()%`)&RULm+UD0JT"!ZrmJG3!!@60mFH%jH)&p2l`!16Y"
19[rm51F!-%)Zrr`r2+$m6VS#,&42*%"+J'GF,`"1ZJ'!@%p+!'G3)!SQ3#"!,bJ
!$$mmS2`r2+$m6VS"hP42(`"1ZK3i)%XJD!!3S"mJ5b"S!"LJ(b"m!!!"@M!35-$
JJ()'X)&Q#R!!)(`!!!-m))!GI!!"rr`3,[rm60m-!%jH6R919[rS51FI1&P2UA8
J(bS!5'lrk+Kd)!dJ3#!3FSE3J5e!rr`J3&a)3qlrl#,B)YKC6bmm4%&836mm"0@
TS#!I+%!J3#43-LS!#**U!!3m!63U!!D8DJ!#2J)f,[rb5--i,[rZ5-5@K$J"5-5
@K'S#8S2LJce$rrBf,[r`5--i,[rX5-5@K$J#5-5@K'S#8S2LJce$rr3f,[rfeN%
p3rrk-Llrp0*#28(rq&P23UG)E[rd5(S!CR)"(`&b!6m"F[m[!8)R3UHT%b!I*N!
[!+Kc"S8!N!0i,``J5h!3dF![#+Mf@8qTG5!IX)9N!Q$d98qTG"!ICJ*JpR$r2`"
#Cb!IS$)[#kN8,`bTSbmZrqLSFdcI(2K1ANje!!)!!%j@!!")j`!`*'i!##!+*N!
J3#)S!!)-J8&-384Q&L)S!!B-J84$69"Q#M!S!!Tb!l""C`4`!'!#F!&-h``!6Pj
1G5m+@8mr2+KZF!%I!%kk%RJJAb4)@8mr2+TZF!%I!%kk%QBLAb"+XFPQ"M!m!J"
J"$!m"!!NAdje6PB!!#m$0Li!#$!$5-!#J!!!#!"+J'm%F!&J!R!!*Kp1ANje6PE
rr%MR(!!f,J!)2`01Z[r-9%mG32rmFJ'`!@B3!N-(rdkkri#`3fi%F!"J+&P22cb
SRh!"(`"1ZK(`)"mU!&P22`-I,[rm6VS4i#!I+!#`K@B#F!"-h`!i6Pj1G8j@!!"
)jaJ`1#i!##4Z!!SJ5L!3*N!J3$)3$%&"4'BS-LJ!!Ja"3e*Q(MB%F[qf3@FD)#J
!"()BiUJ#J!#3!rmb!dM"X)&R"(!!B!*`!4e!!!j-h``B6PiJAea26Y"19J!!98p
)EJ!)F2mr!%kkrj)3(fF5)'i!##!S!!4b'1+S!N!!rf!#F2p1ANje6PB!!&925'i
!#($r2`"1Z[pN%"pR%#"Z!!JJ+!!%!S!!rj!$B!*`rdjH6R919J!!51FB1#CZ!!J
SEJ!-)%X`[!-"F!!N6#5!*M`!!!%Nej)'NJ!!!NJ'NJ#3!b!S2!#3!i$CNYQ5+$`
!!!53!0Q5ej,CNJD5!*!$I!D5!!#!!(!!*'i!%#5!"T)!N!-N"T)!N!-J"T)!N!0
)"T)!N!-q3N"-ha`B6Pj1G8j@rq4)jami*Qi!##SZ!!`J#bK!,8$rk(!NfF!Y62r
XF#$C`#e-rr"`50R!,8crp(!qfF!J$*!!Ll#&B`C`C8lk!,*#3$i!3N!p32rN0JG
`*,C!C%K`",C!C!4`!'!-F!!`!eQ!DJ*@J15!H!!i!be%rrMBV[rS*%38J#!ZrrM
3J0#Zrr!J3$#Zrq4`!435FJ!5!Z0Jd@lrj&*(B,"#3$i!F!%m!$B(F"qf3'4%F!'
f3'3%F!"J$(!!-!06J'S#8S$LJ(J!1!-Y42rmf+lrl#4%&)!J,[rmd)$3V[rd)%!
`KR!"&"*b!")#if$F3&*(B,4#3%cI(2K1ANje6PErm%MR(cJNEJ!)*Qi!$$SZ!"!
SEJ!53N!m!$)&F!!`!G#!0!Cb!$)#X)&[&%*!0!Cb!$)#dS(5M#""-)"54Q$D3N!
m!(!#28$rmMB'YN9N!!#i3N!q!%*!28$rm(!!-!2PJ0#+)%!J%#e!rr3b"R!!-!(
3Lb"!'""f!"B%YNGM!!##-#lrpR)"`%(4E[r`F!!`!e1!0!Gb!$)#X)&[2MJZrr"
f!$B%,82rr0D$eS`J3dT3CK)J,[rmd)$3M#"!-+lrmP4Zrr)b,[r`F!!`!G#!d)`
J3$!328$rm'!@-!A330"'0#lrm()!-J,5JG+-)%%`J&*()#lrp1+),8$rp'!!rfa
54Q!!rd4-haci6Pj1G8j@rra)ja``*'i!#$BZ!!`QEJ!1-J0`!$!"jS!i!$!$FJI
!36S!F!!Y32rm0!4b!$)#dSSJ34)3F!!3!63&FJ!b!Z+JFJ(!JG'Zrr`L,[rmiiR
5Lb""-K"`!$!",8$rr&*&-!9b#,""CJC#3$S!8N3b,J!5F!!`!G#!X+lrr'-#B+S
3,[rr%Li!%p)"N!!"60m-1%jH6R919[rm51FI)#4Z!!Ji,J!-1Li!$M)%F!!`!HD
!2!!b"(3(`N)q!AB!0J$@LL"$%""d!"3!,8,rr(!!-!%d"A)!-J,3JHD!FJ+`J@F
-FJ'`J@FJ5S"R0'!b0!Cb!$)#9)(5LL""%K"`!"!"FK$MU)'Zrr`d"R)!-J*5JG+
+)%%5%(!!%!(KL)'Zrr`J,[rm0!Gb!$)#iUJY32rmF2pb)$B&G!!d!j+#iUM!E[r
q60m%q%jH6R919[rB51FI1#CZ!!JSEJ!1)$`!!!%NdDi!%L!m!!!#50'Z!")J,J!
5,8$rl()Jdki!%L)Z!")Y3Ir`*$`!N!1!eDi!%L3Z!")Y3[rd*%XB%RB!&J3Y3rr
ijS0k"mC&8N-p3rrF*Llrq1+$HJ2'494$282rjRB"1LlrjZYM282rk(j!b!Gm!"`
%28EriRJ"kf464$e%rq!U,[riIJ(+KfF)HJ!k"&1&B!*krce&rpji#$e%rq4+4QG
',bi!%Lm!2`055Lm+6VVr1Nr[!!lR30&Zrq3[,J!5,blrm$m$,blrl%kk#`K2l`!
1,blrp$m$,blrl#mZrr"1Z[bX6qm!$N*!28$rf$!ZrpL`EJ!-C!!"1M!Zrq*R1L4
!2blrk#mZrr3r,[rN,`Y1Z[f16qm!$")!)!T`!"!"28$rfR3!0!$8V[rX)%)3%()
!%J$6E[rNB"`r,[rQ2blrj#m,6VVpm&"228$rfM!ZrqE4E[rN-#lrfV"ZrpjQ&M)
ZrpK5E[rBF!!`!G#-)%"#%'!!rhS`,[rDX'lri'B!!*3`,[rLCcSN3$mZrqJ[,[r
d2blrj#m,6VVp"Nr[!!`5!#!+F!!3!6e!rpTd!$3!e+lrl#"#%""b!")!dflrj'!
F2blrjMmZrq3[#dkkr@K36ce!rpS`,[rQd@lrj&CZrpS`,[rD8flrfNT!C`$r!$J
ZrpKf!$B%,82rr&1$eS`J3a!3)Llrr0+-)%%3J&*ZrpKJcK!Zrph3,[rE0#lrf&*
ZrpKb!$)#dS`J34#!B!$q[M)Zrq4`!$!"AS$QJ%cI(2K1ANje6PErM%MR(cJQEJ!
)+Li!$#KZ!"!X,J!8,8[rb(!Nem!Y5rrJF#$A`#e,rma`50I!,8[rj#e-rj3Q2!!
!!56AV[q8)$`!!!*)dDlrP(!JdDlrP#Jm!*!$J0QZrj6CV[q8,@lrP2qd+$`!!!5
3!0QZrj3YE[q8rlMAV[q8,@lrP2qmfDlrP#eZrj6re("mdDlrP#eZrj6rT#!m!!#
!!0'Zrj3J,[q8N!#-X)9M#R"P28!!+%lk"RT`!#i!3N!p32q-*'lrT0Am!!#!!#e
+rkJYE[qNrj!!,A`!!)!!rqK)E[rS,blrT#"Z!#41N!"36b!ZrqKQ#R"R28!!+%l
k"M3NE[q3!&*+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL
4l[q3!#e)rq`J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[q
N)'i!*%k3!&"2)#lrm,#Zrr4N#R"R28!!+%lk"F!JE[q3!&+Zrj!!%"!G32qJFJ!
5!0*"8d%p3Ir3-#lrd0"!28$rdL"Z!"`J%0#Z!#!Y32q`*%![$#mZrlJr2!%N,bl
rN!"1Z[[b6qm!$M)!)!T`!$!"dDlrN!![$#mZrl3r2!%N,blrZ%kk"lT2l`!1,bl
r[$mm!53[,[qi,blrY%kkq9a2l`!1*%![$#mZrlJr,[r3,blrN!"1Z[ZJ6qm!$M)
!)!T`!$!"dDlrN!![$#mZrl3r,[r3,blrZ%kk"fK2l`!1,blre$mZrp![,[qi,bl
rY%kkq3T2l`!1F!!Z!%*!28$rM#eZ!#$rV#"Zrkbal[q`C!!%U%*!28$rQ!aZ!NM
rQ'3!!-)`,[q-CJ!!M#4Zrj!!8NUel[qSBfJJE[q3!&*)NHlrU#e)rr3JE[q3!*(
Zrk3Y52r`)'lrU*(Zrj!!,8Mrl#!)C`iJE[q3!#*Zrk3J,[rXSLiNE[qNeHlrl#e
+rj!!5'lrm#mZrk3JEJ!N6T!!8%mJ,[r`X+lrp'3+F'Fp3!!S6[S%3L"Zrj!!8Ul
rN!!5%(!!%!%Z!(!)28$rM$!(FJ(!3G&ZrjJb,[qBF!!`!G#!d+lr[#"!-"!p32q
B)!ILL#i!8flrM'!!rcJ%EJ*)rjJ-EJ%!rjKN%#"Zrka5V[qX%+lrQ@!!r`J%EJ%
!rjJi,[qBGJ!f"#e$rrM@JpDZrm`J3c!328$rQL)ZrrM5V[r))%%5%(!!%!%p32q
F5N"R!!$#$'i!'2q-BJ!!Q#4Zrj!!8NUel[qSBfJJE[q3!&*)NHlrU#e)rr3JE[q
3!*(Zrk3Y52r`)'lrU*(Zrj!!,8Mrl#!)C`iJE[q3!#*Zrk3J,[rXSLiNE[qNeHl
rl#e+rj!!5'lrm#mZrk3JEJ!N6T!!8%mJ,[r`X+lrp'3+F'Fp3!!S6[S$+#"Zrj!
!8UlrN!!5%(!!%!%d,[q-FJ!b!Z1SMS"3E[q-B!$rBR$rFL!i,[qFGJ!f"*+$iUM
!4p&ZrjSJ"qDS,J#CE[q-3N!p32qB-#lrQ,"Zrp*N!!$#-#lrM'B!!)`NE[q3!&*
+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL4l[q3!#e)rq`
J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[qN)'i!*%k3!&"
2)#lrm,#Zrr4N#R"R28!!+%lk!PJJE[q3!&+Zrj!!%K"`!"!",J"`#$e!ri``"h)
"`%(4E[qB-LlrQ(!!-!(3J0#Zrp3J3$!328$rQ#!(iSJZ!&0ZriaJ!2mf-#lrdT&
ZrjJi,[qBGJ!f"#e$rrc@JpDZrq3J3c!328$rRL)Zrrc5V[rJ)%%5%(!!%!%p32q
F5N"R!!$#$'i!'2q-BJ!!Q#4Zrj!!8NUel[qSBfJJE[q3!&*)NHlrU#e)rr3JE[q
3!*(Zrk3Y52r`)'lrU*(Zrj!!,8Mrl#!)C`iJE[q3!#*Zrk3J,[rXSLiNE[qNeHl
rl#e+rj!!5'lrm#mZrk3JEJ!N6T!!8%mJ,[r`X+lrp'3+F'Fp3!!S6[S"@L"Zrj!
!8UlrN!!5%(!!%!%d,[q-FJ!b!Z1SMS"3E[q-B!$rBR$rFL!i,[qFGJ!f"*+$iUM
!4p&ZrjiJ"qDS,J#CE[q-)'lrV$)Zrjj`!$!"NF!Y52q8XHi!)'9J)'lrP&+Zrj3
3%#"Zrka5V[qX%)!JE[q88UlrP"!3)'lrV&+Zrk`3J#"Zrj45V[q8%"!JE[qX8Ul
rV"#!-#lrQP0ZrjT+3'F!qpiJE[q88UlrP"!3)'lrV&+Zrk`3J'$F9QlrQL"Z!"M
4aM)Zrjj`!$!")QlrV*2Z!##3!)Q4`#e)rj3`,[qDCbBJEJ!BdFDal[q8BaSJE[q
88UlrP"!3)'lrV&+Zrk`3J&0ZrjTJe#eZ!#$rP$!ZrjT6E[qD5N"R!2YQ)'lrP&+
Zrj33%#"Zrka5V[qX%)"Jh#"Zrkbal[q`C`K`Cce!!#KJ&#"Zrkb4lJ!J)Qi!(#+
)3N!p3!!S60mFq%jH)&p2l`!J6Y!!F$`!2L!!!(JJ2M!J*LBJH#!m26-b!!!k3fp
YF(*PFh0TEfik4'9MEfe`FQ9cFfP[EM!c-$%ZB`!!2!!q)!!!H#!q-#!Q*L"i)$`
p-c)!!$T$Efe`FQ9cFfP[EMT%C@0[EA"bCA0cD@pZ-$-`-5jM!!"19[rS51FI1$i
Z!!JSEJ!-0Li!#R!!-!-i"h)!-J53!)&b!E#"E`!"Y$e%rqJp3rrU8Qlrk$!ZrqL
`EJ!+C"ab!$)!dS`J34!30!Gb!$)#dS`J34)3X!&N!Q$@8flrkM!ZrqU`4f-FFJ!
b!0+-)%%3%$3(FJ!b!Y+-)%%5%,!"B`*Jf$!ZrqL`E[rUC3*JFMJZrqKf!$B%,82
rm0D-*%-5%R!!%!%p32rX1LlrkRJ!1!8Y42rdf)`Q4"!6&)!@V[rY)#lrm0#!d+i
!%#"!-"!p32rX)Llrp0+"dUi!%#""-K!N,[r`e),8VJ!3)%)`J5)Zrr65JG+Z!"!
J36#!B!$r-M!ZrqU`4fB'8NGJ!2m%1!Gf!$B%,82rq0D-*%-5%R!!%!%p32rX2#l
rkRS!1JBY4IrmfS`Q44!6&)!@V[rY)#lrq0#!d+i!%#"!-"!p32rX)Llrr0+"dUi
!%#""-K!N,[rie),8VJ!3)%)`J5)Zrrc5JG+Z!"!J36#!)#lrr#)ZrrL3!)%d,J!
+FJ!b!L3Zrra5JT+#X)&X(LmZ!"![$$m'2`41Z[jF6qm!$$!ZrqT53$i!B!$qA#m
Z!"![$$mZ!!S`,[rU8N!r!%kkrMC2l`!-2@lrkJ!+B!$q1%cI(2K1ANje6PErj%M
R(cJNEJ!)1Li!$#CZ!!iSEJ!5,8crm#!m!!!"*0R!,8crp%*!2!!f"VC&C#ai!$J
$,86rq0L+)%33%#)ZrrM5V[r`)%%3J#!ZrrM3J0#Zrr3J3$#$8NCJcLmZrr3[,[r
`2`9#CdkkrE*2l`!-3N!m!$B'YN9N%R!!-!23V[r`)%"+%'B%8NCJk(!!,8$rj$B
'YN9N!!#S5N0R-L!Zrq4i!$J$,86rr0LZrr!J4"33FJ!5!LBZrra6JpDZrr!J3aB
3G!!8!j+#ikJY32rN0!Cb!$)#dUlrm#""%K"`!"!"2J!YE[rNrqa`!#e!rqJ`"e0
(5N"R)#!ZrqMML#)Zrqad!F+#J)%Y32rS)#lrl1+),8$rl'$B0!Cb!$)#dS(5V[r
d)%%b%(!!-!(PJ0#,)%!JV[rS8NC5V[rNB!$r9%cI(2K1ANje)PmJAk!P,S"U!N+
A6Y%LAa)I-"p+!@F%TdCJ!U0',SK1d5*I%Km`(b"I5J&R"+C(B!+L4dl4!*!$#J!
iS!%!"3#3"J%!!!'MLJ!"SSS!!!9,8dp59!4Z!)!!(!4b!"C"6&*8!!S!ZN&9Fc)
!!!%q3Nj%6!!"!8T$6P4-!!!"BN024%8!"`&Z4%&833!!!Fj%594-!!m"fN4-6dF
!"!+D4P*&4J!%!YC'C@&d!!!$%NP$6L-!"!-H58026J!!!eT35808!!3$CP"cCA3
!!!1L8dPD43!!!kj69&)J!!%$ZP088L-!!!25BA9cG!!"!pjMD@0Z!!!$pQ4MG')
!!33#C'aRH!!"""TTBf`i!!!%-RCPFR-!!33q!)$rrb!!N!L"rrmJ!!!3!*!&J[r
r)!!!)!#3"BArrb3!!$!",663!)Errb3!!%!"*9fX!)Irrb!!!&!!N!@)rrmJ!!"
J!*!%!J$rrb!!!()!N!3#!Irr)!!!JJ#3"!3"rrmJ!!#5!*!%"+rrr`!!'&J!N!F
H!!!BD!#3"B$rr`!!')`!N!3"!2rr!!!Ba!#3"!%)rrmJ!"MN!*!'rrmS!BIJ!*!
&!3#G(!!QV`%Y0)!!!J#R(!#`I!!kM%J!!`#a(!$0R`!qkL`!"!#l(!%*X3%Y0-!
!"3$&(!%l2J!qkE3!"J$2(!&Em3%Tr83!"rrr!!')#J#3"[rr+!#"l!#3"B$rr`#
3!k)!N!@#rrm!!!%!N!D&rrmN!!&H!5Rm&!#'rrmN!!'d!$jQp!#(rrm!!!)e!*!
&L2rr!!!#K3#3"EArrb!!!ed!N!3""Irr)!!$c`#3"!%(rrmJ!"Mr!*!%!3Mrrb!
!'D!!N!3#!2rr!!!%I!#3"!)"rrm!!!5k!*!%!qMrrb!!"3B!N!3%!Irr)!!&-J#
3"!4,!#d%!"T$!59GP!5[rrm!!"U6!*!%!38!!#!!"E)!N!3""`!j)!!Dd3#3"!%
)!%SJ!"VY!*!%!qMrrb!!"G3!N!3%5`"Q"!!E#3%U"0J!J2rr!!!E)J#3"B(rr`!
!'bd!N!@#rrm!!"Xi!*!&Jrrr!!!E3`#3"B6rr`!!'di!N!Err`!"SR`!N!@!rrm
!!"YC!*!&JIrr!!!FA3#3"B,rr`!!(@%!N!@$rrm!!"jP!*!&K2rr!!!ID3#3"!4
,rrm%!#"Y!$K"i!##rrm!!!A`!*!%!qMrr`!!"a-!N!3%62rr!!!1)3#3"!40rrm
!!!rD!*!%"%lrr`!!%C-!N!@!rrm!!"-K!*!%rj!%!!'(r!#3"!)!!!FJ!"GB!*!
%!J%!$L!!&fJ!N!@!rrm!!"Gd!*!(FJ!!)1J!N!@%rrm!!#&$!*!%"%[rr`3!)8F
"*2Ri!3Arr`!!&l3!N!3"#2rr!!!LE3#3"!%&!"F!!"IP!*!%!3J!J3!!)U%!N!@
%rrm!!#+V!*!&!Irr)!!Al`#3"3,rrb!!'$)!N!3'8h4KG(9c"R"bEfe`G!M%)(0
eCQCTH!C6G'&dGA-16hGZCA)JFQ9cEh9bBf8,5@jcCA*d)%4TFfX34AKTFh4TEQG
3BA0cGfpbC"Y&H'PcG'PZCe"KFh0hEh*N,8&`F'9KFQ&ZBf8,5@jcCA*d)%4TFfX
16hGZCA)JFQ9cEh9bBf8E4AKTFh4TEQG3BA0cGfpbC#e"F("PBA*KEQ0P#90PCfe
PER3J-3P6C@GYC@jd)$)*8f9RE@9ZG#!c#90PCfePER3J03P6C@GYC@jd)$B*8f9
RE@9ZG#!fK5F:
|
Changes to mac/tclMacResource.r.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1993-94 Lockheed Missle & Space Company * Copyright (c) 1994-97 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1993-94 Lockheed Missle & Space Company * Copyright (c) 1994-97 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacResource.r,v 1.4.2.2 2001/10/17 19:29:25 das Exp $ */ #include <Types.r> #include <SysTypes.r> /* * The folowing include and defines help construct |
| ︙ | ︙ | |||
36 37 38 39 40 41 42 | #if (TCL_RELEASE_LEVEL == 2) # define MINOR_VERSION (TCL_MINOR_VERSION * 16) + TCL_RELEASE_SERIAL #else # define MINOR_VERSION TCL_MINOR_VERSION * 16 #endif | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#if (TCL_RELEASE_LEVEL == 2)
# define MINOR_VERSION (TCL_MINOR_VERSION * 16) + TCL_RELEASE_SERIAL
#else
# define MINOR_VERSION TCL_MINOR_VERSION * 16
#endif
/*
* The mechanisim below loads Tcl source into the resource fork of the
* application. The example below creates a TEXT resource named
* "Init" from the file "init.tcl". This allows applications to use
* Tcl to define the behavior of the application without having to
* require some predetermined file structure - all needed Tcl "files"
* are located within the application. To source a file for the
* resource fork the source command has been modified to support
* sourcing from resources. In the below case "source -rsrc {Init}"
* will load the TEXT resource named "Init".
*/
#include "tclMacTclCode.r"
|
Deleted mac/tclMacShLib.exp.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to mac/tclMacSock.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclMacSock.c * * Channel drivers for Macintosh sockets. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclMacSock.c * * Channel drivers for Macintosh sockets. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacSock.c,v 1.7.2.3 2002/02/26 02:49:36 andreas_kupries Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclMacInt.h" #include <AddressXlation.h> #include <Aliases.h> |
| ︙ | ︙ | |||
71 72 73 74 75 76 77 |
int port; /* The port we are connected to. */
int flags; /* Bit field comprised of the flags
* described below. */
int checkMask; /* OR'ed combination of TCL_READABLE and
* TCL_WRITABLE as set by an asynchronous
* event handler. */
int watchMask; /* OR'ed combination of TCL_READABLE and
| | | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
int port; /* The port we are connected to. */
int flags; /* Bit field comprised of the flags
* described below. */
int checkMask; /* OR'ed combination of TCL_READABLE and
* TCL_WRITABLE as set by an asynchronous
* event handler. */
int watchMask; /* OR'ed combination of TCL_READABLE and
* TCL_WRITABLE as set by TcpWatch. */
Tcl_TcpAcceptProc *acceptProc; /* Proc to call on accept. */
ClientData acceptProcData; /* The data for the accept proc. */
wdsEntry dataSegment[2]; /* List of buffers to be written async. */
rdsEntry rdsarray[5+1]; /* Array used when cleaning out recieve
* buffers on a closing socket. */
Tcl_Channel channel; /* Channel associated with this socket. */
int writeBufferSize; /* Size of buffer to hold data for
|
| ︙ | ︙ | |||
192 193 194 195 196 197 198 |
/*
* This structure describes the channel type structure for TCP socket
* based IO:
*/
static Tcl_ChannelType tcpChannelType = {
"tcp", /* Type name. */
| | | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
/*
* This structure describes the channel type structure for TCP socket
* based IO:
*/
static Tcl_ChannelType tcpChannelType = {
"tcp", /* Type name. */
(Tcl_ChannelTypeVersion)TcpBlockMode, /* Set blocking or
* non-blocking mode.*/
TcpClose, /* Close proc. */
TcpInput, /* Input proc. */
TcpOutput, /* Output proc. */
NULL, /* Seek proc. */
NULL, /* Set option proc. */
TcpGetOptionProc, /* Get option proc. */
|
| ︙ | ︙ | |||
1350 1351 1352 1353 1354 1355 1356 |
* retrieve the value for, or
* NULL to get all options and
* their values. */
Tcl_DString *dsPtr) /* Where to store the computed
* value; initialized by caller. */
{
TcpState *statePtr = (TcpState *) instanceData;
| | | 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 |
* retrieve the value for, or
* NULL to get all options and
* their values. */
Tcl_DString *dsPtr) /* Where to store the computed
* value; initialized by caller. */
{
TcpState *statePtr = (TcpState *) instanceData;
int doPeerName = false, doSockName = false, doError = false, doAll = false;
ip_addr tcpAddress;
char buffer[128];
OSErr err;
Tcl_DString dString;
TCPiopb statusPB;
int errorCode;
|
| ︙ | ︙ | |||
1388 1389 1390 1391 1392 1393 1394 1395 1396 |
if (optionName == (char *) NULL || optionName[0] == '\0') {
doAll = true;
} else {
if (!strcmp(optionName, "-peername")) {
doPeerName = true;
} else if (!strcmp(optionName, "-sockname")) {
doSockName = true;
} else {
return Tcl_BadChannelOption(interp, optionName,
| > > > | > > > > > > > > > > > > > > > > > > > > > | 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 |
if (optionName == (char *) NULL || optionName[0] == '\0') {
doAll = true;
} else {
if (!strcmp(optionName, "-peername")) {
doPeerName = true;
} else if (!strcmp(optionName, "-sockname")) {
doSockName = true;
} else if (!strcmp(optionName, "-error")) {
/* SF Bug #483575 */
doError = true;
} else {
return Tcl_BadChannelOption(interp, optionName,
"error peername sockname");
}
}
/*
* SF Bug #483575
*
* Return error information. Currently we ignore
* this option. IOW, we always return the empty
* string, signaling 'no error'.
*
* FIXME: Get a mac/socket expert to write a correct
* FIXME: implementation.
*/
if (doAll || doError) {
if (doAll) {
Tcl_DStringAppendElement(dsPtr, "-error");
Tcl_DStringAppendElement(dsPtr, "");
} else {
Tcl_DStringAppend (dsPtr, "");
return TCL_OK;
}
}
/*
* Get status on the stream. Make sure to use a new pb struct because
* the struct in the statePtr may be part of an asyncronous call.
*/
|
| ︙ | ︙ |
Changes to mac/tclMacThrd.c.
| ︙ | ︙ | |||
120 121 122 123 124 125 126 |
if (stackSize == TCL_THREAD_STACK_DEFAULT) {
stackSize = TCL_MAC_THRD_DEFAULT_STACK;
}
#if TARGET_CPU_68K && TARGET_RT_MAC_CFM
{
ThreadEntryProcPtr entryProc;
| | | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
if (stackSize == TCL_THREAD_STACK_DEFAULT) {
stackSize = TCL_MAC_THRD_DEFAULT_STACK;
}
#if TARGET_CPU_68K && TARGET_RT_MAC_CFM
{
ThreadEntryProcPtr entryProc;
entryProc = NewThreadEntryUPP(proc);
NewThread(kCooperativeThread, entryProc, (void *) clientData,
stackSize, kCreateIfNeeded, NULL, (ThreadID *) idPtr);
}
#else
NewThread(kCooperativeThread, proc, (void *) clientData,
stackSize, kCreateIfNeeded, NULL, (ThreadID *) idPtr);
|
| ︙ | ︙ |
Changes to mac/tclMacTime.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclMacTime.c -- * * Contains Macintosh specific versions of Tcl functions that * obtain time values from the operating system. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
/*
* tclMacTime.c --
*
* Contains Macintosh specific versions of Tcl functions that
* obtain time values from the operating system.
*
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclMacTime.c,v 1.3.14.1 2001/10/17 19:29:25 das Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
#include "tclMacInt.h"
#include <OSUtils.h>
#include <Timer.h>
#include <time.h>
/*
* Static variables used by the TclpGetTime function.
*/
static int initalized = false;
static unsigned long baseSeconds;
static UnsignedWide microOffset;
static int gmt_initialized = false;
static long gmt_offset;
static int gmt_isdst;
TCL_DECLARE_MUTEX(gmtMutex)
static int gmt_lastGetDateUseGMT = 0;
typedef struct _TABLE {
char *name;
int type;
time_t value;
} TABLE;
#define HOUR(x) ((time_t) (3600 * x))
#define tZONE 0
#define tDAYZONE 1
/*
* inverse timezone table, adapted from tclDate.c by removing duplicates and
* adding some made up names for unusual daylight savings
*/
static TABLE invTimezoneTable[] = {
{ "Z", -1, HOUR( 36) }, /* Unknown */
{ "GMT", tZONE, HOUR( 0) }, /* Greenwich Mean */
{ "BST", tDAYZONE, HOUR( 0) }, /* British Summer */
{ "WAT", tZONE, HOUR( 1) }, /* West Africa */
{ "WADST", tDAYZONE, HOUR( 1) }, /* West Africa Daylight*/
{ "AT", tZONE, HOUR( 2) }, /* Azores Daylight*/
{ "ADST", tDAYZONE, HOUR( 2) }, /* Azores */
{ "NFT", tZONE, HOUR( 7/2) }, /* Newfoundland */
{ "NDT", tDAYZONE, HOUR( 7/2) }, /* Newfoundland Daylight */
{ "AST", tZONE, HOUR( 4) }, /* Atlantic Standard */
{ "ADT", tDAYZONE, HOUR( 4) }, /* Atlantic Daylight */
{ "EST", tZONE, HOUR( 5) }, /* Eastern Standard */
{ "EDT", tDAYZONE, HOUR( 5) }, /* Eastern Daylight */
{ "CST", tZONE, HOUR( 6) }, /* Central Standard */
{ "CDT", tDAYZONE, HOUR( 6) }, /* Central Daylight */
{ "MST", tZONE, HOUR( 7) }, /* Mountain Standard */
{ "MDT", tDAYZONE, HOUR( 7) }, /* Mountain Daylight */
{ "PST", tZONE, HOUR( 8) }, /* Pacific Standard */
{ "PDT", tDAYZONE, HOUR( 8) }, /* Pacific Daylight */
{ "YST", tZONE, HOUR( 9) }, /* Yukon Standard */
{ "YDT", tDAYZONE, HOUR( 9) }, /* Yukon Daylight */
{ "HST", tZONE, HOUR(10) }, /* Hawaii Standard */
{ "HDT", tDAYZONE, HOUR(10) }, /* Hawaii Daylight */
{ "NT", tZONE, HOUR(11) }, /* Nome */
{ "NST", tDAYZONE, HOUR(11) }, /* Nome Daylight*/
{ "IDLW", tZONE, HOUR(12) }, /* International Date Line West */
{ "CET", tZONE, -HOUR( 1) }, /* Central European */
{ "CEST", tDAYZONE, -HOUR( 1) }, /* Central European Summer */
{ "EET", tZONE, -HOUR( 2) }, /* Eastern Europe, USSR Zone 1 */
{ "EEST", tDAYZONE, -HOUR( 2) }, /* Eastern Europe, USSR Zone 1 Daylight*/
{ "BT", tZONE, -HOUR( 3) }, /* Baghdad, USSR Zone 2 */
{ "BDST", tDAYZONE, -HOUR( 3) }, /* Baghdad, USSR Zone 2 Daylight*/
{ "IT", tZONE, -HOUR( 7/2) }, /* Iran */
{ "IDST", tDAYZONE, -HOUR( 7/2) }, /* Iran Daylight*/
{ "ZP4", tZONE, -HOUR( 4) }, /* USSR Zone 3 */
{ "ZP4S", tDAYZONE, -HOUR( 4) }, /* USSR Zone 3 */
{ "ZP5", tZONE, -HOUR( 5) }, /* USSR Zone 4 */
{ "ZP5S", tDAYZONE, -HOUR( 5) }, /* USSR Zone 4 */
{ "IST", tZONE, -HOUR(11/2) }, /* Indian Standard */
{ "ISDST", tDAYZONE, -HOUR(11/2) }, /* Indian Standard */
{ "ZP6", tZONE, -HOUR( 6) }, /* USSR Zone 5 */
{ "ZP6S", tDAYZONE, -HOUR( 6) }, /* USSR Zone 5 */
{ "WAST", tZONE, -HOUR( 7) }, /* West Australian Standard */
{ "WADT", tDAYZONE, -HOUR( 7) }, /* West Australian Daylight */
{ "JT", tZONE, -HOUR(15/2) }, /* Java (3pm in Cronusland!) */
{ "JDST", tDAYZONE, -HOUR(15/2) }, /* Java (3pm in Cronusland!) */
{ "CCT", tZONE, -HOUR( 8) }, /* China Coast, USSR Zone 7 */
{ "CCST", tDAYZONE, -HOUR( 8) }, /* China Coast, USSR Zone 7 */
{ "JST", tZONE, -HOUR( 9) }, /* Japan Standard, USSR Zone 8 */
{ "JSDST", tDAYZONE, -HOUR( 9) }, /* Japan Standard, USSR Zone 8 */
{ "CAST", tZONE, -HOUR(19/2) }, /* Central Australian Standard */
{ "CADT", tDAYZONE, -HOUR(19/2) }, /* Central Australian Daylight */
{ "EAST", tZONE, -HOUR(10) }, /* Eastern Australian Standard */
{ "EADT", tDAYZONE, -HOUR(10) }, /* Eastern Australian Daylight */
{ "NZT", tZONE, -HOUR(12) }, /* New Zealand */
{ "NZDT", tDAYZONE, -HOUR(12) }, /* New Zealand Daylight */
{ NULL }
};
/*
* Prototypes for procedures that are private to this file:
*/
static void SubtractUnsignedWide _ANSI_ARGS_((UnsignedWide *x,
UnsignedWide *y, UnsignedWide *result));
/*
*-----------------------------------------------------------------------------
*
* TclpGetGMTOffset --
*
* This procedure gets the offset seconds that needs to be _added_ to tcl time
* in seconds (i.e. GMT time) to get local time needed as input to various
* Mac OS APIs, to convert Mac OS API output to tcl time, _subtract_ this value.
*
* Results:
* Number of seconds separating GMT time and mac.
*
* Side effects:
* None.
*
*-----------------------------------------------------------------------------
*/
long
TclpGetGMTOffset()
{
if (gmt_initialized == false) {
MachineLocation loc;
Tcl_MutexLock(&gmtMutex);
ReadLocation(&loc);
gmt_offset = loc.u.gmtDelta & 0x00ffffff;
if (gmt_offset & 0x00800000) {
gmt_offset = gmt_offset | 0xff000000;
}
gmt_isdst=(loc.u.dlsDelta < 0);
gmt_initialized = true;
Tcl_MutexUnlock(&gmtMutex);
}
return (gmt_offset);
}
/*
*-----------------------------------------------------------------------------
*
* TclpGetSeconds --
*
* This procedure returns the number of seconds from the epoch. On
|
| ︙ | ︙ | |||
53 54 55 56 57 58 59 |
*-----------------------------------------------------------------------------
*/
unsigned long
TclpGetSeconds()
{
unsigned long seconds;
| < < | < < < < < < | | < < < < | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
*-----------------------------------------------------------------------------
*/
unsigned long
TclpGetSeconds()
{
unsigned long seconds;
GetDateTime(&seconds);
return (seconds - TclpGetGMTOffset() + tcl_mac_epoch_offset);
}
/*
*-----------------------------------------------------------------------------
*
* TclpGetClicks --
*
|
| ︙ | ︙ | |||
119 120 121 122 123 124 125 |
*----------------------------------------------------------------------
*/
int
TclpGetTimeZone (
unsigned long currentTime) /* Ignored on Mac. */
{
| < | < < < < < < | | | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
*----------------------------------------------------------------------
*/
int
TclpGetTimeZone (
unsigned long currentTime) /* Ignored on Mac. */
{
long offset;
/*
* Convert the Mac offset from seconds to minutes and
* add an hour if we have daylight savings time.
*/
offset = -TclpGetGMTOffset();
offset /= 60;
if (gmt_isdst) {
offset += 60;
}
return offset;
}
/*
|
| ︙ | ︙ | |||
168 169 170 171 172 173 174 |
{
UnsignedWide micro;
#ifndef NO_LONG_LONG
long long *microPtr;
#endif
if (initalized == false) {
| < < < < < < < < | < < < < < | | 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
{
UnsignedWide micro;
#ifndef NO_LONG_LONG
long long *microPtr;
#endif
if (initalized == false) {
GetDateTime(&baseSeconds);
/*
* Remove the local offset that ReadDateTime() adds.
*/
baseSeconds -= TclpGetGMTOffset() - tcl_mac_epoch_offset;
Microseconds(µOffset);
initalized = true;
}
Microseconds(µ);
#ifndef NO_LONG_LONG
|
| ︙ | ︙ | |||
242 243 244 245 246 247 248 |
struct tm *
TclpGetDate(
TclpTime_t time, /* Time struct to fill. */
int useGMT) /* True if date should reflect GNT time. */
{
const time_t *tp = (const time_t *)time;
DateTimeRec dtr;
| < | < < | | | < < < < < | < > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
struct tm *
TclpGetDate(
TclpTime_t time, /* Time struct to fill. */
int useGMT) /* True if date should reflect GNT time. */
{
const time_t *tp = (const time_t *)time;
DateTimeRec dtr;
unsigned long offset=0L;
static struct tm statictime;
static const short monthday[12] =
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
if(useGMT)
SecondsToDate(*tp - tcl_mac_epoch_offset, &dtr);
else
SecondsToDate(*tp + TclpGetGMTOffset() - tcl_mac_epoch_offset, &dtr);
statictime.tm_sec = dtr.second;
statictime.tm_min = dtr.minute;
statictime.tm_hour = dtr.hour;
statictime.tm_mday = dtr.day;
statictime.tm_mon = dtr.month - 1;
statictime.tm_year = dtr.year - 1900;
statictime.tm_wday = dtr.dayOfWeek - 1;
statictime.tm_yday = monthday[statictime.tm_mon]
+ statictime.tm_mday - 1;
if (1 < statictime.tm_mon && !(statictime.tm_year & 3)) {
++statictime.tm_yday;
}
if(useGMT)
statictime.tm_isdst = 0;
else
statictime.tm_isdst = gmt_isdst;
gmt_lastGetDateUseGMT=useGMT; /* hack to make TclpGetTZName below work */
return(&statictime);
}
/*
*----------------------------------------------------------------------
*
* TclpGetTZName --
*
* Gets the current timezone string.
*
* Results:
* Returns a pointer to a static string, or NULL on failure.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
char *
TclpGetTZName(int dst)
{
register TABLE *tp;
long zonevalue=-TclpGetGMTOffset();
if(gmt_lastGetDateUseGMT) /* hack: if last TclpGetDate was called */
zonevalue=0; /* with useGMT==1 then we're using GMT */
for (tp = invTimezoneTable; tp->name; tp++) {
if ((tp->value == zonevalue) && (tp->type == dst)) break;
}
if(!tp->name)
tp = invTimezoneTable; /* default to unknown */
return tp->name;
}
#ifdef NO_LONG_LONG
/*
*----------------------------------------------------------------------
*
* SubtractUnsignedWide --
*
|
| ︙ | ︙ |
Changes to mac/tclMacUnix.c.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacUnix.c,v 1.3.12.1 2001/04/04 21:22:19 hobbs Exp $ */ #include <Files.h> #include <Strings.h> #include <TextUtils.h> #include <Finder.h> #include <FSpCompat.h> |
| ︙ | ︙ | |||
202 203 204 205 206 207 208 |
if (Tcl_GlobObjCmd(NULL, interp, objc + 1, objv - 1) != TCL_OK) {
Tcl_ResetResult(interp);
return TCL_ERROR;
}
resultObjPtr = Tcl_GetObjResult(interp);
Tcl_IncrRefCount(resultObjPtr);
| | | 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
if (Tcl_GlobObjCmd(NULL, interp, objc + 1, objv - 1) != TCL_OK) {
Tcl_ResetResult(interp);
return TCL_ERROR;
}
resultObjPtr = Tcl_GetObjResult(interp);
Tcl_IncrRefCount(resultObjPtr);
if (Tcl_ListObjGetElements(interp, resultObjPtr, &objc, (Tcl_Obj ***)&objv) != TCL_OK) {
Tcl_DecrRefCount(resultObjPtr);
return TCL_ERROR;
}
Tcl_ResetResult(interp);
/*
|
| ︙ | ︙ |
Changes to mac/tclMacUtil.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclMacUtil.c -- * * This contains utility functions used to help with * implementing Macintosh specific portions of the Tcl port. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclMacUtil.c -- * * This contains utility functions used to help with * implementing Macintosh specific portions of the Tcl port. * * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacUtil.c,v 1.4.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tcl.h" #include "tclInt.h" #include "tclMacInt.h" #include "tclMath.h" #include "tclMacPort.h" |
| ︙ | ︙ | |||
49 50 51 52 53 54 55 | * * Side effects: * None. * *---------------------------------------------------------------------- */ | | | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
#if defined(THINK_C)
double hypotd(double x, double y);
double
hypotd(
double x, /* X value */
double y) /* Y value */
{
|
| ︙ | ︙ | |||
416 417 418 419 420 421 422 |
return err;
}
/*
*----------------------------------------------------------------------
*
| | | > > > > > > > > > > > > > > > > > > | 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 |
return err;
}
/*
*----------------------------------------------------------------------
*
* GetGlobalMouseTcl --
*
* This procedure obtains the current mouse position in global
* coordinates.
*
* Results:
* None.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
void
GetGlobalMouseTcl(
Point *mouse) /* Mouse position. */
{
EventRecord event;
OSEventAvail(0, &event);
*mouse = event.where;
}
pascal OSErr FSpGetDirectoryIDTcl (CONST FSSpec * spec,
long * theDirID, Boolean * isDirectory)
{
return(FSpGetDirectoryID(spec, theDirID, isDirectory));
}
pascal short FSpOpenResFileCompatTcl (CONST FSSpec * spec, SignedByte permission)
{
return(FSpOpenResFileCompat(spec,permission));
}
pascal void FSpCreateResFileCompatTcl (
CONST FSSpec * spec, OSType creator,
OSType fileType, ScriptCode scriptTag)
{
FSpCreateResFileCompat (spec,creator,fileType,scriptTag);
}
|
Added mac/tcltkMacBuildSupport.sea.hqx.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
(This file must be converted with BinHex 4.0)
:'(4ME(4V6@&M3R9TE'46GA"`Eh*d,R0PB3""8&"-BA9cG#%!!!&)9`!"U09kfP0
dG@CQ5A3J+'-T-6Nj0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S
[,hH3!bjKE'&NC'PZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!"5&F!N!0b!!%!N!0
b43i0TD95CA0PFRCPC+@P!+@3"!%!!$d!4,5KD[qhp$5E!*!0$3ik!*!$d`!DlT-
!!8H%!"48Bf`[9'XJ4QpXC'9b!!#'P`![!!X"b3)#!q$rN!3"$[rm!&R"4!!!J!#
3"k@3"!%!!%3!4,BJ!3+hmlPr!*!$FJ!!Va%!N!0b!"4a-`!!!6X!&d5l!!#YeJ!
%+&"bEcBJ3R9TE'3J8h9`F'pbG#N!!)CI!$S!C!+4!P!"`!&!!)%$$[rirr$,4!!
!J!#3"k@3"!%!!%%!%,B4*!DhmlS,!*!$d`!!&&i!N!26!"(4%3!!0"-!!"(%!*!
%$`"#G@PXC'PZCb"0B@08Bfa8D`!"1&p849K83eG*43%!rj!%!*!+J!#3#3'D!*!
$l!#3"!m!3X(8[R4!k'!5`(RF#c958V5+[h!SA6B+,mEaih&+(X'hrF*(L[l&KaQ
I-31T5cM!TRE&pU"5j!)XlkNUSFfCihJF@GTf$iEfI$XHFi26hH6H@!k-mS!YTYZ
5%q3Z85XXBaNNGkpLXSLKk+bBcFmN2YI#XXIba0q"C(F`eER,D`Le*0QD,F8B`Z*
pd(-RJ+ZUf8dNKK1HX9@T3&-'+MLMX[)X6Q1*3&KXDf`ZD*VI(eh@ZjP-@J0V!aI
6)9bL+T(X#H"GlBN62GB"-!0'$1Z'ehicI`5YELj+S0*ZcDXddJH+ULQBjNIalD#
NB!"#`G6!fa05l1!E-BbSe2lUk3B$6KYQ"'DMi6%EG,E+cilQFDAiMpc46Mr'SB)
'afT[c,K8TFI4eHqikm!lLK8(qI6l4iE!qNf8ULJ3N[VkeGUIfM"+-+BFNS!&9UF
*(#kBUQVGedj!j%XiSMFH(0HflRj!QC6b!FVSU(HGXp3A113hV(5#KEpF`M"K[5A
ZC0PeE&(2aS8)0"XKAXMa5m%T[T!!XJ$$qC!!P8`S4#B*,B3B$XAcY,f$*IQ0f!-
SGT!!IHTIk3qblNmM-l8ZkLh6d&Zf-)'`J@)dhAjC$TB'GQ1D61%RF`E$TdjMX6I
lq[5YdI$di+pRPHpB0jRb-&YF4E)de#Xj*+S5hDX4`2FZ8Z1)m'(2hDSIl66$mYf
*P`0AFJS*EF5KrI(&,L"-LcQS"@"aL9Zd88QSpK9ViK3K,aEq*ji@0TB-426D@A-
YM*JQ%Pb)X@2&k5EdS[rIfPF)N!#ILDjq"cVM1kN"5!JX(X(["I$fL2V`&Z4YM2I
bR&aZj8)3rF3pPpQ-@db!Z9dC&Chd$TQ!KJ"%["4F6,dA+LMqKRHQ&d&l0ILdjJS
J0mbNE+(BDfCYlX&*#p%1"L"%1c3#UVBffH&bPe0c6K6%pJYb%dRUN!#lN!#P9Kc
k91b*BZJUTK(!!8T%%mdlTqm)"b%e9C,2c1K@a)a88V5UEj!!r!3"VPphmKbl-`f
#!"fXk,j6AL'TrS#rNb*8&8bK9piVj+4d6!V6NdhH+-X3@@#imD8HaN)($HU*E3#
XSZQhi2&eek$#b)`IFp"EPdKkDk@6FLJjQ+T2SalaY(+GrLDe$JGKlqe&5bdeb)q
Qij&G"8"a,6M1FX@J`!*0(18Z[aG+(m'(J[[rf++p`4p(9'TEI$iNJrim04U66(%
QB-q`$T!!DVYJ3!!8bXCPCAYGlGH!8C@+S[Cqp$eK8rEY!rF#q)ppjE*X#MHrbRE
eHF63UCfHZQdi@(p*qEJPE6'V8PB[-CM122V1%XfI#R`Eq5aJlpIS['5+QM(NKjb
Yf*,c(0"SLrB,EYPFDpG)E%4@P+bXD!j-'J8)B8la(p5SQl8H(qI9E@C"1"!ek1(
pb'[$l8P51%*49fIYSHl!9F2!SJQMV3e+ITQFBGCB3`6hA0qrAdc#VpDS9l0jRDD
[fPqmreq!I,C+hfB5e1le(Xe*-h1,J&kl'k+XDCpl5F@pRZpL3*KfHq#PXR53!*A
SVY60dk8PA'L'r5$FjA[KrSA+mDf*bl5G5KBT*2-"PM4a$T3d2`"Vad-[bKDi[E[
5XakaCV#cBTmJTf,Sf'XZk%#D2N2CJEp8%k`XN!"&8X@+KJ-"b1eX8!Q03884lU"
0'DVGV-TUjmNNZf+fkP#$3ENHAGa59NL+[@hQ2'dI+'%%NS"6RLk,@jFpC@"kCF$
NRQ9,PYMj4%N$!1@DA)hQ@3apAJ![X&M)%9MIq[G9CJm96LVJ*-"I8MDa`#lPUG1
8+,ZTKq8PJj`YQKL01HF0@)SJ9qj*V)%kqPdkPhmG1JY9Yq6,L[mdahSAl3!Gr+L
ADl90KrE&JN"iF9UeD4r+EhddT0i55TqVJVMbL4f26h2SDRqm3YhA"Rpf[64kQ3c
22RN)P00"+bkG+T8N3TRIT'(Hm[KH6&bjiNQfdk3mIbd%3P`VRkIL1)b4e2fVY49
@%N%@Gp2J*&eSQ#I$(a[dT9mcKcfKH2SkX,aZVKE$lLUmrBkCFQdXdc3!4YM!XQi
F0J#YAcCDIS[m%[NJ@c2$Y"UijVd"r%d%0eUcBm@"&Pk`*Qq&Q)k##YEBS*'lJLl
!VjJbQk(LN31@Bd9NXf@Y&L*JHAEM)m@'9d`RUDYlLV81%eF%%q4VM%JC+h&8rmT
lAAL*ilJ1hkI+N!#1mpmCG33alEK5R++RZK9qLG@RTaAl0D3,ri39RQ%CfQYr&dm
'B)#q&`Ia2m#6Qi8c"%)+!I9*&5kpmpE"pbKqh)dfdTacVRBCeb`UA4B9IDpRV6(
[NH'+d5JR0R*abTfKfR[epm#H6(#ih"X[S+CB,U0XN!$-MmGXkTXST3'm`BZicJ0
cB2V,Y92l-KY#+fDN(rQ)VFDeBQKC"jmNm8m!Se3EUZ*f%ZG&,ViPVF1F[M6kM&'
FQ*h'h$b!I$3Sq$PbK9X!!QVQ*JfDZ),5'8l+3cqkmk+ieq31rFDCQcLYrAlB$IL
i!#`#d3*MEdrUKpF5jcr6F&010NqLFe&4JC[hHNAU81BGK`piY9LJ`c8E5c4M%p3
U(Jpl)#!dM&3IKbYbS9SIIaX5$HCreN$RMrqJ6D+&m*Yp5b0cGJ!11E*f8Gh3HJ3
@)dkTbV`p9Y%RLG2k6Pea[(,j*(&FJ8A*DGKHQf-Hd[h+NJ'[%9$lmLQ(a!i0C`N
@f%!9b@R,*[(CAKibr[Hql+U-'5T3qkG**kh!-m`iaLiVlcd@iXT2q!M,PHKR"@A
"[V#FKC@kBpBBdq&S-"T6-j2@BAB$k0N#B15+4elE8cY00EqDf&)!lkAk(!5-"Qd
ZVGc6pNhJ`!QrPMVf%FThI*@!e6YNCCKBA$eHL`R93U(aA$b+PC!!URK5L1HN1CN
$6RT,`k&kR%Gja$%lc!!I@qDfMlM,ThR#HTM*F+%j-qaI`X`C9*NHZ4fLBPY[I`r
aQ[IkJ'P964%1TG[(hKk4(A`J'k(S0Ub&Hj2IR%`"4%m"-r0KBVZC"4iVaHB-B9,
63HF'pfj"V8&lC)R5TDPir!aJS-aHIIFN(VVQYqfBK@fhB"152q6iQV`A2!Ck)ZE
UBIG9EF,T!BpbTcr&f9TA3L[%EE'XJ!9BUQA&a$INFE1J+P(&31fr-l1NJJf0V+Q
Sl1[rHqpfDf@Fm"83VDGqRmXBVB1JFJ#*@IEe,"+1MPPM-!N"Q-aEj(Z4`DR$9CH
+9Y+$',GM$4Z&%IaG!!4cKAXk%QX4-+pI@P(-fcU0Jh&+Q*)9FK$A2-RBa+Fr%)K
D2d(PQDQBTpC8S)I&(L,PA0'1I8rU[Mq#(m&1S"3M"D!E'lA%K-`b-Va-1&9F9DV
S1VYZl!'S8jc%BK#`Qd&UFFr[jE'#i('b@HkG`KIZV*5LSi2mZ[L`NKb$)MpIBcl
GJ25R36Tb"aar*Q6LqfJ(UML%'(cGq%I+(98cR%5!LQ&Y(f*XHXp,+SGST(1F&Z(
LR!H$!MDTSdG`!lc61Zh#JD+)rZ0i,mKGbf[D$QK2+bc1@"(),C2l[BT-bR&%4@X
HPdq!DfQ0AcFC+GrNRJ3K5dkbpTdkUCBZHc!pZ,(9M-H*rdqe,Em3%ZGTbA#pHbc
Ajm-NH5(PiJS'[0IB'[GZ%b(Tc8e!9E4iZZf1eF4Hb)eU""pRDL3KDIaEIT4VD($
dAA*lMbETR@Jqf0dpad)bH(X$[("LYp@ME(C1P-p&JCQ-k'9)J-eHGl0Vl'j5%RU
Ef4k@#rD%3Af[1kr!3)k02!U2m%Ij(JL0aXM&G%hN-ihcK126QAJC)X[&k*-Ph[2
FR`EU)@DXNM(M(dq%*i6ED@qPSYpF3'-R+c1Y6D)pRY-3DmBQaehaZ+G(mLkPZZS
lZQLXS+`F*A+QXYK1NVJGYDj[+f`&ZMNmf'SM$Rf,UR%a3(+IM-,Xe4A%X-UhPQN
TLR&lXQhGe09da(qL02hJbMkQ2C6`S6L-MH!BCGiMd$)3,%HKMN#-V#*!HPr0IM$
6ie5bFK!$(Jc1CH'GJU,86Xqm1Y"B46r58j92Fdf2`2$)NiSlR1ab!DM"[q(j$P%
a-+pJ&M6Mr,hRC)2+!$fK4XMmFB'TKJQQ(JDilqQqL,hLI$THdX0HcJ8Pp)`35'U
R+hrZDNI#dfbJIGl)e'0NNXB991aA)*0cTU3bmZp*kQRYVC43T2qq+d[BjSPYSHR
"EqG+2)mVb8c*'pc59q4fDj0LSC,#Zd#2m0C#-T4,rKlq%ciSiN#VeV-Lkk@3!(Z
4fCVbaT,c%URVB4bapB$,r6rj%AI[(K*$Q$abFZbcmf!5QQ%*%,+mD#j,Z+bSK,9
HD,T@G8X)A&PrX%iIkR,aZ8K+A5L!K@Y4XQhNNbcR,Z'`K'5SKb"jp)kdN!!HZZP
2'D8TX2QeQ"K4EX!b''@dC+*ICC696lYm'K&(la[9!E)f`dZ9N!"dacDq`J[lr#F
[!SYC`r4lrlU3!&19GJ6fhDG",FNhZk$Q(5YEbVp8dM6'q41aKh,ePC!!+RaBb$8
AK2#T#PqqC*M)Hp!l"hBL2Y5beaBPC)E$P9LRlHbG&Q9al&)%!!kGB2ZTHLcS3ck
0CCm-Bc&m9N*$C5!XlqJYhCcUIQNcY09EP3jZU08KE6C0GSXkEe-CJ-M[E$'@K4d
&%bbHHJTb-a%IIHJq*[T89Mq"VSJQj#8N)Z$I!fTd%2ri`DN8RhN%6I1qpZGI[ZI
Q1fR'(V,ip!jGN!$`0VqYBa4RJEQ5EpDq#lRDLS%J#V45'CR@+29Te"bmB8X)$i%
Vc,r(M[Kb!Sl1b,8b3rR5*S%`G*0TNSXaYpRU%YJkHm"q8GJT4HVb*UaiK&rB-CD
(k&VVE6k("@GLT#mSbFPK&qKAA$Pe%jUB(-[qL6rP[NG6$2P)#q)#@(DPik$QpJ9
bNCM@Z@!JUF*2NjRV"p18YK0JaPDJAFcV+I#`'L`C@)afIV`aFBf6i)FfEQ8bpJ#
rSJ2a"+[E"m'86k*(q[USlbkDb!BkY%-(qdif4PN6rNP2d-#',J+R"QUiLRFmA0K
(60kM1Bp#9SF8"HAeGBmRFZTbFqC&hAZ)bT0i%)1YU#k2Zl@c&5+YeF0I%MeZ-+l
LHT948D1JXh!eI*R%lA$X",#4mlXfPmkeT@698Z5#IV1r,V3c[NlNSfDCBA'qV(l
lU3(JZj9KZkejd*XfHiV,)d&dF(CrT4ScVDq*rrf&aG6aY0Slb2TGGNlVd9[K-'C
TQBFDei4JbPGT#e6Fr)AF68)'kFSRT91QVR`9L3T'13l9[UG%fm3Nh2YF!YZScAJ
$(0'DcB-V+0EV!8bK6rkG!Ve1#)14Ec*kA(VG3mF8fA1JJMcb3ASM[U`a@E6UM,#
kDUBp+#f8-NpY"N+NjQHNd#N9GhZZQ15CUG,%UhI3l0V%#9r*Rm`XB'"RSKIPX3J
p1E'Fp9JERqBGi8S40NAM!@`A@IMd42(*D(0D-8TML+@@IGqfCKQ(IU6eKrKXmVD
Bph),m!Gk2bd3%rMY*1SSq3afdSI1NIX%qV2iZjbV0Kr"dINU6$fMUh6$4lX#+%#
kQ`LIN8fX*jYFqckCdHiaI#B3pq2Hj[1+apIeY9,R-5(qDXUera9qNf8"$4P@)XS
p2(+DaSP!Sh4Cj&rXJm)"YA2S*&$c6'+Ed&9"Ep,"*-a+lYreJ)N8eCpN!Up*l`1
80JQ!*f'U1H"#j$6QX'A53TVL0IbU$ZSU(E[!q$,ib*Pl9bj@Yi90*XN*GKc*aB9
"B3hG5qkM9)6$6%JmJ*V`Sa%ei[lh,4F)mK0h(T!!QSDbR4r@08"HM`8YNH!%$Pf
%'P*&ZLU6khEl(c(+Z"6ZU*!!cJ0`PfClIB(XP&3d6#8QHL,i0dZjH,)@&R6HlY&
f(&BX292%NZb)%#9Df*Xj`Dp&IN*+Z%T6C6BAK+D034f-q'[DNJeZ(AaILUS-EmD
c$H310IJqS51*jjXYLG+i#*GbG#+"hjfPaZXY+A,*df9iaB"!aLa2!I!1ak+lic$
UH,SUKD!c@5E$qFHe-`3#lkVGR!#00K)9V4YEUYSD2c1[Z3e#6-'cr9el5j9iNS4
hcZ-RiZ+M3Y[Ta6[ZZMrf9@U)('h!SDCq8!3%pACej(eFYTe+cPm,#(,@3ElKmZG
dQ"(,TqS*Xc!jb*,hr$($EU(0fSFCC0Zp3AIDd(8B2kC+(Lb$R@LY&E)QkK@mm3#
1K0TB"YpmJMcJ6rV51X`irZQjMpRh6q[4ZP'Ic4r)SMXYLDSkHrl"9dFDM!b6liA
31``1VfBL)LH3!!#*,)SX%+ZX4[62!AMDpZ9Y4Sb5#UkHSlV%C,h5L3CbR5HkU8%
AZm3Ij1Hf1m9YVdplCj%C&Z-cQqlS#f5D"d[$EApcPBQ-L#k@8Z#*kF&1IC5QTHL
h9D5"V'AiYP6G[!V4T1+4T"R4$a(S@dqB+3p2I"L1-VTXmq#-VEGDmC6YA0HN2hK
qaJ"p,'!%P#53!`3!TC!%!3!!2`!3YL!%$,IcZN8!!!%l!!!EJ`#3!p-!$jQ[!!!
0QJ!!"JF!N!32!%0A)&"bEcBJBfKKEQGPF`!"%dj849K83eG*43%!N!q!!*!*!CS
!N!1Y!*!%$`"#`G6lBpMY,-19d(piB$!P5!C"6(0Il$`mJEI,N!$rCDbm$J,*D!6
2m5*[dr5&rCYFkMYS-E-lYmBdXXZFb-iDZA0qKP%'M3`63ZGkpPpVl[ajERpVDDA
LGiBM[dG+chA4f5!hVJXLipK*[*khN3FS'h6jm[KHZS'Lre2Q'e+[BGkj!LfGK2A
0+L,9YmMbRF-#$FPhX-ep!iZKGG8`F8#`di86S1V)`#AbTd,@,i"#`G5(ph'$M%#
k'I)jA3H@l29%,ZY@DA4ZeLiJcP)8rIp0Y0&P@Ei0jTH(@i(5KrafBYrhZ-dpd))
Z$d@Up+A0*BA*S-Zh%(,FpIPbU5NE(-f6fQG@#'2FfE6%qXR"XDVKB@&*SbfbJiA
"5,GSYZia0kkP8G6RF4(NrSB(M*Fd0'!mf3h@m8I9jBGJEr*5A8ef"(,&PF0QXVk
L1[G3@clCj5e2AITqEP@YCh5F(2U2"N8!reEN46UkG!46X21$aBm&"E[lCXHN&[S
a[f0l*cLMC9iQ5r!KXCBGE1Yf2qP@YDkdHJP)MdMER2#)QMFph1`G&bjHXAar8(Q
3!#kV(c0I-IrKkHlI93Bi!MN9f*3ArH'+*[UpiceFKZ!IHG8,mHa#eN-F(pN*GXi
f*0El5K6,rjB3YrUcUHK0#Dd!e*QjB#9lJ9db1C*'6$4cIAqV%QGkH,1ec2`HZA0
TraT(T+(qc66NY-QU'k[TlQiqQ&rDRe[@c+ajG&3rh!T1Tm4[)[jf%la5bi&!iH`
DL[ECQr2`MUPl*JfI@FJm1M)a!bh1N3U-q`'LNS*PY3`00FqTeJiEE1JTV%@mJZ%
'f@9C[HZT+VeGa14AT"jB#!I,p6EMa91dF%,ci0m[G[TiEb+*Rf%YA3AV-+Rl`A@
N+8&23SFhPhEJj2VNkN+(ebhbCfmXf!rDmB[)8iURCAK'KHM-RBYHJI"i5AbAp#d
U0hq-(+kq5fIQSI!!KXI6*Z@aKXM1TJ2#2FKShGq@jS14CYH0+N$4Kki`)"c*'#`
lIY'f`GCehiM6TANE$XCU1M0'6P3P,S`3'(mfYcBEL+LS-M3d-pSiJ!M#d'PlZhT
8d,3k[$IrcNCAKLB$qh*k5kI``GmeR)EA*VLm86lPZUZTUfKP`rJ+jqHE12jG!a+
JCq@r(SjU9bJRJ48Cp)#%6F0f9MmhG[LF52a)#[Vk@65Xfd4)P!2bTC0*lYPU8&c
Pi4L!AYB'#XmHPqRr2rTL,qmbP`%m%&%0KMRFa2L`&,#"%r#,@3NDL$G'&&dIbTV
T8QBEJar622PNj#Q,6e%IVPS#K(U'(D6,8&,B2j(8Y6@`piA#iP-bh'&jEX5qJAl
Q3YjLMfL6%l&QUXm4E!+3!#h1*SaX"I5elL$-$[SUFH-6@6p4q!BUGGFq&MrSj*h
bjU8ik2"@X!k9D$$icTX16'YUpM3hKKCCA34hhJlAjm1A$I[j8)BUGLXBXfjNJ,8
D'mHrE)PISjcp)BNrQeLZ-mr!M*!!UZI+f`!2p26DN!#0+STPGUfTbMLeSTb%GlS
GeA$&dBj,ZL*j"ZS((UI"pX4-e26@eDc[@XNS6YT6SUCkl2,5U11aVQ-raHYB[KA
N@T'+PQeJAj!!qP0)Dh008@pZ(FJGc3S#EXl(&b",&-YN1C8RTU8ZkF+fR0#)`'T
C6F%AV%LZHcJ080YXGMXki@S@IrJS$h*[r!KSD9XFF3fER'3Ger8j1IqKb(Tlm04
"p4PL%@pDC8H3!'&m`[5fPD&5+eSj3[VK)FA91Rh,K,e0#I1#'jh2#QQ&c&-3'TP
Hriblq2G&UVG5d"GEV"aE&SNdHSa#P#HF*AD!qjdX9YRM!DQ&LHb*lBjk5J"rBAm
Y4Vk'@@SPe$L3!"-Mr%KM4%4VfV@5kCV$@lFlRSa3E&eb5SHAq+()mbl%HGL#)Pj
-*'aed&h2R-cPhpdP3e)brAm"-0bi$[%a%Ii%!'c!G$H6@Vc6kKclBAF53a9V9$D
"TL2P)(ra,EU'aT%[48Q-%#LR%`q211`2SJUr5J%,4'"jA5$3Ibk)(4`rRJNISVr
lM%q,A4X6HDlj(K`qdF1D9(e-QlER*0"$TcBH3UGUDblDdkIaQM(pY2hLT$@12q5
3!+Y6bqAm$[N(&T1@J"J5G%9JQ(k9R+@j,(Y5S5j@hH&'f,38QmLVaBD$(Yh41`E
kVC8pM49I1$q'e1KD3DqUQc%)IllfAMThKB'`lV)FR+VfUXH&*X&UC%V"QL)S98S
ir33bT"DpGlLBX6#*&H%HjbJC4N8NDG-6`X@D"q!LFa6N3A0`k%Cp2f5E$NqAd2[
3q%,Gke5PN!3"!!!r!%5d6(DpYr3b!3!!&&i!!+4@!*!$d`!2$i-!!"[Q!"EYL`!
!L(!!"Ne[FQ9'D@aPFb!a,M8Z-J!!,ES!U`#1!Y8#!!(!rj!%!`lrr2rbbd3!!)!
!N!HPN!3"!!!e!!#h!2CaY`$fF3!!'i-!!"aU!!!EJ`!&`rd!N!j*BfpZ$3!"FGP
TBfpZ68&$8d%!N!q!!*!*!4i!N!-G!*!%$`"#`G5I66Y4QLC-XLL#I[0id6aLSH3
I'-#V81EJ!+@3"!%!!$d!%,9j5)QeI4Y3!!!EjJ!!)CJ!!"Z$!!eC3J!!#GF!!!0
9!*!%$`"0Eh*P4QPXCA-ZCAK`!!%mH94&@&4$9dP&!3$rN!3!N!U!!*!*!CS!!!&
U!*!%$`"#`G5+FbDmfpl-A2J+m9Xr)&H[&p%Tp[TLMSVX##1dp)6Hj0apJk@L05N
2aFMc$44m'#XjVjIB*MQMbUh6PT1q(23AG%[X3!lT"ZmBU6A&J0k0J2eCEE1ATIX
`&k`r"eS2*J3!Sq6#C69mr9+#$j`SIG9C'!3"e"%2IYB1U@CR#I!b2r%#21LS9pk
,3(6+KMqRG8j4qMTr,2c@AM3A-+2)a6lckF3()LFTLX`eADDRcAqE@XXcp6@e3PF
iH2M%,!'`35KPjjlmDVb-1!*,U`L3!*8`CUM0Y!3#'(S8VMBfN8K$E1(*d$YBqr2
mPpGRkAQ#K8[dQLF3h[$,da2$V8EKdF')DVGI5'8Y$RFcXlP-56[YhEjJG6GIp[4
YPPU&T3kq222a+KGTIB6Q&l&TeY4'S3T*Yd$HEiK46%`DmUp9IcKU16[!dc45r!4
Cr)EQAR@3!&J+3qHr4%c&-r2MRI+,4*!!8UlhACNDqaB$)%,"e0f8VMU+YYB,HZV
hP!0#IiSma0"@*ql42+RR#CHSJQ[EafrGmQBR9b20q54cbE)N$,j0NHQbhPXX+L%
eYbe@fKSEEY(2me,,%1lPAR'qSe6#fqHCYCCY+%4ilUG(,42!%GS6`C9HbqbdGRB
rGa#mCfK$@4Z`hMmYMIVP[&FHqLXQLPc%p$qUH[1eAXAb(I@`ArqqZ38(0a8$ld5
0&2``a-Qlqjae#c58,a,FU#YS@+AepebALmkJS6%#iCBGk$iS1hd'Z8hc!$N3HhC
$q-l+k$C25#i"RpErDmT)L[DpL9&H1h`(DLN!m6EVUkAKCZJIeDTKY`p@1[FJ)(6
-Z8[ESN3(Y%16+TVDhV6!1P[PCBli5GlFV[1HB!I-Q0Gk*bKj2YCiRKqL(qPZRK#
,[$"+3`&BI+@l11h!(S0@EK)A45lp)pbZVfUCp1@5j0@d`342*QATL-+XaIB!T,Q
LS'9C4*r&Y8,PUPZd@XF&1!q5%#0DeZBD&'EMrc8m4k'e[TqGZl"'5elPi&d"SK+
Qc1S,S2EplRb$!`m3L`#1MM&T0C&UPbe+L8cbrB!8MN)FT`iY`2eHhDP%q[EeXa6
dja46L3`+V+B51eK[ABl$8*-KXPh,K(qJG,Q@(ZX-G5%03aDf1p$rek*`9j0hN!!
lmQf83&Md"-rHN!#L$AB0+S,AZ!Q!E)9hRa@#)lT'Q9h"&A,@E92')C'Ti!G@!hC
m2'UK!5*#,8&f!6hNIN#DD!&1d(RpF+-6ZQ5@Y@Q$EXPUc1,TQcZfY+ki2`!b2TB
HA"D)FSGDirHkZVE%Df09@c+qbP+SEKM9R+T%16,qZqR!%6RM+65!bL28KJq45['
Y1G'3!+YXEMa6YTAGIP0'G*fh&GhaA`N!PfXYp,(0$YV`,mY&d$#D&&6`c*'hk6'
*l&'"crMe`lm*-'(KHM8Q42$1"B)iVXhKFCV5Sd&FGrG6V"+(leT"dU(#KVrCb(6
CH2(B4H)9[@,NB,S9V1Qr*[P8l+dYlA"'+8FXl#9amMTEjF6J@h#k&#I)``L0(+S
BYD9$qQhjjcPq8k#dh9DXR-'Cd-0#,ISa5N&CZ*9'%i%fC2bfQe%TVBE@jPeMf"a
`RLlHBF@[L11JTcSKe[`2b6'$Qdl"(S&PV@#PN!3"!!!p!)#h"*'AYh+cj3!!('S
!!'qB!!!EJ`!0Q0-!"rpm!!"0R`#3"!m!6@pbC8CTE'9c,QeMF!!!8-e069"b3eG
*43%!N!q!F!#3"N,"e1fkV63r1Mmq3NfSX1NQILLaV"NJPCNLB4c4,b[RKL(T-TR
T%+*'*C'11LJfGIRAEYrPD4bpe4hGHdc15lkmkSEX1Kc4a,DSeZ!bUAe(UrjUNH8
#0IKdAk-kjRTaN9,)p`T%Y3m(dXB!+GI-Z%4!e`5UqC!!Z"9crk,[4dc[4k*U4'$
2kI5J("qRUMR#TGr!G[cV3`E*X2Zc2dJFA8SBM*93a*KRhUQ3!$X$K%ZTKaV8*Hb
C"aFAUHq@X1Fp0%m(3FiIjPqr*UEPEeSdfT1kCl"qUMjc++%KpImmj1#Z$5RY!J!
5M,!-hC0CR0K(QiN)q'p"XbA)Q($Z#"dFK4Z[fMA#J6%hjj9VFZH$4mq%(T+ZY'e
Y9P)$aH82d+,#A8,BP6Mh[ZX*4rB%MB-I'LjTm$qIc84)jNbbEke1,BHaDhPXX-8
AY`c"T,[M,E%YTUblI3rTZ)G+kJ8HZMK5k$RQ6YiD(LjAl`m8A9mYAla)`V,NF8j
YQacbRMMfFBl$r9BM")[I8b4$l[6-3@h6mHP9)K42E@*e'-'C)2+,SalaQ&2N$mX
PA"!mMZE'6!#ja@Uc@Vk4f"%$QZ"*Sb,&bP5NcXN)iLD-*b2B$0r-*KBFCpmI%K3
9Mk[&+#HK9qHhkT06hlfC$[TG(+hbG8m560m"4`a8J%VG(86akAU#4M)RTDkS!LQ
8k$Bp*kI46UM,,m$pN!!DDlk1JPU`XSGdZI*@&IP+q5MVc#CF*h#,bjfUCrI5p'Y
!cH@YZ+*dXie#(,+EQ2MD)!T3(R%m`B#R6I2Z&)#m%#VG3HF9,IT44[MGJZ8N(#p
*Af35Z4LGkKN[5P0BccMRi9Lkf'BLZ(%KD3CLVB98LcH@5*ZYY8eRLJ@6pLLMHFL
r9pfmeSk*9j!!r+(,ha@`90L3!%!-[QrVJfaZ,R5HcaM*VNL$82)NU4cAf2L3!0I
hDU$r"[8N*1Z3!)r1Y"jpR@m8JDFE`BKCDU9Tf85CMmeZTbifm3#$h@j+cU5MeLX
+U`F6F)S-N!#)i+0k'QbEj'd146B3#jeRB4lAPJcm+k[l#A1EK*ia!lqbGGr6Yc2
#@08LMEeU'Z)'(K!UcX+rP$2b-8PE6)[1Hl5bJ@*+YmT'h*0Krh3k,jR&-c3336l
c5dqrV3[5cFKjQN5)Qf)['f`H'NH-!4R+TK@Z6DKV(IK!pFY)FBHVI6RIXEmH[2a
Zq"l#[fRmSlK9+@Sf'Uh%h@d)Xl4*-$hm3DAm&qCVUf-2$KlEBbECUGV,2&65qdC
LR[XY81lP$(f-F!aJ%,65#XFUMq5pA(i`%-C3!6h,i`p'd#E)(cLGp+dT0AQVB(J
aNDT+ZjE[cBYMT6(YAL-q@dANU2Fq&,(ZpR`@)&+B$r2%3V!1!aA)9iLSVF-jJ19
9KQZ!)f(Z6Xfpe(j5DZ6RVefb(kibMB%kd9rQ49rZ1[L'@YdFq9!UP5i@&VV$ipJ
r3Y1HFT9'c-Xd#)&)Mf5j8p'EAZq'RCHiATU#,'RSiiV$"+9"#VQh`FBaM8qeCK$
FCRYZqf%a[)EdVZc10a&bE-JapAQRp"5SR[HrTCf*[8eRMi,KR0[%LhR-X+H-5TH
#M1EPYEK5+N0"%q#q$VM&NLNai*d4jI1L($4-@&r+KmCL9'1kA8a)D5$jUNeM$3J
S!@e$D1HFS(X@i")r#&&5EV2arHRCZJD9Y(UmNQC)jQADd5$YcK(5C%CHV9##dme
GDX3#Fl8Bh)-4r'q2'DkF%q!MZ!jV0(INr@XbIMVDRhS),V3ZX&V#Fkr)hbKJ9@'
HKqL&H@iCG+pf"4Tm`@1Pr2UYe6+TH6ire1Fc)e*,&6*q"TI0ADV2eN9Lb@eGJ$$
&%$#4l5HEMeU[)TMeSdpfiKJ[BAmAh1K6i#8@3JJmE3SG5JXei9'K9CYFRAa`J!L
lPFm0*"D3!%RY0iaX+XJA+9b)%I3X2FMhNV$a8*6i6ajlq'M%I9U"4ABV6X0X@-m
J4%'cU29kBKpEITqLE&`CM%20RGM@*jP`XePVm$P$DNT%BmL[-LTCQidE!dLN4R)
Kj`abkaLjqiTU6pA0@qI1G!Cbj,k@+31pq2Z'aNL2-Ij%ql%DQRD+m*kYXM)+!(T
QCK6F0#86"UbG!YTVriQp6SZ0TdV95@EY2GIP&Eq6fa9'*Ca10rBJ0F8*FBmZbk)
V20!Rb3C"1Dle1pE6d)acB19G)Md&XXFH[hYEHNRILe,R%#%&AljC9(&4PE!J@!%
DI%HR@58JGXb%k6IQKU!i*Eq$NNSqf%5qPCc(5B+JpDZP5kmB4eUP)K02[eYYP#2
jS[`"Q&,!4834DCkc!q&#*e$(a,F)T!`lSUHNMQN1XiBdkrk6DeR#81Z6Aq5-eN%
P-qV3qNMAlV6#bcieT%,#CkbVXd#Q@"eh2qB+PCIa*P2m+CpHMmHKH'1jXG[PD,e
-!-)+CTf4d#cM2b8#j$M2*H#qfciih29fhdiNXH1XXjG0aUBbXli'1Q('5#CBZ58
UIBmCC3+eY0L'UHm,6p%hI-H%iY#8*5Z#jZRA%MV+YfXVa'#TlB%Al-SDipNVI@A
Gl*fX[KZB%8Y&ZRIV*TJ6TAa"%T&k)8-#(m"NGZ"i8krVjG2NY$Um*!AJ9A2iqBX
`YCfrZ2$iTQLfV3eb$LdYb@bZJCIaImq-KLV43@X,[UI0`mA"%$KGV&iNjCh`6dT
8K6Ab4cjrJ0rp4&(X8L)l(-#Crp@%K3VJ@[SA!5KrVVQ&hIGEV6hel2dK40"p8L&
6@a*ZT6DdkjTH-kQ$emHH3+e023fafj0EH!Abec(jNSNkUHV(IN"3[99qNIM@E44
DZjJlaG@E0dTX(60&8L+iY+2VmbhG(65Zp4q*'!NS6RQqUj!!k0G(ZDr+9Ym!LIP
mheH5BII14KKc#eU'Q+P12q$XkHH#f3h4N4"jYAN*S[IrR@Hp`RBh1B*9`1C4a1&
K#+Vj#Q#rq[IphL%"Um6Z&FSFfD[@0HC8`485XaUZ,40@3!a,$arS`I1#bE%#!YT
YNiAjMU(1G#(M'TTF55IS%AMK0MdC2#Z5J-Y,rb`5Zkj[$V'-E6ErAhV2LLiAkaa
[&5ClCU91%15&2)IC8RS94Za&$pEjPp8AjpH!`qeh+fTC&'SGafc'1r3FNU5JT!C
X`*1JQm8HIkR"1S%[2Kl9BadqLp#R3IMML#'cmX!1MHiUkMDZC(`faPSNj0Nc%&2
k3qQAURe1VH,R[e8P"mJrlJ,*6S!Jm6J[+15Vj&j)LpRjUZeTD("c%QUY2pS24Dd
VNQA0-D-aV&YN$U3`FkFLl,pNah)qm+&(H(1(mZI0,iiEr8id9Z99$,TaDNlJV3F
QHr4-RaKC8c0p3Mp*LcLjTV@"SI9@0ckT'Em+,D9AL!!1l[6LraEEVC5X!Rc,fZG
AaLdkmU5F8$[Kp2-(C4+Z'JIC90c@$B$Zqd40K1LI2+qk"6"R[*UAQA4hV14!IR1
i,CB9EV(HKkPAEA@$[G4d-8[r)#!*-Fk)fIma(GB+Y#d(X%Pk(JILTCGi(i%88d4
8EHhjE%#+QUFEZY51mHN*-(@RRNJqZ8repkYjmpP'hCceG8'm(THAp%bK9QKD9BA
GhYEKP(a4eQL)AZ)UN!#8BR5j8"Dec[%SAY6A"[ibd`31BM"SX!m6mGFHq@TD2!M
VPH+"0"'kFc#bdhErpHU3!0*rTqVC@hQ*b-e[SbGKYFf4NhqD-,,*!3kU@@@Fe$(
j&Ghm$e2JYM6XB3Lbq#Jh)IRVYTaS3a"1*0X$)eAjUkY"KjF1-E&rC1jh64%1eC!
!#5-#aE-3%39ak,%Ab,UD5!Ih)UZ-QAaA86E[U*HPaNISF)!l#dc,[I4[5VZ`T$q
55$!RRmN9-NrHR'IBK-YqFHq)"9!a(6ETFLVlbHEkh,qP%FVrhb$GRT`arBq$6hJ
r!EalDT06GNb#k%rhD%5q2bfhm2YFh9qrf5LlAh)33#)1!JLJ,[UN!3NqaF)'ERU
%"pF(!E"pcarPc,0FJ9Zr!(MS!"jN4halZma,'5c*[0&4&86T5@!aX'NS3)bApTl
#5)qdX1H'BV*Mf&l,YRbKLYbH'**eL4G2E-rG9,#-I!(!YrPq6diZc%VRU+H#"Bc
!Tl,bJGfmFU9RB140GRSe30Z8#R'('jVHD!eHfY'$@kXLYmC0UVK[ba0JeI8(idi
"e4%*r)Db$*Q3!*S*#C@IRhmfT(&K`MZa&cF4SQ@VBZe')qC+'+URbPS'fVdSZcc
@3"9j`H&i[%#F'Clq%`ipCUp`DrN13SKV1MI%lYr$Q&!MLEi)6BF3%3Z[IMrPSDF
j0qQ&YIaiU$S1Z[Tlm*C[c(P&[c)R"Uq)hf[FPUa'%!0Sj`3TjJT*dcdc+C`q4e0
JIahAcUm4Rih0Qh,ST@905aINbKlk9q#[*Yki9I@JMTe'iKHpr'b5hmL,"X9DDH1
&)C0VQChBiI+*`9CLR-RFeD9#GcpD&RhX*K[5-"KhZ49RNc3aZa9+@$!epGcji1*
"D!rFlV(eL--MC,3Bp9J49EL(ppT)Pqf[AU69#jZcr0V0%(3M1!QiG%3T*6Um%R0
r+TM%CF)dEJ%5RD)P5SK2@0HR3%l&GleUXIlpIA'-YVQ[!SiCHi1B$U52!KV5Q1"
TJ2JR'2N"VNlDTlUD,``h*BLlIihq(pXT6cf4"P(&GH$6+8pAkI+Fe06KCHDiTaC
h&jHYQ&lFq#B+$fZl(P6bBh(5VNCkXYT9C$h*(fQ,'YKR$3-Y!VIq)FX-Fm4!@Fm
"QiTN@#CckH4l3$0e,S(9HU5%[BP`EA!LAJ31BCSI$4"X,aE!05hjQ(LZGF*Z@$K
kA#HI%SEK(pYSZ@5dEpA('M%ND%XNmi&M$Mrb)`JhK&1&5ddKUF8LhJ#FLZ"1d+h
[hY*$Q@L[4&6'XaPk)YlmS`GfZ$hCMa!PaEr$fKQGAKiA`MiFr%,fc)$h'IDM'rU
(X1iZ2Qa!,icA)1A$h(rdDcCG"[1lC90lhAGVj35d,8*9flcTh62`8bp`6#q&$&j
MYIe(m3YGZq'3!$-Vq'jmJS1cE0MLk4A85a"&!,82LVlf@J6mc#QGdEcc6qLKj#Y
B"UN)Xq)p-9@GZ'I&P#$'&4iH3*KICD3fhcD3!!1fa*-'"9SIbKX1FFS3[3pM(I#
%CD(,EiUYbUhqd)E1#C%mLE@2G0BT)BY2-5aUC#%,&4A"Gj1L08r#!*!!A%FNi`i
#,kJrbbXeaN#VY+h@Elaj6km4"KVG!(UE+p4`@f@G#9[-qMadc2QpImerT08Uml8
iVceUl'Ll&-YNr5R'be"4MGSPq`3kSXq"pMEj6ic8D#6'3cip6CHmb100,rDPS'J
Y`5A#fN(+,#6Y[[mj[ITD@+)mb4c@kp&Ch(F!SErh[K[cl``L(h%QK+"*3+,+RMI
p1qlZXQe9%+k#Kkcf2V`B$@UC-0iNQ5)-I%6c%!f'1lcapA%pRZDd&YQ,TfP9ifD
jDSFHR9r3c[R"RTdh6f1EB+UIIN50!e,Cd&FpcVpjTT93+T-QVL-8h8VmK6##*kh
3GAh*Xk6+,3B%eEMNSpf3!+Mpc4FN!B8F+%f+1rKL0FPRX69Q&R%+"p2r2!bjRGr
HT#I5mV610C6f164GZ1&-"f[!S*@F!QQG%16PS5TLXL9J)-(#"H2&pZU,%%UiD1J
@Z,6%Y)GRbiD51M4B8rC590Pie")iSR8kGB0TEi1#@,cLNQ*fkQJ46-XV'P&p9[q
E4R8KQ6*6+)!C-+-FA3B!Ki6GRV)A81bTq(rJ[C`*#NH+*#qVdUF0GQ-6p%"LJVq
6J8VAHFcf"9eJ10BaH'Q)&MHcS82bF!VSHdMkXUM&pic8VfRF%aRQ[!J&0,`dH4'
NGp+eeQX+)ppL-llaqUGkGb483eS&[qEdia0jidZc)30aF9l-3pLIJ[TQ9hl-F*j
'C4c"i#pH$TeQl861+NXmL#@U+3jX)(8MIM'$`lQ-Ma26JP*F")dfZ5Paip$@4B(
N&))h8C9reiL&X+(TiLk5rhAP"e1("BGJ1f92LlN,Ck0m)G#$Dh%HCq$")16m4cl
$G6PKF5DYXP@[JjP#AU0,"d6aPU@F(mYVF$SCE6GVLjlVdBQRe+Y*'FSr6F8"ViZ
BQJqfem@ijYXbEJVZP#CXQZVF2N''c`RP3PcN6Y&55F@26##)J&3deKLaS*1cf+C
d1c8,U6)T%f`E15IJaJaX5LDHDaQcG%(U$b[EkeCH%E3iTEHD,0YZBkk#M6eDE1#
,J2!MHLQeDN"-8kP8[pD'YbhhUcRPJ'Y`GRA1f'q(hBDZHL1AM4bf`r6b!pi)!J@
q'p%Lr6`%LE,CDe''KeaVA9C"M2'a1!(f6L-$4qX#)D[KLEYc'[N0TYmILY[3'P)
S6C-JiFa$HaqSX-E!'2RlR-6meF4XrplG-`iAAie8'cGMMlfCca6#,%1cBRiXV1#
-`%)@I``BhHcc&$%PR9Y-T0dC!(#"#96amIpZQ0'JmpJeUfepIfA+4jEHTL)ET8k
G1B,XK61Tf8(r*!VE[64IDZ&aL*I(+PlHfqieGH2DdJMcpfj$U1ZcmcUI-C0$'ND
Q5U03V#J[k!"rJ(3GUk4"BSM3P9GTLSLN%2C&Kp#4,1H)$F3cJ55,dJQmUM(iFpJ
1V#cIk6RQlHd$dTac(RcMHZek9ME+,`)hUj2a)TjHZ3D6QEQi+(-5-J5)C#8l`Zk
65j!!GB,j&C9UEmp6BRKF%BGPG"1IV"R39C!!N!$#EH$c*l9i+F"AZ36i2LNe-@%
T![rY*e'qYKDPXBZ1fQ1Dr"5+m4kE+0QVlKAI*i5iH6K9+M5A4h2C'UZQpK"JC-G
R&[2NC&aa"P(HSppcPYZm+J9)VplT',*(JH%eRIILrLC(JK@"&6V-Q#A9SRARpHa
Ji&#GJ$3*4H9FE(KYmjU9[%Q@R)J*`%K'YYiNPjUhfC!!889ImflRZb8$HU#0FVV
#8(LJYG1&TZb#X(JXlcX`Ip2E@hKCZ4pE@j2'"JVFm,A98f'+eC!!21RQS2'jSA+
ce&10HQ2H8`F1eEQ[#T4cc"2GkU4K'r3r@KXNa5R"--llYKm3a$Q8RFGG6C)8J[I
JFCc-6mcDjfQq[+TS3d6F""dX#k)65*[r8N6bMXT!&jrQrVF$e%C`HZY6G9`Y)m8
YN!#Qqr+-eaem6i6YKILm$XH#-9rGVlEJM0QAX%T6N9PM8@S,S)81$dY)F'Vl3'J
+N!"Cpre"f(erKjN#0S1`09c*SY60N!!9-F&K"'MGr@FYLU`k++[KZl+#ReVKNa8
k424P5#iIp`YJ61-Ar5%d&aH23a#[E)TcFdpbTkQ@)FS,B2G4KAE'Dcbja%*0(f9
b0-Y!eSlf&kre(4ESj5#hY[ZffrJJ+MH+&QAmcZZD9D1df%N&*3LC'f&ZVKp1@qQ
lZVEVV0hM@QI#N4P153PAfH&aiUM[2LTS'2(JcHHAZi`CX!0*3l&G'+8`PH#Ml46
GjeqGhSiQ@2*38R!c,pNklQ(S2#+,K&+RAci-Xq1jFU6XANF-UhU`lK`"1CVcXZD
B1@@bTcFZB0dV#8Ndk`ZG+9TqE3I%D3h1G%TAUddRU+#LVVem`eJ4L6dJ$K!T#X(
8BZQ9Q(5R+*!!9ML-FSac60JAdr@e1rUREM@9PplbD-pJMPc80c1kG)Yq+ab(ARJ
ekL6ikDXGLm3eQ5[l5X#'F81f,XQ&raa8aVIiaH[dVAi"F@HT#pZi,2p"cILDjZj
)T[j5)liiilS#mN*AL&ViDF*$HA`C-2,[(XNC$%0558`-lSImURJImJ2RHj+@&aK
'+E$Ef2QjiVC8!YdI4)`qp*G+'DMcYK41(Jdi2#j[[)-23k)pAHqX[CC)j-D3!+-
"Il#@@JM`@V-Q2dAfqY#$dbIUJAp$'B9Hc%[+SpJ0HL"UfT(@#-c('frV"H9FVLc
C-"Bp5Y%'@#Bemf[l2*2SDj*9f6lNeQ!rD939F4FdVIYm,#!J1+G9BVKIjmm3+&a
DeS-FKB5!qj0c&5Ce`'b5qPQUcN,VZD3HqFbfUPXMYD8)!ib*#fYjmmTbY))Y,+@
AY09A%kk"4dk0RHY8ZQ1,18*,a,$#ep-'1CjB%6HNd'c)Gd`l3,5jidTe`GB3`Te
2-KBCQ5%qV(4b(J&JY(-PhV5-i2iR9@rMXZB()QDLD@LPYRd`!JI@%5V!j-4AGJB
k+AP$Scc-*KN,&S%*3RLTL1pcr6Y[L$`2JBH$cMpMde$H4(%)FmZ"(j*K%$3A@Q*
PEdSN0Am)q@8q5KdYV"Bq1A%lm4TNlYjBrV%"pd48I2*BAEXiZ$%&&DSKMRlH(#Z
!`kB,re0deN5eDL6hfKd54LSN3XPNkSp'QVPS#p!D6h8$5dfRP`hV4pf)HETL%aH
bT1p#C1Z"HeTMFIZ0)DN2"43Jl1hJYN2GCX%jfSE$QbkGA%50h1q+V!**S(Vp@+m
@Gd21iG#AFIh[EZBRl5r*66Hl%Yhr8Bb44184#E3QI"'r2!jMfcT+p2$8E$Fj#Z6
#JRPKfpcF!p"`fcjRHPP"IM)jLL2S*84A(*RVK(Z@HC4p$jSJPRM9d#8Tq,l85i!
CCPEM+T*ZfUEX'%JSb*[ph-AQGIJr6h$9m`jaX2`9R5R1lQ3JZBAAVpESb*%H*6K
+JXU"MSqJ&I*k6TY&@QqcjmQRP1JqYN-Z*LcVR@h"KB5UThi[,Y%JD)TAGNKRV4I
cKSDJ5SAak8-Y4(1S9fT!IQd$9XNUpMB"[$mA)d1paH69E`iZLha'a02L29JAr8F
R(c!`E'A[[)D2E9Hh4,,U2Uql3Ebj&kI[Ij4-53G8&1'qL2kX*T@@[iD)ZKK+ZR4
-mHTIb@2`ikba)hJ!YBQ*5cFX$p!T*fdUT)k&PAV#A#U0LB*")mia-AaM1Q46Cb(
)lF-kTKchRAAmC$NmDA+'9jD!BHQmNHl'Vic(eRb-`Nk)V,3cXMPe!'HbC`+%rUZ
l4a%#Y[XEK5fHA2R9P)34,,*YU9J,QKALh#jB&Z`@[Fc&5BENEa,!ar&%rEG'C!A
jT!lB(,M+)G5KPF85-PVe4B-,K1KXQ5V3GdXA0%$9#4(YcaFR)%5hHpIJj8KDE$B
Aph8G*)XcY0eeiP2k9)`Zrj[cRKE5YBebFd@P@"R#rbiIc&N2hN[p9UXbdk5mReT
hGF@L+0AIC`Vfa5TCLm02(`$R8B*43VM*e*M0LL8G$,lMc4%4BYXd,k,pIL2H9F0
Z(rea,bEfR)2*-35!p%+ABZN`eNSecjfH'@caa!#D3ka88&,Hh0X`Y44c%#CjRK6
cY[,95j&V!5[jN!!@[bZB`4PFT-&VM1PEB%U"p9`TJq@P$Dc,C&,eH9ci0CcDD,U
$PfBJ"R@CY`EM(RB1ZlJZ(hIE3cU(V"qIhI31-Uj%ILZk9,b)Z0*)TArNZC3Np[G
`IR[L&1&F)-%$RVSTkZ`1NlmcG(4kJ6ch+r-l'3'A"i90da##hPh5iV9YHJil8Yp
-$3$dC5$G2a@$9fHK6PaE9ia8[ZTKaUafped8+1rCX'FiF&j,$LF(b)C@N!#UCPY
ZKjrS0-SB'Q!(S[9DmSJAb0L)GKPM)8G$U(%pIH!-8pSH)KIL@MDIJNKLHK9M$l9
KhD$L85qpX03'JLpYL$RMET!!Va#TaF8)`MlAiR')&a%,6S2P[h[H"'ld'R`GJMC
m9lRh"rAM3Qj`a%$PGrC"Xp*'eeqd4-6#kBCZ&fmN@2#)1+m)[jUqM6IRdUT22`S
4[NHRh&TA!&+mh!%jb81YLR1+0MiipQCUDBZ$Nchq5XV1EAZ6SHD8&[*Jj4GYJ!6
BeCC)lMfc@00+b*1!Y8l*BP%4+AYlQZD@,FfAE%ifb#*m0@[aCq1+&mF+8S)#MH0
dYd"9RpQbM#@lPq*'@Zj6M')qqK3Sp6&YC%H[hh9$`Y8XC+['bANU-m-YIYSN0bY
a'@"YFD*CVSPp*,Hf+FUre(S((a`5F4MK9p5!pRHqI"aZp$q`b!qahqdKm5f[V"6
qZMK6*iLYeS,l1J+SjiiYp100H2G(M!aX!%idV)5jM)V4I'E%'c4Ph8Pk$p6)j*&
aaJYCeqpa1CmFTQjYT8r'J%XfeP1i6mZJc"iKfiip4c$Rk*4Ar,Nim[46UK#&RIb
bPIIV5%f@cPD"0mIlZpf'FLLJH08iYe0leScr1BY,E%SB[@E3DBa6[$GfeAci*`f
Jlh8HdJ5B%5H@RA029cYVCc,l0#*(ELR$DA3[r91-43e9H#TIN!"Vpkd%TJ"`qa#
#ele`mX(Q%!#$&QI['Vj-LMFBJB(J!Ekl`$ic"c1#P(0PYi$G3ma`I1MT+4`82Yr
5J,MDST[)X*M8FJ8q16i(b!A$p,*U(J)JT%#F-$0J5&F'jkp83RJ(J*l'+eqfIRa
f&R(`ZBI2KCrXp@mYKb+M*KZ252[2H0pGc1!b@2!%Q"C,a(bTQAHCDr5b-pPVl8B
)4alihAD(EEm%'9C-E*S)@`im`FcEL*l$p!a59bR3ciBm1+lh"FQ$f,1fGCGmrKI
EH$3pV[6UABaK5X6h)Q3J9IARaD-BH1rL88&6M'"P%V5DZea%0Qc(+G+a[`qa5"N
`$M-S%bq@8pqTlFkZl`%Y3BT'4VhlmJ9lMF'9rNlIL[rbbS'!XHKfchF2BfSLJ*r
JHR1[dl-1rlBJ15K6&h"!akKNCJ%5a&TmP`)APKihXL&lJpkRG[rBGbpCkeFEfDK
T)4HR-T9@V4@#,#THf`CN'1Vc8k#-PQR'-'!fYmK6Y32BM$Za*9HIR&[iFUM+%Hq
Ear+"JmF'E*LKp1c8p!#kBRHHJS1r)5P"fXb@q@T&*DchK6JeI)FP[ad0p9`i)Xc
XZM1A0,JqS(,JKM$"ZL@,H10ck,Hj#N[$M-M9Km)PA*+T3HJr868eYU62Zfq0i,S
$4aRr)FS-`E[eH)q,E4*3&BN!qM$9%[j)3ChrGpPYKr(0RGq%Vk)4mpS",M!j-#B
0U6C9Pm)`&qY,rI'`"P!V1bFb%PRcT0E!)@PCM#ZN8j3J4-!RL$TD["'@)*I9fcP
SN4'8L`%Cm)YTB4CSlaDaV'b6'A,I*iMfc&D@8+4i9[bAdXSCA4#iM2qIaUa[J8d
12ER&1dGTc%l34reED3"@A10HBa`aNZSq"rl%$TZXLqbe2f6DR@LB`XSMl!@m"Sr
M4`6VTA[2kUaDSbCc,QUY'*i'--lFJka4'`T%(kIBMCV0Ei4Rh4TjCkT6%I4Z-5`
XBZNfMq#FRV658hB86im"8,)pMk6R`Lcf3jS(%#8k'NLJRS8`LhJ1TSlpY#32h)U
e%6Bi)2(H@6ZYQS+NHbf(L8%Gp6U'8A,Y`be#$PSK%J&Qmf&qBa3+)b4H,S'MP2a
XEqiSk&')RX2ZiK9G*r2LN!!ar"1KEmG,K"UaXFhaQ65%1FhN+TkI@LGJAfQ93kq
*!#@Ma51Z1RBRC+4IDd(lhe@LkBR*k)*0B)'lhF5!(Bce"A&5&`bZ+EI5fB1ql@P
B,K"ACIEp`E8RXAq',(T"j3#GIIjlQ"R-V-CR6VY@m-mR82+-NX4-Bd3caQ!Z(0j
,A'VTAmSm%3U(qDm13id306dr0#)A34f+-P*f1Mh&16@)VEJm(Z1L,&,6YBPPeUI
k0*ABrrP$S(CHSD9%`,IPP8,LjYdS-+GTFkAcMmEX,iVpAm0464jSJeZ3!('[m"G
B%kAmB"K9q3h"l2LMG&NLP(RmC(*NR4&5hdr9%Zh2(#D89q`%Sbkdb`2MUd`J%E@
[6JA$['dXr2qb2M1((K+U6A"#b1"``[C4X+aHkLe[Jb"X$iFMAY1A$[YTkipH,FE
Be%@!HX41HRLp0D2(UhiG2rFEJHBS+!a![-*LRIUp!p1qBYbr`*[T'hkj8G%"l-%
@YCKT#rcc#B569e@HMiFUhcU2`dEd'!!JX3Be@llbl1bjc(rFlMN-FD%Fmj9r#CC
`C*Q1%Fil8$4-dPdVX6dXr0"Sl-qi"TUj8L[cM&YUeqT)0hT@0Ea*fLil#Q4r*mH
F(K%,9E3Ic(EU$C,h,%S[*TQfHQDf%XBN`5(h`Mqhcf@rla'h!Pa)UrTe)rSX4L3
"+-*,6JeG%e",LGMb3heHj(lk-)X(J*-IK)c$c`fep$er5q,9d8!BbGrMdeN+Hi3
NQXK+MVHIb*B@4J,mNGph49r,Z5DK1rS'BiXaJ0hGQ4-Y#jE8&)0@bqdqYQbleHI
$hP,"lGbR'&6#j3!5J9pYX0-2jVXSQH2mF#hI'!G+QKk&&)KpYDJ)DKkNUr+A9[J
ZQk5VF#U&L1p8Cf[Pm3l1[NH#qDB4BL3#paVXe)f&ShrpX,)TBXpm-a(HM-98bXA
hk[GlRfp%pF@e#pVQMH#(@Rr1H-90dlrfYb9jKejeQkcd#m(rN!!T&#N'Rr&l1Z4
Zk,bPqC6R[9NYJaIYAcShk(emk2QhhRE(ZIkN@@QjJU+1FZSL5%ra@EpG2'9R&`5
Z%30P)kEB3+Yp#9l#DV*)*Qd-9R-j2NlFE9TBq[#r8&%P*"`ID0l8$VSFIi'NRd@
S-a%RCQ'RRMbYKXdhSd@m%BD'*lBVAYh14")m-e`iVefqC,D"%")kP(HrP$kee"B
94&b*m0l0#`pZPVa025#h("B'))D%$h"!3m[XHRD[eU[%j`G95[U1&G(1jfke"fj
#6lYM0iR0NIk*0+b,JNf11!RV[[AN'Sk,8,RceU)l6HqpRTI1F#)bbI!%lRZ"X-j
hGiRR-`,&hcm"3GGSC0khbU4M,f,lNQDdmmkV5$-BZ*LM0Z6QUaiU&$Cj-H,36Ur
1&GZIPUTP)Hj'ib*%GiDHi`1hKKMESYU65p-(TcLbcaJY"H4U%4AAHC[*iG3Ri3i
bA-UMDkZTGT@$M#Sdcp`5l"@NV(+2b&+dHIh`rM**N!$LpD1pGNp@53pl5L[*SAK
%'rm[V521EK#R[VAJ9`i5h'j2B[c6$Jb@bf*QDm,R29NS5&GQ[FVi'K!!028Fr(-
ijH-5F5hDSV,&E&EpTETbV)D'"bTlq09G80bR!60(CDL2Z#ZQ[SY9ApmcG9NN#pr
C&,*93!A1VH2,JLKrSQXaAI$C`Pmc[1-h$'LGJ#2IH@hkQFA"!miBf4PLSG*%)4[
i)UXG6l"6AN%Dd%6b&8l[f5ff*V@f-MK8pXY28f+9m2&MNiTA+Gd'[$DN@RPl*Y!
6GN3G&Apk3E02KQP'L%Hr1QmBViXdp"#Z5(QP-qJaa),GPXqf-#VA344hdZ,q&Bj
l33@TBG5T',ATNV9$,3iPrX,d")c6R$JG18+miIZedZHL1Gcm-`[6([p6XD9K8B!
P!#NG#hj-rDj$[mK+@5[qk!FNAq9PUZ@3!2LIil%ZeYrA"R0aRdNdLqB,@#`#r$1
K4E2J&F`RRF,YR&,@pi"H'dh)hfk*)r3+!5`ZBjlT[Xe,'XX6Re2qCjF6fYQXXG1
Nda"-[DkUT3%(LbMY82Jmj586pVG*j-DaTYPiFEFb-(S@*V1H%(TCfeNplkK#8h9
2GSYX`%Q'Y[Uq2h9X(cQHT"('%jBB5X6[&aj9`BV95BM-p$*-JC@Jaa9k$2(*E@K
NJ&KR1TblEK,1a4R!b#p98f[620@2hGBSM,bF$(,(L-QpITEQk)*21PSRTra%Y`&
p&@#8RjIePER0YHUVd%i8P0,kMcIfG4H@iJ1-[(G'eIKR19j6NR&IMYiUa40BR,q
rjlT6E9'&S2hTJ,p"`G$Q3f#(mZ6e9Kb!RKY6!A@IR,P+Rje#UY*r+%PprA95l%c
3*VI-RMXm$ZTM4EM5&H4KZ#'Mk(re!Aa,8"(@p5cd8dEGLq-[k"KJ+5lC[R000R9
3@ID(K11CZ---h@ikB8ULIbBY!KkAp3398kad19!``GX,D#hD4h4CXSR[!fbeU$H
hVb"6`,jrG2!9B0XaGMIe&,DXa`Gj5YjJrpe-[LJ0j`'r-jHC8D&5E"R#*,1%'Mm
8Fh')lHXi"MqBi"kTkPZqVpkH#jJbZhZU(NRJEp+rrG0iG@JR'!6BL1D#ajP-KTA
5i*!!PNee+PeLQ[pr9#6VKHkbEeF0HFV)6&F#5R5h1LZq1XX+r[a"0U+eJ63&(B"
GdBVb8b2N$SjJ%J46ScYGciE@)Ai2FJ%A23QKaB%pdX+JC'5#l!RX+T1!HJ(q`f%
J3$3YfcD(XV``T8a!,&"CkMmfJm8b,#lZ"k!j`3c%GBFh@h8,q@#L919)Q0@$*q1
H,D0pr289-Tk#i*V3P'!mB-G%GbDLSU[l(-1G1UUi0-R9iF,)j3E9!Zk'[#kf$"*
Y*TFCNHGQrR$5i+pLMdJ)TqlQkLZ9[(h%Kpi6jadT,SS1J0`6N[*")IU-#,Fa0DN
pdha39Nk$q8JdZX'))1rS4AKme1VlG1QemE,TB#$UX*)T@)UKEC0E,,3ie1"aAdH
f-c,Z&U9K@(I'Zb%K%8"Lh)Re3aTkbNTG463"lQIPjJaCK,IZ4VM[ie1JDV"h(!!
F*)6K@)$iKKcmZQ3PkZS[SKq#8UU[*q1EI16P5@jD()D"9'C@B`KV*&C+RJDB@pX
'Ga5R)B'cp)@Kl54`l(X@,`1-VU(B@@DMijGXI)YdT+8kbpMH[LBlH*25$J8B+iU
YH2h,cK+jC%K1"AdefdG1H-Mc"5,JH9bj$MRR)jBfB3[KZLLHHG1-5Y!HS&dXV@E
bX`C-5V19dcL+lMaS--ZCcS9+-r'EbT)THlNe4l&A!54"Fb82mTXJCM0Ta,6HhQL
*[q+VA8,d0j5+iE)P,e1)Npl#IR59A+N#&j,M0I!L5P8K@LfrDciB9'Er'%S!0Bj
5C6@!KlGQfG86Qce5l*,@BTPiGDPp'm`4cZT[5-#c`D*L2q-`cIibJ`B[m@"!p-e
J161l5PCTf[K-cIVMhr@2T6YN#6`PU*1"mC!!ikS,4Z(ipqPFFT(XDSjbMe"ES%F
hrcl5EIP**JD+RYQSZ+pmFUh!&r[UMjEHHiG&SN%9K0dC$PLmdBVS1+`N[0*)SdJ
*[E`Z1%f*F02iEBj2fm-dfZ+0S3!SNha'+`jf1M#9313P2pRaa1e-hChqGEcfXLm
il&@L"EJ`"`MJhk5ci+`)T%BBh29"p!Dil4pVY0!UD),UY9Mfe&8m3,+BQhRX)`4
Q(C1pFU0l,KR"*LI5hjGc53KDa6NQ0#5$[j,PjEkQhYik8Vcc`aMkF4R@rY6eG8b
X*ckb-!*H49AefQV1KIQUA#(Q2aPLPfIXEiSSQ$JmDjKAdY'&48km`Q,NJ#3mL!@
#fJ*K&M("2ArT6,T*c42UpSHfVahib@#HK'Zr&)Sa4'Z-dcB-hJSThceZa5Y&#e(
1#b!D$Z!BmlTR-$&&J$NAlQ'KZ@0VPd2Z-QAmdf)AdIZf&@RHiNFmG6RQ1fe5"rV
HRFkmd5PX91J0JXECCClGD)BfAYJUKE9)rFJQNDV0Nqq(Q(b3!&fHY"0)kDla%63
rY+Xeaa5RViDjq%Sk!UKqFXZXamcE!+DQ1l"C$RZ4B@*-Y!%D5@#r*`c3dUar8BN
maX[Vkd3LX26mT#(FFiIhMV%l5Ub+&h*1'R50c6edHeS'Up'G2eR+,Kf)0em*N!#
$QHB,!BZVUZ+ZLJG246Ap%AR&QAVbEeVFVJ+hMmZVRjhi[l0C%LNGc81KPXBq"Lm
2&aKh#0`cJ@kLV2HH&*%3`"lY3QhG061[1GIcA$r'kXETpi[fh"J5VS9SA-9)kYD
3!*lBiSQ+8(YBLDacd4"+")L6QX-CVZjp$hNZd*C-NT*M9C3(FVC[ACTFL(bL6D@
#HZTBk%TbP(EP3mTl)+QX1iC"+1hB"f,9TR4)'-Zk!ef%ZE%q-BABEpHqc5!9!E&
pa&JP$a9fD8jG1bhXV0Jr6hZR4c*-'N31X%i6ZeqSQBhj,*3Bm00YLh(XNRcD"SM
Pa"-1G"'ZBT&p&Sa%F%P#F35YeDirLC[kJ`"K"5!@lM5XAdj89VF4XN+cFB"+9Ul
ea3cGjam[%LP(080HZ"b`ia2bd,5#*NkdkL9Q,hH,+F&3AjJm9ECDE!Mjr#IaZd%
"$T!!p2afm6*LkJVUPlfYl3El+madC,+,dKLHeUJ2Hb1'jK2HDfJ#45TkX8,qakX
Rl9`0mHb,*NX96%"'mNVTL%9[hV5M,+@HE6H,I[K[2KYQE$q[LkC[HI-'63,S*5V
fPEVcT-#ZcN!5*J!'bN40C-Ib!+TbG[CR6-Ah`JGH-Lh%+(6QlH1!m4#"FGTc%j[
CUkbb'1r6Hmd[Pimjmj6DrU)d@J+&QCC(ibViKQGGR63b)PYlBNH"B[f90p0J@DA
ZDaq-EL-@8aGXJ3Mh4&baLEMa+h`-"q#1PD@+"[A)!@)E&8"NSV,@MQ&$#plb`re
#3Zh*qkVp(SSS8%JL0E(6JNGSq!AJFaI4(PadqkjL246MHC`UVMYYPk@)B"ZPpPS
pCT4!YK8VdG,`US@rV$a%Le6Kc3(BZm$ZqV1FRA)"pXqVP#S#JT*3F,"U-9(q@B8
Vl""Uq*l3m[U#a8P+Skl$,dRU"efEm#D-bVR$f#R#+XM1F1qaB2#aY0cA5MmQKkk
4-9@&0*FA)ha031AHYNTE8QD!G1lpX8$DkpHFBrQP3#3,L0GI5*T`V&VcTUG485K
cKB+J5'SRQE3*l'+DK-acKP,,fhE([k-h8XJ2P&-r'8X40RSl82%E8ri#LZ959[P
U#bZRbGYV(N1H*Rc8aa+,)DajE!XDU(11!@06H%UCZKVMbLj@XZAj,H[AkXemBM2
FBIB1YPh,!mRf"aN&DX"CRDhf6MB+SkD3!,hlHa"bVQ#E)A8GUUER&[-Fhr5%RJ%
24S##U50kb4BF8!6@ZR-0IVX6*qQ9dQ%5&XlH"m&f-([LU8mie5hjahIf)%X[-G2
1X)Q0HZF$`dK92!bU,(!*QpG6E[0Ujh916mk0NAl5'V#h&6Vp*+1e*[C6cle1-9S
aP[B-FQNh(UcRkeh$5969l"S@H3'A-hX8,@`CQq41T6*8'8R%8ehD$jSR+alM&c3
2Z!Fq8YDbKQpM)KJE6A4i9i$NjGVFLbM$-h5J$bKmSXbcm(G``'B"ZiZ[NP"cM6M
YfS,RqJ(c#UiqYZMBkN6%ZE%3Dm@`!p$bAS"AFJANR8EN3(KVmZU6!!IHqc4aM!H
C0ijTPL&`V&5(,+'GAH#,`b6!iG)L)@N#LqTiN!!mc@k5&*&R!dM@AhDY3R!2C$5
pS,`Y&SA)eal6a"AHV-PQJ-["mekXf#!`UpKDS%%'P#C1U[`M6Uh!lDKMf#3UZ0J
a+S!,5If+ap'hkTS%%S3A9cB0eRbIbYl(`Rj8G6@JZem5E6bR5&b)$mm)VDc3MBi
-`fYUk,9eb!VSb23ai#[$QC)pTqB"N[R3IV!$b1-FEPFA%H&VG-e[pbPE&XkY5LU
ira(phh&B&j9i4MlBK2$j`DU9ZTZA`)1*!(IQC8q5,Z2DG3$YQUE4-GLk9G,6Tfh
Z[BQU*'Qh,2Y+9k0h5F@r#hhA908(d-NZX"U!N!$Ba52(cb&[Q5fEd+iRX"-Bd'8
!E8+Jj@325@Z1i3ij)8[kY)#!FKcU@LjP'#iQL8bLQ89ImcVrQ,b*Jf*Fe(6#4M-
YqhIS(%FMVViihBD!-@C5215#!DllEKJCic8'JmV`Zrp*06+f$k,0mT@)*KcR5e-
lb#SFChl&G$@T8`!JfT`9G0`RB9A%X5%VG-p))LG4CEQ('MQ8"Z"f8J@f!$l*83S
mf#NC1[d$[XbFC!r@c'c,586@GFASk@4NRK90Z(b&%emE+TqNEQ'bVbpQq(U5RJr
8e2-ENMa!m&GaZF1,"4%TDYG+DjkQAa@"G,0M%`C()48aJ+[@d*3rjJ`BX@R"JX4
GAX4a@ahML+U1HX@k'DC3Grd#X5'3!'P#!963[X+m33p[Ml1&GmfH!#-lUE1)PGS
1ZB1&"Geh!KmUZVYpC)"mBiL!rB$+8Z`#jZ"8-p*-GR44jQ*X$[QZ4#G#re-'+@@
QPACh-U,p)RU#"@TB43*Z'A(#M3EU[Z3HSh+S3-"&3&HR&iU@rHpqV-&*T)6dqP4
5%'&KVY'r!![A!b**Ar8MJq)R50fhAI(!c"$@"M#CYVC%"pf3!(1qQQR++M+JUM)
$LrjX4@re*Xr4UM!#LL`dVQHJC9'K8&)0J)b%T36I,)ZFL&*Xfa-,Qq%F#AeXapj
[XK8M%23aN!"+bRq8KH!LJ`+PeBmEMZZqNM8V8m-MKHe+@[1le4X1Kj+50fJ&rkQ
lrS$"aRm8hM8$crq86,4%fAG'E)HGEk"`0VCU4EDDU5-GaJ2BHV54Hrk*0"[)5!f
Z3A0Icp+22hMKQD!4C'QCe[LKSQEQcAl"SUNAMchR90`d6HYeIX1Z[Fr&2*AHTIJ
bpi63!V%cK5qHYT%%")IH,DY`[p`J$Zpq2I*4aIb0JQq20Ff-h-dR5m2K@*SPJNK
$0Y0F-09@j9ASfG#fPD[aj9pe4)9"L3T!)4J`E3rmCE)+8(,33F3IrR#BAmed(ml
-$TF"Kl#eeK0RiN"86CNlG[&TqT29!`bE4%hGqG%dFQJ5Ym),qkPNHiSq$$!UZA,
1IJ'CPGLPq9'aD9PpXVq[62Qk6jRS,Qf8-bYj09&b4b#IhAES)il(A#ZUl1STr5D
ERLf-4r[BLQlRekM0ek&Tf#4l*bF[eaQ4*l-V%TrjY*@1JHAVl%6`18c'SGDHkEq
*3IXSEB%MX2$qf)UljhYCLh`*U3IKaIHmejrB)[)T%#ae1UbcA'Bm0aYT(Xfp4'*
k%LdPEDLTa0F4,PSaNNeM"(V(2Jmr8,Z[0VUXfmL@QJQKT3ASh9"I(L`MTBfHJXa
lCYrB`![I*Ud,hlY%0Er5K-pLP5H(iX(2a-!+bP[jp,%JTkVFKfYJ`VRXHS6U3$Z
Cf@XFI)c%&dbc1K1$Ml)k)ab*Aaj*CM$c'(UMkMT3-Y!AP3'1"LF#$`h0cGk`rFR
L"0&$9N#&8mSYB5UC5MVM5H!G)'KApki$p"qR)KhUm@bh3#03[D*Z3YM'`m#+qfl
+T&ZTJBlPMERmp@pGe&1)+qmc6!jKQFMd8UIKVETNlr!DN5,l9PDNJ12abcrYVDG
E+8AC@NV9MSl9P"r[5AF%B!hQLirK"YDlC8$c!2T*JV[1kR!dd[+2Z8SIm$8h%j2
jpIamem1pK9*0mL5K#&i3,hImbmqC$3(J+2dm1m-cUUCAF(&P-[ECSX'%0!f$KGd
YiH2SaiZ!'p`0f4G1cDpCS,$ESP3Q4e2++mp!$X3dd$dHKGjkCi54"2J-5Ed9QkR
d$,VLCK[-l'3hr#GVdjM@,3!6"#iJ'UM*ITYBi[UI1TiE,5jK)phbJqSVJI6G5lP
iF+f5lF2ZBKXS#dVYd-Ni4M*qbEE$+[M$ZHC&)@0Ga[B1P$C!)Ul"b2'rDIA60q6
V"iXYc0$lSJkiSc)+6QF[03J$2)b'RHY&SF6A,GrUA#Gc#2kmi4Th!TM(!8(hhp$
0&VqHrr-4*4ZlMmi38JGj9PFM'kIf5`e,ehQIe8Kk6`GF(96520a#r*`U,p-Q6!-
V-H8-f@612pp,Nl+pPUJR58Fmdk)E60KGR6hVD3)KcJr%DMQP5Z"JEe[qE"C2EdL
&eM*#pp3@fa"2SNr*20Dd!e'FdAlRVeX0**)R6NF@G%l4(MJ#qibrq!BJAi0L%h,
%#"M05ZC`FTTq2!'Fq*(r,BYfi%Pr9TVF"L"c,!q)PiX!)jm9C*VGeH6a[CqL'5l
ELV`!Z3M&!rF18R9@4`V-0L15KDlk`jcEM[`9,C`B6*T9Vd*$mh3k,NG0T$aCUJS
4dd(rrA,aj3Z5h`ma9Ji8V-B9G$TB+Tq(85%RE[F23A1j"2*$fme`a!+Bm2LMcIi
c)-HdI[$#R-E'MPPQeDd*Z*@@-4HJ%r-4,cf1E2,Be%ljR1mVj!!*[Sa%mP23Bj+
mm-HMijikecRmSGI8!G8)CNh`L,F'3F!h06&Jc9@q0j&F3UMF318$BZ(Fi[U8r$@
k#[`h@%T4$i`e!IeIGfJ*h5T0P63miJdJqF*Mej*@Mb8,+Ej3GQUbCQQq1Y8!'k+
VaJJJXCbY%a[bRf!18bl`a%ddI26YeESlK!89h)+b-Jf-AVh!e'J-mV(bN!""X`(
%6@D$@E2H+H(9q9*)4!1Fa@CLf%Z-5NT,6$VEmAf@,X,Q(T1(a-EdD)mbe+0C(kT
0crFP+lfPiVLY-'MhVRl0G,j#5'P&`TkKBdV3'$@SHJ&5I42QVe)UT"VmrP+U+!K
ph1XPE3MT'BaG[VDQb80ihpC`[*JFLH"YZ2#'I+Dr"Hq#R1$B+A50&IZe"V5RdZP
"`U2%ZIjk9FPMZlXhZ4)M9A[dBV0[Jj'plC-cJU@eK@%!!YZ,RM@HDXem4L@BlBr
VMV[Efa-BCVKLH"$6#""9Y&l#`[S@I$k4GCcRX-XFBY8#QHK-DK$-`'r1'qLKi0J
IUpp'YZh&&aJ#[X-N[C1VN!!VY,S!jP8prfdQ&9m-S1[K8cC@Mh*FPkIPk[#e+-+
aVXP#A42X*Pa)V54MVj!!Hadd(G5S2BqU'FmRrLBi2dYQMF2SH6$lLB5f#j192J+
QbX*MI"mMQcHL08[RfmqVD&0$Sr4ji6`3Sj!!SUdE-QU05`p*Y-rP$h$TY5"Iqdc
EXjV1,$K4lSaqi3ZqjK*CPcbm'Y"@,0Ah,Ffe88r3!`l6m6TiIjZRFj!!f`FJQ"c
(jU%`UFL'jISC,CRa'U`5%3jf-03ZLDi%bjY8hk9&9@a`NPVlAHX$PUbN#Pm0lb8
G1)i0@9cZ3VAFU`Kd%`p,jID9hIh0S3m6+5DbdR)C*Dr*(Ak"Y3pRpDqD5f[X1!9
!Q%3m0%@RN[BHePSUM@Y55$pfP*eQhpP5e'RGKPQ`E2m!*MFm([$URY-CdkR&Y[$
QVe*[A[S$!0empJ#2f$3MANlI1CYY#cdma$j#h+"Rdm@El#C@cJc"a8jG6rY5Z@5
'-@c`rHdHY2qGq!RB*)Q()BPP54BmVJAYRkKSXZFFC4XTSM19#KTRD$I0Np0AeCQ
h0-3%2b&*6!EAdYp-R'F*"cl#0M4*+$L#)NSqBV!@,aZFaZT@4LKB+f!PM0BjTjL
S$[KIC4IQr#iGIa83P2IcG)6Ze-0VH#R2jUUhSiQqGPJc0jCGIlQMh,*9$jFi%HI
*PQFF@hAAA[fhFi,NmT[5D$m+baq(j&m#MQjSrX-V"5H00Al%"8%)dVN-%"T#p'k
!9Ni0UDq[%SCMc9Fc2X(B'TpZK99E+H(i@XJ&!fb,B*l8I!VKTm$((lqk!ld09YS
PpF-EZj@iAP,Y@IPAR)C#'RHYDb(&VLE%SGmBR(qje)mlF`jL"[ik6bpN"`mdZYI
h)1BSf"1@ej6U%pH#Z6MpBYj*A'6l5DC6mcQ%+(,KMB4&k,X'VS22)4UbcYl@+D1
U"m,+Z8RTQ"r%M1ka8M3+`J%X2NVVIXa6GcC`*18a'Abe`NIRa2GQ"lI*iQlRKYi
'NcdhN!#UiheCiaq1KmHSmHCpV(GPaa![S+4p1)+0)8%*K3`Y2jSRA'#6N@JI#@l
Pi$N&$RFcjEcHCL-')ekiEp!'kFRL)$83URAhk!$h-0I*TGlS6`J6dr)N9JqNK@f
QbPXp$'XTEarAY8L8hB3`lcFT%kE"(BApq`4)YQF2fU&XIFTdh8a8hf$m(Y4ZQ69
edL$#5NB"4q`p0EE36lf,i2kHf+jmLVf2afLlB`Qc"A@A1L,bbq$08"D*%URE#+[
'X6YZ'h36qSMD"#[-JLjTma36'6mFm,F[TI"%KIY5JB6YYIGY06,+I!LrmS26"@M
kiZrb`aCZ5b883k%2RC[D11k#`6V)F2'D!14jK2!JrG4#)&KJ4A#*($'T$4R`ZRV
T@QlMX8`+8C0ZhHSjk+F$Cp6(N!!R3UbUE6pkkR6pJNb@DUY8@JbA"kBFe0NXIXT
Hfa4cmJke`d@IHJ&6+i9YQTT1Hb"63M#QD)3`mQ)0jMT,QX"&d#I2B5@,@M9#U@a
33r`!!P%I'iYeXKfH`NE2Z4`Bi-9J$`%IB"f%IJl!)C39VN+fX5RF%Vc2feR4'E4
`L3kkcZ"NLf8AcCl[lI-mQ)#)2'3c0[aelipQT(j(I(ec!'2Q*,568NjK)-XRA@H
&fPPVC(a+[!Y8@1Fa@9-HhPDei5p)qjF-&S4k43c@-T!!6YYV@#hZ(a#3!!SfD)b
CA%+,-JCqKFIK14)l3BZ6%N%0JD`2"P8DB-#cZN-!VKefi#dLNGERp(PHK4-!m%F
XcZ3)fQAj%9'6imXlA9cFa$e3VF'R9-K%"*EkcUpZ,q+T1KEIaCk)deL#-*PAm*S
B6(LIp,$$US@3!"i4j3,ie[-U9Nq)p,m3+4aRH'9$-VK4b8IJFR29fAkD8%0+lce
9&JAB-`DVjHpkY4A)r03p#f5EGA'P#eqPl[[@G0j6VhKHRq%Vr66N$MLq#*!!beq
V$KdXALd&-q,kI#`&KSQIic9&[F8#02LDR9pD0Dii$&ak%6N2AAKK,ErUjeLq'*,
0i"@T8AUP1Q-(`-iZBI2[pH8)D3qNCPR1G"Np-Kq4ARMN*YRbechk@TSrI6YJp#C
UJ#8*aQk)RlRb@fhD%iaHfV!4"d,3@LRJMe`+E&VjP!KHF@4EU#f0e`464[P%R`6
mQ6@mp'GY#[*@ZZEIqEJ9ZJDU[fjFa!JlG1eR8Y29kA1cY3mqFCpV(UjKkl2lj%L
4i%QEQ@,95kJc*HM)p*VJE)B#-'ab,im"RRVpIVIV'1jfh2flj)[[5-jpNr-Zel%
)VCVae8rj@6cj$Yj*(VKQ4R-RDDMLFEj$-f$lTl-d)UYl#L9YL$Pd&-H+C4&R&f-
Ue0)VU-"A1Ne6RU"P9+D-ZUB%U0XFkQZi-T2UAL1mV`bG2b5)m!eXk9aqXRfT"qT
XG1P%4ce8N!$H"JU'I65FJ)#'8Zi8cUrP4!Fl,i6h63l5VcC4Bp'U+URD@8SA3L!
PBMD!p029U,,q1U&P`*UNU*(j&-I#TP1UXejZ)8dL!c[9&"`!%F[0cdSVUk&hZG&
hj+lLED,9"mE*(3#b0M0bi#Ui&BXN*Z3XrK,CQFB2qUC*f"FLLr1ZC48TFc*BC(R
"398f-%iLHqU)S)JMT"a2MY!U9FUPeNY1[&K"dGl%MHpqZHdR3df`$8)Z-J[dHA"
kc98T-[-!Rh%,GB'T5iBiD(%YI-EZlCBm`LH2KX3,e$VCLL4Mr`lP0J#-DR+6REK
")*@iQi2dG26bV%p*Z*aP'4UdISI9BGmf'UiR&UdErqZ&#$*DL4`9!i`kIGI&)R!
0U,%F"#mi$QiQKE[h4hqkh80JU1!F`GY&AbZ#RP!'`YX6*&+hi-3&peRic3E4#hf
cU)qDC%MMJ83G`iChpaFr)fb3!%fiFcE'VJJZ#Mhe1Dqb--(Tp&&6dRhjV!LZ')J
P#e1%0)R$,dX@Eep'U9,5iK4*PZHl[EHT*RSD4`JlPc*(Z!FA2@8Z`Y5p&Pdfk1G
3*Kk5DFEdSMhcdZ[P1bhX8l2GNXV'+!EE[`e$LQ$,0*1aVKlPH"%MI&fH*&*UrE+
$,k+6A(%M'ca2JF0q%#*KNHPY9T@62AY"S[ICJb9VjUF"S8KmSM!J"&j"k4PAG`1
%aEajb1mIHTGi0p6GCPCq#Yq*jR9hJJk"F3Q65,!pFibaX"2J"d*RDE("*LF-E!J
PZMJ@*X6cVpYqU+SKZ6q8p1ZKk6LmR#Q'k%+($NV(Q,&[6TX-AND"&q@Di@PiZfr
%)$iabYA*-`!4AY#p*59LcP@a*Ua81rRL,2S+,dlND[TFSC*'H)@F`CrM@")RS6j
V6!ZXKAB'6aE[0!X!-2%$Ef`V*1R6mce'K&,I@HfSb`*p@-+1,eb&KMVVaZ5G,6a
f!$D3!1JVCa0ZbjmkBT8Ak*rM+@T'(%&k2&*MVXJJ"TZrf-&qX(4m+`VbY@FJcHi
SqjXPlAi)pd5UJf-&T'S&I%BfD%ck-r+PQp3r@J(LFG8BJCDc)0m#V(JLdU(kjd3
4'"9Mj9kVZMNQ0CP$e!+l915MUVhbiSfRdF+4bJZ(-6@pp(!)aNJU2PRaf3(Q4Pj
h#rSa!bb$pKT(rZ`9,l)K&dXm(S[J386p`d6T2bHUfmN'(LL-2'mDd&$p0M"mTTC
9*B#VF$T')I[rPMX6EJSCKIKc"P#c2h'UVB,pZ#Qe'kRJ2d0S)M&NSF@$k!pbG$X
9GGFF*rNcHrI[NmM2DF*V&GUMT3i)0IKaNhEBJrFf*EY($kI(9R'Q#-[R5)0FX-`
H1TYq)LA$f"p"SD3)M`3TP!kG#LNdDd"`@CG,J*NTMIMr0HECZmfSCI!!3XGY@a`
T#D4hjlpDiPQ5UDS9BfADQ2GLdYH*8l9F-X+3!-0i0cC%*UQkS&8,2UhDbd!Z(T-
Vjlf$@CkN8lmLeYhHe0("ddK$i5PD2*ljeRFNf@*mB-DTATm(N!!$`PEfbcH9[,V
T@U')K@50'EHG6#I3fq*A(DeJ6dEF"6J"-fA!b)&53[I%2iF*H3e(6N$daN&QVF(
ZPA4C2(CHLe2@2*!!'ZCkFjKjI5hSL9plY3CbhM%1cE*GmeS$Il%p(C(LR(1e&9D
+6E,eZad&HEqjY1RdEQ1mmU#N`)*mUr(>3@GaC3BeYP%I5$'ISZq!#X@Ym0lJQ
f)#["ek2*eYMVm&4!ijiBRlddP2Yh9c'BfjqieD$j)P2clM&`c(l`pjTakbHLljh
+d@cQphJh1h64K,k*Vhh%R@#!i`ZqLqDM5*h(NlqXG!ElHThm[$5G3HqJEKc@T5'
(3[$HbJ63"T[Ua(fFP&5`B3,0&Y"b5H@6f"MbD9F5k&(YHE5FBTA+&(Gp0KXZ%-a
NX&,5&ANSYh"6UcVUHH3q!LS$GfhM-F,S$PX-R"468@9derFQr#0jmlM"6cf`[rB
VJYl(Y)!Pllj%XXE#JpQaaF1m[LZ#5k-&4+&*DRcD+6V`Q&NpM64V(8*rN!#qeFM
Y)M(68MeYR2kj!R!MIjP!&CFYCcQ$j9KU$ILp+9f`H4P8!p!T-,4502Aap@@9Ujm
aXGQ`S"fZ`PmiDAaS9pcQkr-Mc9ENJIIZpSr%S*Nk8VF"(K+mPqA)CQ+BaVBA'Vd
r&XhTpGUG$6lR80)%SfKUeMUVE#m`[F3[N5$Rjf88l)CVi2GTMm+k,biZR&pCM8C
S[3VR#D&kb-!&T)QANDBZKihGpQ+&+FEU(`1'Cck+&#Rfl"fk52H"8)fARYhK,ia
-@@*,b0+1CH&qiXU!MFlFH1UJbihN1+Vb3Qh+Uce*6V&TpVbq&N!!A8$YD+VDd&1
#X2F#krFF$Z9T[$Q'F6[L*c[Mir(KIpla-)j1*Be[a`fV1N)YG3XJmhie!GU%jGN
bG-hViG0$p6&mp2NY,rj1*iSk*B2$Z3!QE+a2XK&%8'4B!pkf)NP100NX#+LDqbD
GBXXQ0,qaE9h*c#0['Bf"%RS6P1A14e80`DL6&JhLr5UqVK+153Rj'jF4Q5pN3[b
MDda[r(bU8UNE&q3iG2#Z&U6`L&"cUj6mM$JSCCUZ,KjfXNYqBHb3!#$`j-*K5ZT
d#(KRa(3'*#!VT![2J,X'j1@a1i$bP!Q1@9fJRJDB#34Gj*TcIp`Zqk'3!,33jm"
dlpM)GRii((bPSBT4"haD)Mf2F5FM2)kD$6V-,83*T0!YE%Ic[$YB%!,5Y*G3#KI
@FMl%Qc,BGl"cj'"b+KaC,0q9hEf"-INL@FcGkJk$c)h#Z501reaHlHpCTdk&fAJ
MPaCk29Kl5J#5XA!@QI,e8pq4,Lp(21e'KU#dTX1X0qkIbfd1Zqe+Jdp8@ab9RYA
&2DTE[PhlHhj$jGMYaDAbCmD%'9')T4r8l'(-elGiE$CJ*TPie0X)THCC5@8+()K
HPJA*!IpaRZp#1kQS5c[#J"kFJI(BfqbN%%rU"@N4ib$'VLcJ#C*3l*hK$pV%04,
2I@#STXreBp[U4a8JZXBjk+*6UB3,6Yl*TCKA42302!'`B)Z%hE%d!a06#Sa$pfX
9fGKYQA`%'%3IJ#4'Y(,dlX)DNU2b,'jk'AXqG60ediKB2Jl!1Dk5dF14DPe$,k5
9L2DB!LHX(,AbCTU2ip3BY01iX`"#[B4Zi"#IGaeY,-A3'XaTVBrL8RckIQ-%+A)
B[CpP0BY*E[$2[MNAMYD%Xq0Jfc-3DJ(H6Fbrqe,`1q#@%$hd0H`4G%ilmbm4qRF
McmpI6ij*,Y`eTPbpmkM9H(&D'qUm893eGU&CQHkU@MhHR,`DP#6#[0,*Xp&h48-
VD9j,%m23QQdXe'bm"f5aH58frd#Akr*E$C)Ne$TT2fUV5L8M6XrSLZSkrS"KclK
XM6BID[LlaSS-ZcJN5'A((8Gp[qi8i#YTCribC3*3kCQh%Z"c8iNUef1'C`m4QSP
$,*THZJQdhDd0McTXc1`Vf3epqXUf-m(*kBfZT@FdQV4ahQUP,9i*(NI6!6'N1FN
AXS[,[Q-e#!-REd1Rd!9pIfNj1-a8BP4Qr3aZY#&1K,`2Dc&mf3rmQ-j#dd`cfVe
m"m8$DJPldRPBIVGP@LX*R8Lf99I*p8,Z&KAA)82EUcB3Xa-NA,(G1r15h9PqJ)D
iEbTDUTB`PA98e*!!PXCBT%`EBPB!EbrXNj,LFr#dU9-+N9#-6i([C9Zk'(fDCUB
j&fTJLDmcHDi)SjB818T&,aS)"hh1UmTME$1,`YqA18if)qZd2+hk!X9"l5q2qc%
Rp8jRl%$CT2)146(!q)phB[a)p2T@pF6Ja9`KVdX!$6J'J3RRaK5mI0%X*!)9N!!
DK+TdGT%EV52BlU40e""Bq9KBRdp1mpAl4mD*dSmIq4`EqGf8F2)L1-)0Q66Qm&E
6T[9,Cel(%f`p8'AAV6erIKaGN`T&lG*S(fH0,A4@q!#PN!3"!!""!"#hp$)"Yr3
b!3!!)CJ!!+#)!!!EJ`!4[@J!$Yf4!!!`L`#3"!m!6@pbC8CTE'9c,QeMF#jiE@`
!!'1q9%9B9%0A588"!*!2J!#3"d,"e)T#9+X$-1)'pP0RDk5a3Mcck#%,V--83D*
%ba0fV")!r6@XlQ#X*L'99p66M9@EYkLLEk@m&NhFr3L2L`3UHRPp*K[X'Z(`GhH
SV(84MYl+&Vd&,(c%M4iUq9I1drI#ahMT'k'iFQ2#*Nmm%mU%HVQ9"*(E+PQB@[A
a-ijURR5DaN0ANDMq+ZG-VRN9E5"-IU9*`2T`eq,UVH3CUCI3([DiGUC$54P20qL
6+VDZTHakbRfkACRL$&lq$(Y$,4rSBRj!2EGSCVAT2irdP![qlX!c#eVpVd5TQ*!
!b-ZQ)M8r$bmAjAYfYJ`'R@pGZ+dD1alV'5AJbXZ+3S"6rd$@EXibiMZhKX-YL`U
`C+JC'85-#-Id!G[b*MFZT13r%Q[PAGJ3RJYhj4!MpB$HNlP!S9Jri)-fNMLLE#+
q-RiKGXHh&$4h&c2*QrI-DSRq[r#Kk,dE4Z)8"NQjSjqIKqYXV@Lf8%%)89iLmp9
fc&d[LX*$@#2SeKj@hRKRhe)C)2alZ9CFf$-f9Fd'HPdc3Akem1k0R%m0YTZ*-$B
1PaM1HVZTF1"mP"cf8Uh#)LVqF$P@$ed(5P9kV1Q1!HlAE4#',LD1"ITGL1rQD1B
a#39!#R34+$5Uqb5UD9h00[`K(T6Jqjk&QX386T9e(RB1GRr3GfSZaraSKTS`0TQ
XIB5mI#IqTkFJDaY1d%hTC,-rqY6S-(V%4Ddc6Pi%LTm@$D[U,!rFb,S3YRiM1*3
(q`@X!RZ@delm54)P58q@58@%*LKr00m,D#`miAe-jBpLc[MaZNS1a5kc5bJil82
`dMYphPHFP(R!L",!NJ8*%`,9A&TbE''N+mM)fP(FU&AI3jf#iZAQ0%6k1EFRlbF
kIIJ'K1lhVFp5AY6L0-A10faN!2GaV)$P8[Aq46EdHa'V&N0fq`aNp-qNI2#6+(4
B)4*-Y[i-#&iKT@(AMX#%mkfDJUq+fcG!NaKlqr,[XT8"461K[UFU,Q##ICrYkmm
55!)p'F[`8"4U%B+K6$fp90@(ZldLV24XqJY$aiC@1JYhfPSf)$L(aABmpDmN8GX
HidI21e"-Pij(RDT"mVf@&dLMFD'S,PJIDd+f28!FRl``+-@G6VQh2j[DmI`HI+%
@p0TdfEITKEIdQ0&3LMh`,aKp0b[lqhK0-4hC(CaM"aLX#Zj(i[aIJCRer9Zj-)I
I1EeY#b0dV[TY5%Mh*+0dKJZ82I'rk6l[#Jc%h880``#4TBk%DEFR[2SmS5IITKj
D)4cAQ8R3SNpX5&m&)Z8MXB@Y-(%3T65#UCp@#`Q+5Y0'1B`Ia8[,T-!rJ%BU!f`
l92XE@6VJq98YQ88hHJq3!(aamCH1V+kmSQHmr#Rp#E*Ip#AhES$aNP8-Qi8NQUB
MUF5Ul"(b[+5KZ&VS!P2h*emd""h46hQ#L"#i[A'ZqF4Hi9-BRq0Gq5YbZJ(ATH6
"MZlTiXZYPA6&3B0AF4I3b&jh-JNVA'P4F'!$VRAK4pRSQ)&&h1*%-hCKjU9"j!V
&BH2(5k(0EE6HI2$AAUeT&92MC3j'Sd##lVpF08e@q)fM3CE`K3,@'*hL&DXQCfH
5EJM%*jZRm&J%9+riMT!!VQr`i4r5J-6P9qEKq%8IlUAEF@4I8,C3dQL1[D6+1Q@
KNcaFiV#Y2ife5F5MJLR(i4'BbU$(T6"ZF"9`SIV[Vp"4kGip-FAZIL35c+'a6&`
ImDjqZ,VQFaUX1b0i2A8-TqaH*Nc8P#`384Z3!!QA!E)U!3GS+QF#HdUj5CiPCpM
k3@aBSj!!lVUd+"aKQBQ$IP!*kkiT#L%lZ8"Kd4He(`2NUN-c-Pa)%i"Qbk4*e$8
QmY-S)-X2dqGUdRljim#6j30%2S4K4p12i)f+NK$ZaVKGQ#q'"SI1Xde(04jiFjC
81q,k,,b528l"cZf"e0(1"pEfe@3R2)PqHIc`+X`BAF'cl)BYcdP$U'FCC&`CGcI
d1"*X0b[)#5U`Ak-pEe4HbhkJJN[d2K21k2!I("PcVl2NV[6aE&R%E0DBK*!!+`B
6Gh)&0iGiJ+J,TU`SaZLM@N&ZT+6YjB5rei,'BdNY"QeAa"+1JHH@0B"dT54B)&X
*-9"aM8qD-M$al5X8"#*@q,fpfEAQE2[$NmQfF#6%,6%I-rXB`-40aH8mSRa#Pi`
5KpqZ2NT[M#HV&`eIV2&rSM*4NrB*"d`eAQ,NlF8kIhLE$F6lPf+1HrIU+[U!QEI
49kdX*jC'66rHkf(IQH!CcS!)3@Gm*5Z"SMF$f%I%N!"#+`A"9Q'cJdhY$XHH9M&
',paepjcA!T@YlpX$q4bh,11LA$,,FMV,AcR`d-1mFdMMBPDVD!D5qakmVEYVphK
MaPBrpM,+FF4KRY`f9FVIYFj++X*9&Efi6CQ&a2XX+k*e,Eq*rRl+BiU+CC'dVX(
5l"m0`P!KUHF#Z)45N6rch6$**QpDSmUIlk[*A,U"%%2dqM""2dKPIEZ(cDAHDi1
PA&(XE2pa4Fa[*r'ceblYkYi'p!TC%%T)#aE5)d6qGjPF,&4JT6M#$pZ`IpVGXpK
Z5N5U'eAG5+(+@f,G9*hr'MXebZ)C`5!E2($a([,-K28`-VH$,Vh&SLXL4iJ%hk`
Bm*-M6JNk@cRCi@!U`G+3!,qETV6+aeiEXa8q-"'D,Jl%T%A-a*!!rd'fU"IHVL3
&lA-8p!A+QNRa1Zq"SjBm$$fLGjmNlSQpflTFk$ZMaRTm'dXFjYS*4@5d%#TGkm9
(M9%+i8reM'N,8$qSJ4EFp4D#F`)4[SUbA)f"pSA[M0Q2(E(846&+UY6HkTYM*ha
A&bPV@N$dLBJT+S2P&K$%f01I*$QmRl$&F0)U*d@kM6P5&qPZe[!VemqESrh8XQ6
(Zk!iJUrI`!lXL1#jFb@MbZh9TT[R(IafRTRT,0VZ5BHJVS*9ifVLA+!"Vf$A(Ah
lMjIHML!CA2+LV,Di3(A&,X5HE0+R%3lmfTG#Q2I&e4%e5$Q&lCNI'd"DAhdNbBa
c8AGi0V!S85ZLPCA`NMi!VCN1l%IKL-bYf@J2UT35D8'RCV(J6!@05DkG@J1b"iE
2X@bZrl9NdaaN"9[FVC`2q+2GJB%f3LDUV((e5NeIa"$*r03ea!)`[ZEA0ZHrhIN
04DGmqX!lMU&MRDNpIMT,qT(HSUKf(qbIDHF58f%Ed$df9q-5med8(Q*GRTR-3Zi
*1mG*l8#1X<4ihUKUpi`mkGV9AVIXG#*Bi1qhhLhRrBJ0I3eqDZJJTq9l)KU-L
mF2r@K`EDX*3lVq!(e18fk[K&VF5$5f)c'#4)$'Y*'-Ed[ZSY$BBk*AE&BARYX4b
0-bk0BaNfpX+Tl)bAJICTdA5)EQH-KC0R6Z*bmNi,"KL*&BUjZb@AE*IfN!#laNa
rRpR$Q*-3!dMd"LYI,k14IlPpq3R!hCUj(ceQ58ab,5m5rXKX3a,%HB!UYp0aPaY
HKMlZLiLCB9"lN!!pGJ*hGVYMEp`2X-4$NN60QAR"#*kel6dJaX)Gd'8$KIH3!2!
q6Me0Ca[403kVbi@"[+i@mf,8CVE01i@DYK%HKDqr66*3TYI8h-Z%HIB&X@rhHpp
&5N`b[ecQAdPUY[QYT#PUZ9Ai)FpNiNbFYiE1(,dDaLXlk%dj3q8bh98Fi8VkQQq
Rq'U5cP"eD`P%K#c8L!bFcpQ[a2T'KQrGN!!GFL!216pEcle4d*hqLel9)fK)@R3
S@[`RYQ)VNM+d-BjRPU4TR5P%11E6p!BH)80U5-)F,64bJ%A[m[ULp-@ITfKQXr4
53Y,BYGH!E0[PLaYHGJBB!C)VKkQb$%S["4l,R**QN!!4F5qVkME5m$bY8)GHmKb
ccEE4PdK[cLFdM@"LZX5L9l0p"DZ1j3KcZ*mYjB5K4caKS!JX[9),im$+"qTqe@0
mN!$)eHhP"V9L)R%PAGHi,N)q`ahQZ5jQCMbI#NBVh,a9&QZ&1[C%f"qHKX)Di"f
V#$PHZAm%G(VmF0RND),kB$HH(P!`EfqP)!SGcCD@jCXNqIZA0##1JbHQ,GV%"a$
ER"%jlMJGRmmD+ii'A8Z!SX5fc,G*TT'D1(-dmGcJcP50-,H3!%2%LJQR$SeI,c(
8cRBcFB06UALUZXLL9X'-e-(*lY#h@E(5[fJ-Be%qEBRlp($L)`B4FDIFCZB,NUm
da99i,c,$51X$AAM3ZefDE8ZQN!!Hb8ZGi)ABfpE$Bq!%3SEf&GeTk*CS0a@rHir
,D6*&U6GH$%*eXI!dlF+LKTk%*i+*4c22)'1@XXL[lTGAJ8m'[@aq`TA(ijNcA2S
#+iA'1CFpmUEp'4Hme@Ce'mXBdceQSLIHqpp-@SdfhlipaBXk'cL1PB4UiL)FG&N
P&qHq1USX"KZAYqhm9fLD8j!!YE@P#h@5$K`3+S)1RGbFdASP2P"L0FRep0TT'p1
MC-BaTh0QPVhIIlN'JH4cE6Xa`r`XCCaNbd*0iA6&AD0@25pmE,Zm,&H+8!%*V$N
dI"*8Ri4j9++$p&F)D["i6c25dZpGXA(S'M!R"&r+Y"[RaP82k&`6L0)hfI34`M5
e)2R'!A%F-X@FqrTUSE*RM%JdNBm8&LhpbG%b0G0aHY8jP0rIbYT"9HlXq#PIeip
bX)khH1XHVYlJXU["6ekj`1!5d3%r9SRYQd&YIZkVY`0IZ#V@K2PKH`BBE`'bKE(
aTLk%JKIi4fM*J#N8IQ(h@)Yp[h8ZVU0EkAX#SFab$1D,9"(NdfcKj0"(f6Jbb#J
)39fC[Df&*bjlQ""KeMEMbH+H5)0XU596U&AD%KC-MY"iIX+c#K9VPafLe3+e-X8
&mGCIkB1T@hF'+[193R@pJ"$dKm[MX28Nd9"C!#CEKdC2VDNRVVBqqk-S@m%@F0j
Hr"6*qHUBNj,DMLSpJTADm`%%i8pZhX#H#""Il!8jDk0@N!#Yc$*a!ZU!Ec9C@lN
!Alb!HR,cH##@jM6GVQdDB[`+dD"H4,XLRQc31$`q1DEc%6KT*"ER3R'FQ6BhP*0
fjGh1!%EM*Af[5*4*UDS%J%q@bm@V$F%a5dV%[2[HNS1KkJBPfKVUG2i@f-(%"*%
[*$i0lDm&dj&GjG06eJ%&N!$RN[4'il(p0jZ**c"LCj39@d8HF6ELMYBh"1J6Fb5
S5i`&@6#[1j&b2FZ1C!L$')d0V4D1Y3VIMYq!miXZ`0Ci[0p!!c)LF!0l#3K)9[0
+dXZi`4HNJRdfTDF@r,UG9PIUJMM2Y89MdT3'AdcNN!$B*&rP+86!aNl-`)$!A,E
)E&LpT1+6'5k"RUa[&T+2S-RL8*,'%JAdad9&GSF[4Dfa&E-GXSXcb3c#&[T`EJL
V24,MU2aPrhXNGK'jhr08+"0FbfU9)XI(j1+i6XJCP18LfGqk1&Ca@0*4"Z!m5Gh
U68)PACRUD+XB9Ik%L*4`-FclL-""A&*R3[dqB&iN#(C(3iblUjej"cX,)GP9Q5-
96p9H0BR23eSZm&V&bZXfZXp#R&4Bf`BrK4`T$D%h&a-+&f#idUZ+iN[6HR@)PD)
Tk4mYdr0Hp+,iB30Sdce1C*!!DC!!,Bi`$`E`XBmV9ENBNG4''N6cI(3Jb*E'f%8
IeJLlMYIIQ0epE6iS!faYh@a)fYh3NYrckZ1q#4'i9`RK"hpC'rcQCk9'Zd)SR#E
I+8qRB5[XbN9kNm3SN!$H'Y0Qm$FT%Vq,H!i8C@9eYTC$[@&4!"-8c-!Yd')223+
$ceZ2390[l8(bK!d!GmhB8"#Fe*Cip*bS4B,r&$S!eERaYCA[%@E6)LfPmbJ+DH-
A11dJVd4N2V(H%8Tl4q$)f9PFJYBCMXS0C'G@Lc%@5q'#'*6!$Kq*r5@5P"l6PIb
BiqhB#MZ4j-226*@k!8S`9a`-C("qX,C)R4,#QGI8+(YXhMTP$Q)qERUL,6Mf4E9
S8efG)U14HGVKp$95dD,lbmIhlIf%[BEj-!krcUjTq2jNjE![$HS*A)$!r@4k8ja
MQr)-!mdC(R4*C,'m,!!k(q"S@#*b85AA4M6"VUB-PbVm#jA6AQ2r`('D&,h0H!V
Q+JBK'aX8C0QkT,R)MTa"0LEp5K$2f(L8VAE*L"*YU)+@KqLMi)LdU4kb1D8DKdG
R2-ihE#-DYreHAAUH,R54HlQ[fFFNbpa2"JI`hANdrDl%JUHJ%&ZG4EZ)RpH6Gr1
r5ZAJYj9pYUJ5@#HfJ#d'Y@ZpeP,U(AS)TEecG6lcJL6%TVKI!V$*cjmMXi+S#C8
-#VqN#(#jaPbl'!lrZSm#ic+q%1Q@,48HYhFE-V!iKR#fkVT+HCfjSR*IbBhA(Tp
V)k50+Be[KDC(R9pKYmbR*Q0M1HM)"0fbcb4XI(MBhj'6,EqZ$&c3!YMfclA$%`F
(R"PCMId$BM6bHXN+bdfd2b2hdQU21jj2f0MQT[+dp!)8r0iZZee38aNB1Q[UZ%9
d!Xebc3$YCZMLL*kl@JlQmAqIiR#!faQ`"`E$NFMl2qIJc"KT$qk-Z'+Dr@dPTY)
cD[eY#m*rB3[F-(@EDR!'lZrh8IFXXVU(ZP1MZCb4EFNRNH+`ffjp9$YQN!$0&kL
IHfH*!48H$TR`fULEAk5P4)-@hEl"e51,X'rGkpVUh(PfJ[%G%B[D`#&FfF9a`dS
D2P3Y*b@E2R*'6e$ZLh+fEQ-Qb*E[8VbH*c8!hF0#V(JbV+ii'jilcmcErY*1ELb
!V`*`KBi,V5`dmI9ME1BlhajTlNTp[UR`kjUKj9TPk3lqP3I[M%cBL`9&+AAPc&@
aGdi&13Hl8%#Z$jGl4Gkp`pERGR%+lV"[[,r112S6DhTVlR$D24@T,8XD`i,hEja
+h0TZ)25[K1,`PE8h&L&cUUN[3JXAb1Cff8b*aX*Z`VUrf9$'qM'+cD*Qqd48@XT
GMIHeC88Z3M+MTVqYbU(q5*DXIG#`&XIEZ06iC,"CQ4)PrF8HkiL1HDNBkkeCC(`
fD4AiH@fH3qTUdBr9Ph2a1Cm%`5,1Vm2Zh@[E(RIG@i`mV)[2i8NLKN*(bMa$iSX
C@S0pXLH%$[rNr+(JN4E"RUdiNfeK6%b`KlI2YqbQP"0Zj,VPlV2XqEY#%p)DDV0
1q)r13l*pLcGFDSZk,pAkINZlDiPRNM@6ERJ++@I!4+cIl$jr58X86*9Z1RNGV0l
Iq0dHXiY8)EpTAMBD@&JjJ3d8#e6[3KB%$HrVk$9b+H@q#M-'K3rU+d9f8SHpCMF
VjiYcPahbJABU5VjhGp*ZR+jXG@6Uf8UVVR"IerB&k0Rmla[5Hfc8QDECbcbVckT
YZDT4jBJDrY3$%@BA",Hp&Cr"Y(23"D#i"K!FBSQC8UUdC"E"9"E'$b"XH$dRKpX
X&!Mdq"I1I6D5i6+P'A@pIP)mBhLMZj@L-1KG0iYr[+CCYmA-BJPf2HTlL`S$$Ce
IJSbC#HUQq'bp+rR+dYB-mp8jZjpD2A+ULafUi9JeVVJHA)SEeDrK96bpN3,6*DS
pb5&GAY05QBM@I-MrJ98TZF6'Me(69,,M'(8SAYTBfQec03-jAfG2rJlQq'(4A9*
!4U*ff@FVX8L(bmR8V'd6R4hFk,[+-0jQl@i-JBr-Dd9#CVCj83L2l33Ejbi1Z&U
ZYE2,K-pj9A+'D`f8Acd'AchN36k)Z"4(,FMm&N@A*4De9dJ+fpef1e"aLG9i1FA
pp9$blPSKrK)[rL+SB("@G(3IPGm$"j,c*Ue&GdR@3bQNE34cCBZjmN1+4+cFrXN
Rah@Uj,-F`S$iP9,E0E`YNH4[Hle[bDF"dcl+-m51H(hZa8qipPM%-59NmT(ADK-
LrHmeKZP3RS5+)QNb$lejjHYX!fFjrh)#VY+KApJUB!Hj[!ARMkX9LQRpV%5(FFr
KUk,M+eaT0kA-U(CllMcVQP$KlYl-%+(JqJXAcB4512ri*&ZV#EAa3+EA%0aqQX[
fVRTi3'VP5U*SS"AkBAb2-1PRJXkFfk,R@0NI549(NeTpdB-Ek`CGa'`SkLJGiTY
LG+LfZ-@8dY@k4I3i+(k"a$(q"3,(Ed$arU,+dK8AB1*5I)YQ[0G8-VEJ5YaqIPe
-cS9mX&Yr"4'j#-CC+$(JlK1Z,I%+Cq`-HXIr,!h'NUJ4r2*dj[@VJTAep#%pm%q
e-f&K3e[)C0#5(jF,Q"i"UeL*G6L%kZd4X9`9qcmE5@FN,`EQfcXThXIAea"Z@)%
@JT'50qA&2fm`EBYpD8[rm0MDPYLh+"cRQKD@SkM[qELQViQmX`ah&bV'dGl#CB*
Q+)k'mTa``65c&jXI$$pTFC!!18Crq0(S$ik+U%m%D[#"'JY1Dbmf"V2%NDHF43R
SkfPqma,*'8ceR2(*6q!*4a`"8c%h[Yk)KIc,E(p[hlPHVPqU8"Z-!81(fk(XM'L
pY!HmX6E1YD3c8(`Zp5@&l('e8AHF-ieANapT0ph#UUAY&FL&@'RarINpi`cMQ`j
q"%2TRPfT$SebaR8%@'KERE,6@I,2h%p9qqU+3FCriRD+ZM0l#mG6R6TLJ%mc$l,
Q%0lHCq,215RJ*825'J[APBj+kP8)*#k4j[l+1GR,%TN3M-,'FNJd6L-qRKQ3!&h
j'Kb,JmA3YRJ03+L6fcY8!1MXA920T4BhV3CCA#4)29eiPlTaR3Ec&9m!(pGl0C+
9h!mRri,QS6&[EIP5`3fJ66r[4hI231m`TpMbLN+)S(M-"8D%c28-MSaKXE65,Bd
K$"$@Ec"))+Sl#HL$QhIMKTIp#2!I%VL%m,mJkL@HZH9ZJR!eXZ'd9ASV!#k4r2@
jL9E(N8TT4JZK4XJ1UUrGhF!Eje8&THpb*jRDLN5XDB,rF&i+$Lb9(#352Z*`HGh
le1lH4V+S&amFiacFTe8I@qUBVI$-9$J&+TdPLpSkNFcq(mrUJb+VlDHDHU*Cd3r
`lqYJP#[jTc@G06$IcbG*'@*$&-$H))fD[-QZ#djil$mZaTjiSIPQaN(cYfY4Q%"
h1E4*)S$UGGj%5*qfXC0&3JYFFQQFZ*!!h"+%JNVN''!9emYc*56RL`m`T1GmIUf
d8I%dNr(9qMT+6K*Z@m0Aj"1(Mb"E85L[Br+%1LB!lmh0VZM+3p2QH*J'dM)KXY6
mek[HL4"k0NaVm92&Lm'6GYhBF#XJVQ+1`j8A!2jB!(!2[X-6P*p2fmS!')41[5*
E#1*i&D#p!C+rf-PN)4QHA)kD9Be+PQ-a&[6GlGDK!4rEqUQ&5N4X3+rZ#&Q93i9
ShpbKF'B5bVh-#FJmRj-PjU[P&pLS"(`NkDd,fZq9p&PKQ6(@)fdfe!GflTjQ[Sd
p&-rbl[IH23LkBE[NRm!-(aI6kl`q+jT`Zj`NX!pKCB9eVrIf4RD3!#'2JC3"0[Z
rV!4U$QfmNmUd!+YF$TF[Df$aqd&aN!#,4KI"BXC@MTIq'U'2K@V+qLRTCcE-VeY
@eJ!NHUMkEpV0BNhA8*Apa*TA$RVe5mZGDQIf*3(m)BCrcZ60EjSd4*-Ni(`TI2H
FQ*(rHqjIEa#Fi`UG'PkkQ%3Li@h4pmE*DdE(HkJV&X9G)eY8Up6(8G%X3Ga@FqA
8!$XDPcr!$9H"I5P664B8KZSR9$C0ST&-4N22`maBRaIDL-qGJ[-5FeV*)!Fk2C+
,F2fqMQbfm0TFNNf4GqI89KKM`f*I!!Sbj4$$d,h8Qm&M[dbUFIcT"X5R%S*bP`"
c66D)GpF(&`KhP(")e1f(F$i)T01&&$Ai5i+!0PA0hEb,cCC%ST(B',mqmM1PJVY
dVM,Gh0D+fRYjI(6QDqZ1rhpRf5fmTlY(irjUQ,lbQHC!2XH1mCMHrlj4EmXMSZR
P0T8`pbJB`lDV&)3BVC`f`dE`FXUd)Fqi2#5Hda2QI&F5fY0qAl)m3!bBcH$J,`'
c6aITJIj*6Y&!ND8IlrKRX3NN#U1D5CTG![ej2RGNBZi1`(h28!ZaR+MqL-DYE8Z
N9'jl#-2Gr)GVG,44CRG8j91$5U6J2&Hk25cZE'a2Y'(aSakFLRjF%%i5MZ`MVQ(
&e,f3!0Vc3qN@5+hMQIQUA6Pm!F4f*&'bU'DMmEEAZQqiNjk[A*C!KmhS"r0MP!Y
jb)e#JK2CrlBkA4VlB42&9Bk-T,5&V5FNJDb@05cV'b)6HD"jB$*De!kYbPLlEJr
B-*E#"k*iNRpU"BqS*fQ0hXbX$0[)Ab"NC0kBB`94)2kCQZXBLR&Ze0dJ5Rj"[TV
S2fqej,b'SA2IcRGpEl'Xd4&Ll&ibi)'$qqXFIP'EQGNGV8!X$fi8YmS#1MZp0,"
RNU3P0!(60[dX%L@5bDaI'Jmbi9X%!j(+c-KAAH`E5U(,qL'0Naj0JaNIdpEfBbL
Y"GCdMTJ(R*0'4fE9D"$L$LrICb#(KVdhJ-N$be[EL#J)0cPr80)a2k0r5PMfF0a
hY5&1[0J8GqK9`K@C06YG8l@cM,#$)K-0'mqifT'2fPd(ekhTf8riZ2Y%V6Lilah
&i-2c&$cGB+I,Ipq`HTZk1hfLrjdbUdVaa"3[`j0hiV'fhfD9Dd4e[#%V@fe,%9a
GKZp9R9KTAlSSc1G5#!GRK"rQ#408d",5N!"i"G5L$mmr2QK`cAaeD-1ZN8d1liP
cqe-U'"`NiVM(YE22KLKMK$9mY+K-U3GMI(UlQCqUF%N-!!"%h'+Kd*0H1F5l00@
kamRJ#H'#%q*PZ8m5QG@I'88aL,YBh88`c[p1Jc@9bMl2936Ja1+cp!*"e0K)JpK
Qh8cLK[3[Z-%J*HM1mp(46IddhY'kL@2c+f[PCZ6&28fl*k9J"q@8qap!8Zci'&R
IIbB#SN--"V!Vi3MNY$),%,X(cV`(r"2)V'JDA"[iJ0-M26P`Tc&h$rblKZ1Z!3A
XGmi"Sr49(,"#rUpF2f)I#rkHRG$c4IKm%!l4lX`C'1r(G)0*8,!IhY`NYq)MQ64
EH9N#-TrIqEBf(@RFDF-Z*39JBB4qk*P6(EZ86Gm92[XXCq00HN4mYTU6[*qH6TQ
CD&K(@*BZGc2B$a1-2d&9ZTLQmr9I[iN[MKUN3mEcr8&QkRSRc1r!"$E9GHjTL%a
Cj,!0AYNZ2BfN@U3$j""&cY(R[Y"%cRak!$QjY&',5cm9c"-b5imHVJ3BC#2")hm
ajCq[5-dGQ6dk$0ZAipZJFDIGfh,%45M2E)i*8YV`l,j%hT85e3Q'H'V8qBV&b8&
HN8G6q0RmRU56D'G#-r!'ffKAR$0bE*F8QHDH81b,NRaN)AFMd)`K!A*I)kl%i`Q
Z3@QMSPU&p4VfU)#I!Aj%2SQJYKi*R1&#dS*rII6Tp@1bD-C9hXIkK3amF$J0B[)
0jRTjm-$(C[4@B![ae)NAP4TmbdMbqc$F5#$RbNV"i+)H58FS,I2CTYG#fMUe&"X
*[UkM!S3eUG2BbD4-iperD2`qT5j81TdA%ceY),G3YpXMDGQZLZ$9$)U-QD,UX@q
0*Q38bKQ8E&KEB-h"*N-e,SY9%jk$"EN$,j[FlMcNP6j@bfGCm*3lDQRI,d(P0-4
iSMUGk$,PV3bXIG3D9ILU@`4JS"SaTZPlikj)BpEJl2GKM'l&jTq-Mq%"#dGhlpk
Y&*q'@Q`3lQ6qH"j3`bqN%R*mC%UVY4[HfQB"LEGLlGK2HM@&lV,[*$FFNY0hcD0
*A%A+MQQSLj[M%5*6dQ,S[$E%-0[!J5E2l*A$DbXC0mp-[[9kU(#i-6#ec5Z#!a0
%Z5eASb%j+JLCFh"Z(,QeTKfLq(S!bKGh%h!02lHj2I'QSaSaSB'f#*!!"UYYI#i
Eb)ReMXGp)hQ9#p%C#-"bqilR'@*1rA"#qGrZ(Q2Fl"E1+cDCX1k$6'IGpU#5,&`
0S2T-!*jT1Ki9aklE1BYeU8iKKNFmG*c,6adJXphmm5!HMSZ[(+JCNFXKjbiEI@L
pRHHZ5fi+[rZZZe@AGQ5-jLINb&DD&N6`U[ADEAqC[4``$'fX)jeNjT`aN`rVSPb
dA#L))Jl[lR+#)q,EJZ5Pa9Xr6LpG+(6V()qV*@6E%6PZb2CG!("C(+UqURa*AlB
PJ!P"$0bDA)p'$UYVdZ%,`P$GX0PD4MbP#[VXVC@eR8**2@BYaTA3"V9dYfPDFmS
P#TZ62PI*ha6K3Q,9blEPR4`BQ3hidLE3)@Mpc@h4-mRk)l%56hQ4plJceDDMA4#
'5NK[ZZ@fYmGNh[p3@"l89J5BV1+Fq2*%`"*efCA"f9Z8J1,pDV&#Y4h(fr-8Km0
KYM![p",Z#Fq-2)L3!,U(J!&Z$a'!mq)`(ce6H%[p,q8rdNT),%Yk4[8pTQm)V$l
ZlPKRG##e!Mfrk#4FC#J1Be0jUJA+6%pR!(jIC,@+9k*S1JFfE2JhU!,dHlX(FHF
0$`6cH04BlHTA&m%GLZi32Rid42dGT+6K-N(%GMADcHh$Y+UE8T3UaTQcYXk*c04
41m1#dUa8rFb'RGH!jLDT2$-k&CKFeFfY-"%Sa5D18@[fAT2%DB45Lq(U4C1LMVE
Bb4Y"4Ff4BGRZAX3#mZV9LfYcVkl*59kNE'U,AQL&cRS'C6U'YIapBj,(hG-#9%S
SNQI)V!RdpPXd6NZP*r*dZ"'c1Nqej"X61!"!A&C[`JV$%b3R#B1$J6ZBYMS'PE9
LA[GS#CDG!M-0%h2l@VSGId[T"$Acam3jp!6F2*V`'0$DDkQ)3N*,@DSJr*2,#ik
I*-$EfLJ1"P9!(!+,bAmCLmP)iF4ppAk*llUPQ3aL%c50T5"6rZ8j(D90[`+#iZq
*RDk`"P"T5S(4lk&mS@D3!1a5l"(QTFJB-#*L(*aISmRmF&Q#KcfUK6qU2miqF4K
j6B,8S,dF-e#!E0"SGi,q9rlpaAJ4Lm`Y'dNU'q*J6LGKlQ"U$8LVf)N[[VI-"QN
JXQh*1j)jRk*rrd`dc,HCjiSPl)C3,aIGR4"&X$h5!SR-QjHZDP"b499T+V,@rIN
r1KaFC)Z,j#MmDZlbCAY33-SKm-'CICN),A4)LP+4H4L!,PL00JB"&(6%)Ee$+-`
1Urldi`2!UH0FbX5)8Gc#)XY"Hqa9La1MKfVp"X%(3hpi-d&`T6iCMZX5Re@Sf-J
SlI9'dJ(hJ2b1-DCJc*Q&(dcDmPGrH(*"pmQ*M3heT')C!Z2(6(3Qdd49913eJ&,
alYm%Bch,Ym%lM'p9HilpmE",*Z'1h2GLlMU"T0T93D9`b4qHH-E#+@E&2dp%&L(
ZI`mNaE&ZG5N&J5YlZ[M3k&,k[bGeKh))lMXDb[%EMecfeeK!"i*B!&(1%'A8H8[
&Ma`8LK6GTAp0&3*,*Pqm5LBQ-P0S8k*iH`6+r4qicdI29'0l8Mac'*2dmfYFkmE
L![jNRE@XJGLR(fT*+09Sr,LlXI`[MZR0qi19lkZe4-iP021h&aXbiDLHJ5idERY
!FEb!RIEp6@%TU0GSV1Q$,Lb*FE'd[`Jl8!IRcX-Aia6Iq90Y+fZ"KUaITLaDN!!
Q5XP!jcl%b[00'ePJUcK0ml2aVH2Z*Np@bb4kZaP4DB+)U$clNl$Q-Q9!K-H!9Ea
)3hPNEmL)p`rIfpUF4fT#SVah&CG9MFPcrG[Nm@2ZLhjKSd$!-f+Q(,#(,bb!60[
P+*ZrKDi)rq2$!I$qLLJla-c)-CAJ3H(i*Qm)qER!J46LR5FfS+%BaCQj,f+KZCR
KP,db[k!@$iA*Zdph+pp!ZSm!ph0qJVeb31%5VpV3$5fimp@VCrXb9Uj@S3'T5Bj
mXcDhAi&&i''ekY2#``DYYVX@pTMhY"&bjI)M*LJK*DaBQr#j3'eZcGA9K&r503`
[LqVDe-P$UDXIDPAmF!Jlrl''LNfG"1I!&`#("@+V)NPl&K`l5B$8lGXrec0"Kjb
Q$!56J0!([F9)GfSJ,)l1-3qP$AhJ(kflNJRALVZELQZ)#*G6iSNRcK@QmA@UF*L
kRdUG-kPTlX5lMMEb'rlDXRbILB&G8IMlN!#DbCA$fJrJqXS!$!S#r)N)PGVCXF8
E(-p`$FA50pb2d!RT@fFr+Yrj5f`06&TbB%Ebk)(krh$P)kBDJNiqrhYF4M18A+K
N3#85f%SlDplX,Rp#36Z5$M%,S$!#QUe3)k$T+p'[A,@#p#(cZdBce[#UZe289S-
[&J*L22CfbX!#TU(BN86ki!Lj4"+b)NAA$I@JC1AP0)hB"L3E%VD'TN#J*J[0jFN
PbFMAR@1@%lMm*r$qZ!Rk6Bq#J,HP'e+cf8mRhPrKhIiq,c`'qH9AR9Z'EVH15('
(JKf%M34LH5p!I%mQX*LD#L04S'`+P60L+b3e$0XiEVYX*AjQ-Tj,G(CVUV8+irj
8[N-$Aa&#UMdX66CAG33SSMSRr)VB0VI,@N,C2YZ$ac6CleBp@UI$L)Y3@C0RdeP
Ff"$#i!frpK!h5%CQ$jQEPEQM,cF4)pkCeBa"&%,SR3%6[I(6fMZUpKS,DajGI32
VU-"$Npmr@J-bHmiE6c)b*,XmY!94r)X$i[#m-+$JA`DAr(&(SQSQqqI!3CL6i0B
(fS8jB2+,1YjAqD)8XrhYf1%FCrBj9Q4-Jp'023[(N!$84UIIDk&3p%qJ*Aa5U,D
5mL0iP2QNUm*%pX`X1f8Ri`$"*r!h'8004@5i3E*AY$DJTcI!$VGm9ldI(68j08R
Uqi3+Db8Gf6(fF*!!jD1(a`c-F#HVQH5f2jTR41Xh@b%19fCBk#0,9khCDhRNHZd
m(-mHCfd64Y6ET+9,R@r,&a6b3D!9&P'%pj95D3F-i*S,aaK`N!$Qa0(JXEp,"Tb
3!*FldmMH'I"4bK-A2j,9cmMXT('FbX3DR4dTQM-6IIrhViA1#6Df"D[)ZLmA%1D
+d*+HLX*FRhG-2i*$G6hLViHLcG08-bN@XBFQZ$UB,XZ*MML$PA1r,q!b%c$dRY3
f3XrjpZ6'ICrr!%JJhN1N-[hAj+"Ya8D)#rr#*+HLf-N6Q%6Y3YSkMIacEqRjmdH
rhjII)i%`PhRiK5+VC%Ed4rD@Z&6FZkbkZ5rD#Xl5h#)Z!5hl,bK$hl4jjMcd!!Z
4m@j&EpG04e5A[MM6#M%2PD#`"R8aj4`%L5XG[T(fpG48*1,T!`eK&cDT6DhK9KX
5D'@2lEFJS[GG3CPbr9T'Xq6h@$phT9DZdE9dLJdFhMFQ)a(M'+Mp*NN%K8aRRG[
("[fcU#erZZK31A[rT!I*Y9KBV5C!*q3cFH-kmIAFCbTf5JC1FMmep2k%,bP+-Sj
f%9Z5%!HUE5"I[XSQAL5r-aFEjrJkV[Iq"-2$Fe(!21!Pd,cccP&-YHKBERU8D&%
KHLT5U8@*Mk#(MT!!IJXjLb-qq`(@Z6V+4+jclXj+8MJ@",-+e)(bRY05M@aHI*-
3*#F#-'H4fBhj$k*[aGAfB9ikQNp%bLP40'Ai+)NY*p-EEZ6Vj$Q@BGD,Yp'j8LI
VAqPX5G0rQZ6c[r'GbFNmRr&D)pESISJlBf)RP&KH-mX-FVP%[!FeYR!G6IVbEH)
+-qV&d"VcT2U'"SFhU3'Q@CYj,-&lpdpQE-DU0q[f@p*M'i'c6h6G@TEr3ZG``H@
UPC&k!`MapC-$5*Z,baKD"RX&rM0j2)Xa!8X)0QX*lb,ikMIJ&+ES9CSVam`+%!E
RX'3@f,!c+`-JY@l4fp[rI8k4523XEMA1p6H24)DlrE6b$+hBTAlR4##kFAi,PkE
6bl$"*Sf)kH0P3XL+Xb$U4DK2RmT'VHi[QGa'-SY4Ye$')EVjeNU-(6NGrc`Jk+`
'$kESdkrCR9Cb0q&AYfa)K6dL9B,(,re)d%@`FHKeB+9-*DaJJf#T#[Af$ZZ`2IX
0UF!-YVc-BUmNYEj6Pb-[e`dr!Im&i,I)1eD4qiATU@2`ICLrpKPl@P!f3p$q#a5
)f*alCYLD)[BZeerH#LXL&M'@'jT'62-,A,U$aJ$0+E#&jC92rr"@0b8#5S5$-GQ
%qV-`SVZ'`H+)hVR1@)%ma8EHHeTIi9!PA2jSP""JHF!cL9DAdR'8&'fkX4cC2SB
,Y3HkABLaaICVdG4)R6Sd53#Y+(5!R('hZ0-*K492)kh*SUYlRlBD"'-bE%GR5IE
%81Bc8'NY!%j5r4`kU$5*S1VHheR8H%h4Ib&P6BFrbDllT`pR0Ucr%UFTqjE'd@J
ic'c5XrJ1$NXK40ZlY@9f#FVYr!pCN!!p3`VMpk&U40'Kc#f#,M+X[G6$H9[fZ+4
F'ZJf-5@J,NM69Q[r2fQiJ+2rMj)$8@VV*+l#Z%D%fq[bKAk#CU4A38jTUc(iam"
LG)lI3eYf(0BQJPIFE$PQM@mRU#T,6icdi8%)Y[#+!1Lhka`2[kG&frX'-pkhep#
fl+6m%H4`2@Q+c"#1hHq1A1RXQSa2Kh@S%L%[&F,UeMLbqEqS'$Elq2BQVKA-`UJ
b9MQ&q`YX"46V8ej+T8RaE)QRJ+V5UMTKdY$&f"(0PrmCQdpU3ESl&DGVih3`,SD
5[`5ZB2CBkj+b-`bpK2PAUpkKiBJ#Rcj)eKl*VrdLR$PmC6+(CCXM"Vd0B(a+B"P
!9D(K+1Q3!0SkR02443abmlPb#"&KQBTF1fGa4[b2P"d[qGCHYYqe%'0fd2I&LC8
+!ceqVb9G[d(*!!FSpDH$2T5['[)kF,MM9J#T)ReY1[Z'J5r0bX,+F2&'HGa3hbV
`NE&lpRpFlJEHI-ST%M"@+Zp@,dHqVjNBd&@$NmTILH(A`SrFBb*lP"98Q@R#Q1k
bR`*C'K9,Fqj%GHk1cN!GHU"-)-%(GmcdIEFZrlV,EbV#[k'5("Zp%I2brF1k5-)
ld'4L0[$BqP$bN!$!0%BXc#(E*Q,"dJ@eP`BJ%C5FiamhcG((@D@NJNkGhiHmhDc
TPCf`EHK3+p@aPJ#PN!3"!!!q!!#f'm*aYddBP3!!EjJ!!+*p!!!EJ`!1BRJ!N!j
0Eh*P4QPXCA-ZFR0bB`!"MfT58e*$4'peC`%!rj!%!*!+J!#3#3(&!!!"K3#3"!m
!3X(9"a1Qk3SH50!Dl6Fh-eaGHm)[iNNEG@(9iqKK&L)q%TMLMN(@5l"3DMXX%)p
4Z@&lP5T0"%GPHIPGapVfjA@1hQ*pckl-*jI0kbj9jClQ026FX!5lN!#&[p#"TTN
KLG#%U8dYfCb(3%d4IfA%QkcL@`JeL3R@rI0*RH)BhS(9LZDhT`9#G@21Q!)Gad[
h0`PT9FSPFJ,DdTF8FR*3NFD)3M(Vrr#)M5mF,T%X%15Gl2C1Y3Ar`$PcVIpfS#$
hCae$JrC&(r"91fhPJLp'!l@a-NU(*`"lerLfE4Ri-q!q4BS`'"0,'pRK'UjBid0
BLRe'p[D)6I,8iMJY,+elXfk')2+KEYM*&'C)SNVA$V"Bq8UPHCXNamN0HV@Ql40
Id3H##rYZ*TaE&48mc,+X(U,lCjLVj+E19H98J)-lVhc,pd[NFSYA9HEraS"f2Af
B"T)V8[-i)k1QkP'+i*ZiKe#1e9mmiFXN[)Sm5)mA[BMcm%id&9I(@bY$B[DbL9(
6mD2G835`TC!%!3!!4`!3Y@5-lVG0&rN!!+#)!!#N*J!!'i-!&m`f!*!$N!!!N!0
f!*!%$`"0Eh*P4QPXCA0$BA*LEfj3FQ9QDAJZD!!"2@P849K83eG*43%!rj!%!*!
+J!#3#3'D!*!$ZJ#3"!m!3X(9&4RFHhj"k`rXApbELa5Uj`ETN!#P)N0,rB8@"4#
6TMX2Y%0eG"pjZ2PL-SPA4pk0Vpr+a*CaGf[13`lk,!YcFe%QDI'&hN$*[ZVK#+X
N-2IJ9eJlPhBDY%chclr+[3`cVEXYNH0+CATbmbf&S5KbTZI%4C!!5iSFNYraI1q
QSTUlM"4S!EPQ`8f+KU1m+E"6XeNifG$"Qm(*YePq+Qr`F"1c%Z-IYZ9-V!LUIAl
0r#8eDaS1kpQh`X"#`G5CE+iejM'$M&1[4Fe"pDkA4Ckd`LCYLFJ,KI2aLT8j2Q`
4NrT""AIb')I,Q2$lLaHK3[@,Pb2EGBH"2A@[QB98)qFMD4&LKl3Arpk9d6FS*`P
*cHemm(I,p8pb*U5#FlC8-L%LlLpB--q#iphl1!-*6K4JTC!%!3!!-!"!!*!+SRd
!N!BEJ`!!+KrrN!3!N!UPN!3"!!""!%#f)!%SYr3aP3!!'i-!!+lK!*!$d`!4&jd
!!+5l!!!56`!!#LB!"e*eER4TE@8J6'PLFQ&bD@9c!!!Se`#i!%`"Q`(a!F$rN!3
$$[rirr$,4!!!J!#3"k@3"!%!!%B!!,IcZDUhmlQU!!#N9J!!TKN!!+4@!"C$+3#
3$Ne[FQ9'D@aPFd0A,N0KFQ*[ELj%6%`!!DL3!(0SE')rN!5"!2q3"!#3#S!!N!N
#K`#3!qB!N!32!%,"e-LrjBqL#YE@Z-$C0!X#&#Gp,,aSUmFfAbNjjIGMF6@AfTm
(J"iQFC-Qq('2Y%L4k)EbhSdHh*!!P-&6mi[mMHM5U"b+5J8e[F`D6)%PrEBCGkM
`)mA+VLa,&k$YS1r0mi4YBq+`Kd)+6%""*,UC,efC,3),PpfPicFR!Dl)lUh*bCC
*3[)mZ"iJrXFD,NkR&dqZREkNJ0QCf9q638lV)JX8H$J`$[AMD4pB'f$e3H*4epl
Ud`0Zbqq9dATBT)B!$L$G)Q&4@15K1,#V(Mhicd6TP#qU4P')RRBBHPSDa-25ZBC
Im+@3"!%!!%B!!,IcZDUhmlQU!!#NZ`!!ThF!!+4@!"EaJ!#3$Ne[FQ9'D@aPFd0
A,N0'66BiDbj%6%`!!DL3!(0SE')rN!5"!2q3"!#3#S!!N!N#K`#3!qB!N!32!%,
"e-LrjBqL#YE@Z-$C0!X#&#Gp,,aSUmFfAbNjjIGMF6@AfTm(J"iQFC-Qq('2Y%@
B6#k(&`-(!!dFjUPJYf[dR8BI[Drka*lR,6X"6E%ERS%3q,Q3!+mZ+ii%3#b`X02
C&r,IS%&[p@pB#rqbh3Kk3rq5NF')hX-(#N1kFjb)KBqPhrjVAZ$J)LCRp'B&3,m
a)Q34BY0q$a8PiaJP[1fJ%,!mbMq%N3(rSeTk&2a!BLe*8f#[cclGXj!!Vh@9@U9
,jN+6KU$FS5CN-Hf59V$kE6E(56H"8UcTV-VXdMc$Vj4aGrVTZS#PN!3"!!"$!!#
hmlQUYr1jUJ!!TKN!!+M1!!#N9J!6G@)!N!j0Eh*P4QPXCA0$9bj38%-Z4%a-!!%
Fch0SE')rN!5"!2q3"!#3#S!!N!N#J!#3!q)!N!32!%,"e-LrjBl84CE@Z-#Hc&-
#&#Gp!Y0SXfplAbNjjIGMF6@AfTm(J"iQFC-Qq('2Y%A"XE9d5&%!lk@L@M)Zf*M
"%[RL0ecR3rj,B(lKTMH*hjq&-GUb(`hGkL"dj`*M%XdNkk(2fIe%H),a-[i#)RA
*C,BkQD,AUl62G`J`P@4a0G)fX(S*V3X'IKc!qYR5k&aRj*)8,I9DE4lFU`C5'lA
Bf+6mC@IR#PI,P#e)YP11(&*MRq((H[X!'ZZ''M4bTdRMR*36d')M!Bridm%Mmr"
G[220#DHBHSG&E&E-D40[YF#PN!3"!!"!!!#hp$'$Yr3aJ`!!ThF!!+T%!!#N9J!
3S@`!N!j08d`J3bj$4Ndf1%XZ4%a-!!(86(0SE'*MCQeRJ3$rN!3!N!U!!*!*!Ud
!!!%%!*!%$`"#`G6)[q@6lKCE"q--Li!80p"ITS,p$(+5fZ[LLrJAB,kIB-0RTMU
VTYY9Ec3$3%l[2(8F@1GqmT!!C86NXDTaMXY(U*Z)Z[$jm%F,cj0Tmii)86LN6b2
[9'1)'$`#r@)54(aZd'%diRRkjlN01L,5'j[)E'b2H+Kr2LM2%PfNJ-fPqZ&JGXF
1MhCCHVU1H1%*+-E0X[A`'#i3#pS44+!5apJU2)FiV#TFL)ee&8d1+%H,-9U'[k"
9F*`)V8RK61@e+Dp(qj4Tpaj0`f1CL9&CT!jqJ$JI&%PBIpK1GG$e9cU48`9,IiJ
@qXh[RcUIcBX)G%Ub4AN$IMd5QFFi*eR6!8l"F8#PN!3"!!"'!!#hp$'$Yr3aJ`!
!U-i!!+[#!!#N9J!@2$8!N!j08d`J69G5G@jdD@eP6'PL3dC00MK,!!(N,R0SE'*
MCQeRJ3$rN!3!N!U!!*!*!VN!!!%'!*!%$`"#`G6)[q@8L'T,"q,I,GLMEjH9qZB
N`2-2#XH#LrJAB,kLN4EkqFZ9dffUYjJC!ThHGSZdDGd4j0e,H@aBL,3cHN-&%HY
'@CN(HF0FU3[[mqYjb9+--b#4Sr(Q)*J(BeSJ9k5lAKeKlcY,YP,@9a+N[LN,Gi@
L#-8NRDPiR[m!CCS'66R"HS3!5L$3PqD+P-[Qf*,%!rbMB@Q(U%k`XL'Q[(q[9BA
()LLXCMP&Lm1N3pKM&aD*$a8)Ui)mC8'LD$*cFFSi*kQ&4rk*'`BChR6kU!T33QP
')CPaeEP%*2*SYLUAhmkIPiNR!DZ*eV&8r8ml5[Q`dE+&GpL6-Rr`J6FB9L'ajKJ
!TC!%!3!!3J!!Yr3aJlId-B-!!+T%!!#Y1`!!T&B!%KL#!*!169GI690-,N0KFQ*
[ELj6D'aL!!'%0h0SE'*MCQeRJ3$rN!3!N!U!!*!*!V%!!!%&!*!%$`"#`G6)[q@
8)BHV"mQ%fP`MQbGC02lS#EAGG#JG3HVYJM(4)64B6M#"jCB'H55$)bqEiRr1%AZ
516@9H*P86A8*kMIZaPJGF5TLJm)KdqcAK49i!1AQVEd$%&G*MNRfZ#Q&cbH`eRK
rrQN''HdN"MDHXkdfBT`qAmYTF&Daq)XVilrA3Vkm-e8[XIYP-dAPNF)IpIU8hAC
[ia09*!lf1[paq&RC+A*qj0K1dda2ai"F+i%eb9h26"Mei9SQM1$S+alH*Y#15V%
#ZV0)jASl33@r!c&ZJP$bQ!N-q`NSI2PhEelbQj!!2kde2l*LIah2"jM'FDkcc8q
ZXkfBm$$c!Ara)V9"X@8!TC!%!3!!2`!!Yr3aJlId-B-!!+[#!!#ZX3!!T&B!$b[
L!*!169GI690-,P"33bj6D'aL!!&J4R0SE'*MCQeRJ3$rN!3!N!U!!*!*!US!!!%
&!*!%$`"#`G6)[q@6ZU8,"qF&S#k6EjH9PSERJmBG@(e`&kAXKQ&YP8JK6-mL!8X
+pD*[rd@!X)-hN[*)&`ZI4(*S'%+LGCKZAPVH9L'MUZqj56jdbRQ`eRhGl"@-X"#
NM"2Bl632GH(!efBIdi"8P-5AE-[ZjSF`"G"6LlK12%D4)&CZ-4NbRi,,+U,%&q3
`9&KAH8Y*d"ReZai,H)91IKFL@b5XS8Z'U8EIQ&U[@)C%B)-S#%#6Y,-JEr4R4Z$
jJGhie&fNX%BVVBme#`pjT5$RFm!NBB5ircDLDM8QdJd2%DXaFXb!FD&6j%[N%h+
HiKjHaP-"&hVe3*!!XckQLr,[``MC3C1FUiJ!TC!%!3!!-!"!!*!+V6X!N!DN9J!
!%F(rN!3!N!UPN!3"!!!`!%!!N!UN9J#3"p-!!)#Rrj!%!*!+TC!%!3!!03"!Y"e
aD,Id-)d!N!26!!$aM3#3!h)!"I69!!#[DJ!$!Gm!!%)M!!4#G@PXC!!!T4%!1J'
F!Z!$N!!"`!$!!)%$$[rirr$,4!!!J!#3"k@3"!%!!$J!3,B)5q1hp$($!!#[%3!
!`U%!!+m4!!K6D!!!VmB!!#Yj!!!5f`!$+%0KFQ*[ELN!!+CI!%J!D3)j!LX"`2q
3"!-1rrMrm-Y!!!#!!*!(TC!%!3!!3`"!YKHf`EBQ'5S!!+pU!!#d'`!!VfS!%b%
1!!#`,3!!"d`!!!2Z!!-S8h9`F'pbG#"-D@*bBA*TCA-T!!$j%!"2!&B#33)!!F$
rN!3$$[rirr$,3!!!J!#3"k@3"!%!!$8!!,BAYX'f&lE"!!#[aJ!!X43!!+r'!!8
8XJ#3$NPMEfi0!!(E['PMEfj0380633#3$i!!N!N"jJ#3!i!!N!32!%,"e+,![f6
NI0d+dKR3"qIiU-$mII[XG$0D@+,$Gdk#0&52j1BCd8`Pl-5%8846FB@%fUNDlE0
"XR'&YHPV%Qe*S9GE030`N!"9-EUe*eM,IfAF5aFcd8"fAEjE2@A6LDZ%e@q`2"Q
rMeVLhUC'(,QV6$&P5EMc!&Q$[bmmBRbN!+@3"!%!!%B!!,BJ(CQhml`J!!#`,3!
!XSB!!+r'!"EV)`#3$Ne[FQ9'D@aPFd0A,N0KFQ*[ELj%6%`!!@QbFfKXBMq3")%
!rj!%!*!+J!#3#3+h!*!$qJ#3"!m!3X(8kN$@%'cVGc-RF5L,,d*dLDA8pdr`f-8
KLH&24!q#(BqNC0rH#kGdFK),#8)-UHJh!hQkXIc"bB#S%cD!I1Q25M,QlPXMJq&
*3`6LJ"4-pZ*bdF&,M1Ec!&G)(8RSR+%HicPIc,BB"KTF!24p%2D0%(Hl)DkJN!$
pYlkZ[Yi2X"'bd1rDFjCNkkK-Uh!NGDG"&hVi'8hL,NAU00A,F!D6-3TfhaiP'$@
cLY@0eXJ1HIcZp+ba36rMMYeJ(0p9aA(6rU`Rr!G+SS)mm46j9)e(CRXFCT3D)XN
6fATY*m@MTKUX4R##5bkjf[iK!#*VkkDL$FA(6%T!F!#PN!3"!!"#!!#f)"fCYr1
lhJ!!X43!!,2V!!#[aJ!5ZeS!N!j09ep08d`Z3f&bBQpZ,P0SE')!!DmMFfKXBQ0
QE@H"!2q3"!#3#S!!N!N#V`#3!r%!N!32!%,"e1T!eJqI*MFc*jAh0c,#G46kfNr
lQlX1XD,rCh`JGrEZb[P4HDXf,D-'-Y4k[Rl-86-f9BpL)J6"cc)N1a0mLGc9XUd
T$hHkR1Ae@@U3!$hUa""4dXqSqY&F4qSH&A00T$Z%XN#SfL58JF8$$p5'#lISKjf
Ej+#XL5'0$rBRKG1DX)Qi9R#aPf%G8J6qD(ahK[pQ1HHF#rY$6NDp6A@6KrT&JNa
SZ+rXVB)df4VpAXj9GaEGJL1ra9RjKBMjj%hf)PCDQ+@mip8R%dpXH2)S"`Id`32
qPmd9i5+f-3YbA9q*aG'&-"GNS9q9&C4(CdJ!TC!%!3!!-!"!!*!+XSB!N!D[aJ!
!CllrN!3!N!UPN!3"!!!e!!#f#%[MYJK,i`!!VmB!!,92!!#[DJ!&*k8!N!j*Bfp
Z$3!"hb&TBfpZ68&$8d%!N!q!!*!*!HB!N!20!*!%$`"#`G8D($L-@TX5*rENL3U
med4YI[(HJm9K*F)@bTi5E5MBCAHE@lYd*mrU)"rVJhm1JdL`bDF8hT9bpURfDR2
'VBe`""+0hB+VGa#G"C(bGfqR0KJi#`&S4-#`39lDY#&kE+b6iId+rm[)ZEE0Xm6
'rTRI4[("Ta6lU8V9*`(64befZD1BRY+bh4Qi#G+,aiPN5IT1&C@PCm8djdFJ9rr
jm@'CZrS[(j[-LJMM93Cp5&qQ(PVZ1Sa"V[KiL8U5(')F8e%DNK-j&c$(F%-!TC!
%!3!!5`"!YL!A2,BQ'5X!!,3E!!$#F3!!VfS!'bGe!!#e[J!!)NF!!!bc!!4`Ff9
eC'p$BA*LEfj6GA"`Eh*d)&0[GA*MCA-!!,9Z!,F"pJ+T!k!"`2q3"!-1rrMrm-Y
!!!#!!*!(TC!%!3!!03!!YL!A2,BJ&c`!!,92!!#fT!!!Y8m!"9B4!*!15@0[EJd
!!G5cD@0[ENe"3e0"!*!2J!#3#3(Q!*!$I`#3"!m!3X(8SX#rC14mh3V5'G!(k#"
aKEJECJ2jrL!jjSaSP+STm92c)@lSl4Ma1DGj!L!eABiE@")!-Y6UV9&YDidDkIk
Q1jKArl-dm1l163PSX%lTrLF5MTkjDa8@l9Hhbq"S8k@0X9RY*r'I80eU8%bH6T[
GC&"dc@-0FQp%JYM+!+@3"!%!!%8!%,B(cVkf@Q8[!!#e[J!![Q)!!,92!"@F4J!
!'9`!!!DJ!*!%$`"`Ff9eC'p$BA*LEfj6GA"`Eh*d,Q-!!6bN9%9B9%0A588"!2q
3"!#3#S!!N!N"QJ#3!kF!N!32!%,"e*cHM&S+,A4SLT'PBQAGG`3BJP[K918&ZFG
FaLYZf511'f&fP[PSB!&IEqlZ'cm9c[Y4N!!YYZ+Ee%qr@XfP$fAc9q[N)amN)8j
mC'BA@'MicCrQa8ak*3id-`JGB'(3ZGk'mqUB4FXZak,Z0qKX#KPDemKHH0+X4P[
%8IL!+F*amf&6!-E@-c5-3(Ub+(k1h`04`MMC-dc2+'h`VRB8HFL824c3!%,"e)E
(S'`jYFjSHiCA3cbU*2)QIaDjjl*b`SI(X8pcbR0GXa(STV1P3iGi*BPJMc2aZHK
lLGQJiGrTpYVEGRYD"&+1(-C','APL2B(RE(kAPM#Cb+@e4NB)k"3X,a1)l(23cY
Sp[,eA5D#b[5B%%5S#5e#%KB-q%SZJ#QEXXE)`9NTrXcq4$b6!IdIf6'83&EGC)h
kA@Vma5JSeIVYrBKR$hqQ'bam(L9ZT*b8Z)hTqLM9%8!Z@23#)Kpi+lLF04*RA!r
e15KQ%m%cAqRhXU!@M1&UhBrdqlEeG*E3&qq*C4-X`l4mTdARp1Q4C9(Qh9[rG"a
lX+2eTZaS%8djVh)LHldCR[CdpQNMLAcR8Y-2GaS9hjh-6d2,(b6P4)f8US,5!N(
,EE'RLke@lGMq!1!#3ZdHp+'#G%L9!8E26i-#)5blddDMRS+JA,@KY5mmJYLC*46
i--Y`S2JH2,S%CT`+12baCdmd#aM,Ik6!frTLLI9+"L,KqLQ3!*,)D%#&`"G%+,p
(40Rkp06IGQ'9QAe$`URTBGJ*UTT4BNFi!hi+459MUajHGMYrbf"FV)#3!%@k`@R
64S6&f9iEh[!GH+kZ![LZ*fB'4Aa@Cm3%U8#"a!*LpJmNHYQpir!Zi6A)!XaXdaF
e[ZGc)fJ&TE`8K1X*RR+&h`5IS3rU%rq6T2%N)Y2b4J(0j`-9RQah`jS!Yq[Ap*(
beqjI$2K!TEEe3MbeeKYVjAr4[#b$TK18cpJk)-Sf+BNP[1*`K[0p9Z0462pZrS,
5lm-k1$m!aqi9ZZa9q+qEeL4r$Nf2C`1F"KT`b,8AppfMFEq"02@M3'9(Q!CQhT)
-C[5(rikHrST@EJQG-2YHM@4qV%*N!ZNld#8Rjb9)pmA*,0*)qe"eH#F@lfla&KC
K-%TU($YZ`UP[$prDiF9-aHkb@XG'rHKN3j!!KVqlAhR1#k,3EY`MLFCFq8@r!!-
aEA6`'D*-'YHD6Q9)S"kE0U,BGaIp"T5%U5F3pR%i,8,(cfipT@I5bXNPHQeNKd5
XAkd5%EaCadcaEp(EhlC#VcP`@6%Ii&ChDYch+4bI6%55iX4Q$VGMa1'mN55QKX9
[LmDhBQEjY&(Jip#PphU(dA'&phf)6eA9L(IPjdDl[%V+F2QSLlq9,D@C92i4cNY
VapNMS%p"@G,AV[ChcmqETmEIiqiR0hZm5"jIp`HH`&0rC6ciiE+H6jkq8`FL'R'
`Tm'H,@19KLaEcii)8,m!d)bSPRja"65%a[(+6GRPK+Q0%$RApi(+#%0eTmFbpGe
#CN2[#XPcGQ(hC3TUZJGErch!qmA&)bI6T(-p2*&B"9p9j3S'HeI0e)DjU$iQdC%
JU2iGGlNN5"D"Zh50f3GrHkq0@KbG3Nb5Q4rh(K8)fX!4*NCUeHDKkVfYq51NGMX
QrQ9C(+dZP6"&VY#HIcPEf3aN,LG90YHRklI(hNma3"TiP"PLMZ@k"(Z-GJjLEj!
!#j,flljC"iEaqpJ'CJ%ae#K[NMkEZi!4%`K$5-Z,-JeATc8RC!j0&'1$Frk()fU
Yjr)fJVia)iDQ#iVT1PL$jPfAQ'CP@bj9bZhIk`P'XK9j-H9jcj(BjBqb%GHYA+b
aJf%bp&+0$80#TSpVHM3&C!9"JhqqA'219Qbc"(T(RTDdfQSNAb[((*REeSmmipm
dNK%2l#DH"@(Gp#V--AV+)JbV[8%)1XGTi5mh)3faK(&iC[)AeEVfdYaFZ,k,4mM
NKLXYYUT["GXHQaR"U9k`!qb[cq1IUDI+B[E1kpCXDYekYrJjJjci&al`m59f+[+
2,IUTjbCR1k$[@2%('FH6BYD2i[*DfBJ#cN%"K@MZj,3N)fC%&XbYYcjf$-T`%dZ
hJYMP-LE94UdDeac&k6%)@-G#l'8f`-8!UVccG#!Id"TE&6%H&!9AQr8Jfh,RLG$
XB$MG`9829V)#b1ES#%Q`ic#IKNeiVrplArIIT!d+ZHf`cKK5)NIIeXLmL5!NpE*
E-Dd#R1pD9+!YADp'9@BjSGpC'd!15A8MBa[1l0K-iMHlkM-Y++DK&N"$3"qfMa2
!F"#K21#+d0+!%p,0djYN9eiUjjFhBGeDDdl@8e32K[kVFB8`mTQ1XR)rXd6FlCH
f'K`VGF%-H5Bl[AiD0pk(YaLRVb93D-!9#&pmiYB5HmX@AYb@Sl1bMmlGR6mU,R%
[0iaM!UU0SPa@K55@GI'N6',k$,lmq,PeC!iX%KGrhe5Qh#)`&4*SUAj&``-)Zif
#0$FqZJCI,f39+kb,3e+!TC!%!3!!4`!3YJJ$[lB)@cd!!,DN!!$!B`!!Y8m!&bF
)!!!"F3#3!r)!N!32!("cCA9NEd0KFQ*[EP0eF("[FR3ZCAK`!!(rK&4&@&4$9dP
&!3$rN!3!N!U!!*!*!CS!N!1@!*!%$`"#`G64NCm8$IbF5eThS,X-IFf+rhi(p%6
HSN%T&bZl-rmSVH$lZc32+p3Ul#)ZrYP6l[5U2#DlVSMlMDTN5Upec&X)S-9H14!
p'@(qKfGA*9rE$Pb,'p4a81%k[@)22eY)N!$X%H$[Yd(!Id)hPNfY9a89,4R$cjm
30[QeCI$8NPAbJG)HVS$i+MVVfD+j+Z39jhBhCDL!3X(8b6Lj'REmq*T")-`TD`M
T*B*@Y0k$Ck6MY&%'&JAY2k98-X)r-KB#2Vq`BB&[Xrp3AKA0ACeY+-pEI[C"9ch
e)T8S)cKmBmI,EKEfl'bHTbdc525Fq)HdTQP!khjHkj4mR2%1,VjK2E52R3mSR[I
E+4V88D0e-"TjE%ql1Sd22ab3!)j!Yh1S%,HD2"F30$'#(HlE$95CNNBri,ZM%Ck
#GD9&NQG(YY$N@B,'(,eDpZd3Fc$2GcDcIBBDUAQ8lXCX006P3i@Mcc)0Xp'2&MA
MSD81m)+EUYk$Pp"!p1DV8q9Vi@!f4P4Kbf#4m,'dD`f!TC!%!3!!53!3YJK0V,B
)BTX!!,jL!!$#33!!Y8m!'8a3!*!$aJ#3!id!N!32!("cCA9NEd0KFQ*[EP0eF("
[FR48CA0d,Q-!!6[&9%9B9%0A588"!2q3"!#3#S!!N!N"QJ#3!pB!N!32!%,"e++
rrjhVBX8"%VHjeXH3!(JDmHMI,e$k$8mJ4[LGU"l@+'1j#Zp2H1!X!X4XHRP36Ce
P@c'0[`d[MiIUc$(Y)rB5f4dijG9'4M-+Z62[06$SD@f9$G0J#KN2rD%ci3[K%d3
J1ep!NCm!`cXRTqZ@`'eRc"(&+R"X"&NrT6b`ree'mFqZ`fem1HPhHMXYC4@UCHC
C"SV6iUeF*#T9DK@&q!hiT5LeiHYB4c22+R+k4fP"+YQSiVaZm4H4+beqBS!S3D)
B5B1q#L$,6,a,-PcCddIDdBqS3X(8aP!C'YG0Km99"Y#,k!59*3iPac#Z24b4iIk
#q'#*aLcJVkJM180"RX-F$i#0l+0Rj11"@Aj+Cd`bkd#U!!G%c6jTeG+K!05#U$Q
MZdQJ$[K!ch4Z$0@0lprdP3Z2EC1+MR2NFGZ$q5$8JFb%GV#H2+AJ"Yk*-98D33d
0T`9p1"AY96U'q083M2C!TC!%!3!!-!"!!*!+`'-!N!De6`!!5LArN!3!N!UPN!3
"!!!`!%!!N!Ue6`#3"UpU!!$k!2q3"!#3#U@3"!%!!%-!3,BAJU1h#e)k!!#[DJ!
!bj!!!!#[%3!6hB3!!--)!!!29`!!#)J!"LK6GA"`Eh*d)%aTBR*KFQPPFbN!!*L
!!,F",J+T!YJ"`2q3"!-1rrMrm-Y%!!#!!*!(TC!%!3!!03!!YKH#SlBAJU-!!-+
K!!$%5J!!`U%!"Hpk!*!15@0[EJd!!4j@D@0[ENe"3e0"!*!2J!#3#3(Q!*!$f`#
3"!m!3X(8NqR9lX(VHhR3)UdI!0[j@*cjRQ0q3%@2q#Kl#`VSjd45Dl*qUS$fA&%
@!pV`m1G@a@4`'CCBc8`fB`6jZ*H)JJ%8cMp6-4(r6lA3`#`1`LSl6DE@LMPdDiZ
q)5r-&ANY,G9kT0Z@cS0DJ$YXhl6q+ISqpF2"BLm#k1JXecmi[BUi@I3'i$EbAa+
*L(lBTddD"JGDqVbj[MB"ZXAdKVRPccjdTP[ll[cR@4MJbaTQJk'iSfk#)20Np#3
edR5CGG,J%CV,"Y$ibHUQdrmYZ+il),mb1HprQ`3!TC!%!3!!4J!!YL!GM,IcZlN
!!--)!!$&[J!!`U%!&K"`!*!16@pbC8CTE'9c3eFZ3dC00MKV,N4-6!!"DG4cD'a
L2j!%J3$rN!3!N!U!!*!*!VF!N!2m!*!%$`"#`G6)[q@3!'r3&YF"C4Nd$*1!(+S
C6Zd$H*-m#3&4GKSe6SSll6Z[R`Sm)YUYh$J+ZFq!acM0E,1Rd*!!'iP6mirl%61
iXBX%JLJ$Kd@a"S)#qGAQe6J"fF4*+q8XMmi))ZH-X9KEAP!YCNm1fGG'ATR-1MC
+0(Y4ddM%eG1$dXKEMBc8CRcT1*RB$(eG5IkeS23M&*V2c5%iFdqcb@q9A-#qE(L
MEHa3V%)46Y-N(3#-Ph%%AGZY`P2"Tp@LM@ccSpd1AJa!fpc"lHK[le,Z--Qa%Ci
BN!"S'`FlP`@2VPlmS&h28-F5qa@YMp(DlKrNQHiM0!i(BEF92Z*NcJ#PN!3"!!"
$!!#f)"f0Yr1lY!!!a%S!!-FU!!$#S3!6FjX!N!j0Eh*P4QPXCA0$9bj38%-Z4%a
-!!(GG(0SE')rN!5"!2q3"!#3#S!!N!N#X!#3!rF!N!32!%,"e-LrjBqL#YEA!@6
Hc&56J"bTlfA0!hL62!N"8ABLFZ#+1qdlVjm+2#,DVG`i#VR2J,RQX*Ji`kUf[NN
Xf#G5VN%*cHLqE0H'A3"12VK#T8B!qi&&#XM5)!",K1m6h#h@r-F$i3BTdH1q"`r
j42c0M['Te4GZeTli@hfrIeU&M'ULcYJ*hY,31fIEZ258[&JI-Ti#ISpJFIQNf!U
(S!aZ$`m%Eq9TEE"('hTkH8IbNrYVEBE5l"55$-Jr4H!fV&3+(2pa+81!mZ%qV#e
J+)J4BfSZ+9PPCTAqXIq0aU'P[2c+ZPYp3F5BjckN64@6VrlX[+YQ83#PN!3"!!"
!!!#f)"f0Yr1lU3!!aEi!!-L5!!$#S3!3XmS!N!j08d`J3bj$4Ndf1%XZ4%a-!!&
I3(0SE'*MCQeRJ3$rN!3!N!U!!*!*!UX!N!2f!*!%$`"#`G6)[q@21bJfe`&NT'5
FNi!FUGTa230iBlDJ)q`,`'Ieh')KVP4"0A8Eam*j%VmY2j99rYYA9MV#1S,SUbY
j@iHpk@pA5d8HVl'0CV1S[ba2"@Hc9,('&!Ce,4+H83U'GEK8F!9LjfBN!SpFEm4
*Im&f44em0TlG%$p@ZbbGf'lQiX3L%k30%!&(D,,2*K,$$GYikF-KPKpCU3B66![
P"dqSTa9dr!C',PYHfpD6%$3TPZG*&%*F*NYm,$cFbF)RI8AG&SV00pJc'I")NP0
ST6!3c6c@+kdEGlYeSA%KDaEILBTCFT8([-XQA*ZLrH0aq$FJ01#PN!3"!!"'!!#
f)"f0Yr1lVJ!!abS!!-Rr!!$#S3!@QU-!N!j08d`J69G5G@jdD@eP6'PL3dC00MK
,!!(2'(0SE'*MCQeRJ3$rN!3!N!U!!*!*!VF!N!2e!*!%$`"#`G6)[q@3!'r3&YF
"48pN$*1!(+SC6Zd$H'1fS#2Vkm%2VlM%3ebSJQVU0bmlFL9q@RmT[X9k$J(`J0U
Z#SI"c`G1FPq,TkLF"R``Hck+f$fdIDFpZM(aklKC!`Bd#p%k*[Y$FQ,`+r`94iD
)R$)AHcZaUHH2"e*$VZpU'@U'JQ[!m([Xdc,$#lS6'I9%L636'[U)b[TM543Zj6G
FK6,-j)DE6V)hPqQY+Q+,MEGEKCFNY(Xl-&"ra'r!$0&9-Y'M@#'[CL-VTSN*X9N
(Ph4DIEeBV1YV@LGcl#8+TVLYVB5XP&!NVMP&QUP-#A`dldi'8hSVI%#PN!3"!!!
r!!#f)"f-Yr1lXJ!!b*)!!-YJ!!$#S3!2Y8-!N!j09ep08d`Z8&"$,P0SE')!!4X
TFfKXBQ0QE@H"!2q3"!#3#S!!N!N#U!#3!r!!N!32!%,"e-LrjBl84CEA""rSc,5
6J"bTaAbY!hKMYU!Ml![!CrAFBL'a8+FeG4ZAREN5[bdrP#YJj,F&NHDi+,Ja-NU
IA[-B61X&T6$,i4B00ZZa8#'8V&8Iq[mQI%FGXp$6b32"`,Dahh-J"Hf!V%Rm"MK
NJ6Q8Llb%G[[HFD6h,CR2bU,[IL*26(QEjQc%M0"d06#K'r,J*-a9F'jGU&)Y-U2
BPL&l6ENbLh'6!F,3jk&J5i@5ihZPXN@MlZ"A8Frq-+U2cHq#-ph*CkBBFL03hch
kNRZjkbhkR+I)EAh#kIff3X0j"r#"f3'Q8h(@#m0b!+@3"!%!!$!!3!#3#XRr!*!
'`U%!!$84rj!%!*!+TC!%!3!!-`"!Y"eaFlId-+N!!-+K!!$`e`!!Va%!!ml0!!$
,j`!#a`m!!#6`!!*dBf`!!'RG!)N!c3(P!Rd"`!!I!"m$$[rirr$,4!!!J!#3"k@
3"!%!!%B!!,B(cTqh64Ve!!$,N!!!!0cX!!$,N!!!&PD+!!%,r`!!%*X!N!32!("
cCA9NEd0KFQ*[EP0eF("[FR3Zci!!!)I$68e3FN0A588"!2q3"!#3#S!!N!G#`G6
(4RY5UEf#`i3h86d-ZX[Kl%p[XIPRU(-q)8pUQe#%rYjZ,9`'hr6SV`$NiJSDEV@
,`KL(jAk-ZMhRRL`Sd5KK`Dd@XrXpr4qYj0R#f$A,H[c*pAA-DV9j&SEZ[!,QQ+3
$q'LTmk9-lJ!T-bi&$4pmP54EXkN-TbI)(2Uh%6Xq`XA1#&Sedj)%chkKJbmF,Cq
RM)i`)6r''J&`f*G9'j!!dA9+UQPKCbMY'j-DHhZ'L2IrrGI&*pj3h'KRqp[#`#+
bXbG4EHDa)HkNlGBP1SK-Fpd4`$p(Z)2G)")q+5XSD[M,)[2#LG)&X9bP"%@kV%c
e+VlF%PQ@jdF5$(@Z&N*Q4c92KL5Uim+c@2kaCP!bcUUBZJL*C2PE$XLfXY`NU`A
%0kNm$kcj)!pHPP3qk16k3b*k4Ek'q,KNr5HGKBR@#N+6A`bhIJHiqqd8E9TibjH
"2)lp[I8N-QYm`56'EM3J6+U#MV$iXFK(i`,,dbNVE4)`M8"4eTHX53PH,HR[I(-
$31JHC&*5+b[5848`'Y[Mi+Z+HLIPPP9'Z*f#0CDik!a%',Brh2MhfSP%9%N4a,L
NA@r&,dZ(4FH+-23lAJqdI4KP-F8YK0**i"R8)lrijFCPYIN@)8,Fp"i$pVJe,XI
#0DDBhH'G)@r'JUH5Vpc0)k*J@qc9ce-1S4A`1@mJRKU'+2)N3j(Ta2r!4r%8@YP
ZSVka[8@!2i&4L4jb,$R2F-pPLZC,Hbd`2fmTHMAD$rMIRZ$A#eJiahM*XMVU3(B
5"XaR#8#GZkjrPI"FIE[STIY2+dJZB#b!@6qP`[6BrI$DKG1UTIP1dUMZi,mK6EU
mZeHVkc*ZVNN3jT5qlcfcfU)6SXA8!bb$`Q8kS1'NIcUa49YF6cD+Lbe9$CRKC63
mKq"K%mU+0b5GeJ&d#@V*m*!!q,qG)GC#XcXRj%5J-0BEM&),R,r,)LeLZRQfXKl
eaI9HJ*)42hQ`BKS!qj845EAL866,lej5%lqjrHY`$lh&,a8"ja'"TijXeV*$)e6
Iq&-*!6)d5S4Xa`1$UMGJFl8f0@*N9`$XpAD1heSHJK,eQ@8dX8!'f`fU!9Mb99[
G8F"-LmIKai'6-$EU[hM*[NdKS(T0bTbQBX-l#eQ2(5)lLr0h`rUF,$U'B"kh2VX
P!b5Nmp5Q[em23S5ZVGmh5k4'Z*Tjd'GRE2"AQaEeDS&`$MH(0ZNPB)KLB0N(a2h
UGqDVPiX!QQ&rmK#dXDN2!Qb5R2fq6NLI"jP%rC34XE1PPDUf@`4$"K8-*0YQ'G-
mG&e-84#`h6jaqj&,2IRXEVMZfI`#2i4GYcK"Jp49a+1d`LI',H5*"%B8$3![+0(
prfY(k+,,NTVR1dH&3"Aa`c8@UH`M0(MjJ!-G$,!Z0q8E!#LV"`IDlSC*KA+%dqP
@kf-rGkp4FA(TU'i@e&,[qcr*$#$Qc8jIf0B)HaUT-$*cX%"AeErMrF6STEp[#(P
RqeM2)#1IhE55IMV)5P&jKeB#6NlA4`2Sr*&6kP*8MmGC%ChpANKiA!)IhBZA#p$
T[0XMK4Ef-A+4eZ-Ua*hP[H5XCT!!S"9iJ)8--JPr"S)NN!$6DK&qmRLK5')'"0T
!m9R$Hpq4+N5rjR$+r&jm01rLJqNmAjIi8)d1Z3kE2P&p@'rdUSc1MKN2f)$d!B@
d-'$`hrC8(%9dB+#N6j8qYKaXElqANGTE#-Xj'VpP"FFkFH(,$YAk$1cR6HJ#"AH
&Kp3fNYjX(TZjE0SrGFYArM-DZ%S`J2B+r'8ljSB,T)iH-aKDh%*k#"M&SfX(1hj
Pjf#m3c89QRLRm3m)*L10hi$5HlK4T-q2cV#pqchT2j5e,#E8,GCCXN&GV3$Pl-A
j82baka-"R,i1N!!R5C6b5fYrP%6MlE''qrZ@CKSb-6i*QaA5+RiPDEpZ+hcX%j!
!j5*hTj'JCJ$$@M,A(@Lh)R$IiN1d$f@TD"*&4-`)p&`#XGMY8,+Y('H*k)C)lSi
Me&'&r0d0D-"lJ3(pS8@259rU8%6!!MES1FGMUNUbYAi'jd-[()mE[fh0LJbbaeM
a,G!C(3)E"HTI`RlXSZA@Dp1iLq%E2PM0!ikkbJV6rP[(K$K-a@TPl4ADKEl6N6P
Bbi2-[i'3!-bEp@ApiFq+rH`'ZcMGADfiAIXcVScU6Ec6X,iPZ,e8eeFr3LGQNL-
H(ka*Z)A!ZFFYEFR[ca@E)*qX14RhPijaFr'3!2CQFcRCXh2PrUZ`CkZE4$08mmU
)#S2'rlq'Uhr%FDGG53`D3qq0kE+(6Mk%FhMN440IJ[@Q34kJ3M`X$I0lA3[E$1q
dk$lNAH+lKep`J(GL68MFZhQRCdFAE(*e[a4DABi9#49E(M,*,&8I4P")HJf(Sm2
DEb%(AE$mj[fhDAhUicKd[,"AXbLC"$HhVl+`-P`!AYF'[([&5(`8#IQECT6M3QD
+GX@@Y[2PccL!P!*8VHS5RMH[j`!QTq`E6E&0&(-0jk$dqF#"9IVMFU5f-4d4e*6
d0)5qZD`R)"9pX*LN'C3S`BI`*Q@kd#(9B8UTNVZN3k--0ESLHET8,"A'Ym0+fJ8
X0Y15M!,jDVm9j4Y+jMkrR!I+DNTjFNAc"R$bi$GM`YpR"NiM903DJ3Jk*NiK!6S
iM(APJ21$(R8lP*S&3b1B#X8bV8Ti#*Z2,68KK'edA(A$MaMe6UL'4PjJBXM@"K"
5ELV(mm,ZXZe&%!'j'YFqbZm@9e[YjS%LiAHi('G$G[$!N!$F[3S@8)H*@9%JS(&
N$9[1QYCQVV(U!D(qN!$R58i163T['H&-B'q9JQaVeR("M4$`TSNeGLj8G8%e"GP
ia5+m$%6k((,DdX%&!pSM@adF2JNRParm2-dpD-a5H*r$(*UMR0mkHXX+deY@RPF
MZ[Z#`NS+h1CbDrD3!2V$L"((Te*T[-A($)e2Lk&+TB"DFeDr$%&0diBLJ&5kf%`
&cAeV8,ipmPU'F60)rRXla@rT5H58hkbS@M4*)THq3)4E#pF`%EH-i!YqTY!Xh9P
EaRNqA,0%-hKa1HR1e@@R4Z"PPm6LFGX("R&!6'#"6U'($R1-"*j5q&T0H5iDRa8
G8$+md9fM0lY%iQ%1$4(D-VK#m$+UY0Zd-)J4+P[&3&ej&[)*'i%bXXmhemTaT1`
+!"6H-iI)BP2j9cGCKd+T8H*'5JfK@rPp#IB$6Y[5BPFP#N6EZSRRj#$B'R+C[GQ
9#*8G2(Z9NQEL!62jlB+%MUa,iBpI9d6VQIXJqRIh+450T*&C3,)lX-q-EU)f,Z9
*BVJNj!*q`(k&G*C+m06$ap1R1Blr5T@i&@&QPMV*+#1Rfr,RL&NZL$(M2G#9Yfk
@Kmh[L-bi&J6p-ir$J&fH'IjXr(cqL)fLQ(aJdjGMD'ISUG0MSS')V0X@%Scq!!4
*&BfahATXKqNq&Ace'mPLk6"VA&9%&hI,Y80EKS-f"q3Fj53)-9JedcRRA3@jY#E
Jj89D&#`Kj8q@Vc+rMD3dSLBV1@fT*dVV)@p&T5&3(N)f5Sf1ilHrIaBSM@YRMKV
"2P%p9'"KA4JF6#[@Q00J`FHFmRCPmLS$*5@*Y'6LNhN8b[JqQZ29Uf5)`YZ+LEJ
eJ"!FC[6f#,4Q1pbU&5VZBhJHMfm+5Q6@H$!DVli'JL@I'A[ai2FUKm`8KG5Yd(A
YClB#MI&XqY*$Fl*HE!!kLbKEHS0LaN$*fLe*PG#FlidDMfNiNT!!d3r-UU)*-L3
J!q2A$j['q3*SI&Sp6@kM[9-fLA-NEH01rTa`j%lc#pMp`l06P[X0&6mUT+)Zk(D
m*kNALRPT4YU&CQ*fVH3`pp%1dh64caEfM8LHbGZjIQmEmdS`'8UFq2S8`5q$
6'h1eimYGrGE0BHYHLacCPk1!P4C%fF@k8lQX'3YcIR#`"*!!3ha9[9(Y4(S%,$d
X,635E`8(P4IEqfJ1RGC6%@UV$4XLV')0UYcbBR$!1@K%Mr+[i$p9G[[U6%Amp$S
9m-50SqPbELG1J4"0Ze#,X@pGjlAbf18,Vc)@b2VSe-&+Z@FYf*kEqLN!IUaT-T*
'0#+mh%*dSm#B3Y-m*ph9lQc3BV8ak!6Mp2SV+%RN6&i2iBT2&M1rqH*Kd3C3rKG
MPe-2LXa&I4f%3Gi5Tbb$ER!LGN`ZE$-IrJ#((5XF6`SE,#H$(XH'*%5DKP"HVID
dY15qZep9*ELJ)()lLpKE&JI(#fSm#qK&)d35rUDBRJN$"`3`mD+U-4@5SCG@PfF
EQS@e8LZUS!E1b)M&FF1fLMC'Um#"5GdT8VNa$[G+6A)`Y8RR)0lVrNVr))!h!4T
6ZVQfMXm%G(9Qa(3e+d,6hbKXGX'p@V@QUFlTSeNe[E[kA8V*E-RjS,61hrcE&3J
T,2P(I'#b'f[0NBVMrXB%hq5Hl0eMViL3!1,qb)UXARGjRJK2Z#mDPbDX$*RjHKD
JH4'Rr)eq'(Gc1U(9(DT5V,K88f)-E2!C6VaiDC8kMIRVFjR6&p*$6pcGS3M3p%`
4Z+lZpc*jQhdK(X$S3Nf&3[ii`)KfpSqHak8M[aPk+H(,[L-q[iGfM@DpCF%0!A8
-&0adjXMFlEmB*i&"[mirlXPUa&ZKhNIH3Lq%QV@Gch*TD4(iLL-`rq5"M,Ck'(h
m'FTCaahHmlNcDk[rEV@8&)e$C#$2%jRDUQK*IiG0cMU#0$HAF2Yp6La*DVRMkRS
904C,KAp#jl@`LHiUhKpd"j`ej8!bM+,$SPB-0K&ccm&ZbJSlL"RU2)&hE,Sc+N9
ik'1E(0R(Q'UXc4&T[i5UX388,09VcU#Y!6l'I8"L&Fdr)iR!R-5AQrejq1ifr`$
ENkB#e802KDD!8cZpD%G6*PY%VXpJHSj,YhI0mf4dm6*d9rZ"$I!+l,+QNU051fF
F5R%l8APB*d,I[L@rF`J,F(Xq3`XYMK49q#JAE!%'U-)b!aPmDL)TSF&2[)@'8c"
JGc)Vq-#'cCC4!ceKBLUYEcCD@#26EkMMV@H6jkKeX6)Td'drTdK,5&M&")S`M&f
Sj#Lih'8f1eUV6G3r"3m!2C1,cc8aT6b$iZf82Jjf51c1jQX,U"6,Z$D,+'VRhXc
YQ*4#caLC-e%0CX*i[IXkla("5!I2Mj+B140hk&"$b0li3Q#VB4,J2)-[69N+%`9
$YEVF#Epr05&8lK$IH*8c2a#Aja4eUU(k$2mIr4qJ,kL66SS0ZVrT9f1@85MZfUM
$Q4f`*,LBf,',iE3KS92paK(`[RH&#bXD6a6BhiV3Fq-Vji,c(!kF(CqBD*%!&N1
GlJG!iNe#p(B&SVRf)QU[[aY'Hj82S(a[Y1%B%plq`M$+qh[Bb%UhAFaP-*(F2-J
$V*KeeA"c"&JX@GG[Pc`EUkDINl06aa33"kcFpe"N`bVArL#ra3r&NXQT[Za-@Hb
H3$KIF-")`9rr16bL+5X5#),Xr$"6C$A*LIc+r!eQUMIP(F55bSFE(I,(,LTiQ)b
1EE0dd)ffITC%kqN-NmTQkHaH0RV@4jcam-jINPeC%"@5jhbEPJilKNX$d!mJa"X
bQ'pkIpJU&!`'M(JY[`NHcENhUBfapU4P,JU-6Yq894FBT`fS$@j"+JTZm$P-H5k
+1ml9df0,(Gk(c9Fi)H6h5&dl0QZ,F18Pp3hbGDciV0#eAmmETmEI2q0LKj)!$Uj
T5UeQpiPTlkffVqS3'8)B+hPNj@rbkAN4EDD!mZpA#TPKRV&Vk+@3"!%!!%S!%,I
d,ILhp#hi!!$,j`!!m+F!!-Z3!!!DkHd!!EX3!!!663#3"!m!F(0PG@4[3f&bBQp
Z8h9`F'pbG#l2J#jiE@`!!(2"9%9B9%0A588"!2q3"!#3#S!!N!G#`G6Z@rThq#(
8#D"k6++U-,V$`FDj`@-#5@3ZGNQUd+JLDeJ2q8I1#mH-Cll[9QQB$*F6"95X-R(
6Hd01rUAV!dZ9mjF`AAI9@-!hBLh#EhJkD&ePQU58[C'paVaF*P6T6Rf,8@4KHD0
-ZR2ZLRar41qY-a-[T#mR(F4*)H%h3E%1e2NpT#%1!5kr0a8CIm)"DCcG100,j4p
JELlVFkVX)3CCYep""2ESZBNdaqB2aDk4I-"3T0PA%XSA`Si[U(QC+6U2e9MS+Dr
fZ!Mm#[9rG9-Fr5,FF4f(P1a#Ai@crA*h"hYP,j4LQ$kU-("jS"k"V$B2(IbrSih
j)[QF#IHU+RDj6A5plpV),rdE#SLjY(mBH,S"9YZEF6m&IMQTVLhcG$I0KU,@8(S
ZeHS"0NQ`rKH[e8HhercPHEMPc3$CRXPYkRS%,mNL"HiYBka0LTpaLCmXC)-Jkpp
YTcdKqd-PMpGDYff`5BjXNBDH$JldXVLFaDIBPhURQ-aja""5J`e-NQk$eN$BV0X
I&$cJ'p(VbJDkATEFcr%Y,V!Rj9PJi&9CN3Q8SU!BiZQpSHBl6CcR-G'i"&bl&%j
r4"(fh[`T0[5e2[II@3Up-KMaik6iJ41ICiAm@D@6CY'c'J#f4-L[+p1jU365ML,
lFXQRbIRK8UjiE#2QU,biU'LEAm3EPdqN*&R3KMS-rjBVjBT1lR@(kRQ8'$Up8Y!
e4Ii'PEGLebL0pRD`8N$mDX*e4#H0[0Lb`N[P'GfLKdC[S9A0IQ&q*prc-%$"QZ#
IL%fY`9!KUQ$c$T1dVrFk62Vcr9NK1dVeVf#[G,f+"@*kmTIIQehPAQV+bD"Yd1,
aE3[*4FDU)!PSXV%fa9PL(ZDii4FGiAd0+Ta"'M3-6Ykmr`Pa81(Xi68R5I-8)cr
,+0lX28Fq58EN@'-Zm&-EQ1@JXpE*@lK4Vk#k-NHSe@fNQIDD$S'd1KZMTSJ%'B,
GN!"UAT5db8p*f*2B9R&`5RN#0q4[%!CBNfmE(%i,`HpQVkA%JMfXCIX@*[L'@`V
5MN(d+lJeD@f105XFX,R"VfF"efjAIE`(*qJTYZ[)+M9YR2#!iNjH9A!aC82(UGJ
hb3,!8QP(#FT95diDFUK8HH6Sk"T9PZGR",cD[5dV#S(U0K4jT(8+N!#5&!V`Vr3
2!ekYQa5+!IPam6*Mlpc5pFafk3h(LiZZhPPQ5VHq'kqkG9Ib6H+)rM5dlZ9[XUc
rF&ci-N31bRG*VaVI)p,,--R,a)X9M4r'Yh43d[ZH"93$VC(J&(,id2lmrD44'1`
E"95!V`!38G1dR[Xc4XLXb*2`Ipa4!0E[%aV%,lMDiNd[eGbpC0bhZ#ErD9qBY#*
c''XCeaiYcDPUeLEY5PE*T[RkSc**rhM-rYBZ8+5Q"'0A0[S#8Pp20%H5K93LL@e
pTGBMaTS3r&EANDBD[k"0'%,QSqMC*$M9PpdX[BJ(T5M0#DrM%M8ZdF(CaI9hT&m
1BULeFGfQR*5SLMek@G2DHS)mIX`HiFI3"GE(qGT4@fGQ*k6J@L5q$Sj6p8*%rp`
Ll'GG$r4'RY+dHc)i4rRN5-4m2,fAl`N9l"*b+,AI+$TmY34S9b6-H`Db)1RJb!+
G)SKh2jP8f1J1TMZEj&ND*(i(Y@*IKb+"e8VLm-HS@*(S#ZKmmq@TdfHX8`'LJJK
-Fb"NXZIpjiU5T$VSY-hPp63XF@LGhR-XYpAdh14V1!Y3Yh-hDiYca,##!IUjJEB
ETC9jiR"E6Ic2lc1&YmAak@hTp6JHfpT4A1Q!-aBp'P[Y2r+)T#2Kfqd-l@Mjq4X
Q3'IU%2Q[4&b6KD%R2S63T'q$LU'ALEP-XSfUb6Lj[f81+YU`ZqZA(pjj&m3r@`l
EdKSj4eEaN!!pUqDcHV5N5E2[`FQdL0iYp6K4$Uj8dfJVj8`,ZU(iPP"4l5C!G,,
kM*j$qhEaDpR2$k&8G1S5B3+NU&!lY5fc+aX1p8P,GSh$+[9iB-Z1p$[(X'Xf5dQ
GH"S@Z*p+0(ck!jFK8l[l%0J'BG1,SA2,HGN'I9$6qpCI)VNH1E2jYF&m@Npra0k
e$NFQS*9+4%"XM#q0(X05QA&G5L92CMK0MX*aH#bkXAk)c1R[(jd0'TVPMQK0[!&
CZkFp54Y0Bp!FiM3Ufr%'$lkBDiMjj6qcAqE"liSf,,)K)4Z!('IBkjFE`'*T)D3
A4T+Aak$AH'qapAC8%2T[`rJj%)pTUeJ-imhrDD%(5"$BYESHQ)kmi[R)0TpHGLb
25Y`4VZGL1IVlSmQ,@J@CCj!!BYSQA&Z3!+bM42DSQV`PjU#GKjK(8TM-a+JadQ3
U6H1Z-bAmJ&@arCl%c5XNi6K!,IMk@&dHeaDVM&QfQarUdAiUc'rVFmF9`F6&cH0
HkS%"89F3e*H)J1*$D*2qGDpKQMqLCfD&!#86%f2DZ!qLdbY+QV9@)4Br2fLJU,0
)NB,42#`D8b6eeaHUABXN('@%lTU6c5ci5VS$I@bfi0"J#U'$9-QAAK0YApq5lmE
m6)X'2(C2!(8#pleRT`fTkZrrhjpm*r'3!1*5*U-Kbp#bq+Xd(P1CiTLcFqKS4k0
%a*6Xr#[Q,XMkHR%#d()NThcDcA!a0'ID)'jka99ZL%RZV1-5"T2!U&S3S+a(+CQ
i'([He2LRf-cM#6V#J3LqD#&0@YkCN!"k8DdjmFq,qEpe$k(#p6+Y,GZq%jrQ1$[
E)j&1dUiNJfhiJCfXVLr6IjKi6@[F'lM,BGIDkj81JI-hR-p6HL4f0qIM65-8PqM
9@hIGZe9f%(@4'1iU0#r*,ZX1IQr8j&UH6aF[,k*If-@Qe(0P+`A`Z`GJpdN%kFR
8F$"PdY(!S*FAY$R'#&1mb4`a)pcp)-rlFSD4833XJJV0qMR%(2P8G1SIae`*a'5
kP9CB43aGQl`ad&!9`ajrH2baYaRR#aE&8e%bjLP@c04`JX[cd"&e@8J)IJ1dRmV
a33lhaX,d&HfYNK3jN5'DLCS5M6E#I%bb%S5jelRLerF2$R9*Icr-#IIpc!D9eqp
YH)N`[++Z)J5$A)rRp#kmF82MpbTm06@@BfVdGjdU%V8`RFIU5r3*0HDTrT`U0BZ
I'q,YjL6H#Np&#IYB0pkH-bPAUG8A4M%fG!*-j(A5mE&,ip#14ZJPUSEYpNN-$di
81LP8fC)rXa,F#CX+%M0i0[0iH$lj(6fF5LdHA`YVfp22j2RZ"kGB22Rk5T'@ALR
-C!*U,Y2U&TC6I+I-5QEUC`)@q#0LNI%,S`,PjKQdDZ&f-MfCKE0VBiEpVR6593l
F6SKZ-G)3eU+CPSP,m3#JGZ9261N8[B,QpPPRhX3dfa@bC8(p)3J5imAp"PDC9A1
XYNX&+)cM51BdMYc(Um,&#qC+E6N'FAmR)HY)lCLc[85)bCB`0lpk4VZqS,XYj""
Al9`GDCL#'1kJaFI9h3dkkXmL-(#eJLM5#Lah&RQhkHbjKS`d$!!JIN[%lVRdZEM
Um&,-m(540#m,4a1)Y5("*Q"T6H#Bc2bATNZ[lHY6a8X%V$e"TC,3TE2brHRI!kq
'ara,(qX[)l($A5M1r@-U#YDNd!m3-kIVYQ9f!JNdcNhP(q9dM5`HTkaJ[("%Q[0
Y2`(i$Vb'GL@*8fJZdQcFJl5F$eY-pRH4pAG3[-SiP[$*M%ILcJfS)jj40-RBfh1
ddfJILJqFpb@TDLFRR1kb6#AK`V#8i(LVc$m)JjhfL#BZT2D!k6qDbda!c+I13@`
"KiH+G)P-I[S-h1%)jZ4V4E``AS#Q44pA0NVDUK&@KfpSPE$TB#Ca+3Hr-EUJ8H'
KeU9!`c6KLMVreCV)e'#cIbSJL%TJd)b*%B'fiB3p-b#m-HUF'q@pjUZDakm[1h#
J5Q9+bV`V`!2()9$HEDfFFhJc[ZM9Hm2M+G9&Cdk%G&pF`R"V3)(KEAB9rrTIda$
MCa%$6%5rV1!hHi+%Q@3IEN%YHXJ5B[YHH#dG&dQXe`,M39JH(UrFZe)M0Q54F6F
eH5X$jD$(*Mr!!qh69qcL1GTTjqj@mrLNr98YBRA"*dG53-[S5U2XrlMa*c!U9ID
#r9ZZK,!D$q8M@i,(c1*E,e,5eUjR-(ICJ$bp0J0U5GpBpNT8i+GC5U+$@!IkJZc
h*1l39-P(H&"1[4f$ma0PQk0HC)YXAZ5`hk6%b-RH3KkU`Y$6,`T[!r0-J4LPE1f
AYikr0#iC+VYGi8c8b$mUd1UJVM3YHiYUj9HQ3%8Kf8c#(jCePLcU[6&qr!X)48U
YC+l[*f%EfHIEBpBQ1A$ZmSP[$CVE[N()IP(em6LIE"rrB+k6EF#N)4C$MR306Ub
L-+HGG"B40I$[VELb9YehLZ(3MlDhqN0iJCM4Z5``U3I-`9U@)ZG*HXjI&bVeQM"
&QJr-SX,fE`9FNZ52DIdYr,ZlUN'q$$&@4@VLakH!5X185`EB8c$q09LlcDR[9,H
6D41&fS6ZCbM,%`Pfjd4V-H!(a!P[5BHXT*dcNr)(HAl"HSFEBb"2*0D9#$DQ'(b
j'B0h19)8)'BJSb'ASKii)T&TC(VeYX!jQ%(I36K(DBd'HAHYrNq[JMfZ,E9qS[#
CHQ'PC9aUC8RGmheZqaSb0$A[6k'K,,'ZGR%HH&k#Bb"+2KNNQ(%US+*DV(TSG'J
%8#m#6paXQ,H%X4U*TI24hMJiImqA*h4HHDXie`VX+1289e'ZJ'b4-49)kZGKX35
iXr4EXNITQ("pR*!!NqqN)ZQ(K*3J,C8MSq`IiGbD$S%9+2Lci6kPIm)01mJVXNm
#PU&8E!"-iLM@5)@d[-YqdH8#e-`fX5"-c5#r8bZTc9f(ET!!a++d2d'GRFAN$(G
HYidR"2FJPIl,M-FS03I5G6pGh4qTkmDqcbc$C&*YKL1Pk2-V9"d!Vb#5XZ'H63f
*`@e(Kl%Am6,BpMBfr[P"YlSI()ibQJU[LmP)9IZGrUri%G26CfP![l0Q9ULfl!J
iE"(QM!Y8K2'B5-4F#H-aS!k2d5&YEc$d,4c)C3Ch(GB@daL!2Z6Bf5VGkMGjiqi
C%#Q!Jk1@X4[Y6%%amKLMPiN!9Eq#2cECK2+aTBi(&11k4hk![,-69Kbl2hCPVZJ
#5LpiJ-(EC8AcSApHbkei#SKAcEVfZ10*NZjc1LFX#jHSr!-JI8J,,8BeMJ9C%Sh
b0ZKeY6%lq,JqUTb(G!adMRJXjYh'D`apB!0`p6ml6p9ENfMhNk@kAJb[[Uq%"HQ
3!*4NVl&cYHUmNHp!-3E+j!MCGk*PleTCDl6GIJGIiLklQY()h[`L6Lk-%Ci)!(M
r*h-Y9"$4rM*mPEm0#E1$pP'iU#p"4HA$Yr"NjZD5[cE[230,6MiI%R@RPZYrYIh
!!5Q20Rm!%R1Vd#N0Af6i"S,pNX1@E2a9qdDK(CbbfXaSU"YkV04NSmF,&"`d@@Y
'E`'3!2-KQ4E$5BeIN!#-1YV"$bD-Yj!!H8GVJXp81pB8U1mLD##rYa@UfhRH8%p
lc9&#@pDr)5,k16`b`&Bqim$I`QGRMm-d$($6)qX()2MG,q$$&&$IJ0E*$2[e`C!
!+&I3eT%JG141Uh33hkUS[ieq[R3ld0GH2RakHbA`p`6-GXdDA*i'JmGk"[r(R&1
mmrk+c4Z9eCdZ'AQ!p2-hE!IGIr,S4VVEQmPiN!#E#iFQVLd,jQU*HbR'@XBhiNb
&Qq`@++U!%LQ1m""LYr-l)Y8cZ3bL4NViT$kZCE9!RQpYMI8EZfUGH1Br$*pCqM3
i1aU&Q`haGFXl)JfR"b)$$ccBhL+iiBr4S8qQpbAiM*BM',BQ3mLlpAE0ECN@iTQ
((1,`-fQj'YJ!0kJm[2bDHdbVf9XP9P6l5aUd9"*[l,68F0m6rVXB+h$e&,,r,a$
p"0XX+R"NF0UHJXX[H-q'1r3`6XRClf!X3fZ$kqSrUJPHaq$I)+@Z*Di[KEAU4BG
l9$%@q4f0C`RAT*-EV!9k9LfbpHGK-abS!A2J"4CRP%UUK1b*hD,k@h`brjiS8J4
SrR+h0eLjfY5'Q(TA-RUbpCaVBr"3NDLSc,E9GKf)C-iAF")@R-GldVKi,e,4T1-
5k2'+F@Vm5'U+(XFZ@`lkCBV`jaCQhIH@F0Tc$5ZXbK[m9e8Lj!da*N"hXIrQBGE
V%6Vq)[2c[@N1FGBG1!JQ8+pPh'Abh"4&GC*3m+eeAh5cam@TCh0k%LFZi9#a+-h
6-X-`Pc5YrcfSERjY$PMpfkm&ZkfbVjfkNTX2M4d%jdYP$)Uj9Jek-X%5a%lITr3
#Ar`00bS@IfNFkZ)C2KAFH"4Z0PD4kjkVK$f[a$G[SU#XTdhI6&V-$'Y$9j6XlE!
K`2i9FBFU4qUE1,f(Sl"XQcTYXIj9B@!hEfI9P84h3keIja@qrbRPUM*D5FkR16"
`16p8fb!fE5ca9Y&*344N2#BpI&2hHU@B,T9C)FGr8-,M9bSbaKp@M@,[Hd6DXT6
Hr8b3!$MTkDHk!,4PTdp@Y69jpEqXe("lCrFqU$hK9imhapp+Ta61*&3SCV!DMV`
f(ZH4h6-i8k%(qM589TX$CT0($G@T25`3(N9mrU'Q2([kE1ESCZAX`d0-Hi'$h8-
CD,dUP+L@e#p3D%JY(5%$YXAY059LPfaHmb-hl4Fh2a"p(3C5K0hc6ifAXeAq$(P
2)[1mTC!%!3!!-!"!!*!+h1`!N!E,N!!!!,eRrj!%!*!+TC!%!3!!-J"!Y"eaGVI
d-*)!!-Z3!!!!m9d!!+m4!!+GQ!!!m5d!N!F`!!"dD`!!fp`!d3!d!J-"j3(!!!m
!$`-1rrcrjFY%!!#!!*!(TC!%!3!!-!"!!*!+m0F!N!E`e`!!+*VrN!3!N!UPN!3
"!!!`!%!!N!V`e`#3"Um4!!!6Y[q3"!#3#U@3"!%!!%%!%,IcZR@hmlTe!!#[%3!
!mY%!N!0b!"($e`#3$N*eD@aND@jR)%eKBe4ME&4V!!&85&4&@&4$9dP&J3!!`!)
"!*!+J!#3#3*X!*!$d3#3"!m!3X(8b,rPLcC0pYDmQHJ-JaPGGFXqe4a#QChka#5
DfXJh*K9&AVLH4p0&NcXDX5#NQb1lNeJDa+TC[r'(VKP,1)1,Y9`P4,IPZ`r(aEX
1M0FB)V8Yfl0G&6#a9(hLeERc*lAc#E#CR&4#ZZEM0!+bI1aJBHaNVSbd5(kd@JZ
3!+F,eX@aQQ0R&p8$Y!SEAB+r%pfIP`NC2"(U3H'0a&Jq)$a)`MpY%XRHqeecq(m
(Z'RbEe1VHbS$0ApUe&!$`Zh5U)T"MDpXl&I'"4iD*3DEI'5!TC!%!3!!-`"!Y[,
b!EEbmJ%!!2'0!!$eE!#3!h)!!k4,!!$c+!!!!Fm!!!*%!!4$9P-!!,Fk!*!)3!#
3$i!!N!HPN!3"!!!h!"#fm[)"Yr3D'J!!mY%!!21@!!$bd3!(8SF!N!-6!*!$%f!
T!*!%4@jdFQPPF`!!Blj849K83eG*43%!N!q!!*!(4#pdBf`[N!304#pdDbq3"!f
PN!3"!!!k!"#fm[)"Y[,b!3!!mbJ!!23"!!$bd3!+d2%!N!-0!*!$$428!*!%8Q9
`Eh0TG'pbH3!!Blj849K83eG*43%!N!q!!*!(,f0fFh*[Eh3[G'0X$D@3"!%!!$3
!%,EbmJ'hp"8N!!$cPJ!!p13!!2,4!!5N+!#3!cJ!N!-ib0-!N!45Efpd!!'16P4
&@&4$9dP&!3#3$i!!N!N"GJ#3!d8!N!32!%,"e4[e("HEj*8ma$,1k0CR*e8pmQC
V5KfrDe)K#(BJS%%'81Qrlr8NrKT#'p*,!mBUpI"N%8,S(Z!p,2l"b*!!HJ)T0#!
kF(0PFRCPFMTKEQpZH@e[GA0!BhCc,R4ME#jcEh9bBf9QEh*RC5jZCA3k,f0fFh*
[Eh3[G'0X$D@3"!%!!$-!%,EbmJ'fm[)"!!$d!3!!p6`!!2,4!!1ZZ`#3!`%!N!-
"aF%!N!48B@F!!'1q9%9B9%0A588"!*!2J!#3"`fPN!3"!!!`!%!!N!Vdj!#3"[,
4!!#eBIq3"!#3#U@3"!%!!%)!!,5LBc1hTj!!6`!!mY%!!2b'!*!$FJ!5LM8!N!j
%FQ&R)#BJ4(*[F#"8BfaPG(-!!38rB@4bF&G*FdL&!*!$!J%!N!U!!*!*&EX!!!D
Q!*!%$`"#`G8FbAc[V%eQ@VrZ`'%)mhd&e-&hq6)Ze-Nj)$Qk80hEEfSLGPC8""h
+#Ar,Sa8*"U2a1"(Xk&&TA8Gd,@VhY%`TH[lr`T!!&JCaYiJ`R*Yq('G6EbDi-*a
ADm`pNSHA#P4)mYNk@jXcCQF[0i*4L9m"@h(2@"ETY0chQ'H%!FPLmbkaPS+P2E8
iX4dA-K'iA%LU84E5ViYj%53JBZYi%m6+hPNH,Fk40RbhGX[jIa1!AI'YQUc$[0c
NV[8DIqh!j"6KGE1-mf1U"KbB1jA%KdQHQe6'%h9+kNi4L`6KbDdY+M!)P[e(`9e
DCSq-Pr#!F01ThJl[1Vqr@$I-0,EGPb+mFcLdRm(3`JY@D8ZLb)lqGYaUKqJXqKp
6k[6HbmC*'LMk)rVb+dlZKf`Bp)$FGlRf4@'JN!#b5ecc(a!@HpBZ"2lXJYGqX[L
EKCkUp845Ea4Ah)FcDFVSkcCR5!Y6pGK&[%!c)Jkm`hB`BA5)IlIqkcT,Eq6+q0A
%"qb"ah%GGU(mi@[2BZ(jKl@9C69BMq%+b6llhC+M`13A82AV6e91KA&E!QqQ(MU
IK-kJ3R&hI*P[2[42(Vc6l'q%F[j%PIa`#IIQNmHKA,$QBa++IJq**PThdI`[-pe
U0$J3dF1[6K'iMm"Q@Lj"iN1$0)qbaMa["8'9KmDb*hh(aaBHp$8lf1-8-R,pD),
S(BUSNF*X4Z$-FZrk2K-,!pT"VH'mhPbQ!&bCbY!P+0P$HVI'(!"@8KDJYeV!#QI
mI8HASRZK@h+MkIdUcbX+PC!!4f4jUkX4%LdlbH8U4dC!R-i&0Z#b)m9@S!Gf@U+
(!HDAXaFHRXPHIc%D%RN!2YRGrjEPpXRbZAbJNUCJDV6[JJillTlY+MEk%XhcRUr
f3KH5XJ6DRhD$#JECkqUCZ32UqU"[#*h$CAC1A&a%rN(SK0KPi-lmA&#UDdVeVA8
iYYfj@6Vr5r-KLbaGCm93l)AU3T)M+@0k*$0Ya*Cp9ZDH8$R)MDf(qqZ&1#kjZq3
YTje6IkX5K$kbcLLdbA-H,2fbc$VPk$"BE#c%CBKVZH6@P&`'q#%clX@0(Uc$Lkb
1peQM5rjE*d)c!"NC@+UP"-a3ZK[Nf!"&p0%hd,2cpB-&r0YFbMqH''NM4NUKHlc
1UhA[l4XSF`c38["q8Bj#TV-a**HhV41hmCGb,PHlYQD"aH[2l1*jqcP`rKX"qkp
4fh`d@AE*NaABVX3[Q-%@1`5dqVd#8c!3MLZCkd3"ATDPZ6UP-8`+[BQTKPqD3RV
brrE!1MZLG8J1*F,rmQS)"hKI4Tc-VP3A'ENI8V9'&i+ZBZDCVa6N+X%039'-p,#
VpMIjFPa&Y0c)Xq`00R!PRV$bNbl2(aV3XV+CcT@U1ah+R99LqLh(GK1"%9aGTbf
j!i1D`4+!,dX"eYZ,IJV3'ZRr!0mjSf8bf6T9Zr!j#Fqdj2e0L(2#(CdJf&$jL,'
2kic-"4cbY%KDAB3MfGQ*I9G'bABdFZ3iNpm@$IQ`TkIN)ah'0iP,CA5f@,#dYNV
GpCZATC8h'heJR`ZG05Fd[EEJe"8bB`VG$!MFX,H1ZJDI'9UXr53k%YHaFi"`(f@
d+EV'Z@l0iDTE$H1SUdm+b+#B3GYi!KK2-HdF0(`LQlVYe$m5rb+2ja!RKl!lBR'
G&'8F5(YUE2+P,NbaQSE`+R-cJNNGrKE#b&3M-XPRJ32&i-ep3B83`-"-6f3J--P
-GYKhUJ4C`4XR[H3e*N*JPZRm10`A%@62+kFmSpkTNhJ+8Z4$VBm4X@RR"dFHL$'
D-HL5G!DC9RMjc[)YF@r%(LTm1ZYEa)q(lZm!(8'kGhY1qMAY[Di+86Z)6(`Z2ap
*Ee$@HE3hH1-DIb-ISB5e0E"i!b4P$P5RY9[PhI3NUqPFZlD3!!IC-$Fr!a-Z-Pl
Z4eQq4P+Q@f@`BNXlMKSc#e+0T!!D'`,8(!Vl4`N[XDLrphReU-G+8!V8[rCLHBU
[FZKYN!!Ppp@"+RbM&)ZX+h3j,r91U2%,FX-%IX(j(aV`Yeqeq$8qjEUT@lBb$DU
bP&+I@DPDZ%cJ&KQc3M20$SNilKH*k['Yl-pUBNIVHS,SQKidB`BIl,1*%4qcQbI
pSk9B6&1!FZ"SNaV-'Np`NA!R046,Q!e"dXEBHiELGQq!%#aX-CK[VD*LN!!da*1
+c$l"1SfIR'D+P6#D-2)lTb8"JV+CJ%U*HBcJ6jXrI2h"DM'jX%,YPSGHFMj(CcV
AaE@eD$ekQj[YNkSB0[6H"j3H"cQh-`DA`h,P&U&-qe9!TC!%!3!!33!3Y[MDbEI
d00B!!29X!!%TE!#3!h)!%DJb!!!q(J!!&@%!N!32!%eKBb"8Bf`[9'XJ8Q9KC'e
P!!(b"e4&@&4dG(Kd!3!!3!'"!*!+J!#3#4Ti!!!A%J#3"!m!3X(8bB[h(GV-JLD
k(6JISY6VFH9RLj+dRjdEN@jaqi3Ar'Ek&JN5Ga#FeV"8aFB[IN8'`q3l3I"2cY2
#5!H!H[r*-IAN$jjrYcDXDiC(69AdE5SY[mIe8,!eJY+TM+RJpDYG&R"4deR`lj4
NZk&BjX&j*RTYh2r[Q3eHlJUX@HPL$Pm'RK#6RJhGii"&q(A#'*LZhQVY1(kFCLQ
ha!4a,J#)p[VECESrkT!!2a2Q3AKEbQZAUbM,2J$LC"DXK2+lCjJ,Ll*AfrA0GZ9
p+C*#D[%+i`LZY&`TrMl[CDIiG`X6e`*SZXG*RcM9D4`HdKM*,jP!(Fbhi8eI+mc
+-SE,3r6Y9MU*2AaZ3@$m`6KLqq!62ebVr!DXem8EZCe"%HZ[`NG4[+`R&0@M)Km
2,##DJ9"j*0S)R#RLN`$m9cG12,Z4i5@L+1qa*h6)``MMe98NG'GCCXYdRS$Q"iN
+!Pc)P#'Xr'PE!Ha0PmRrSEA*4eAf1C8,%H*SpcYcCSD8&cJ',)qMXh%l9eH!9i9
@FFjmM2[R!'b-fGB6MSbh)AD13DG+0!d%R0ieEcr0)p6dNPVJmM#k1+cle(M-rpL
JFVHH!6A9Da)8-Yj`*!TK3mTc0N-lTGh`-FeQ%e#qJj05VPh!*hU5`+)-"'8Xe*-
EIC&h$,ZH6%YBd(j[AL(I)8(,b`)!Ja1XCE8pY6AY!K3YPr-MIj3l-YI,bAEG*HF
NLblp`bl'`Tb0)ZSQ3XLVb9jJI96C*0SeGj-[i1!LH"qk+(dkqMV3deHV9"S!QkD
aJPX,K!SHMX3ABEUmLc,pqiJQ'QEVRD8LAbC9YBFhQfpbZ[q9P6ND3'hrQ+K#lN&
!HbJJm1Q+Dr4qfr*5dZMjl8Aa5R%I(a26GJm-2TLC48V$iL6-(PSr#4M55&'N0TH
E%SlD"NEl0L[P!Yj,5I'#F)SPCp0$cVJk1Sm%,KBq)0r2bE2M2b$*5lc)XPDaYU[
ZU%1pa`lQKmf1BI(JJ8(#qJ@-jLB)E+Y*T-SdRTA!eea***3(3QMYUNmU6mAq2di
GN8q,X,(B3RVA%qF+UmmF1EGFU*A'DjJp&T)icmBF*fK)2r$5T1Kq#ICF-CFMR"j
HG6M)L-1E0'reQAU-fM66S!-4"E5K00f)dbbRU&ILk6CjIEIkNEYcF,#"kbaFT[8
LLiQVBr-SfMM"!bELcDJb&&kdM8#jHSQQ!D$D+eTMGI#R5)[C'$IYhjJU$Q&1jq%
hA*3ffJ35MbdpDiV@4Kf4LZZKm48#ra#"4UiYkrk1Qm1U2QT%HS)I2r8ipBhE%fl
A%[p$R9*eS*KI!46h"i6`!H8-!YfXH&aFAe06cYFf4'*G`MNi3S9@hV@F*qVAh1i
$8A85'rq51dHiS!,0&UB1-bPHi!B,Jq*BUNHh-2@GrII)C6SMM2B*@(Me#(iCfEf
ZCX(q[C&Ca8mdik5r0bcP*MPNVZlBcbE@0GiC9GbR8X9T3l#+KMHHIYi!b$X3!94
efh!a&mfcSHa&G')P!Ma[add1,VXl[J9FVF41%[rhSKbrbL#[U$TmLpR-BNif83G
+Y2Id(88if4MQ(qe#CE6aa!ead-Ka4-iKGIa&m"lU)D0PV24UiGEBlQm`DI,Pi#T
$%2J4F2RG'b4j8%MqNYhDAZb2qKmLm5)crqMHr)-[U2hhb"Pp!9M%LCmiIlDqVeD
i"Nd#f&",S#@fJ)hGbdS$`jic0Dr00rbr3[8f341UCj2NNI@ZiD)1UcNcCPE"V$-
+k14'cTJ6qr6R'PB+lXp$p--@0l[k52CNM!NDKcd$E'A8GITDCSa)Sf2V9)Z1H#Y
XKN`P`Aa3ZQ+XAkZS@bKklfKjHq'YUU-DS55$"KF)%fdLj!*REfLU,[a-CNUJLQ*
eE9[S$UlT*TDMAlLBMGZ1KEri5C)NKr+4RN5k8IbbT!@%ASR*Q5e-8ZX)NTMir&V
%eJeh36Qa,mA-FJX!Ac"cGVFHdAk3!1(`,I1dS52+NpFa&cXXB3)k1Z*m%IRLjpE
rrHQ$#hkDJ*b"I'mXChUNH[Tib9kD+IeT[&TI!f-,r@3hj`E&)X69HC@*aa`2Ja4
V1kL!q)!QkP+r3[Te65323AUUma5ik5i6!@YTE!M*JpbjKp-VhTa8LH0["P3C9)H
#5MeaN!#4P"IUD*p,T6(6BE[FCQ`91AcLmAE#GF!fI"0N[22*f3N6PMl+5&*`i"J
3Q+ZSN!$kqCV(K$N)YZaR(i#lP$piKkCNqjr)%81AS$&XRq9-QEi83K(4Jk$HcbG
,3UGNV,)NEEG0SUl[p6dcT#lQC2GhXdqj[%a9`!2Pl6prl@GbJNMi%FE0NEDUD+0
6)k9R(Y3qpU[F2'J)fC!!!j(NU%&`D4U0Hl#UEk,C!fcJBD*+0ej'Ha1eGT)-FiA
'*@LPd9laA!#[`()#RmTr'fdLT+S56U2bS1RHI--cK*eQP"ZQS0$#CXRel[%X"5$
42Hq&jCK!(jFJ1S&PdMMNA[Bdf@VVLDCMj`9GS*m@C,lcdC@+`4#LhGN`Tl(Sb#e
E8)YS8$&[h,$UVG,2CM2e0ba94jcJDKK,'SV'c8!FaG[Plq`1iTD20N,X)3RFri'
C@Q`-eD!GU9Gp,j[CaQE#if'5Ki2J2TcdA[rp)A1jP&c2#@+N(4'QU@9UB5rI6Gc
20,IZj(Uhb#B([[0XhaH2lE$MLZj23h+K0q`02RcGm4K*8TQ(XPmj[&'3!1r)ipK
kPqI)d*NrpEXR8G3LA'q!0TJ&"((1L$9IZ@5)q$qf'k8+,*,mlJ,h#R5-3hT!kEj
XE2CKPedhLX3JCY)0-`J8XG"(0dJc"6ke8I!%fp1iYJCbTASEhPKr)B*VkpAK3kJ
b&9USBPpeV'6fP8@!e2LcqPK9lCJ3hejl0,%h(cc1jric*m1UjSrZmKHp(5ELCV#
8$m3i#'qcJ2p1"-(V#UJ8mIF%&X26Ml864aai6imHi2p3%Y%+SA`cT(4LPjQHb8d
Hfb@@(AUeRGm0!mG,mIB$Vm1cYphXk`fbq(+e`FhiQAk15eZh"kLmQiAha9"E0R-
,Xrb$GZG(lEAjB9"LfXP8D4GQp@9T3TPLq*&!H*BL+i3k&)f0p)Y9aN4&RIfQ2%F
U3GV*lF&I!R*'5q%42f'ChdZ'm$jIFKFBDH[k8mIZ-qmB1fE6LKR[,*+BP,-04'Q
@A#UTNQ-m$ZA"9I4#a)L,['a&NNaU)5!`5'pGEj!!jMBU*R@iTG1kJPIFHZEjM`I
hCF'PXeY%E[le"Nj+1"%N)-@YMhJ%TrE"U)XDhpGA#"53!&"S*pei#fq$J,3qXk)
hQp`U%&)1*kkeRVCUCUd3@1a*j[,eBdC*F$!(Sf4S&#G-dRpiBcR4S"$lIGRHN!$
FKl["S)PikmLj%&6!`2-90,&k-98CPH!h5@AcQGD*P4LMId9qmNXH%GPH*08%r"!
q)$ANa'C-*'-JYB0LYUFqFpQU5!*F0CqFc4chh8aeXIj'c,adG)pb0KMVP6$K#il
kZ)YC+NcMQT+D&@"2#5b2KaSCmGJ9)&I35kr09jCGT1HfplZGJl5FBZ"jD)*ECPp
5&8"T6MdDDZG(&f##8%p(@5pbPGB,G-)Ma2QhdBci*00C@`ZYa"HVE1i[QE3rXkk
DciE!!#(chJemK6pqEpXGRbZ@#!KE`EL+LcZMJj`-#D`4DR4cc8D"JKX+dU8"!Ka
)*XT-1$d1&(B9*(B09(aM,X[)8#BV0[UiAGMGM6jqeQr#DU#DiZIZp1dVDD30'F2
@h6MhmX9S$-aAe46VI4c3!XY236(H"SmHp$jfdIYUriPNd'e2Q)2q'a!'$['+A(i
68l4VDI'9ZcrdKYpI9$)H*TCe(llFH+-eJm`l"l6B0J2BEa%aX4#XcF)c`%$2+L8
qTCV@amI9L,-HF8cQZpe@!e1pqMYGP%McBmKjUfMPX6UC&PY&%SVLQ'2k`SS%Qj)
YfZmF8e8ZNi6-dX8EpTflBVV#Z0&5D%4f5LKqp*UdLi@ZKiM%pM38B+UMJY[0VV4
RX@5YN@FmafBHAMpSc'5C`j%8jc&V&(qIj3kr6[%bC!dR9)hPY2iX898RMB-Llka
p09$IGbARkd08Uk0H)10!C8-i1JLS'-dbbiqU1&k,a#@l+,EqfV(k+*86ErCA9LF
ZRbf#LIJ+iiF8aZS$TC9B"Cle1b#YGER'9NPSA"H&f[2mdX6d-FJ6)ah`S35b&H)
f1m(Cc3I51hEZL@fYXS,Y%$D3!%aLUH9'cpi6&qjFaB!5455P&Zk*'DeK'3("[kk
R@HEARGcNXr#T55KR*#'TU09r,(eRQ)mP$9$E&($p#CZMY!*+dlHF)U,GkdY9+MU
'N!"%r!de"q*i(1*DZiNXpqeLS1R2S2c(XiTQ5b#PEVIfS[YqQG'3!+8V')`FTPK
KQ4r0`T)a-)bpZcQ`MPZF,33-MQH2$RemDKb#D+91)2C,%p3AZJ"iURe*lqIAHj)
B6rhDD"@$K5h+[bbIhl0iceSklXTHdR`Z0,&'"dmPAGabRR$V2A*bdE[RqBmk'`[
9G%r,pi4DK&R"DiN1HLi"DiaL0K60m#UHd&M$Gb$k*S"LD'rDCV`KAe-%"1l%rZR
+NaGEL69aEFm@)pl94qfJpE%BfGr4r8C5Fd-j2&MJBPlCBS%LZ6A*[a9[PK*&8EP
[5m#LPU6mJRj5UrUL65&IAK1")9h+#8Lb#aEl5,!b[46T&qRHTJ,IL!il+H##d@"
3d&H`9mG8##DE&P,G-[rfeF)S'EUS-0`dDPK6R1q"E@i6hZeYT[![4Ie1%med2K*
%TA4p4UJdh95pLk)Kfr`C#MqKSDVJq,P@R11K+qL@+J`&MGDBcIk6V"j`8TJaXhG
54eSF8L@@dB0S[b5pSFb6TKhQ'Fj)$89N`DZP0mT#*XTY0KG8q9&jTAa$H9mf$63
R(XQCiG3Nhb8'D1kT#jKa2bcVLMSDF2"U[`N$S"1Ei`)bl)83I!9pJ,3arehPZ*f
511N$kq8#TZ-*cHYa)G(6RCb1XkNXUJ8l`!KrGB&*,VV['T&jkHNA6N6UcEHHcAG
pM2eSDHPK'pYMbKj+B9qlHlqDmjq'Bq,698T2$cQU'kVcir$P58aielZR,QpJ%A5
a`'[qJQ(Ec3#K'"0MPjAa+dhi$#L[`8+BkfABcRdm(Y[Z&-QPQdLL93rPcEd%jbR
*5H@ah3m@U#CFdIPj0&G0b+`4CV(*%*Y**X`1NPf[b6N"MFiD%JTjje[K"kpjRfc
1c2#(4I55L3kGm,G'B*Se"E07J%c)MSD8IcJm9Q0dUJqfh6pD)6H!ZB$NN[ja
IMbJ3ICBT!,l-TZRZBV+LU-[6)kmi&e+fT@Mc0h%rj@Xbpc#UjkEB!!G6YQhTUr8
C"Q41rli)1DaQd6!rP!XKf0F4`I%cZa3r[,1,U#!aV!8T9Tce,dB[H*'`K3!YY4Z
@!&,dP*+flqm)P-Y6mEKhLcc8U!Q2H#LifLL,+UDE-!&YBI*CLX61eICjJ-8q8eA
R2lUUN!!Qq%(!`d()pJr-F0M%%j5jZ+#b1)qSJ"lb*iki3c3HDI@i)9DbIPm@i+4
8GAHRBJK6bNP8%b@04DUNIr!(R"CLVeD*[#D[EkA#m4h#CC3[pFfFq-`LLi-Nj"d
kTX,jE42QDL'95Yraf'ciKc+#*C,jHhEq2MEkZ8rN1(E@#c*`V3D2ZiI*9'(l9I(
L!3-rZm3kAmZ2$bK(V'McKS&YXlVZ!lA2(j3%f`Ii!b+b9jc8#$qqF,YNLhk)"@C
eNSfpJkAa*qNTh@"Y#J"KL[K-kJ5Jdlk`IJpjkAiJ6c20B*MjPSakrGKdTP'T"e&
"AT)E299YVi#@2MiES$q0l9)P-*8h$Z8i&$i,pRf(Z3Dp2GZ1FQ09c[m*V"Qr[-q
8$BT'Qb'UmM1q[a`2R5IY3PdkCmjMmQKe,`IIMS$[5EX2X`c,9maR3N3,ZpbNdF3
X`G4ljpa8q$p6Ep34%[qXVf-H%Ip%If69LTpZUAHd4(K#bV-*k!6R$9f'5)K6eVJ
-9m#6rS`)ClmbL+&f5QY6eCpSf06h0I0M46dTbr*rT3!-ULQ&D,KQlfLE(D6J31c
MYpFK54Al52CY)F3PbUkiFk-fl-3H34MI(9,@!VrX`mP2KENDReq*``@@cc(3iLX
MFa4M@f91DTjJY',j&YfAZ8`e)@2ME1"E1LJGUb(@)3%hGdljIEG`VRI5kXH+daR
m-qSl!0ANH#1e@*0"LS`NYjSLiGZGFEf9Y`1(BR3fbrJ95Qa%pF@-IS+@Y22p4%R
b4QRNiMe4rC9[!eP%J@%P3djdmm*BL*i4RE$L4b&JhYC(#Ir!3Pp1ERC(Zql[5pj
9[V`jU)kjeXd1D3aX9+#(3Xl6$6lQj%eN1@BLZ!ZD65r48ZL-),LUNY+@faeP0-j
[,ppRbUKLYaF4J#MJh+Km,k*3[Hb8#8MAlKDVCd23Nb4ikIa)I3mm8iM,129`R9f
c(p`9L1G[c6"NB3RB#*DaCN`F9HI@D9FHq$9eS`"#4KR9k$RlpIGiJP()Qp@KQNq
2L%'QGFJ-lr`2rac9JGbhr2HHUTL#+cPm,KK2qQYiT-j8bqpUQU+PA))@I5'EXDe
H*"8XbR6(Ya"RcfA)cP%YJ9jSAq+0aHiJ3+ASIA(,BiMr%2Hl9%I44!dH0eYi,,b
b8(XB%3p@V3m[q9rXqT!!LcI$G6VQkDXKH'K8P458,PPC(mJD&5hbD+8)SEqHJcC
dR9%4VaNe0@D99eU)edYkGAA!eGM&BXR@pDF-FNA'2QCkSX4%HJ`qj30RS%mKpY9
&'Yf#cBN,*P1EJc[Q9A%@r`#A'"T%!e-DKZAe"c0EpRXP8Z5C$I'%@I'$8qc9klE
JlcrJDF[,pfGe8T44*qeb4UC6&&U[!cDA0ec[(j+QNSBYj#0Xa"TS%ZfEN9XY`a[
*",X2YF*BlCEj'dDIYRkm5XU*!e&"H-BaDU3DcV5dbFXkBiSlSLT8r6eC(k[QAKN
l*i(M`0M6[m1YI)!9&c1hL*Y"-GVXiXG8,a`e)PA"$1#LHj!!4TbJlH6IT-qe50,
SpZVAb--lV(h24+CcSbTdR!,-*%3!MDM"AMcd8Q8L5FmU2G!C8r,XPNJMDHR0`'Y
UlFi,G(`jqVV&TcU28S',,I@FUYmfd)bcYMUj8i8L&(S+m15%L10NT@X*[9r@`Kj
)!IN6ZL2EDPhZ&cc!K&$Bm)"J'HV9Jf6Z4YHKJq'#Fp*JM#K%#k`dS,PP1YrL(k)
Y!`Il[MmPTB+hEZaFJ5D`YY$idiiBPSAC(G0YcKRq85mbILU!mIUHAj,`erAiCZ#
cFf%iADA4$jXXBNYq2XijG5JYQHXk"Rc9j%I1PUBr6V`amQpc-A2PD('A3&("V(c
Ae0r&9KhU8$SS8#iR9U2CDP2UA(CH0$`Sk2H'%QrSY-,PlhKQQN9rS@'#pELq"95
HMK3"%HC$&&8[D80HqZ4lJihh0UR0+ia#'(I0#4PRLp4m&,4Nf+GZ,9)PCQ0YBrK
Khj!!!UT")bBaAB8+F`mT$fXE!eVD5)(Re%VrbYND(9Ij&`c5H$FC)iQpaVdhTfP
el'HjP6lhLJVF9MrbRN*)@*aBC0(amA0NZ+6+JUB)9hK!0q8G95hHYpmSre4K[Z*
crb'Yj@)dciXMaMdkAIfPl*efJ'6Fi'%FMEMlei%3+GIdl6f,f$Qf'BR$qp3kEXi
mja!bGAZ5GFSm4d&Ncf)4*DC%rf5mBp[prfpP+VK!3CHAe`AHZ0EMR&LqKLP41MJ
Rq%RE!1VQl"6*F(Hi"PR2@Al!,Ckr6ab1)M!+c`)!aBDF"e*Vm6(f(8%QZq,eG'E
pIR[+[L2R4-SHI%[@(hI)JVda$E5B6@HQfY3,)'GAhFY3'elm'UR++NID@H--*A@
,,(,339I1TD%TC)2"5lKlr`k'VHiBIM4X(0R5R*'[frGa)2PRA5RNB6THDmN`P`c
,!al[,Q,!3X(8IV,NSSl8*`9b[#fjk*f0,)1bR,CHS9PJ82VPV60Xf8`3kLVB0ea
T(#FY0HCS(Fa@JfSq#[&DTlh)5FN)cNK#J-[BUU*iB`YKET9FCcU@G&hD'NK4&9T
ie[G"&HLB,00pEG&LMCGUpXeh%kKQ9f@fX15BrPJ+DRZmBhJNim*PIfi!rj-EFi'
6IJE,hrIHd-`6*K,G@cNG0&IPSM$4C402rS$m6!5b'Q%LCKXS4TIY,GdC2a3j*T1
5$Y-4,3bIEqNZQ6N(G+C,0raAG,YQQ)rmr@%')VmG"j`H'BhF0[)Y!MG3B[m6`GI
jrP9iXFhRKIYr@U2%-GF'T5B06d6bEade*a#C"918cIZ[[-3jM)%YFl96@"VfrU3
!4Yf([3QA1cqi)B4UI1Q@8J5FMr$`JfH&kPQB`r,!mdR)&XQJHq1,VUQcl$-`$+!
'&,al!m@efE2Yc#rqQq!0!4VrEqF-Z,#D'bb&qh$D+K!rYjbJc"Aeh1A`ii4YPq#
VLEIL`@qpi!(BmL`j(@eS5)Y'Qp(JNGC&CR$6fUr8a&Qb46DX+lhS2)"DrR0CZ9a
'eXVFaIR2F5M68H#i%5LI2bl22EPH(MiYbRm%R"AbcIIFiQU[TkA+f@T"QPrJG,h
$(ZN*Kba#6k,33E[9SD1VHQ8YT2CB&0Br[dhkMJ`SL6U4)jf`H`IfC6-Q,&1q%9j
Cd&iF)!MdER+rKH#,m+dMp2M-BID,HP91i,@5,0XZTb*TM`1UVG-dRGm*ZF)8QJN
*cDT5USS#F1SZ('h$j)amaXZ(6Yc#JE5j(iVLDj0BjD-#q@e%Uim8+kbd23FEJL2
$!ji1I$AfQX`GSFmN9[++YVeH2pPDSqR3k&-06Z5aP1*3*iCeQDGLYpj0$MprfIr
VJSV@Q[ADVm5UAe'-hUH'Q5LMJU,6qIQ)c,,YLYe*kQI#+2S$6'2DZY4BZA2"8Y3
h$!Q*(GKPEmFRk1f29m9*(Frrq1VlD!GASUp@5IKPH`a52JNP$XSEp6#H,d",ZUH
V9CbL$[%NVf1Qhpq0pSbP`&TAEJr3cX*MhLeiE51l")lGi2-0[#HkR"LVY1-(13!
XemA5IF$Ua&imNi%9'pLSC[&)U$*FKa0[Hh'HmlDFAf$kGAH`C6qiBE5+-)6)$K&
LS`AL31$q%IE#B-j5,)YMa-rY-VTMpEm*qp8k$*@`Zq0+9*RRC"'%(Vq(82&ci%*
Vc'e5cLlFq830bVEAK%RhBejY8R'J#S)858KM3BHcaaVCF,*FFhQVeEkKJ5RLhDG
GT4J+MpHT[,5ZS4#kSMFY8rVLpe5A!cI[5%%JRUaPp-C2HL,`$8ZQS-Z)Gk[K+[C
4625*eRM'KH,i@!16@STT1$D3!&!&bbI`A*IUM[hH[rZ%'IXZ@&@FUb[R`0&@kdD
9U@Z1h#*)bZ5a"&&ki2ckD1l(N!"ejTN$TZRf`(r(4$T4mZhY*E0iieXkpl6*iAK
Y1ajf3f"lmD&23(S*K+TdGC5TCQ$Z[*'2kbM!3iR'2QZZUM8%&hSQMJ)rFP,9$X&
iJl+cmNE*d$br$pKB1ZNid!CcHaLLHNUb0HZ,HdSIrMj00`f`hGSp9IK(($MTe&#
+q2PSEFm`rckA0XRS9p$BlN+@Ti1kdQ"U`H4'Cd#(fC6(YFFf1#5[pj1V1K+(bLd
hc+#-0IZ64ICKBqPqdK)hXiA6VTpCRJITAj52TZV#bmSX$,EC9ACeMYD$ThmmYB!
Ee(q9ZhShbRA("11eE"b08-"YcqA-rcf%0"@[b9HMK*++lVJC@jLqj'"#GV(mVp9
!ii,)Z'5mq!%Z@hZjlja)M-[951aaQj4qHrCc(K`i#qNb@LfMqE&dKGl-fKR8!#M
B)2R5b!D(keA2jiEK$dG`*%@RLR"1[RFqacQQ@UKiBdb"(TmYSkVbI'"HaHf9BGj
-h,4S`+`f5EjU(GH')iZ%IQ3e5!D%AY-1$4TZ&aSe48aIU2Hf@GLi+))dUXakfI1
FU4F9I(A2cphA+hY%rc(@HYaITTE)QR`FfJRr5NjA[VRP`mA9Lj,KRpZJpDb6qM8
&Nc01Vh!k*PLa9"$3`R"(dp#cf0[3CS2TQ#0JIHJT[j-lZYRB'2[ZXEUhCC'rlAe
`16K8`3ar[8S[Z(ED5&--24hmA-Q8$2"#V4`e6Tm&YKDLc@+JZDha9YlrhXDeR6p
,'r`SZqNj56,&'pcB&0UKK@D[6!$Caa&**IUDpG1Y91S[$c2J)5kkXFNCGHq[2Uc
rEY`bAiVdcfHAbB3Q"-`2L*bY'#%h[KR"EPrJ)3ZirSiD1fdR+8@8NcV2&di0eb-
bqc860b@ecVm"4efpPT3MJ)RZ%hcr42b)$r)a9Zq6fM9,#U!Iai+pcDTY0dAPr!`
hhm6M#Pra0"##59dIk(NhG6DhF$,qfT8G1"SX!EUmP84(mr6UY4pjkN6'BKl$VR$
GaRbNMm0'i92-efZUNj-dZd`iVI6FS81YD0L'qd%3D+0e4!$LSq$*8Qf'lKmZq9f
63B"I+caAf@Y1d9TU5B1c4hSXj(&E3CVrH*T4QTLp$FGMpT!!"T!!)DMYaMir@M4
Mk+dIfhq8DB1B*"*AJrkmGV!"mM(qkN%4Pm,K`h6@BV9bjLjV%-`E2QZ5V,QjU6@
MGFiAImh$T`,Udc3ldlk5f%-%02RSJ&)Kkj+iJ-r+C4j&&[cJC&mFaZhSHM3#R)N
[Q+Z[iE[jI[)5Lj8L3"I@q,SG0cN(T[a+q,@0L*LX@aVH`9AFM01&'[NSebif$9p
bkbMj5*NH2qqL-N'i5dEBlEhVJf'R5emfXd(Al6('C42)$ipAbLr#rpf(#QM)#ba
b%04Kb#XB'QR-2&$'MRk%I1j8r'm!ND)CH`[4CA*T+c*!)dmCbc$B'Trr[mENYUj
6$X-Y+&KI$b5e1%0la9,V2UE3'i"3%"Y[[EMi6ML,!VrM#T&N)X6XUSVHhH0DMNc
30dl!YJKJ8HS[D699-ql%NmQ"QfU2q3Y(c!(i2J0"mE90p$Sj"BTF@`PqSm#ed%[
NqTmqR&me"q*M`E#bMlAMb$#ADhirEB`Zr",S$S%+KSjKbe0aKiq`["Kk`Y@8'6r
0[3f9*Up3&YG!Dl+dR5hH-3&ZbqqG&"A5*FhP!%[5r1*jKf(h&T()JYTim1AP58S
0DbUdK`NMX0T`28`QebcSaAb0$%DBX0-0e1qUBL*#HqiqMHC,!M)b1`*+&aR*L2R
m2&0G3(`VX*I90@A!CLe1G@cMMJqL!LV*V"'FNN%A9(!,p5Y3SAl4e*hLFE,+er!
cSRCZ)I'rPf#0!pTYqG[()9e91"r8(HPB22%Ffe1dMiJ@9aecjm'V+FVd%pDa%P'
X[B%(%l$*F@b%YiqrIC!!C)R(GmM%c)b(H6NH([h[**0b5qQfZB'pMFaGHc,C[5e
GLP2U%3JU5SAXPi$5BlqqQ,HHLXV`fFPJ4Cje3#)NF&2VJje8M[G&-1l2#rX!-Np
f&+l+FDHUHP3U3@85XXah"pj5f@i'h)!NX3&AkQkalJh-p0[dhk8%MFk4[ZJZkM5
5H3U*Sm5N3LYqd+4Gm!-QCkerQU`h9#KLi63kI#&(r"Ef`kRQcM(Hp0-eB"'*9`l
,06SDV3J4)Lef1A9VL%N4aQ`l0`AKB'4ZdIYKrFrKpED8X!$aL(QbSAh5RKppGif
%k+5l`8MZSTTBXih0Fda'8Ij*HA!3T4dVH8S)KMi`&acHl*%Cm9V*#X)2iA-r0b+
,bT)U6eEd"&)BJR-bk4SSh-1U$B%V6ij8S5d%L!m`QC&9De#,Dqj[@9SK-A$AKjL
',1D9MacaCI2REhqRZ)!+Td#5'Q#Ph&CFYQKi0M65qY5HqVGTRdGB"+!FAJ5GTb*
!H3F,f*q0l3Rbp)i0'Lk'4ip39DpCJXd1aTfq(iJ!A1Ya"XfZIJ6@r8@Ac,!h3XN
8`jdhbDm9)4Aa,)21&$(a&!-E3YFj-MHP`VD),HA'e"44%ZP!L4%IdpUh"a5EMeV
P,D)C9ijGX(j4d26%UlJIJ#2)EZZq)H'ielre+-jh*VU@,i*qdd,DXJ923d446FN
a6FharVQU[(-!HLZ#[4ZM3kB++*l(&)S$(QkhVUaD5MY+ITq9mM!ea`qNME%DSq%
JNdel5L,!JMh2r%+*UX3K,X'mBERX)Ke'%Cir56Ve-X@E4U54!d5UM0T+ZGG2MVl
BkUh2pS9eArER%Nq`RU0fRkFKa"[#r-JB!c!X#5)ic+C3C,bA'fj,6TK)6))2jNk
lX8qXVD2,5K1T$"#FE6SeP4Vmk9UK3)rdLAJ-4*mh`$hLrR#m-D"69B`Ybk$!TFN
ckH-Y`,E(QP##cV)%KVa)X5R@)(3CG*!!d3@mCRVkjEqFSDr,)ZC`c$H[I1%Z4$Y
%&iS+C$3TY!CQ'QT8Vp53!*3(MjaAYH2rm[*XeNJb*Q2lSlA#IJla@YkB%rH+Z@"
@$KNU2!"MB)SfF(DQ4)QPl,L$@lT&bD"aAeHar*Zh![2HF'D8bJ)YV@fa[4kTfm0
-q@-X[r!!36,p#pc@[4XFhIpVN`ilR63#YXX,f)2BAf)CZH8(R%cKM#IDj`pBZR9
Ji1G6e[%MRkaCZBTLI!E(b3A3QYI,dJN34A-jj!$h4LG)(Cd)K,8XeJ+U$[,hAk-
CBE9Ac96rTqak#S`p)i88Sb3'8[6VFHLpq#c(0p*j88V[F-rjMfEANZ#`qlCV1J#
NJ*G&&@q2DN[FdjEr"H5*`B3bA)rSiVmA`6+0hm$9X*9@VBc3l$5U-DbaZEFrFU@
ccYDmI$'`D06J&4FYacSjU52QEYf-1bDrP&$90pQ@DE'F0P8Rj-lEaMR+h+U,f3N
GFE@EmdXbNVLR4MUjZDPi6TM"elJkAe(8j&h3hKq'N!!BPB%'qkLr&UGG3ReQ0`p
F!URj"dV"*DGk5fX`S(e!Ap6fC#Y!1,i)ZVPSKXYph2S(!CCP!bViD&8e-M4NXU*
4kTqf@#6&I$MYlA`mJIb8'`q#l"6a#1p(Jqic1FSAm@Xd,rRI`FD%h-P'ePqS[qa
@4f&*3`-Sk6j3Bl$C1lacPJ[9#p$k)$DiR48Xr@*K2RV"mTJeG`aG#J9rXG!#E&P
#rKZQ'0BACCB*1MSAA+&eecDclCCKYPj4hm$+3JFr+[HZf(A4PSm'p"YAmfhbaUc
'bTK0,UB&,rCfQ!r0QK3aa45KDmC(XDYjf,$Ql9L)S#TpYafT6R9Q8p&@q&Yf,A@
A&H('FN(1lA-EFKL0V0i5cX-mQZ1bd-&!3fkVdLLIj&f@#dBQ`r(STBq+4Hqc3Q#
@,5SI6*H$IQ$N01KiA$(-iQb,k@1dK)4%N!"f+,iUTadK006E(Ii4RjGj3S8iG8!
bfNp#"MmI`+pH05Yp0PM1VfR1(AHlG0pNJDh`8-lU9qK5[k#CX&IpZIFjVYL!!4T
R+[X3MSX$$*J`er-+%Q3!qS1k0(I2Fl#3!"!GB$)*eMr@qPC)kEUfbeY5PJ$PpTk
*&+Jrq2$b`p(`BNB,MZA!LaD$EkpHI4@JXa9rLhSf*3i(*9VF(SkB2LY)-r+lrGh
SVlV&$+dLP4cS9LKUr2+lKClGEQJbRkek2VDjde8f0+abKe,mjSdqMN8S-BA4lch
I)#dXC%c9@c5ZG@MCjP'2`1aL%$60TcVjMZei2!9H9bU'2VmFXHBmVjdRB"ZDG`,
KErTIZ@JkU8if2QFMARTZQ%eUKZ*rAJZNIBHUQP(TBUILNRf)c[Mef4PC#F%I(M@
k4d0&8F+[K3T#kbHIUXR+%l90U#+%qMj'H3bE@85IF0I0kDeQa`c*UN2Q9bU9M81
B')SbVUiU5HU3!!p5jpa2Mh-CSSahm+aGE$,fPLiU8#*$*-2pN!$NYXSihZk&SPU
2j!k6KX%p`H)&P)U%G0XmjXHFNk2qZ6Ij(,3(5i9RF@3qKi#Xh3rY[@TR-*!!MK6
Dr(J,0![MHi'V4HjM86G6')mYV)k#2B+3!'10LcrXj!jI2%G`mb&Mlj2#iDkiGIq
I5D6[KSIe"Y93i(p`R'e&Cb%&lkiqFrB%A"4*U()"Z"Lr$p9I$E9pCJ9XZ)'U%-+
rA+fT31jUE[a16b%9Vk)#DF0hhlb%Z)G+a(#!'PYq*`!i*,FHB#AiXKPA5"-qlDV
6RmADP"F0h`ipmQ8)AjY1pD5-YkkFarP@91bL$NA$4"bE"XVh[$@9kGFE1"&hFGS
eI`8Mr@MBFZL@mZ9NYhKIXTL(ZJU1h*dR&9dUq[8'JVY3jGiA-U-#([l(`j53!"b
E9%FKFHXUDD(PE1ZrSQZ+P3Q9#h%8R"dlp+l%,U9G285fS(Vkl%'G*!IIHR54#$1
E+1`ZEh-Kl5*5S9)N02J3cK6CY(4+9+i4A+i'aQa)A#aI+$lIcN4iU[P$dMGL3A-
kh*iYEISGp,AN+3QSd3GPdpPP%SD4DSl$%91-L[&q,J@-T)`,#Fa8mYDc(5G1N8i
qV&BQb8@*-ZVT(548G9*,!FB41p10`aMS'ZR@Y&PG@,$l+Qc)*l*-J*+[pFE3I"i
8K&9@lj'0P8LP'i9T9R$$r,e-kQYE3&mD'[d*d@%IeE5rH#b$+4FG[i#R1Uk9Kfl
EUIphb(,@Y$eRq-ICPkm"`'$LpMUU'TpX!5JMCAbm!%Mb+0EPC-S"HJp01a(l5dB
eJq)(M%Y,Y#1@,qb",Q4h&da4Zpeh$hfJk!Y4-C0q9Ib!"PFIF#H8h5K-Q6EJrSE
5mi2(kZ'fC5LIEd`SYYq@JLT&-iV36[cHRIMf)Q+BYN*##(EG$R@'`qk@Qh1)&Ml
'EVQ'5(%8UUad2i%!2Ba%K,3hE42Ve9DC!bN$c-#ad-*@q)[Y@qmIaFSGY(f5P48
cbPP3DB$iY,ZL8PRB'Ej3K,3ddHCM20h*bLF4["eLkjc0[[[,GTf(cLMfajC1@X8
Mk2(PlA$eYY)9T1[llQrMUCFBZASMm)bj0LC[A5PMKH[ahCm+,L2&IP@,qMT16Ve
jX*I@2!Pe"E3A+5HqcS2%DCb&FrD9FDi'PP8`$h1RmJDBkKU+H3rF21blFZY&Kdk
aZ5HN3U61MAIjIFCREI-f%e(k+h(Nf%iCHT)2cTN#2&jK*fcQL1IrdPfYQkJJ5&f
Lmb6[SmACUbCm6&rDX4,Gkp,jIDiLTYT`8Ci!2CjXRAYXCZ&EB'kFd%1jfUTP*k-
VBk"INhXlE)1jhmN6*UM"BS#ZYNe6X,p$qU$D2Z!fdlaPC9$3T'Xpf&YA2aT%00(
AMiB!jK-LQVp*pVX80PI3MJB$ZrPBR)i2@cmq2XYU+@+022D@$1HZDT&%+*XUS"Z
)6BfYMd@FTl"d)ZLj"FDRLDm",ICE&Al1*0RlF4V%eV"4bbNPlGS`&UCL`ZA2[[A
K2-Zd,Xbh%M'XX,!RP3Q2"lF06SSB8+@3"!%!!$d!%,5L@2HdSPMh!!$mKJ!"+Yd
!N!0b!!fPm3#3$NeKBe4ME#"548&%688!!@Xa9%9B9%0A58@"!!#!!B%!N!U!!*!
*!QX!!!%#!*!%$`"#`G6Klm3F&9#AHcaI4ZNj)ck,mGLZP-K4adD5)jSYi+l3#iN
YM&TFJ,25UG+$3U1i2@VI$e)fIF#@e&cH,F)bqLS)JIrG8Mh#PlMqk6*0,c8dRDq
5UX*VB454,R0a2SrC''MPALCdcU8MK1a#ZZ3,*X&Z5fjKa"[$AYmLJk[8,M*djHJ
ejX+&S"XQh3F`96Ge2&ZJ*q#FHV#adc&3'4"Xj6E`+XJGkBb8JZX'#IIjr[,4feP
CU2ZBI+!JMQRM',!TK&(4kB4rC#%Mib(LSk*p856"bb,"p,p0a,U1&,R-q*he8[c
4ir6b"53-dB'm")T`8NM3jZMG4ZAHT3Y9YYqfN!!!TC!%!3!!2!!3Y+*C%V5L@4-
!!5PX!!%X5J#3!h)!$,jL!*!16@&M9'XJ8N9"4%e&!!(Th94&@&4$9dP&J3!!J!)
"!*!+J!#3#3*V!*!$r`#3"!m!3X(9#B)c4Se[0J-"fCEFXLfeQ!@$TUU)bed4'jX
Z#XFfYLkl2@%X0Td40$r@p#3*[h(-A[rE`&dqI8aGGmXC+NkJ)+'r&(%Aep2M6fN
9K5$1-4I1FJX[9K8ID4m5lpeAbXc*ZU1R[$h#G@a`'@BAAdN(eX`dV'kEb&$V0XE
TFY86R&B9fXlNqNdrGNe4ZY+(p[%lQKL%4$dZLj!!qej2&J1,SD+*YMFD+YF+!$a
KBT(La`lK!j-[ekcr$VrC5dVVLa9U[JNm[3![+@6&,&IH"$2S!'6RQ8K8Um13!&i
[6eHXrISKTbKCMe!qQZCF*3a[Z,km&j%YjX0mr$N&N3kV!!#PN!3"!!!j!!#hmlT
HYr1kAJ!"+Yd!!5f)!*!$FJ!*hSF!N!j0Eh*P4QPXCA-!!H9$CQ4bF%e"3e1"!!&
!!3%!N!U!!*!*!QJ!N!26!*!%$`"#`G6)[q@+cfY@eV3X998DId(R6X*JcZiNmAN
lIJ5a*Vi80iIim#``)*N5,&0+U0D-YbkPb1NVAk'lP&TT8Vk(5NJ5r@H*I4HXX5$
'iJ"L9VB3IjSIcarI%M-!8krX2mRrBP3k`'%q@1C6VDN5e#69J01Z2)a9P&,@RL%
142-IZJlT*AaaVZ2rk4bAf(!GjaF+TZmQMrpY-A!CBkBQaY,(mGmk)j1C@Dp&[@c
bHAZ!aLR,pKQPXmScla'K8Nec6P,r*Mfr,+rFD*T+!0G`1-FKp16!TC!%!3!!1J!
3Y+*BlV5L@1i!!5a+!!%ZZ3#3!h)!#S[+!*!19'0X)&*&384043!"AQC849K83eG
*4B%!!)!!J3#3#S!!N!N#B3#3!m8!N!32!%,"e-Lrj@rM&,rpRB1ed3p3qG(kU8-
hh@9iG1@S@m(mQSfmaNkfic"+@ADmDlijT2hF,f*e29jbrV(rd*5MRL!H*m@Hl1q
IT-q[maTc('*%LI'Ik9,CXTMfq9$F%BS,+EZDTph'4FbHKhG98E-!V9`*@dAP*cU
-Tj!!q%L2e8pkIT42QUY6i'6qhN-IeQHVGZj1QdFTDPYIbpGSS&`kSH-+&'X,b'`
BAUXpk'@&[Uk29JGASf)(5FFUKqdImaKR,G)M*49Ak+@3"!%!!$X!!,B0PNDf-`r
5!!%YL!!"-)N!N!0b!!YDfJ#3$P4ME%*2390SC@aX!!'3!'jKC(*`9'0X6)%!N!-
"J3#3#S!!N!N#F!!!!@-!N!32!%,"e1T!eI3iD5hjjh#)@MVZJjS4ZaXHlL6YHM6
JIcAB9!*3q*!!URr@fNF&MLY3Kr%8eJc4@#p6#F(ASmDH`591HHGp%F#qI3[(I-b
Pp0Yb8kSp03DC*rI%AR9li(lBX,hG$"1V[d%0A,mj@KQ419jl8j8qa@*6cEQ9%VP
k%#CF#qT!8')&4hR(2CUXCY`H%GJR`b!83N*H(1NY!I"[,96N"0N(&$J"5(Xqhf0
'+*L1Zc,AJ!(S55k682F8+L8SLS`mZr%kXZIkqL55mNk[9,DjMJ,`U&)IYG1qh#2
UD2aYlDR19GV469J(PbNMZ-'bLNkUq@p@a)KX39EcLA#%&HQp5eCI#'N8a2mfR*5
M%VSa-2'q-6)T9"V0Q4Ji6F)cjNJd-hmETf"Ie)rMFSfB9e`3V3"Ll'a&f6!%35N
-!bc[#*Q1X(q,Rb,lI!k2Y!2J+(bGcBq#Q[ErCPN[RAkFP*E$F)3!TC!%!3!!1!!
!Y+*BDEGHL'S!!5kj!!%am!#3!h)!#"*6!*!19'0X8fKPE'`!!55VB@4bF&4ME%b
"!*!%J3#3#S!!N!N#D3#3!rd!N!32!%,"e,BMG3r`(XarHL6)EZ[G*,efQfCCK'9
C+r`b%`d&!C`G@UCY%&H`T)biYhpj)`dl08A#NEmHZQ*kYBH`RDb[Y-ZVp32Bq*f
p46#YZM(LU`5a2TGMYi$50hj2*HfQHM!&hZl'9qmfJB56r8[IaIqMTd&p&9`$Z56
Sr5DJGil'&``6XfZQ[VrR[0R)SNDJ56Ukb31%)+BTmJbHNKDb!Li!@39*0[LpfAP
#X9*m$U'e$H2B1(9qaTJkUQ9kG)+"@JI-)#j&l)Yc@jI89NQRBZK%CjMNmDlL2pQ
%Kcqbl2$a)p,X*[BGM)iEM1L)[H-h"UCE2#[#A6)EB%92#!#PN!3"!!!l!!#dSPM
&YXf[%J!"-)N!!61(!*!$FJ!,m(%!N!j8Bfa6G(9L,QaTBJ!"pFj08%a'3eG*4B%
!!3!!J3#3#S!!N!N#F!!!!5S!N!32!%,"e-qAT`Sbp*!!1P59K8N(L&e*3HdP6KC
)q+Nk-HfpMA-Bq--af8L2L*[hj`q+JMSZ(pRA@qV1NeZhNqMh4'ZV%b82!qTIkpk
!BF)R@26CKYP)C,3kq!FE@X8%d+DfijEaL[!Jc6PPL2`i2QNYPD[cNL"ecHQ!-hT
j'JN&'Zh5hH&0Y`d'2$BTiEr&+e5*qla52c0U&"fj6Z#i%h4SRpbY"@GHd#8pUa`
+PRceQ+1bL)IN4"q#cUKf0)elM+bS-9-&kf1KT)&ha,Ja54TqCFNb4iS6-RH)5)K
#19aNm2kEf9J,FL[p'De"P+H4LKm9eXBNJ6!ARZkeV%6KmJmD-)SV%ahE6SVMj8c
H)(XD8C43BZ1)q0kdlr+*BE,Xkl@(+4+4Te6X)C5@9i8!TC!%!3!!33!!Y+*BaVE
0Va%!!6(`!!%e,J#3!h)!%6mC!*!19'0X8h4eBN0'66Bi5bjXD@)!!8N169"-4N0
A58@"!!%!!B%!N!U!!*!*!R`!!!%d!*!%$`"#`G5L`,pb2XUMI,4[j@dC4,i`Ul9
Ih$"iM#B2&U4$Ec6cQ8bjDrhhR(P)K4ZZh-)jT[`GH6&H5jMbM(afeY-Q(,rjUBA
ar`6J%hljUj*[df8'hV#Y50+CNi+q*&Gr)bC&#%80Va'Eckc*A'U)3[@[KRe9E[p
V[pBpj("1%IJ@,D2KiKD0m2S1KFI!L-B%$IaCN!#jrS-4K[19ZY,R'-!fd'*L6*L
*$8NhVDQD!S5#e[kNIX$b!p6)drk4RF,Yebq-m*BSe,`rk+U6hUMbJ%Z(GaGP***
Sp-MB(T*i8h`K'QLdk4TQ91l66BMac,Hee[JR-A,4+a'4(I"ImVLhC+MhK"39ARl
TrSRHdY"iE9NKTKlcEJ*5K#iPi)*DpS2XK8X80hXNGir!d&16dG9jEQdI3qFSb0L
PN!3"!!!j!"#dSPN+YJI6'!!"-iF!!6D3!!#3!h)!#6JQ!*!19'XJ8N9"4%e&!!&
Z[P4&@&4$9dP&J3!!J!%"!*!+J!#3#3*I!*!$p`#3"!m!3X(8iHr%(%"8d,`I'0B
H"mdEe(UJqDb8kV(4AF9rF,!FE$D0PQp`r$`b,'P$bR`+c)a*`CC+Q)39!XCPmMe
QbT2AL,8LcSNBX&6NSIX6@HqF!&#kZ@6JG%9%4i*+%U5VHMi'U",1Ti8MF!`8V)P
CFiiX+JRV(Y8EaD,[6ZE@UB'*$[Zq3h&EK0m[a%lh%XJ3X3EhcZPkrQKlJ4pN2)`
dqKaEJ3DpE6+X5Jdk@0"fGX,eJAk&mi%pC9f,Z*iibLEAddF)TTp$U)0!""'jRHM
rl'IrDAiYf,`m#6X8*E(f)fKZXVd@b1H-!,'&&'USr[K%BYB$aD8VJ+@3"!%!!$S
!!,5L@-Lf"p-B!!%e,J!"1"d!N!0b!!TG6J#3$P4V8h4eBLjXD@)!!8)E69"-4N0
A58@"!!%!!3%!N!U!!*!*!Qd!!!%K!*!%$`"#`G5L`,pJ(TX6KJ#4ipN)4FP8kqh
qhA&KZ-GAJqh1#EM"3J`b+,YBLi(EpimeK4pBSbM,"[ld"JH*F3+kBND@frI$h([
6@4rLGp9[l3IRJdM&k+`C"ClU6cQjqQHUUJ9lhC-XR4TY&XNaTAPmFZ4TDQX19d,
!H"(R'ka-jhL@0(a-NhP%LeYM,QSR0-bZF@ZXXPB`&r"1Gb[1NKj'3+jbmrJ86@4
TbfLXPSPfm6(C,bUN$6jG&KFmS'Lr`IA#,(Z%NVDSZF4h6G[F(JUTr2LAhqdV"Jm
BSFale1UfheNX(+P&!f0$Qa`AYYL2m9i9a,M$-L2*miMi'FpD*LSj315MrQX,8kH
pXY@fr`*)Md+h2B33NKJ$Z@)h4phZlTUYHr@!TC!%!3!!3!!!Y+*Bb,B(daJ!!6D
3!!!"1Ai!N!0b!"#IG3#3$P4V8h4eBN0'66Bi5bjXD@)!!F@d69"-4N0A58@"!!%
!!J%!N!U!!*!*!RN!N!2[!*!%$`"#`G5qG)Cm%1+GZYq#h8k9FmEV@)kHD4*Q+G"
f@c!j-4f(T$R@fC1(9LUG#RQpKRLZ2NTCjN2Q2hG-TV@3!2iE0CRB`E@`!ANIpi'
@%'P"LBSV+,QkQm"M-&ZR5IE'-A&35CkfQ%IR"32,EBFe)CZILl*QFb5phS"XqcG
RVVI2BRG,A#e+I*5E9c*%IL%cCD3qX84G&%NU-C!!rHD3!0jdd!F9Mk#029Nr)Cb
K2rRG$!bP`C`rRTQA*608,J2a%lpf(Vb"q"lAp,mE8@ZTBS(`!YYD`Vj&rpH2I%C
6'(5EN!$rr85Ij6TIN!"Ke6*6pCAH2U@!TC!%!3!!43"!Y#NHZEFB,'X!!6JG!!&
&C!#3!h)!&EAH!!%jj`!!&43!!!Yp!!G8EfpX)%0[E@eKEQ3J6'&ZCh9KCf8!!2a
T!8-!&J)G!BN"`!$!!C!$$J"m!&l,3!!!J!#3"k@3"!%!!$B!!,Ea4+5h'"-G!!%
jIJ!"1`)!!6Pq!!B3bJ#3$R4ME$JZ-`!"-Q0QC(*`68&$8i%!!3!!J3#3#S!!N!N
#1!#3!l-!N!32!%,"e)Te"KF)UhGHj!L6JRi($Q#AdRb!j6ei1jJ1"-iHX+K9iYP
mV1JdR"@!0%lcD2Hf3!B6URT@"(Zi(+d"8!NB32Z`4ci"8jEr)+-J%lTUja(I1Ra
84I&Hc4&jHEq*LbQA#@232"EU1RlaC%T0'0HFC"16#[M'4mfb[GP'KrmqYEp6JYL
`UCjaJcSG-VlSC&LJPLQpac4jkq(b-6JhVi9E05RI10LPTY86N8QJkK(8h6B!TC!
%!3!!1`!!Y+*C@EIcfj`!!6RR!!%p33!"1Ai!#eAP!*!19'0X1#ic,R0SE')!!65
PFfKXBP4ME%b"!!#!!)%!N!U!!*!*!di!!!(5!*!%$`"#`G5[3#BJNdpSre-mQL[
62@MPrN-SIN-EYjjEZ*YV6IBAaB!6i@FD@EmAm&feLYCD+(C%(@#-Y9K*F@j1e`l
E0qL`cmK$A6kSKmHb*ir-h8XY0I6FBQ5CUX1j6qHm*A+c'$6Tdr42hFUVPL&%(pE
dlX9ChYphV"5*Kr0L!D'+J$EDMei3f+S%F8pcR$NIPS6P#183YiqpRr,aZGlR'GE
&HTQX!H)MRkD#-@hLY*!!j@eCb(mNRQhFaRQH1("G,UZ0@j+QiY&5"NMJ&34kj,5
-&**hBh&l`41FZX%0b-%(p4b"AqeADr"31j8B8@BFAVeYFPM''lkYj3*+"+bK"%*
qp2(D9q&0N5EYcYi$@BE"6p`S0)(U@VIMp-NH,)6KUjVm%-!i0KI95j%$6G642+j
C44DpD86dmN`'@&0%+3@!&mII'hqY1fZAmc4f[kB+0P[c5jY+h94JYB12PRqb'$K
-9N`c(qLZeZ+0XQR*SRl4UH1VBZMBfMV3+lrU&DfTYU,QMJ5#T$Z*Q,reI)milCQ
5JX8FZAXMM!p$DDRa(0MiPJ9pN!$YNFV6`YjP,$AMMAhjIVJB65)B&V9"+"-8Yj0
4$hk(p$4q5@&EYC'UL028a0Q6-!#PN!3"!!""!!#f$CEIYr2ET3!"1`)!!6l`!!%
jIJ!40,8!N!j8Bf`i,M0$4Ndf1%XZFfKXBJ!"!DYcD'aL9'0X6)%!!-!!J3#3#S!
!N!N$@J!!!6`!N!32!%,"e,`&BLkT'Q4f,&Ir"DZRZTG-C'&Q@#XV2M$[mRcAq@U
4k82cV9mdTQ-(Q`*8k0i#2QqpaI*Ipe6Nc,8iT)aATPAEl*U)1UXi'Y'9cRAZYRj
jUSLjcZ"G[b60qh@lVk$r*X8RHpQ5BZH3!%%"`,ZSebhLZmQAhe!S9%J8M)0%ebq
&S6BJV3#'DU[C*%Ha,VZ`U3B`MjLP5T%J#"%-EKY3`2DUET9,V8kRj820j*j8QkN
3MefNUEQSiMTbPhbG23#Q2Njdj3NY4IHM6lhb28rcP$-)P*0)h8l(2(VVF,$I"6b
GRDD#5`1'hYN8-bKpdrq*X'iM3D0@S4V$mkfE4*[Bd5U0i1[K3a`kec!qe,K2k[Q
N2EEV)V@fkm@!m,%iHaPjqhVV"KGCCJPPRD&h#[[)+kYB4HKrehG9!i8!TC!%!3!
!3`!!YJf@dEIcfk-!!6e"!!&!ZJ!"1Ai!%r@a!*!19'0XBA"`E'9cBh*TF(3ZFfK
XBJ!"%3GcD'aL9'0X6)%!!)!"J3#3#S!!N!N$AJ!!!98!N!32!%,"e4h[%mI(UTD
Jjb``'aE1+l$RrD`,Ch5H60II2`+lI)3ME(b%hb,KHY)LY!Gk")!HJamC#9""T4I
bELd9k,-6%4dMUUr`DqTdNbH#`a+I)HcY2D,cNMiMT1YL,e2NDMK9B&BN#R58$K`
5"86bQB@CP3pR(bD`FKa"a#CphSp[-CKF%5Dh6eVk5RGYS%*Am$@8$p$L@h-J`*N
*#`%5pSjQ3CPXPq,5IV[6X6XrIfhTRQ0UmG0ZT,jd1(IS4++81k(pr&HZP#T*9D-
+TpRMSZKCerBR[ePH`0YM[JBc8qN'BkBc@eIqcHS6(*di$$G4,CX8i#pVe(-PE$L
QGFHQQf11@*p"BrXBmI2`r'*TZYc6I&AZpa3fdIkE6pcqjbV9mBV9N6Vcd&MjLN&
c$V#!P[dA8m$JN5V$e$8Z6P,F%Qj)i(9@l2d1LRCKF,C*AkF$YF[9A,`!TC!%!3!
!03!!Y[&%V,FB%bJ!!6l`!!&"d`!"1Ai!"9R#!*!1G'Xi,M-!!EP-CQ4bF%e"3e1
"!!%!!3%!N!U!!*!*!M3!N!1b!*!%$`"#`G5+G3B@p3ZRAZ3)Ni*q"`jJLGTbDLG
T"D%2DN#TUTYm)5FM2&H-$@kMUk&V)pm!'b`hVf`qqZ4"hf*U990HckVl#h1GAlP
MYd!$!G!PXU!k'lP(p2S9Fpri9GA-Hp$YA)hi&XK+AF(B90)*I6X@$3bIQi#cYBB
(Xd0,Q2Mqf5H1"X&8EUJmLrYp+Xm$rGk'`Qa-qZ@a"PS1qXXV!@lU"ic)G%jmM,"
c)%M,43RE2+,!TC!%!3!!1J!!YJf@cEIcfk)!!8#k!!&$N!!!!6Pq!!VB53#3$P4
V1#ic,R0SE')!!5X'FfKXBP4ME%b"!!#!!3%!N!U!!*!*!dX!!!&4!*!%$`"#`G6
2PkF'Q%e,Bq&9Gj1aE2*MJ(CiI!$9Xmk2Ve8R3k@LA5$UBEE3B`90k%cSEcrEJPY
rB,bN3%)QXI)EMmmLc`Aj!0&p9-4&hUXfD(6",B5Akl)a!rjdDSKkl)*Xm3+aI5(
dr1(K5!hB[3Rkq)Ri-1@jY29Vkp+D9VpGTjeiDihpYkS@LQbF[(h8L4li[b9r09N
,X&Y*b0L)S@VV0PCAmG'PR!5R&cUcdh9p2'JY&EdQ`qEENE0FC1qR`2*2*pf@'PK
qY!l6fQ@+mlfYH3hYpD-GjDpFYhh5#&$3%j%VVVAL*DR2qcA@k0kC8ahHI@MUPI@
aN!#')!pCQK1J*[$GZ&@HS6S&PS-r(Afi,lH1jPq,hqCV,0+QE4[*QU&lE+f[`8T
J2Xah&0b0bJiHrABbM5T!YG+cP!Gh*ZlR8GqMKK31"-6-h8J,!59!+A,Uff'q!+@
3"!%!!%!!!,B0PZ'hmpZR!!&"d`!"463!!6Pq!""CcJ#3$P4V1#ic3dC00MK,,R0
SE')!!ACrFfKXBP4ME%b"!!$!!3%!N!U!!*!*!eF!!!%b!*!%$`"#`G59qi('bX,
J$pC!f+GeR4VZS658[ZVBqhBfTQJ@C(@2IcFh%qEM%6[l@#kaELUhb$[b"(2"A5K
iDVH'TJQfNaej[(B5NR4X4%ALmJE9"9A6fIbpEefij!L(9GAYmHaDcdST)Ai*)F6
Qqq+)HZNAAmQmXea,dYq)J@hN2bU4JiKdNN8Ab*B6cPr"Rc'hZlDhc*IKE5h-*T6
AlE&!bfC@r`KQ"3QR!U0`pNjRV#0@AD%5GA1Fc"m&c)pbfQ6p'I3[CCY6$fhqU%9
Rm-lVI18RNB3hY*Zf02@Z#IB$6b)@hRk8Ca0d8Xm2R9f$B!8qmKLQdHQV2dj139B
A4h`dS!!dkm8P0IaYamY,lYfeKUT8SC!!d-TP'D)ZBmeATPFeNUaJPTQNN@Bf!+f
Ih-U"`lkL#Qk!TC!%!3!!-!"!!*!*!813!!#3"3%jIJ!!ar2rN!3!N!UPN!3"!!!
m!!#f-bp"YkGR-3!"1Ai!!8DK!*!$FJ!-#J#3$eGTC'GPG#"%C@e[F`!"kkpKC(*
`9dPc5)%!!%!#!3#3#S!!N!N#F3#3!mm!N!32!%,"e-LrjA4R1$I`)QliL[5%m2L
H3,ifaqa2$lDTeJjl+K&I(XMLGmY0`fc5$XcGj-5,j0-rE`&QA2!Iq&R[C0'R*rX
j&42c-`e4ZrF)SfMchSHMTj!!b+LD32[1'd8"mYhGIiV)paVL-0bUKKGC2N4FP(h
%)BH`fjR%8q30rGcBVA0G#9f#3(iTd2F8[,5"182GFeLraDJJ0`1,lQ0I'B)P*R@
l"Y"`k@6hYD9Pr9$JA,YL%Sm13aQ$"diXpY,@XK&L@3Ih@H'QVK5DXcGrU!#PN!3
"!!!d!!#f-`rlYM-2q`!"4@3!!8JR!*!$FJ!%Mb`!N!jADA0S!!'rV@&NFR"A5A0
)J3#3!`%"!*!+J!#3#3-r!!!")!#3"!m!3X(8FULL1PS"fFm#keHBF6ICaSY%b&X
6EZCSM3AJVE%H6bTj%##H46Jj668f20Z'Q-jfHdr[cU#1F5[kJQ[kFFH"c6@pC#a
4BFri3YP#PN3("3&mmfE2PNL9P!riP&-QmIIlhlcd(KAGGGh44SY&29B,CG$[jCi
(Xk@K9C)6H,bBSTYF8bcUeVrq8GSfpfZBF`X6"iZRC(ZLJ',SV)`'R8,K81V"Tmm
@%i&'mXMKahArZ1Y#DX"S`qX#U$Ea3k$A[aB%&0BhB-C3I,`fXB$J,cRQLip[`!F
RcfCiak$5a*EV3NT6,b&&j0`UBZ`&"@5DaNIhR1*#q9H@!e-&pP!(,CI9F65qG58
D`qEFc-mp)G@Z"mCrDpfIhUh$)FDhM*J!TC!%!3!!-!"!!*!*!8DK!*!(FJ!!'Cr
rN!3!N!T-r!!!!3!!!D1+!!'LLJ!!"8X!N2--!#!!#!#L!4`!J&99!*!$$!!S!#J
!VJ&1!,9993#3!``!)!!)!+)"(!##998!N!--!')!NJ$`!CJ!K999!*!$$!"'!+B
!ZJ(@!)C993#3!``!+!!S!(8"2!#(998!N!-1!#J!+!$#!D3!L&99+!S!N!--!#J
!+!#8!4)#!&99!*!$$!!S!#J!M3%A!J&993#3!``!+!!S!,B"(!3"998!N!0D!!%
!N!9G!(!!F3#X"!*25`#3"dS!93%6L$T6Eh*bH5iJ)%PZFh4KE'aKG'P[EL"MB@i
JEfjXH5"LC5"`CA*QEh*YC@3JEfiJ5%C6)(C[E(9YCA-Z!*!$@J!"!*!&A3"`!(%
!V!3#6dX!N!G+!&8"%iJk9'KP)'CTE'8JdPi`db"YBANJBQ8JC'&YB@GPC#iJ)&"
XC@&cC5"eFf8JDA3JGfPdD#"MBA9dD@pZ,J#3!e)!!3#3"@d!CJ#"!+)%!Np,!*!
&"!")!'F"!iJb8fpbFRNX)'*eG#"K)'4TFfXJFQ9XBA4PC#"PFR*[FL!SAM!T)'K
KFb"[Bf0eFR*PC#i!N!0p384$8J-!!(i08`U6K!'ME3$X#h)$Y,)b+b[M@dhH@qp
UpkCZ*YH!-3"!!`#3!lUe$)!!#@NUrZ!"94)XqdV)@`lMjA1kK9'1XMr2MrqZ)$N
hV"Vi%FU'0AQ'BU0RDr#XAMm&lZ`,`,#T"L)i6&Fq[H[,VD-C!m8F@8XE1!X!N!0
-!!)!N!8a!'F!43#Y"!44G@Pd!*!&#J"3!"`"%)JD9@j6G(9QCQPZCb"hBA-JFh9
MBf9cFfCeE#%!N!8)!!i!+!!ZS!)!!3#3!p4"4%05!`!"%Je6#TXN!$Z+L)S9caE
3Fka%E"$e,$pr2qcARErRlXi-TeMBB58U@)999@,P[r%%XDS&#l*P1diJqC!!(`&
8**Mk0Eb&Tph&fGe0dXKkNVep(bj$h-@Aak8,&[Q01&G2PI8,*$a+MT*"[ZKdYI"
dDK@D)Mi&jNl(,(@,TA1"CHpm&"bi0FV-TR9!6`FK$%aAP&QFVF'lCA-L&paq$(J
Im$a!SNrM'Ub)p-`20hNS80Z-b('VTjc&BeY4ZFc0eZQ"Uj3hhmRl$1Rr92r*E3#
3"'i!!3#3"@J!HJ"m!,B%!Np,!*!(5!"H!5@)6P0[E@8JDA4PEA-JGf9bC5"cDfP
`F'9N)'*PBf&eFf8JG'KPH5"KFQ8JEQpd)(0eF("[FR4PC#"LH5"dD'Pc)(0PE'B
YCAKdFQ&MG'pb,J#3!kP"4%05!`!!YJe6#U-#!ZrN"*hp8l%2ccCldpY8G0M(R)V
Se!Q+HRCclXET1"!2&6YXCe8*9P@3!b(HE41VqJ%,NJpJLErjN!!"IXTN0pFP'Nh
FXXeN0%iKA-1K3f`f6F6Y%d@+CqJd-B%kIc8'8cl'BkDNN[dmr5K3rf[-JcXqPd"
rAJ@qC[AL9b'HI%[ErHjf82f*dc00USVP-@0*@#ld!T-Q34*[(afX!J#3!cS!!3#
3"9!!@3"N!*-%!Np,!*!&!`"%!%J!k)JC9'KTFb"KFQ0SDACP)'Pc)'4KE@&RC@3
Z)!#3"%J!!3#3"8F!@J"E!*3%!Np,!*!&!J"&!$%!k)JR@@pe)'KKGQ8JC@jdCA*
PC#"KEL"TEQ0[FR*PBh3JF'&cFhG[FQ3Z!*!%+!!"!*!&UJ#%!,i!h!3)3fpZG'P
ZG@8!N!8%!!3!SJ&L`!)$k!#3!h`!!3#3"@N!B`"p!*m%!Np,!*!(23"J!21)A&4
SCA*P)'Pc)'j[G#"PEQpeCfJJFQp[E5"[EL$5AM$6)(4[)'0[ER4TER9P)&9Z8h4
eCQCTEQFZ)#""EL"KC'4TG'P[EQ&X)&ia)'*jG'9c)'&bC5"ZC@9NC@3Z!*!$(J"
Z!)B!hJ(N!!8!N!J""3C6G'&dGA-!N!BB!$3!&!$m!AS!!3%!!3#3"32S!*!$P!!
!!4p"4%05!`!%jJe6#Z3L!0pf!ijaTdl&mUcH4,(Q2,#(q+cH9#bRS)Kh8fIe-m%
!(3BLcP*d9JmlV2,rhrHH(0lClA4B!JZJSh!C1CSEIBc9-`eYXf"Ff#fYQQ'1,jP
&KSEYjm6pGcSAFZkN#TXV,[2qG)1bS4Qe!@`Z(5aUJ)P9k@!e1(J5!34(NB2(LB1
,(03eclf$l3L`iF+X%J6F'S0JXl6il#@GkD58+,c`852HDVRR[`kmdL4l)`0+SX-
VH`PN#LR5[Prekb$B0H1"HRlSb-b0H$[Lm'Y,QFJ8JNX+D&I&*,8a6r(j0cd$)ji
aM1pda%d1,6c8J$XCIc6R(cVq1QXMZ3b5Gj+JfBF@rQV*&dhfI-"IFkGepNBLP"U
2&J!!"`T"4%05!`!-+!jG#kb#*$lU$0r[lMJ*S8U(8"UT8H%%4d"jA`GQmk$CJS3
96f3i9T6&AQdmXj+5fTjY@'XlmI[U3fJYC+e#"@Y1,T!!K!PlLpp[GI`qaIAlb-+
J@E@NcZ`ZY40E&*)`,mQbT%Z&%0,h1lh[a1,DFq[h"`hRjc3a!53d)c8I4Z31T3k
NrfV)cfB)`E"CDAMH[$jm`EhR45H,`KpKrA+I2!Tf$"FqLC@*(Uk$BF5(K)QYSFS
SU$L!H&mN#)-cK1H"L2N3'6Y3bQk`+kPpM0MZ-2d6L91I[hfmJIfmqZj`[2rfCi2
MVZ)rfm!hBF98HDNqhlQ5[@NNcfG2*mq%PCmZKV,&30d!E*Nmi2Q&q#FhMHQ&iZQ
(CmB$c0lDEFAR$E![5(&K*XlcR3X3E(iK'iRPNJXTImKA*!1$VCElqHr0a$19pHP
i+$+FZc'b1,MT+Rp6+f*P&2i&IAXASS&Qpm)&fid25YMA+1a'aNrQF4)CK$q*5pX
H#[M1AJ-[LK(UcI!caDX#EP'['B8h-8FL$H-6mEPR95lQe8qIR"PbRq3q(YjYi"Z
ANZ1jBMC9PTiVG[LPV9qF6mUqf[2ET56hblPYb`4m9-'[H#Ml5L@m(VN@JXa3(i0
EGcYL"VkdEc`jqF2jd'TjlVNC61[pUBTqkSG4q!rmV"@`ANGK&a)L9,bFRJ5"$N)
bpqJ#(85Ld!fVi'+bQ1GP-EFSLrU2C"(RC#%S9*431)3++GbQkN@U9+AE!dqcj23
V-9P'qjbm,*QrjKKC5UrRNV*FIVhRX5aVhSRZ-M!rVM!`T6pd',c)l(!B")hq4$$
i)$I9+Kr'#rIqa)0Dkr$Lb&p@l["+'bE$-%Q'b60-ULlC"Vr"@f`@"MiYi[LiX![
AZcA8ThZaI%12UYeN6B'P4p5ATP%rD,851XZ(kJUZ6'pJ5@mji#J9,PpBZk!f(&d
c)qPZH0'%I+L9f$k)`3lDeXb08lTE`%P!9MEJqaDhPZkP#!kD[U)#mG$A3$*(lA!
13(#D)QUEh4a$,E6LNG%-lKP!X'+-ELY"0'I'6JrKeNV6Ij-2N6!$$Ym4V`l4(1R
l9r5$CE9*V-L-L+3pUQA8MGSqf*T$B3djmSU(YILq*'jjFekp$jY9ElbKfi6qi85
e!p9IHmc5Hi*F6*QNUPbr,TXUZAM43D@H"Q1[rmT"2-Lq3$Id&S%1jP1LFc(Q9)H
TSi+MrcmB(H,A`i*6CHpGqFI*(D23QV[h2p!+qJ11M5Z&rKV5e(CS&-LR+'aJe+Q
qp2h-p+%2"4r1LL"8,9hPrV*2lH[lP(,eBX!TI)hdhLRYc"ae)ZZGfR'!D"DIQp@
1$DY!$J"aIi2HNGPT"3[D"S"RMc@E3FN%6JpTYpf[1*'MS-AT*L-ZRqS9UAD4HJf
Rf(X@lFrZbj!!N@R,5i0fYq,UqmTRm%&Je0j#m`0hM4-CbTc9()i0peQfHDbT636
,Y%h%%Sb8NX1Np@B0ikJ*FG,aeNF1$2Q6b(,3[S)kTm,G'GXSqML[d*a5S#"qId[
pqdKV9eU)B94!(J2dAK-XV(!lp!IDJf%UKZ'Hj#)"AZ)JPJJ"`)MrZD[R32$hlJf
HEfbd9EfhqZ6T4*rrrHq1rjlpMQ[r6ApehT20I,2TBQbp)Nj$mlikI0FRmGHdE-L
BA&)hTFM)GZR0h()ifF)r+SDb+5D4N!#$ep8pZFAe50ULL115&"&q*h(4j,I4&Yl
1K"jP'-Xq8r"fAjf8U*3N[`lR!!pd5&`ZH4U#AbU'fK9QGYi8h2DiVTC[l,(P8kY
M6j2pUVmR%Zq9dTdGirkJje)TP+L1jKYS5KJ8fZ!X6P-q`q*1kqi25[iC&%Ca(9$
qfU+#mcc8'P@"3p@(V(AqKU)-M#ZarpR4bl13!'Qi*Fl685e5iNaZTXl4J)NlYXZ
6q@FZjNIjl40Y9ip8pq`XAliK6qbBEade`DPLBc!BbSBh+iemhE[5V9NMeaJF-Fh
bf-+2QJr+,aIp`@$Y0K&qFN[5IQlNr-%Kdj52,I)C&LJE+Xl1dlJ*b9p*fB"TqVI
'eF'VYL%T[qQDM3BEQ,D%p+aa1cFN"8aP!6lB51%[a#Sb-!L%[ES5RTL%8r,q#l4
F!%CXlE"%VqYXchi3AE6pX%a!J,M#G,NQdlBaJQ3B-ZbK26DkBBC`biFRiYa(Mqp
'SThr!iMKH#KMQL'*3Pq292plheIrM8Th)pLj5EBVYED$YlQUc*k*pEIY*LU3!2h
-Z$3ElGTaXkPpNaL9aCC+[ZGD+#5%XiC8RA'*JiYI%B95k6m"PG0U3L[KP%aGST6
#m)%)4bRZ"bf9LCar-F6S3P95kYKBpD[eb4&29fQb8$e''VK(eFIjY[abU#Qm(,-
QcB&H"JQNM8!a'UT%(,Sffi%+Xm+#`8*DS4[UbYFrIQXL&[Hp!!!"Y8&%3e)$!!,
)$98,P+,%l'%%6fI9hG8KK#TVE3N-Q,3F5@6!j!5S-MQC5!B")YqKT#8IN`iP0aa
j4AiQbCRmE@$"0Yj1RfPhKB4*-K2C*!h)*pZcBqiY3rcNHikZZ@16JTYM[DbS%!2
Y$2J5,dk3!$a4j*!!l(JkrRhpM1h!i,9"F,Lm2$iHaj!!GR6dr"bSXeJ0,5klPS2
N$lpFhZ"LfR*Tm$`jcj`A2'pjDdUD,e(Aq8A)h*DS*"k!q[rmh[,1DD4iS8D0NMV
k&2$A0@ikiqNk,I%ki0iRDDcZjklVJ@m@h+URcc)PUA[Vqkk%$qUGTVa8%C85rTd
iRP1pDFkU'96Icb!ZAZrKjD*NJ`BULMIeM*Jce!qTH[Vf+*a56Y)@m!hC9X2,ic[
H$YbNURj4`V3pV`E@q2qV0%8LmbGHhh#SUR[SES!XCKB14DcA$CYUpi"+Lq)5-P*
q8XR%"jaAG49Q3P`Qp*+$Y5N`1bZD36AC19qB#`E$0U%8NP#CE2EU39RCCN@*i5`
kKBi6MZS8p8203jaCI*lQ0B8#KVi@GBD`3LZ-'rr!JQK"Jf8,44+h(j'i,rDm$mj
(!!!"Y8&%3e)$!!,d$98,h,,!V3m%*bHdICbfbLeFk&A8ka+IfckUi[jp4HX1LJY
e1mDP$K#Aip@ViEKIhECY(k!9)5rI5h+a8A(E"`[V-3TF*'@dADrmPp,k3UpSbrd
*p580Fl3r'j6@3[Dpm8'ZDT!!DSFB&c0GA*pH["p!'VA"SZAkqZ&KZkeGYK%E0UH
0,m)rRDH[hrc(M9,MjjVG*h0QI"2pDrb2NVYD"DCJ'h"8!5Nq!PJCG!"1*XSZ*Nk
CXT3`@L[8!U81Va#S"FF*Q"AT&F04!31&UCk2IN6QaM)A#5YGV8,E(p2"`UFN3Y,
fViVrHZYN5Xc*'J(T%PQrI(52,Uc)#(rVm5kV-5HTCAGIiTXI6q*ci5*0e6mREq*
bqr4l51GXmGFP(Ym5FXjhP9',lp"l4Uk8La0r'rVVGrimaNGiSQKECSGIHqp3A1p
p[,b(JQDCm%"S`FG)8QMGqf%ANc4F9(%66V8RYGi[G3L+9!AQ$X@hk##B'RK$-QY
RC'$DeC!!+1BT%&+HTh!4hC!!'KaQ-Ckl&Z'!TmLDUB0j+4ENcMkMK+a))HmE(rH
)EAH)@CQ3!2CFlI%8!J!!!BT"4%05!`!#Y!e9#j`8aI94!0mNH8NDejTXll9CVF"
r6Th+90rTHeCq&GJ+[!TX"3#q9SffYEQjEqk5GGF+$"2C%3-j%-eA"ZIhc2'6(lN
rGdrX5RCcE(mE+%ILk9RiqRhe!Z5,SM15ch`Grllp(9GNV`dLYmqa@6)fpjiTl0-
[c6Xd+Me[@V()DAEKh21Y#UNqU@Ra5mjF6fS8(U(kIrlSqC5N-M`S9@U8K9kb[Y[
U+J1ZCC&*ekblPqK8fl!X$ATFZ"DR@m`PY'PVbb3IaC-8ZdQ%a#6r,Yc2&&Fa%c&
!V3d!9MZ$9iYK#JXN"(GTV)9c8ZrPD-'j@)Pq9'rN4@JI`"k$j%M3Z[)a8BYS%kS
JLrD&$fq!LF&ZKA5UKXGB216r3mG1lL"BY8BUb#KfN!!!M9A(4e4N#2B(25`c,4Q
j6`M-LR[bN5S3,)YFLP13!*KeF(&!1ShC3+&i$`YSficAp!VDL6U1dX*Y(VB3#TM
RDT8""j9(BGhq$aK8c4BFHKK5Z2k-a1[iY@Yf0!)!!!3c384$8J-!"RF093e$)K)
4jPjZ%'3Y'84UmN3N#a"CUkBQ*lFpLicJGZI)5EFc8r+CIhHrlpZ+2"[Ic,He3*,
9cZc*j%RB[MZ6%C,P9Z5*V-M[(j%rNjr*[0R@GK&*&K1b0bh*)LK!iJIr6PQ'N94
%1+J,1hML*hBK,0+!l9$&S4Cf%PiIcijT$+G2[eNUFK-MbHfpC'm6p0EIcBDF5mJ
T4aqj[p)@X[AQGIR'*!P,+@RBhU3A&C159eN[%2cJbH(#&ajm5X-QD0&L4-VGcEk
Q`r)XP,P*,SMR)FNFrFAJLaU$lM`9cA8P820dQ"q1j-RJ+KhQ[L68+ciKBT!!RHr
$(BZ5%%MI@aB0YUmG+cH9Fc#*FlDI2+6+KXfGMlqi[`EXLf[bq5DTS"GBJ&RSpE(
k4UNSE)5VZ#(4a%4T(NC4T5D'+#Hca)G5#DG%eC'a54-U)Z$aJ`C3q')!Y4*YQG#
!*634DR+,6CR$@+QN(kF-V(@SLpVJf!+P0U0c9&M$',E[r55!`Li$a$PLQ,KZKIc
2X5Gal+,YACH#6FZ"UHV$eS-Ujc5-Gh6@aB"d'i-,eVDeLc'L6-mKjM,F%r*FlYZ
Bmf)r3FhBZqB8*mKFDkBmH&M*CEjpUU5NcqMUMHZl,G$)FrP&YX*lJ%6&V")5fb&
&5#AJ#$hRCZLJ)NBKdc[fS@lc&8+41k84G`VH8bAIPL!j2GVYU6-RjVbF3lRZ&DP
Jc0[DAFTb'rRhYdi*$'iYhrbA$q+6*eD"#2hXL3&E#6aS*Xkh8XD5XZL!8d`D3&(
YeTiH)j,QXMTfCIrBQ',QaYKL5NVMZKb[jqBq*1K-Xm!cl6p*FZL0,qj368Vlrpa
p[%LPH%SI@AC!''TAaj91(AL#-@"3aPPimHVhYlZRfC3AeqX$cDJ8$@fJmqd&j*@
%XYf`G)B2KUU3!"Si!i4'pV`UFE3TZ%Vi1,Y29L@qKkdk$`8SRBhC9E-k+AX1V!#
*JeYF)Z3(X`,GA!A9[Q0'IDaq[E"flB1d$rZ$9epp#4ZUUbq"F")bcdZiN!#&AS+
9c([M)*1*kmMQF"*$DeK5eBS,0G(8$DlUGG,@)I*P,r@PJf6iV!k3!+U,`iQMEf'
*D&FHY3@1%H!C2CVf%Lk!`1`-EZQV3EfDc)k)alY-h[lIZ!qhTr,*MDZ6TKGp,[+
bNp-`jPQCpEJ64GUkaD!DXF'80&)2BbYeEc[GB!TTEhMfk&f2mYQTP@l1bb2j`E4
mDbafS5aG4rV(QBS,DAF-pIPCbZIRk[pq5'N+mhpAIXl%CM(qp[IPf*a9Cbj2D@i
@qUC8h'a@H[,JJMDNfrH5e-ha@AMdST,jr-qAljL($06eY9h'+bI[Gal`F%%Abe@
eJpQRlELVUi0e"4+H`Fl,5pZHa$lSC'#l'ZAeThN#F3DQm&#m#9iTh-1AH$!(Glj
qYG"C`e[Aj!i!N!--#e9Z8h4eCQBJBA-k!*!$#!FJCQpXC'9b!*!$2!!&"#"[CL!
()'PdC@ec,J46G'p`'dPdC@ec)(*PE@&TEQPZCb"dEb"9EP0dG@CQ1JY9EP0dG@C
QD@jR1J#3!be"4%05!`!!-!e,!eYX#lGU!*!&U!&ElEm'"J2`%G[bI`KB3XQ2"YB
E-CF6!*!$"J#3"3d!N!-r"J'!!*!$"6BZ-#ia-MBZ-#ia,#"$Eh"jFQPRD(3JU5!
a16N`,6)`-$%J3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z!*!$)JB"J!#3!`8f,M!Z-49
6G(9QCNPd)%4PE(9iCDSJ0Li`,M%!N!--!#J!+!"r!A!%Ve99!*!$)"qT)$%j16!
Y16JJ3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z!*!$0%&9Fc)!N!-"5801)`!$!*!$J!!
"!)%!!J##!!-!JdC548B!!`#3!i!!!3#"!!)!JJ!$!)-!N!-FBA9cG!#3!`&*3di
M!*!&K%C548B!N!@%!*!$&`#3"4!"5J!!!3!!C!!!!4)!N!LG384$8J-!!+J0@`T
D3!*hq"a@G@ITa$j8l""l8cGeGYLKMlFEHlVGQfq(XapX@&9L959B9@)pKKe@"3Q
S+DEi#q$Kbe-!CQRmTQTq!Zi``mf2ZkL'Ld9k''%[lENXFkBX&8b2crC)HHcSaD`
df)"XN!"VQK,Q&'Q)A6F&@rG%"d@fP0"GLc#jbB*P-N%ak6ATZem5+jHST,h!2bF
2)QX!N!1I384$8J-!!+S08`UF!J,[eZ8-S,kJP[&E'CpCQD@Y&Xr+1VFhGlAHVGZ
ca@qF!B!"!'J!B'4c@4N!!`QS+DEi#a6T`jXZT(iHTmIX+fkNG)fEVG@5Ne4'kQM
[fe09jBc#*)clFhe!EKZmQ"@M#m+PF)ED5!k,d6C0(9`f!!X9GM$5Aj03pe-%abL
$LY'cdGq3!#CfI@,Tfflb+rVM'-Rl$J#3!d`!!J#3"3J!0!!D!4Z)'e"XC@&cC5"
TER0PFR3JC'PcDb"H-#"hDA4S1J#3"JX!#`!V!#ZJ!J4,!*!&(3!d!#d"')J#AM%
!N!-k!!%!N!8f!)F!5J$""!*25`#3"3)!43![!6q)'9i`)'&`F'9KFR-JG'mJBQ8
JC'&YB@GPC#j,!*!$'!!m!%!!Y!'B!!%"!*!(!3F!!#J+!*!$'!!m!%!!Y!'B!!%
"!*!(!3J!!#J+!*!$&3"8!'3!L`''!!%"!*!("%X!N!3(39"36!#3"JG6C@Fb!!%
!N!3(8f9R-`!#I`#3!`G6C@G1!!2r!*!$"d&38%`!N!8"!*!$J!!Ird!!)!)J!#)
%N!!!*JR)!#)6j!!L)!)!)N!"!##(i)!K$r"!)K``)#3Cra!S'SS)-M++*#BbmM*
10!Bj*QAd-K*P)Cr`)"($!%!)ri#!"!B"!!)E!J!"!!3!!)!)!!"2N!!!*b!!
!"*!!!!!#)!!!!8!!N!1!!*!(J!!Irm!!2rrJ!$rrm!!rrrJ!2rrm!$rrrJ!rrrm
!2rrrJ$rrrm!rrrrJ2rrrm$rrrrJrrrrm2rrrrRrrN!-rrrrq(rrrr!rrrrJ(rrr
`!rrri!(rrm!!rrq!!(rr!!!rrJ!!(r`!!!ri!!!(m!!!!q!!!!(!!*!$J!#3"`%
!"rrq!!J!J`!*J3+!#N)#3!L%!L!*#!)3#p!$q!JJ!!J)3!!)#)!!#!N!!!J+!!!
)$!!!#!J!!!J)!IJ)#!2m#!J($!J)"Rr)#!DJL!J-S)J)$!')#!d"L!JCI3J)'8F
)#"Rr#!JF-!J)$rJ)#!"J#!J"X!J)!!!)#!!!#!rrrrJ(rri!$rrr!!rrri!2rrr
!$rrri!rrrr!2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
i$rrrq!rrrrJ2rrri$rrrq!!!!3!(rri!#!#$!!Z"!S!)3J*!#B3#)!K)!K!,N!!
$q!JJ!!J)3!!)#)!!#!N!!!J+!!!)$!!!#!J!!!J)!IJ)#!2m#!J($!J)"Rr)#!D
JL!J-S)J)$!')#!d"L!JCI3J)'8F)#"Rr#!JF-!J)$rJ)#!"J#!J"X!J)!!!)#!!
!#!rrrrJ(rri!$rrr!!rrri!2rrr!$rrri!rrrr!2rrri$rrrq!rrrrJ2rrri$rr
rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr
rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!!!!3!(rri!#!#
$!!Z"!S!+3J*!#N3#)!T)!K!+8!2i##!!#!K!!!J)J!!)#3!!#!S!!!J-!!!)#!!
!#!J"q!J)!r`)#!F-#!J'ImJ)"U#)#!bJL!J-!BJ)$3')#"Pp#!JC4`J)'Im)#"`
`#!J2q!J)!'!)#!'`#!J!!!J)!!!)$rrrq!IrrJ!2rrm!$rrrJ!rrrm!2rrrJ$rr
rm!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr
rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr
rq!rrrrJ2rrri!!!"!*!$J!!!!8!!!!)J!!!%N!!!!!R)!!!6j!!!)!)!!%!"!!#
(i)!"$r"!!K``)!3Cra!)'SS)%M++*#BbmM*10!Bj*QAd-K*P)Cr`)"($!%!)
ri#!"!B"!!)E!J!"!!3!!)!)!!"2N!!!*b!!!"*!!!!!#)!!!!8!!N!1!!*!(J!!
!!F!!!!2J!!!(m!!!$rJ!!"rm!!!rrJ!!Irm!!2rrJ!(rrm!$rrrJ"rrrm!rrrrJ
Irrrm2rrrrRrrN!-rrrrq(rrrr!rrrrJ(rrr`!rrri!(rrm!!rrq!!(rr!!!rrJ!
!(r`!!!ri!!!(m!!!!q!!!!(!!*!$J!#3#(G"4%05!`!!J!e6#eXJ!`1QB-1UDV-
`X!%LBQ!h5l(E@C@J)',$(ZVC`*K9-3YM+VVhTe1X#JZ*BmLfiRI@!&)SrH'p`)*
+Z-9!Tf0)-Sk[fIFQ)JkrkFEqqpLI1PG2++D4"4f4ZS)CZ+2&'UkSDLHN6c)+ldA
1"3#3!eG"4%05!`!"!3e6!Yc@"T2hdNE0440Y!,6j0bkmfddECX*X[UX,hi6GX0[
NhAE9eA9K!!NiTBMrG!Ak'M5Q0Klla*eVf8k#LE$6%2V!XqJ!D*!!aElq",i'!*!
'!5*"4%05!`!$LJe6#TXN!(q'4E$G16N6X-81A8Y16ahE!48$fl(kf!a@pFiq++K
BI@c"EUcUaX!rBhp8p,rrEircGPBCaZS!#jNe$9a@MI6"MNEhVP-Dl!5cmbJ8h-A
L-N+fe,NJbA-,N!$IEi*fJZR44(62+AQc%pfmbHiVKB3cc%YDkTT5LKd,2KqEdhm
%m(Vq1HV+dqTUrjpIEXHVRre$rrZ4PL8#Z$0USi*Y9X&)*Va&Ufb-9E9H@cjLQlH
&l@%9IG`AaY*D6+58Y!*a(daqM-2AVK[QKkBCkP2EpNhG$lS3D&U!*`6)!*`!6,h
k,3$qkJN$%Am!m+*bi3)3()+!!B*LB#diLj&"M0m-3Z351Z,UBj,-[5Ka(dcIG2P
&a#YXbaJ!N!-`!*!("!!!rj!'!!%!N!F#!*!(!`#3"`6rN!B!N!-'!*!&$`!!"!#
3%B%!N"k"!2m!N"b"!&3Vr`#3'S%!92p8+rm!N"L"!&6rN!08+rm!N"D"!&6rN!9
8+rm!N"5"!2AfN!08pT!%+rm!N"+"!2AfN!6ipT!&+rm!N"#"!2AfpS'3"PEhp[B
Vr`#3$S%!pIEfrIq3"[a@pT!$+rm!N!b"!2AfpPErIrH3")(rprD3"#[r!*!+J3$
epT!$r2hh9Rq3"DZ3!hrfpL[r!*!)J3"8pT!%rhrfIbTr!*!$9&4r9L[f9#[r!*!
'J3"8rrD3!eErq2Gr+Rm!N!089+[h+rEr9#[r!*!%J3"8rrrfN!2mrIG@9#T8N!9
rUrIfp[rr9#[r!!#"!&6rN!08q2ErIrCr+T!&9&4rIrIi92q3!e6ir`!!rbY8rrr
fpPErprGr+S'3"+a8UeEfN!2rre6ir`#3"2mV92rfp[cppPDV+S(fN!1"IrrhpT!
$re6ir`#3"[mV92EfrIhh9UZVrj!'IrIfN!08q2m!N!Mr+rEf9[jrpj!%ri(hN!6
fN!2hq2m!N!Vr+rEf9[hrN!D"pT!&prMr!*!-rb[fN!ErJIH3!rD3!rIir`#3$[m
VpT!$rrrirrripT!$prMr!*!3rb[fN!2hprMhN!2fprMr!*!5rb[fN!48pT!$prM
r!*!8rbY8rj!&92Mr!*!@rbY8rj!$92Mr!*!BrbY8re6ir`#3'[mV92Mr!*!FrrM
r!*!Hr`#3-9Xj384$8J-![YB393e94")!)@,Z9Xpp[MQ2i`K(#'NU`Eb%N!!Hd55
Rf%a'SLBA$HH4*XFP5Q3X16rIh#NNm6B'59hrR&1L""%3F4R(-M39"T+!)9L@C9b
A#BcY@0CPa&,'8TCD5kPPaE(@X6E'h2IhHjlhlVdB46UG[rr2!"UPTb6+J5")JL!
))J-!AC2rFGAj9c@L-`Kmhd+'[J6(q1Z+$jQDR`!TmAH2rm!G0q9pqYpU+dC[8Ul
HIaY@h2#0fJUk5X4"[[S'%EA9"aehkAlc'3AN81hq9hXVl%r[hIRZl*(IJGKC2&,
llQa-X$%q$eVkhrf$%d5U$`Fk8Nk3!(ZI'2MdTf(E4b"C[[Z(82+ADja$cFXr(0K
VI[Ff6(r2daQBVZ6TrI4kY#*qj[0Rk29S4D+0TbY"&+llr*Q#I`))2NLIY"-J))j
BqjHF#mFYBD!#0Ckjr+VP`i*r!KdT$d6Ql1D9LZJl5,kIcbmrTE+`4+9Zh[2RSVp
35Ic%mC0S1kAdAre$f8IQPj`*%+ZLiF*iVrVRcPpNpPTlUaHlEq(QXA!K6cB'aXa
j[mTccq+Z(VCKF&'JGpp(EMR!&!E"6Pele0lj(E("jmk%!a&3*il2'R-qTf)&8d'
3!(3VQmT5Kj5PDNTRRph12lrSr!8Pc%66,d6$9qJfifGjaK4U#NcKjJbY16"&$K8
[KMB1U@ZE[a(Bl0LX%VA+AU`r8TA2*)0A1Y,1jiqF8SiprePd(SXrMm@I9iR5Er8
SGflh0de*AVTMHY+80%I0HIG(hDip4fJS[aS,1jcIqS0jlKLr+Y5ZYhhV$e2Q6Y0
2)A2T8*hhY,Y8jL6VT-TfI@G9IQN4%8hEGREFe@'MU""lY+2rhGQLdi1*R&*d5KX
45ZAJcImUAJ4SZ+HlZF2Qk64S9rjIKA,jiK3GU,*,Mb+a8I[ZE9BXd4I"G!BL'@f
j2he5CH5$")arL*DVd&m[H+AhKdTe,mcV8kD("e2,#ek"b*,BpV1-I2-ICmrHpEi
U"N)8krh[hK+fk@-E333[@*VaURqal4201e%MH5KI'BBY3H3(41iGkVlAfR$RJR"
%(aXrVVmarVaHS[[ee2JZN!$p8diD0-pqFF4mcbU&a660eNY'I[Ic95S#XR0m*19
f[(bP!!cq[&R&r@mpYXLqa!U[4*%N[eb$`fihXT6ldpflV3h*rR#mfFl,S1ai(D*
bE&K!b[%9EH3lkJ!"Am9UFajI*!k2Al#-50@VlJ"P$"kf6X2,qfXbeVaFU8FpM'&
TTFLBGJBaZ-l)B&Y*hBp4%,a51RaGK,`[!Z9qpXM,+D#NjkD!JTG'i,Xlp`EHAE&
ab'l[3!5%MJL)JU@AmpYUhefKfh`h8h#ErqK82I'#U52+EFY0+L*[1`THD90Qbrb
Vbj2QhKrNhGpVYPJXH9I2QLCI"PdCp9a*@LaQLbqV%8NpmeJi&Vhk!$Ca*QLLaq@
J!rc5E#P2jPalrl4lSZd[e8H@[K5)2rB0,&d-+[LKh9lK*$*F4i+L&C01[H5H2RY
69)hhMamE[HRG#Q5@elG@YMCe)($XGSUJD1jZGMB[4#6(rfReReEMMB'A3"51eUl
3Kd)jTiiKBUE[Pc0("KZ9cd3&%3LldA!X&2mJkNX4QMB[FMX+jS9[4`C-Nh@Hb)0
9(BQpY62pAIILNp&eDm(-aANJjMNX(q,D),,"ZCIc3mP4!0lM5cqUY2pEecmm"q#
lDiBqj$ZRkpUaeM&I+K62!d&2LmllD+cV2QGre`acRJ-4!E[9jEc0#Sdr2keNjNl
4RFMHCb*lAfGI"D,rd-P3+%IEd*bR44Q!'85RdYEKq1RN4ldcVmI4PFGcYR[dVr5
KFch(I8'$NM8'65qBqF-ccefj6R9G`jqmjklBl9hc,E9Gecph46Qk&KA-r*SEiSL
DKq-+Nk@iB$)2Sd#SEHr"6kKJhMI(R%8NA%5&Gq*9r-QI*K!jHHF#$&q%U%j0a#X
k+'S'J!b5,488M@UZ[H'VjYFl1,T2fCUr4p&bbJCf9i`r0a+P&bJk[bHZ0`%8FQS
%p3BB(U`*N!"hA!V2#I#Yb3T59ALIm`&cAUPblP84Fpl55EPA8T4Va@C0FKqJ9iH
d9j0(e1bhk'rG@p1MFimidGLQCNqK[h96lSr1"5JhIE)cf8JAiZDm1J9JVBNfU(&
aViTKZcG,eHcAk@rGkrG'jdjDIH6H0`qJ'*beqHXSXVkq3m@GDHDm@C24MD%B-C!
!`bQD%5"#E[ic%%ZUHE`0N9r)m+cMcjF(L1(pa1jh9NFEdXcc$d81pXrdQkmqd$m
c`hc0fL0VXehaf42SEpf%'G2QCZIBCKcC6qaqjb#aGI@b5HDVkj,lqfF'c0r"T8Z
i0'RYNG+iKp9TFbFeCY25Cdh@!iI"+MiDXfpb8icCfjQ4U`FfZP4hmhKr#8HApie
E+IU*SXV+EJFJeGre$f'A+d$4a-S'BP(r0BH+$LREaN-+dF%Jf5*#NJ+cjC(b%VH
V[&X-60"![4FaE6CX(c5dqIm[*e'8kSpi3@&%!0U)SG(F3%C0F4(bQH&j1lS"b0k
R@e'ifC!!h8P"9p"`C0Sh`+YaKij[RVbPa0k%a95-Pe,JeKLm,'M`QpXGl!XD2#R
G`8X)p9[2'6c!%SkkVE3[ERkG2Ke$pMjlAfXcXVQ%5V6q@6BUNc+eYQ159-R@2hX
fJr$J%5LLUVYFI5mD0S95b0jFm!k&&%85hJ0MRhKlPdVj1NNd1,+c3c*lfTr[2K0
+F*DBKNZADDL-S#aA1AFK!L0'VhfE"DZGJY8qBVIjG3Tmh3q`hD9ZG2!e4(2#icQ
l9+IhQ,kb82*b[SbBp36$BLF#f*`(m(daAddl-H4m,Li"ZF[+JEm$p)0%ZSQ3!%b
Cp[UlEYi,3,Q,!2mqIe3I3p0kEPVZGKA9UAdiVUa)(Q[#mB9kEIX-CLjM)f98bi%
'*Q[rqr@q0NVmK)[2BpQC%*Hld&cEY4ir0f2B+RmqJG4G2r1J'3+)&N)$D#!+LTJ
A"9Rd+&K8jbe[Clj8Zip"-(%&'D2ZRj,j%KeFIBYhm44e6HK0#,*4$Pc6U!K*ICY
0r9h(Fd`)Y1k1rUl6%U@5TNB&!ETfj@YS4GGKp('9XqL#aNmDLj`*,BXP),f))m"
"[,GG6!iRRp[FG@,[MUl6cr9fA4kpkAhIAR0AeHK0A31KkqDi84`SYGV$`SZ(`%*
(M+212l#1AFi2Aj&GYGaFqlk21c0r1)iSQ64U`1'EQ#&23qGd&!-3r3r0eM%53RK
DB20&31Rf+mCKAkCUA(YkU!J4'P8EBh6e)U,Z-[*abHcF$4$"krN6Tj9(J22XCFa
JJEG*j6+6AK'2Xk$kZeV%-FXm`[-fMML,'T9NQ4J1&Q5@fLq0VQb@Q9*SFcUrQ0P
efVF2aER2R(F`cAceJUM2`FAPC4S`rQ9(C'-DYQZP!!`Adc*ac)#cb2M#YmTS8J"
!%dAD3d!U4!kh`1bRNVb"EJdp0-GY3#!H4J2)D`!FaZFK[p)j+c89c,Yfe8-PUZe
,X+,kj4B2A3QGI+9D0@#VND#YlT5Em9AbY-@Y4FKXl``hm2D2M$rr8#C[M%LSDjI
aYTAUBmqfa+MB&)0,B5Vb4&Y*HBP"E"b9bP&(B+f4XT!!B@4"LBkKREd&$m0S+Sd
Mrdi6Q%$0Cip9(r!dZp'F%-d0RQBVQL1bqCahL`0S6K20hLhfS$NQQVeE8(4L0U*
229'q3+IE21"A(kD[INMJ9ap!Ec+Ud1HiJ4LpUT-4SJGJp+@*'L'Q8,IfVT[BK)b
Q1a#G8hG&@EVXKIMTh)+VpZ,4G40[aUBMS@*NGH8!&q-K*fdAMMN6EKA2dHXQhN)
CVNRj%'Q2*MHZ01'+f!!CS-eqd&*Thm1AVc0FEJ5KC-4q%8"Y13jm%$p2mk9a,Sb
RB+(P@dSQpPNV*rEj9$a#Jm6Q6f2$Td!DZ`'E6JPpHikEMjQ(TQQ8TFRV%h2-`dN
NImEQimS5-[[bC$8f@)-P@rGY+@PUSQRcRjee63#(+,)("-De-2%DXK4XcQfp#i@
IfN)Q99G3q#N*mUTNV8TH1Lm')F,S#Nc)5R$)C$Eb!r(@2TP3fMkjcGmIX%pcY"#
US2!UGPRp%jb(#'$l`f#1EIU%k9&%B[HjLh@VIj!!!mlPH6Ni2HSDa6)V%!hG"q*
%&adi%0JaS1mJi+)9QE&Z!rPPDAQJlJ'BPhhY0!aJ'V#jHi5!b)-%D&eYcS0a@#'
EK(eY5mq"P(fafe3e*G",3"+Clbb)RTTZaH9`+@e2E')jLmAQCG6Tf!h`CCS8D"m
93)8hG0N[KSZG-5'-X@S(PVTNa2r`QmG9B+"U%SLb&95X3Q!9"edD'kH8IB`&8iS
0*cFrJ@%NdLX(5DaL5&-AALla(MKeaNB%5r0U0Uc%)H-21qXQpKP)L8fF!4CZe)U
VHBjl#9MC#0-#eFf)RLUiY13Lc%fGPUkTeaa9`dPT+1J052@CZE)[Bf1NpGV656,
pkmXJ8d($J1KjEYkBD#eX+qQ`JE8QA$(Kjd"cUk1,J,Hq$0mQ#8lcY6GV#`hGYdp
PHEYT!l@GKQjPCBb0"b-!qDb"AL-$)RK3i'JX(ia`Nl,l,3!"X26qpTk1r[D3!(R
i1K-K-3%,5&U133`hHiZYM2``HmYB06,p#KTd')NFCAN5b4be'4Fb!$,-S"H@9R@
F%N%S6LU`m3bmQ#@+[G64C1MihV'ZLR3(1(`UEDjSQXeEZC+2!QMCa@!B$"c$Hbc
ITUYJ+@99Eh"bmIhkbi+eY1R@0#$bXPhjG"R)2BC%P"rQTpFlLd,((jpjJhm['VT
@p)mYqF!lL-"!%26Q6D``,KDX9"NfUPcb!3T'C!'fXKV$$Mk(&ee0q-5l9MVlhip
V34iZ41*`%GJbKHalafl`$k[bL!6$('F!Y,lS'm%f,J4r&5C1+RE4qD4JhMXI(%f
5-1"92cLUq!8#"Lm3bH2S9j(hIIlmBjH3!-Rf[qpl)dU!bcej[H[k$J6H#NA'kq"
&)hd(+0[V1c"kd`dCCVrPfd9-J,SZ$Q2'ICjA,hTIT9E"4#jb(KZ5jmh-#1JEKq*
*5N63B%Si[$1#!q[k$Z38,BXH5XV$firimdp&2KTJaJp)X1'G1Mm1@$+[B0iEYa"
V[HZ@c1[p8m3QVe#K!,0-"#!CCbkCCkkXZ+CMD#2qb3qZ$CSVTrk!LN9kLBBm+`'
$Km+(4-2iFaM3AVQhFZULpUp'edhp`H9",,k6f*ZkN!!1U-ThGiV"235m[Pq2*T@
B8$![--"J%#8LSK$(FFRb)cG3`[Sk8brBa6B0ejPS'rPbb#@Z42M+3GPXZ5LDdlJ
j5cD2@[I@YRr9$Q%XH3d#k5bBGhEG+)+&J-VRDYXVZbk$D(!#blX'Vad!RJF+jM@
X#pREJCC%EUc1)1(['!jPN[Pf@`Pe#ekT(D"Z1@@L*MhJ-XhSkR0NCZG@MNAkB$!
BlY3c$rV*V(Y60`N0%jZINEEFT5i"JD*'&,2#!jfU4L(lqDbZTLpQd9E4h%UPqK`
c%!%bX3A0'qkMk5I`EQ-Q"63H!i'[6'c3B-kVbLG$ibfI3k4Pb%"I)fmjTR`fHIL
@ekVbMBG9VV@q&&Ea`Lq3!'%Hfk4(PQ+5@dF(GLJTY0e2DkM$*"2m0,p0*+8)Y[[
pF4Pm!2C9mRVV$TqEa)V-i5YN9j@861!X`qBE#ASalpGGe'cdSXN*R-99dL!D$,,
-9`Li@,"(6[T)@*B2+5YilLNUq*Gd)4XDmqI$P$U#(bapIb-#HZ'1GAe9PkG3GJE
@BYBGiCLPIm'VlQjQ"#"9H!@a[Z"9mJS9m!UM%%C(AF80q*QR#4SLU&`b'3FdH!p
!dd8d+34HT'B`i,K1hclM8S@SUkJJG@p,1+jJi5aC&LbFF%S+fAfQSflLCaee66p
)j`K#cc)@b-8,"(+PB0lQqrcjR*!!l0B#[eaam+ZQ@cVUPLc!6aH'"L#)@rhj32S
A[GNUR"Pd1BX+jK@mLkcb#pj'NK6I,*Mh,aY!8J4"e6&X-04P!$U8,#p0a[*H#X1
BaP5DQ#36fll,S43D1iY,ilA)+#-UiV2b*-eR`D48lBjAKaY#6Xr&E('a,45KLf@
PbEr!`!3ZG[-NM8cKk@)5@E@eIm%%`Gb4JRRV&Ph1Pk,MS*iJ$Dd"4,0KVh8irYS
l)miKYI5*J4%c*J#PIlXSE+*S0L4hVKYIZK%%TB*A%+N"XV9+MTMGXF3$Gm+p$EU
QZ@1CBjBU%-$l$Qj3F6JSkRVj#S#3!,M$"EZfkm)@+d#f5[eP5Xl%q5MRbq5`#Cd
l4ljU3bF1Z$R,FTD[a$%BK5kD)fL1BC*3FEb-1"T820P4D6-e*$X#B`q-UGfm@@'
U38AZ(!R((U"08ilKMIEiDbGNpcT63h`2SMMqiL!ba(EpM@mJ8RIdj9&PXcE%(hq
RZ,XK149VZ0B"FSc2"XC[Hq!-+,Th[6`F0kP#kh"L4HeQ(&f)kd1@--MFIAVqi@&
EP5S1THDiI@f(ci$)86CRYfrINfI8LmVjj*8GJCf2U+a3%UpM,jp4CDS3U(K8hcN
#Sr"0'fl2,VL(d)+LHQ8d)%h(Ch*%B#&-2"dJkJ*G4JEGjBM@Dh31hIiB6$dG#pD
%BpBei@lhLYi+TIpm&L)hD9L8c4C-C,,JIl9J&SB(h1Y1eqHF!j+iDdmH1i2*mA2
I2hFDNd%LT@1bc"Gk"FB*kYRrI9bRbDTh6Kc(*,R[C%re1jKBDQYT32*icXPDQJa
@BdB6*Ii"FDD0))K$%FGCp3UFS(8lcXC2!lb2"-EF-91$ilHA+6,I$@*@3r*&6+R
Bjb"$aiT!M#3l`JdLd!lSq8Z!dVrqY[0EG@E(@&&aZ-`aYV%iE-+R)9b)TJDBE#K
h)BkeKB!1S35K,EC5-U!VXf5bVie&q9lL``'14PHI$ITLZ+,F-6CIT)MkUb3bU,)
4FhGa@$90Ak"m+alrKTl#b`@-c,(GNE68G6"CC[3S#d+2&+%(`,VG'*iY8E'fM*E
Qq04"J*-$Rd4Y*(0--YMN0M*'b9'p)CRkE""1V9k&KbaVI98[`V$pGab0$5rR3!3
Pa'!U0SqC[QRYJ+1p3RaLiFK63fl6q*!!fb'lR`mKNR[)"RD+J"CXaZ*J*cKA!@f
"-(!k!`-+C51%b3$#2(De1qkr@JjiNJESKiNF8!cNFMcjQ'UcR&'(!"EA@C1qb(M
F(4p2i(Sh[4jTK5(5*b0dK)e3fTl(@pK80ap80[iPKKE5N!$,Vr)!bB)$,0a)VaK
p@e9@ZN1+$82U,KK5U)Tji#&QZ@jmXr3#)q3&5&J44,QQ%-Q`$Ti#cM!Ji++k+#*
KaL"!NcYL@U@5b+JU,#Bah0rm%iJh-M+)$#l&8A2`S!+NI*L-1TV(DFQ@'r@Lm!K
&"cU,BBLH#TFY'$Z"6$Gc0"`c&Gq6jejK-JA'aZXdc`L'&hBNQ2Kj+a,T#qGd0LU
3!#)F--1Ibmik%'AM*)%b5F)3@!YaUG"q+`J"$[[FIL)(p2%'*0*Z-G6'3l-l%KK
@CPq0BGhfcrMLJdJ+2rXaAIiaQeq-ih*fD"m4(HKB(2md(e[X1GCdpcDEBlZMV9$
NU5eN(VHDL+SJ5Ac'BZ$YH![iICq,c3RPP["02L+61-M!&`XQ`XCRr1SZ1#1)i*!
!I5#`&BYMZJd-Gc,$*Ml#3F34,$DQ,4BLrSaC,21`+"fNC@qK5k[jdQGmT*Hjkbi
8mhD'MpkYiCB,KLpNFXpF#Z"3I)lEicRc036L4FjPBGh#JF$)&0SY&JNb2F`*b3P
3&j2BDG'VdPhdHL)#)*V0"L*H)FLJhCS61XGB608f8QEeb`(TF+YeRh4#0E9(1Ya
LXQFD5'ph&P'8acjR%D%YR2)XZQ)h[L*(KdL3!(l@@14c%''#ZP1c'iYJ9T4bp0V
r(U6T+EZN!lGeC13)JXTY'0c$JpGTN5Fb%XSHakXAD6JGJ+'Vd!"'p$[(GhA!84X
Gf$ar#!6Jj[FELaaG+*ILpX@q6Vk#lB6cJJ804Hj#V4(X9$@!(9qm%F6(`cqeZCd
a@SS%e`aHF$fCaE"6$1Pma"3NV0)JBAdNK99K&X*b5)'dIS5%6*iQ(L6r@6KpDic
#U6J$eR[Y[r*eH`Bb)0qhJB6Q1aSXV+RYZ1a,6eJ6lm1VA+q`TQ)$R`f%h%qh,jk
TDi2&8l%r@$c53BdAA6PEC$*6aEX`hNJ4f$JjG2$BZCiF4DD,&A2)-4d%e`f!Yq`
d14PZ)`I$PQ@@4e&m+h@lG@ElF*K)dIhY`a6CJD6'A%3e(h5"iI+ZLP9YA4AV6bH
YABS)HfZYj$`BbG++16*L*0PN9IlmF%"EZRL&a%XbKa2FTV#M("kKVFZqq(65l4N
)XS(El"G$c@,S!F039lT$piLK0Zp3Q(!&X#5(C4QB+lBmLX[GQ"D@EmMB8CA4YX(
I@j9a1QP+5'H!XLJ"10j&C!)!5)9L#N-F#+6Fd8AAj)[MTmkG&#m+V460Pm,(!FH
+5@fMmrP)!JkM@0UC8BmSL$L+SjJ&!R8h5S(#@6f4Q1Ce2UXAqETPSb58P*N!DTK
N%`EXei[S)LIF$fCmR`hC214q$U*LEI#hU[3Lcd8F5F%23cC[e!"l%cec[iQFDQN
NT'Sb4$$$'!*0TcB0UlE-Amh2Q-*4DK#XZSD$XC1b,le&a6$Ta!5'%1l1N!"T4K6
%f650r&FlRa06"XHDMQ)A!3E)mSC9FHH"#"&b6af(N!!2U$TGq3,11"N,%+P`@64
`T2[)F,)mpaqq%hMElA*ZENXpm*lG2UMf(AC4X+5TNr@&2$Pk)KBj$'H5+["fB$2
!K"X&UA%K!CfC&YUdmQPLTGMTLA5*%)"#@@ma'80'!KDk5+S)&N6C['2%'Fqd`1b
aQ-!f[2LQH''6,hbV3NQA*fV+e0rqJKD4B3Ph$2P194qAR[[ApeY,L*`8YUAUb&M
QdY9jbFd+6NhCqcfqXhHAHI65MS'G"CX(mR-hl`L`#6&[FV,kl$QabG,YEI+Sf'3
dGqGSjZp'#dDIdEDKj9NS@5mRD@)5imNCZIb3!)+5#TYi95KH&BJ'2dAp%qNDdH0
R&",6$cLPZB&bM+j5bj!!P#N2THNrSQ5Mmh%UhN45"XAIi-lH3'E'D#"$UAh&[6R
e*h[Up@1R+ReR`krNR1b"aE4qmYaqBV1TBcH@bpP5l"!4"#pHjBjERR(ZTSKTjDL
$N!!*U(Z60mchmp*HSk)5*LN9)c-1,S@*EJ9!$SM+IS-%FlBJQ@T[JBHUa0!5LV$
C#0'dSYjY`#H,D[(PR)01rSjFc2rZ8MYhBYM"SfcQml3BklM*&Ecc,3&dVEce
"fhT6NHm6!9$0SFQ6b1j9(%%9XEGFbKY"T-4SD!'-f#pG(8@bi',5l566hUCp@'b
jA$TjFfcj0N8DK"bY$fmUZT3AVE1r$I2%C$Kq-ERP'G9Gaq$!VAf8PEmeN!#r#`L
c-hF(Xll%r-IG$*TUc1[5LjP!T2b6#S5ZP8(%E&GS`VBA!URqG[0ZdfjIhC8NA5(
8N!#$0XENS+EE5@bPL"3**GXRKHqe6U)V(cp$4DkD,4K#N6XPXhHd3-0IGT!!cSK
65!XVNXB1)RV$00*I)N%SZ44iJ!!KIfpq`F$1Cca,ZYhmab5CckG)9(h[3P4l1SB
SEqU!19QpMcEYF*LV&4*U*#kh#f641*'bU"KFYaK"8QB*Se$XNm2`!UCP+d+ELL"
+4qj269&LS3TSqKUGlNHFP)&pqqH)9Z6MbI(T4F9HMaabGi-)iLI2Kd#jb[SQ[pK
MhIbpUj'mkV4Z[R5004iZ,(HmmAIc%p2L0BHp34I,i069C%0L0#q*jK4XQ!TTQ'9
!'rM&`#Fmd2+K-hCe(db'HUK)Q&KB9d61Mke[SN#p`6*J5F2![1idZ9ABbB(DlEf
#"Aq1DlIX+j+0C#$A#h0Kr8I1al(40DBd5Q,L`!D`B!SIj'"IJJ#I6!&HThbkh&)
BQY"QUrF9m6EVB#D)EH3@[)!4H*AepXrK9H"SKX5%3HmLH`$LMF`Ja$ZD0+AjBR8
`J*ci#CCJBZ6SPKXA$YB9X@MIT%L9'd'JkRq'&&#B&JXN!I#l"NMbc)k#(B(4h*U
i3X'e!XK5V$QN[kLXKj4ILYihY#A6[U,r(3+G'""E!C!!DAiG)L2dA2rJ#&3[D&R
A0iR3P'BjT'+5N@p+4N`S-+*DKVD@-L$N&MX(cYGJ3A&L"CQK-a4*2c0FKXZEG`b
-lXV0S'X&Slr$eE,1RC8pp6Q9p6fk(dKGRe0IHDcq('pS)Q!mQJN66[cBh#D+[S8
M"-F@)U6Ch"&,T6HC-F'r)r#lM2b"6*SB'#*NK@(K9C6TJHLL[*RIflhQ(Ef2l#c
)h,PCHMFB[598PXcS8aC#pF)0Z2j'ANjm!8fZlNPq&R[MQQ[LR)%Tpb%D`JGN#Bm
1mpZlUMNS8e+%F,!MJl`HJZa'GT(RpI4[$q3(HRGi'C!!#`j,a!#!8IJ8-SP#`A5
KTScKpF#1h"fMQ8%A1mJTE)U#r&)H&iJ1Dl8U#*14@d(cDJXk#&5rUd4EH'iq0KM
)pqmSi)8[0[ra@N)Efci`)&(R8Tiel3h+U#8+T8b)M[E&,rk#[4k+&$DIJaNGXT9
#*',5i'RmcL*+3#cjC+J)S0MldJZ&IY813H6mD-'E[&fP+Fd6S#Qhfc)!-EiB[&d
(&a6b8c"[qG'')Z0V!!'Pk4drFESmr[HcMFH$AFGI$DL#Eqj!%Aj)T6Ph4mEXeiG
MIc%@MSZ!1BQ!JE),dh*0`&4J@hBmXl0!HUX+$JjNf42EUFMALSfQ+4qAf+G5XDL
Kdf4Fh&'`QDmeNG-RpSb@ZUE&Kak!X9Q8`-53!&f2KT4VM$FYPX9Gdjq`HACGd4Y
jj&$-#U#$XdM*RSmc4"L`FAC,MRF3ZGDdQ%"0baL4DFaj(8S[)Y,ER$SHM!2IZ0S
kqA[A%0Kp+5J,4Y!p"H%JX84()3+JS(Q09eKi24Q-3I!"2ah5UVY+[+peKmr$%JU
9$cYJRVcH9&S8LV421L9I(FHV6AVDq5J@Qd(&lXK5CL,2qLLc2l,KdHS8$chKMKp
k31qXLRC)JlDBYS50NHBeZL-F)38[3NKe*+#qQb(ma6JJ8JG$"J4C&V)N,@[X4-(
,@@-'&@"+mmULi%4#9#rkj8MGS1[(P[#Q,q+k@'iC(m$QHF`%)JaY[VSLajZd5&p
R4bGG"%'c63+(H[5L`X(&@U'*Jd%N@ZSpf$`+!a+4&4-J`XGI*-&"q!b1VH3Jq&`
H,%#GAb-V4YB2Y(,JX,0lSPP&',B[Q$QT5!G4CTr8dHXp2,L8R6f[P%`DPiBK1Jp
j[ZB5a6E&G88GMU+BLDjq*GLTBeBZPY)"mESdRB,Y63ifQ-aUSK!#Q1d9J!Df'#8
JMD&Cr#5i$*-TE`0&p!5LQe3('f%551Y&@qVHXeB6,"86VrIQqmq$CVQci*RmA4N
HNC+(kS6aPXRbM(iRJ3NqPr94bPCmZRA5pfK5h%%!&ic$rR4k"!Ui[RGN!EpJp(r
'&h$Yq0(2aB",KiT)J'!ajQ@&JlUXrBb+Ak,YpibB5@h1JXFqSFfT1(!F0*Q[hR#
%0ieX'V)rJff4X*GE-8R843EC`9[+aPN6J!*,'*!!3&3+-T!!HkNM%a4*DVMHfa#
RKRRHKJ3eY(JE)Y5`QMH(fLJi3eZbE-,5)d`dLflK3#Sf"0,EZ`VmSlf2l#M)#*c
AK(NY#G0%4+&dK*NG,-a9T8+Bf8(#h+`*Fj@Y9!Sc981BUHd+-dA#R"FXc!'j%5F
L,K5PD$bNET[3%5-a!Vd'[1MP(Eb&!I2Lj9l!I-,!D'B'I+U3!)*@f*-BZ1Ld%&U
0Q4k`M(Ch,KLV(0Bk5dH(!24I6++KXrfCfJ#FS)fCARE$,00CK%L5Nr9+&@,bIq$
N-"B"[,%TbN-1K,Bca&R8AN,&$j`"2Z2qA'lp29PX%k#9ThQ$ehCQJULb!m9mIX'
P83'5SkK1T)6D#`GP,aaijGDe((KlN!$adk5-!`pCp#f9&(J,*TGiLr*LbQ`k1'&
$a#*NVR0NaL'mGjiAG9k6fG[[4[eH`69Tk-2+0e#mp9(#B141cLb+1qj%dG&(iJX
ZQJ5MhB*4'iUT2J0i8@dC1+UBX644f,jS,I&GBM"X$"&9C4['[NI*JJCU5L%KVll
N3Y*&"&3kNPi)MeAHM5AMT36L"V*`hCA'k!22FQr8[8BN-3UY!m%&VDp6C*LX2%m
Q`qZ+T&Jmb!5ar&q)4FKNjij-,ab,i&Q**$aYBS+Ma3b0Y)P)pY-!YRAjUS--m6c
*`$4NkG5%l29K(0AT5G`kT2KaN!$hK06Zhm(acGR+-"dP%!&CV#Y+4**MSFSHQF(
2VBE`D$&$P#e,3#VdC'ZTkmI@Y6i8`&%9"D%3!cJcCZ-D%*&D5qZJdJYEGBC5VD@
%%SF8E5l"Ie1HJCc4+mJC'N,+4#jYKD53!0a+JNRHVEKBLI9cST0!B%()k283-V3
#fd'-BjpP+,6hA&"S`hK*cqK)#4#X!L`ADJY"FVHBLNF8@*d3Cj'"H8r"JL-&ldB
3`EU@R&%4!'"heK@jEG,VV!Y4-8PEpAZ5bJ,-NeaV#Ba#++4%i0+d`k3Pm,')'#I
+5bQCljE!KX'im9pZ#8lq!j!!5#G*a`Gdi`!A(p$GB8*N!Id8'JkbU6hLS$,h(TQ
NV$N-B23"'Z"05[lVcYjYT#6&X3iFQmA(1MT-(N4*L+0-lQj*%*2ErckE'M8aJ`b
A6[T`Za[IZBf0Zi`E!pLi)1dSYV9jYV@aN!"56!C*%pX@LQeY4EcYVdh8U)(l3!S
"lB[0LMd#,fB@[3#8h0LNBQ,M,#(`iTV$F%J6$I!#U'q4`!9m+JlUa%&YI&!R(f3
ma+(Da#(&lKV!S$cJhjkQPd'!D%diE1X1fVIpJeCq%(c3Ujk&H-%pNFaH'LlQBe)
iKV)#QpMDi5l8NP",&P#$p%L6G[CbDNPXB2*i)e1(N89%p)Z01S8h-V"Am4Upm'D
CVqrX$FSaYdS%@GXA`3m,Jd@`PJqj)2IIZX-kYhrBBMhiX0GCh0lb9cLKF8+PKS1
-r5Q"H9S0Uk1+J1K6Tl13!0"da03rRdM"XAK[)0YG"C*pM+-bCKd[KkP'R!#fkrC
h4Z(3`d&1bM1b-hU2fYh1`*4!GXEE'EeZ'TEJBCdmV&!k2Eq8IBN'TQMJTEF[pG+
")Q*M#Q90HVBccHYiN!$Bh1-F-V!jV"#*%S(DZjJd%+p@UDIfJ9e6@S30LjR*Ick
"NCUc+e$d#T0CbG*N3h)JQC%mN3`P,bBR*&FR@j-I*1FRTbGR*pFPqq+fH('m2(i
JESRlijr%Uq0(ii2a"q02a4I%mq,6il2Mkq*p#9XL+e'DD%J-*$)5[N42BPTLE@*
1SMea6@*@BQjLC53H-89')JFL!j'-L#r5%jN@@4Tj0[*ZC&jN8H5qb+V)LV48fVi
d9eTMQMRY8YVaY*bdD0TVD8qRGDAPT8e2ZcPY45`9+iZjBSfacE&,X61aSl%*X@G
MlE&VBV0LFf-VGmGfGqiHfHhF[@PhlZiAGjrCIAThpZjPZmGh,pLGYrZUhEIY[Rh
hLP3m9CMDPbT2(8aY5PP6Pe)R1[[8hq%R1q-PYpVY%pe*h+d5h6HjDaAGYlJl*,U
2FlG1G"rNVLkk6h1h@h4rbGf)k)j60lC#G1G`GjAS2XAGHdAh#HiZ&0erjqi0S[X
KGpY&YjQlFd5hPEYV4EH&Zj0&pchZ$S[Z61jq*EV[F[Hbk(CaYd"dhqIZQ1KqbYf
$S[YElVD*lJ,ZPSRZCpa0LHi(e%fV%0hr`GheSMZ2ZlH+lMpaGjESrMrZAL1k'lM
l'DCcm4-PS9kL*K)!$@VR!@Y&Pd@F0PPd@DKT`k,,BNclbV$9(0kU5Jb3!!aV#2"
MlJk*PbbJY$V4j5")dm9@fCkY#X8!&N5D%Pd1SXJ5-I`YE3Q4fH+Sb6aJZZLZiHj
m-A`32mrbm!9L1`k1b&1'lClL!FX-6Ir169&aKC%TNL1k("#4iiB$T[(`J+(TF@i
D-c5pbNdNJ,mRiI%QZQ(!Hca!%`#MB836!!GfJJ4`P5Dma-eLZCpcpcl4rB+lLm6
&Iq6Z20&PMj9i9h3CI422'PKB65`N*Q$k!r`Xi`%A$8)Cj!(9KLZ6ZHP&X59lPN5
Zk$)5*MBCN!$PFajq5!aJMjhB)aKRJ54-S[X5Gq1LqhqT'eq*kAFdaZ+hL1kMh*e
K11C41LEq!d26@QibHS#RZ@Q1SHNrZ'QTS@N00edd02dR0e8,Y[iA(rf*'2#[q*R
#!h,&!"CqI*0JP!-QlK6$Ma$5mh!5`,m3qQY)(AFBM[`RDNT@'*VQFG-UFBd#m`J
hh@GSBR4-cMGFqb8hD4k!@8mqC4M!3CpFCQKL,j1-'TVDZDP5,'mDEq)@h5RF$BM
Z%HjZ&YfhZGXSZS2FGBRZkpcG*lU[FGFKZUp59c@*lJ6Z,KGG$RCQMETVZAZr%-%
6*(aL9QNC)+1-qNad9h2hFp(p-hIAL1jrFKHUF04mN9&F`H4rLL`Q*$T8A"dA`U5
-[NUmS)`R9h4SUc(4S5-2L!Z%##laiMr3b4)GBX3N1P5-4MUr%hJTm,B44+P9Ah-
cD!09#8BMH1()1Z8NKr,56#6Z8j',j155JCPVZ2'Z%mLd2%l)Xf"*Nj'S6$`9H9(
q*@lJ5AQ%6$P,9C+[M[29)LMLQq'jqS&k9TQ9Aed&,D&AU8ZU4je4%e5,HJVG%qS
D1%diLZP9UP*0KN2e4@S$1XY81cGHTGD8$DPINT!!-CQ$b64-RR!IaHFTG`mqRlX
Vm@PeRm'RfAd#RrIFPr&jehd*RdrGIR`qFe[aq4rZcIMm2rFQI$Di'r$*Far%jfV
h)AbZFCIMmlGZ(Cp&lRhiA1rZa+I2ABM2BRF+RjqiB9PYJP24Y"c$SLASYr'%LVX
mS0rRb9N!mGl&NJGKUVddHCYDNl`qH9pbCA*ZFP9bAAb2'Sr(NK9aH$,9'Yq6A!S
Jd"([9Zha2HK'9Clk!U+BS@DTfFNeDT9DV*B$R%`PLk(R5%qk--LC(!0JD8j@*Ih
*,j,Mb60*0`$-BGlJ"M!,SqrNDNb1N!"(a@3D*L4%mM)Na'a-5)b6--R"C$)QAf(
b*LBNaN&-AX6N,I+SQ%c"K-6i0LB@6+$@-,NINpFa)6'qKNNT*UpL-S,*8[+SQ$b
156FQbc#aBI)S*R&-eL)`+c$j[jJX`H4"-NR$j&r*Sf+b"T0l-B'D6c8GNp@BA)r
*RmQMB[)d*[-`q3p-&Q$b,#BYQ2`BNcQBI)J*#D!,%a,!q`+*EK")p)q-42q6N@J
K)p&rBb5kMj&S"L24(aL*EQ%NqL-Md5T'SMma%Yh1526I'BR@-a,Ga%LdMT(SAaL
*IXp)Y)54k0H-4#Xe*%V8554Lp2R8&c-0UAq6aZU*6J0k,3XANNS&lM`8"L%!Qec
&'ripErJMEF2iVBB0Pr''mq@'mIQ'$5H(4l#KQ6XhFUF02qAiUF-2R(1&GEF6'kr
J*Af0Pr4$AP)&,fNU,fNLXp$%,0Jp,&`fX0$-,2`A`B,&m#V+Vrj*[(,aCm53!"R
"d$"Z+L2eJJPZQ!Z(9H03SBd0I[)fEa5(%l-%,5(k+"`iPfC5T5LPjqR6Q1RpC1b
L6h'Qpf1Q*V@81dlkU!Pd6Fep,-U$kak,mXZ8r,#3!+iRGA3d6H`*(qI*E$4Pmm@
Rj!@9MH[$@JH[FKq,rN8dR--Er0I`DCi8Kq[`DMm'ED+'Zrj!4T9NPJS4MJYNrRH
"c#d#Q@F+C'iAb,a!)20["6*r)*!!qAma-Rr"b$b2NIR['*Qr`mMm!dEQEc!bcf*
N[SH4H6SMmmmCQHpRC2i9)r-rF0$Ibd&r'`IpIq@JRme"2jH$rQFFp$H,S$rK#Da
rmIPV"TAM*DAHR4Bqa"1S6U(*%rmBYY&NcMLLd)ZaeA,Hr"HmqDfmq8r&jM&@Sf4
8G0,($ZVl"1'"9&2XB@8I$Tp$'%Z4J`LR9pR%a-QDfS6qVf"1[fE,9c#Y*bIlFh6
VR0f0&'em'p3GEGjIUS#SF+kqLBfiSpbTBp2)+"clVi'bpDHKkK2Qia-R`i$XFe*
m(9If&RD3!,q!ZK(&T[+6aq1mE6D)'CAQ[8eahp%lhJ$(e69&b((Ma093[9JhF8l
'NClVrY$-M[)pfiBM8&93"iH6Nk9h-Hm04djIjGlh81A%,Z@8aZF62f#QZbBZ)#&
5iHp4c&$4B4[23M4Ha9+BYF,CU+qb(!+m&C%*RG+FQ"b8Ji$bF5X8SlP*bAhUhdI
Dc1i86Aq*U@ie+Xd3jQHYH''$`fU6jGY-+)*MAhCSC6-10rqa-0@*3#1$f[#*%D(
%)JXPRc[52Cm8mX&T8@,NZQZL[ZA&-AFXFp)$f98U9*3hbEF5,jd`-BhVNCm-$NE
eL(R--SE*6YI1(hhRY`Z2GqVcJrmqA9Lr(J6[N!#fE(hSP%'&'-ch+majF'!'Sc+
U-NG6eH9G'!a[Xm-(B'UEhI`5c(1cmA-&2h"mhpc'bJK58Q9$FjDeIqEef+UfIB0
q*QQ$SVQClA"8K+Z$V6r#P8%dE!McJ(%bp0f!9e$[hEm!DPVk,2hYViG89Ej"T2d
B`N,YAd((XiR[2Ufk#pU'RGRFrb3jZCP"KJ&He6L,RD```P4Y*UE#KkcplHrlbXP
aBI[lZmKX1%S1$k'iSr*i26Z1VQer(ii&Ze[11BXm+RNUDDZ[,@DRidlHU*3f!N'
`rikh)3CKF(SE1l4Bc)iZqY`k1BdRP9-85F5456-A&p23!)CbG3-INR2Z+*cZ3UQ
HGq"b$06*bDV(UHM-a5kT!-$h,V1f56,8I)+L9XJa,&mb1#l9Y[0HjD#*`TL`UEP
H%fY(`L2BK5cB@IeRe2eB`"Ne!aZie!cmh)qI@IKCk"Ad+C1mD&p-&f&%-i[C'U"
Q422HCXlEU,4VJVRL4M,BP30ZeFL2*)5`L4P,0"qMeiGleDdHP@ih5`E*!pl6UZC
$k%qfRQ#d+qk[[@(BI[1@fKZZX2,pfe[f849J,9r#L3XMLl99,DSY(M'A2km@2BM
,eTGUT6)51$HihSH!JG(4MIZJLT'mrI,Q9hRE''rej6BB@&5$JB[-`,5lcm!hET%
-Q&EI!32V@E@6*%$hYbr$cfY!ZYI)N6-G!Z2%KD6%fc2)'rMVY8&E&D!0&`BSHc"
aU#(J-lkE!Be-i6Am,2-U4[)5dqea1'rI)&mdV8H8,JF&)SQINJ1HRdkNEUJ4ZL5
&f,5NH5Pp0$0NkH$JErfQ)T!!`C@kT8EJC6HY4q!00LdRX``+[+Ee,9q5&jAE&RD
K5UbQ"f&#$29c2iGkM(*5Yk5a3"'fde,ffDhrSk%SI)B-riA#LXZlmZ&`BiVChcU
KSBLGDI1&eJR1)K)%UeCTH(!cLK5mbR5TTp)I9$PEEU1pa(+,rIQ#04mY@(YP3*`
PK$LD)6mCX'8T-Hbi&*PVR+)3X%@E%0Nk&YQkB*(pB)m3fA5+MQiPY5ECVHGUL1q
eTP83hl+Qp@5Sc1*Ej4%IMVJV"+AF&3eT,-3G'KZda&N3DB#FN!!el9HVd9RGDlK
@j3f!ZqTq)C8i,Qjf'CSEfCLp#B!%[fap3P`0')4bA!U&(0fcB0DeI%Q'9P69Q+B
B5iL(!#CFJQQj(KU$N3-k!&VJV"l+jf-hAS%0#'AJF-EN@1)9'DRrU#QdqEG$-BJ
8fETYL'`YLf`0Lfa*$C(4%C[5%CQqAC(4YA,43@CbCpm&)N1c)j+1b1LUEK#CAN0
N5eKNki`L8ia-`L(X`SI2)(%H-460f6#LV3c[Bk$K5ri8dDGJhVF,Le4cPMXQ'`P
dhBD!9YZA3d$2XXR&#Xj-PlI`9V3pXTILjQ%*E[#!,`&N6DGAB0r86'U-qPV2H44
j!Sb6acZkK0H-N!"D9(18-jkaC*cC'8%QBq(T`jS534D4B0"+TVbXhU'p#iE+rHe
G-Z[MJMHEPS+L2dj&2mahf1bA+bZNjYh8l#lh0+5iSFc$X-YYmhDSN!$f-#q,d8)
%%Jb4EFq5UVViD5%`+$-9,lSKUQT8iY*r3c8bf2iE3Z6%U)2-%HF5%-!Q'#EPcIj
[jqarRCEpHl,c2DFUF6b860MRNR)Z4([LLL%l[aG$68B`4)!`+6Qm3cVIZah0dfX
1V3(dd%XA$)8rp&ic!#El06CU--#(D4I5h6+&T-9L#cNiT5,h6$+1K1@',9F+G2X
+rUcNca)),kHPNd6BqNXf+*8("B[$9!hK*UhZ&k@h5%EN&D%HXePM3)UG3DlT`5#
A%*QL6!AU&Q**p4`q'%i(cb(aX1IUI!l"Gd1)UZ!*M$dhTJdJC6154H1ah26%pTN
'q@McEmaHb-!HHdPmpV3Hdlbp9l@`5G@k'$e(4!@2-pXIV#mMj!5+1eV1bHE,dEe
Ml3pkNMh$T$j38h"Tcb2LUplI[KV9)U53!"$,%eYefI2U95*'hEdPlD[j'*IRQ'I
V9IcfG!m#f5XqUkEhL+dd#V!4!U%U(B1m#B2+*0$RcL69$G8NA[BSUpLMV%r(Si!
8SRNV8@(B+J03&0+U1NMA'perKpk)0d6c`Uhb4LTj5$Y`'ak'0dcrXPSZ2''0493
VGCA--*+&aS#"PSi&jr0ECj!!ZVA@Smre#R6p2a,!5hE2'XYC2VehqYKcShL&i1E
0Q6PR8L$L`JX3N85LDSKN2M9+P*6,5YViU"8iq2[iqC&fT$N[%)ALC5JA9kR$SmP
ZB[86cYUI(%X@5U9#DTk@-@MX'**$@V!jB2brR**UpTAm8RUJK'"lrJ9X,`aQ%DJ
9!N2+!1*fKXF1pk,HCc0R4AXimlQ&2cIcCbkfZDhPQj44LqaSMLIML[(,cL#eVV)
J)[A(-CQ&'CA&5T!!+(,8Qj6EQU6(IkQ@J%(%BP#F[3!&m,Kp0SU9Te$G@Zd0Rp[
[4DI&ILXPdPQ&5HF[pq`eYfm!NBQlrmjG6[,L!2`X`Xp#r-c#crhiJGSjJ-NQI)l
M4iHhM($a28)1eG@djJe3UBrV$jZ60RfRj8bbfp+D,'3LJTA)$b##1SMFJ1bJKG!
2Nd%Q,UK%0ff46+0NXphHI!@[X[P+SCIXJ'aK2CBaaQS2qbMlJL0+ZbmNc5[h%+#
AMF3*8!NQc@@8,9"9PZBm9&e8!6A@dE9(jNlEBV%hEIVLcKC+AY-&$)@jm`%AXNN
SakC+FXeA)`YEi#3[PVIdb0*T(QAJAIB&!0Ik-[*hj@YE(#4'VZjC2hhDJQKeQIB
LKNTqD#K)B*d5C+(%16RfJhV-McJE(++-A'CXm5`"H%a(iZ#hCRm4+pe$TZ3R4iV
0'4"&P)CB`XkK4+6PM,1)RIU6QITXcJlM(814JNJZ2VN49!IbdDh)3VmJS#pX388
Hma#NRc%63d`)Qi@I$D3U!!V8460AaYEIrKNh[dBI5G$*JXSkE0'1,GV&i1[`'UU
`l&rJCj&RLqZ`a3r3DHIQef5P$XN(FI%+)j0,c6jmj@mENK(qa!l$m@XbPF&**!m
b288)&E,$UDmE2al%'c%c8$UIXN-!9[GV@6b4C'JM4FMm[VHB8&G484NB%b#KBN#
29'9r)%((H-qf38Gi5K4J,,Sk0&aK3P8*HcdX`8I!lTAQ0`4`29XQ[MjUJfVXBQe
3@!kUdTEY!B2IYHI"klAEji19@aJ-cT0JF21ARS6H,D*T*!KiVC!!##5*Q16dPG@
&[qj4kPhM0B%L)Q"B&6F3X%jFHLfG5a9#5IF5UD4Ebh6B8aieJ[@)bNLKX2e-*Q6
$Hd#ZQ#18+PmQ,dS0V6pp$JQ*'cklR1pCq!F-rXql%2bR5`,dMdR3RlDS!I+,4*@
QRTQZ%hSDe*mcSRl6*a-hV)`daNZ--)&&ZlC#1"2&0ICq)!Zc1JD3!2S!I"5fp%"
jJ4r#UT!!hVjFb3aQk8["D[ZR[l3afISS#981G'N$XfX-c-E!ad@LAE+dR04@D*8
3$1Z@6-VqT5TI0Dpa!cXj@JjKfeV2JB5rdL+CAYP+)-MbeR0EU$"E6*9j8eAH1(E
PV+p8*f8bU#i!K(p+4Tl2EhQHbEJq9Zbl@!m!68Hi1'U"mq609+%k2-PG,H5%[9&
dVq@Z5`qJb[-bh3m5Mdk[,'&kiBYE-Ve+E+[M$DKUSm2@XTH1mDef4S`U+))R9-'
BM*`iV8MG2%FLhBS)TG2ib8%hJ)PH3K&5Rcd'T38!IQkPJe&jpdHY8#-+T4FUZ4!
9NF3r[BQ+M@5H3%1KUTiF8ql-BdH0)kH6P*a+2QXB[N`1Kk(bpEc90"HTUmmQjbL
d"5PR6%,&KLQb8fB'GHqFME"#3!"9qN!"RjUQXB)+FmbrR#LE`JLUBN!#+l[J
)%PZTSN4XAr1Kr8@NAJ,9m84pqmlcLqBYF#DhR#SZ)kHRC46XkmM$5BE9A)RfSFJ
A8Cm6"[58[H,4!,jeQF%AZI'UjSFX+2c`Bd'JMVA##@E6)0409SB5Z(B'h@Q)#,+
*a1lrjN6UBYU!9I"AHp6YfR`0r*,!*cJkEMjMH,@(+qaIfIbLAN40hpi(96-X#VP
8(&+'j4jNjAmSH(`%c,IT*Eb-,#Pd9"253Nk,Y!"D2Sd#b15*VY%G1bY8c*9KU"C
SJNcH@rp+U5Grlf[EP8p95Ee`"BKC,$Z[0*)k)(Z6,r9!(`l'-)mU%Ei8YSQ"T$*
43d3de$S4"B5%Z0,aNj@Z36L'93iKbmpbPaN'mL"qZ5CBPETRfd*#9qVQ2!853+-
Pm(8UM',m59N3C*E5*(lLq%RJ*i+I0*ZP*8BrK3m41Yd-C`M*)a"@+-kI#(pqHM9
prT%qm4C!0rmX*def1CPS*mF,04@mAmK@ccMB)S@fAbQU%$p#RXVDJL4j$0l%02k
`*pU4)JUN8q`i4aL&3,L86RCLNK35f8fA%I&R)m@"9#Af+9DpiKh)`N4P0ZGdSH*
Q*6Zd'9B$P+NjKd`fXB9$%f[YTDTm!XM*-aK)a&$96`(DI6dYa)-%F9*fS`eV@ZX
am`'B9je"e9#F+V"#&EF2bQ#J!J+##fq#ikHe5#4!m9I6@SU5C'8ElI!HFI[m,3&
l#k)GedS9kElZKiJd(UHK)pE,Ed'&Hjd49)H$*jqKmjU"R,eYT*Sh-@SB5!ej`3e
0!iB'`m@QN!!h-TJ%m)j,&X(NBIN`cGP$FBG8X8iAG4TkcXmLlZDK*UU#$8J3S8D
CYALMMHfY8%lS-[[aD62$1E'pP4)1cEH,D0*@4[[l3jb4+hARjRSIkJ2S+6KC@bm
G&CPB(3p9)f)*I*QTiPqq!bqC!-T(m*2fpAG8,L+rJ'Vik86!a--R52N6rViYNA&
h6+#$PG5r%pVSMc#k5B4Cl"a+255'Z#3#Xb0E[)KG*er)iXf$eVeK1KV93MP5BSP
"Mbd!pA#Qd0S'H[L!4r"i&&"`L%qNl59XSXLF2RiCDS%ImCY"0(d%$J-Fr))Udq"
SZJBmB)Af8!+V5dU1pC58($kBqIhD%kHUFdqGHZH9d'ErVQ1lUTAh%4GB@G%M5+U
P`[#!EBp8@EQJME5m#)$h%B#a80,DFPjlV)8(5dU1AlMTDBp$5*-(D*!!&GaEaU#
5l4&p!kPiSSKH10JFJZV0Npl+Uj`*hb&@aSA(Ni#RaH$DaSChh-9#3CGS$,d31ZD
10%+9*a[4XHLLccp6hj2jrA-ppE@M1FI1R1fT2pEc5Njp1NZ@#fk#8lFXMk$KC,@
cR&99prFfVD5Up"d[8GHh4iJq!Y,i5Uj@SGbI[ep"E9%%kYdqGh34JddVI5QSjcE
C*lV,(&h%RQK+SLQb(ibb8#1q8U!0d,jTC5J*4ib29*NjQQda1BZRSUVP4ASm$5X
T%E"+*d1qX9e5m"(KJHL"3UMDU$62i"5VF5KfPjh2Eb2(4GdG%6LlRKK5,HIeSVB
S1D$)iX)VZVIh9'8Pj**a+[IXLCb61Gp2$amb$ZqUp[Z2HCcK+Fr$($$)#K%d)G%
J&di+dq!9,lR-)ir)DLe*aEDE'J089B'a@AZdNqM$#+L"R*2Kf[T+pTRTF3%Um9d
&*dqI$E-L)l!,ij`D$3)XCIC#Dj&9N!$MS0P`)$NX&1Gp3"(Qb#bAPjYGCQLZ5Qf
12KlG(%9"8dE0a#!91!!G8`9,b@ZL#PNP,Lp"&Np+&4h5qdK90UX,4Lr"hBa`,,C
jjbJUX-VhCm!CEDC5@I[!)*BQXTc0Cdp@R`VRKiMIFjiUDlA(@5((jQ#m%f)PC9e
CSE9$Y)"VlE5!+a*mQVT#,'!99C1-Rm9"LfJ6VrSidi6$I+VLT#10)b6&NSD8-lC
*bHhkG#aT0jE8CULq0`X+$V!Srki-kCE1BF-Lr+rd$*bYVKF#cQ+QZGSPC%-Nj!3
a@5N8lJ@f+H4LSj!![8b4XXVp3Xa6*i#TY#hX2$QV3A11pbTBkXhrR6mAVUScSA4
,G9m,YUK@i1VkR[V-NkIVYa2ieA,VLRQrHH"AV%J[m)QYc6XcrG"[%YMKccd[fGT
mpPcSe,Rk3(fSq[[5S5ka45b&S'%9$&f@a*f+8X(3bMCcH6"$hG6X)S#N*M0dm5[
"6%V,aYm%)lRjSjZ9E6FBb$eemRLk"hmL0rMKJYrXi"mZUAR`@cKi9`%IlEJ14qq
UV0B1KbT)%am13YrkN!#*'4!)mX1$@N"F`%!R0AXC-"AK83$@im%0eY1MLiMVe9A
jp)JU(dY'T$Sh-))`Z!4AIU35+l#V3(AH#)Bbkh01Ri9fRpk6PB&A+Md&N!!Hr1J
NBAj`%S[b2"j*,P@lZY[HU16MQG$MT"6-qh#mjZ1CI2LDH$b6Pc!U6)qTJiN$
5I%hlY-U)4ERV[!p5mZ%RfKEDSjCmQ#Zfm$cX$*)8[+6A-h*1KNC2RcaEII*%GEe
36XG9!lDm5"@@CY#M[d!K*M,HY5bQ2NdSG(fY35#MPdChjSjD2)idYF`E@3`jV-m
#J@j$fb!U0Y,9f0I*U-EeG9)9A2Te8QKm#*pZ9BG2Th,L8kB1IMe$(IJkP(ZT4R`
LUZ(VQ@Sr3+5i'X)RJJFHD3(Be-)90$N)D+,#)AD[EU9+Bcf2mG-RJA`Nl!p*"QK
Br$M!f6Cl(mc6BPbahX25e2386,K!)[0Aj3FEUAN"#6$4b8b8-42&q-682XYA+JX
rHkKL`U9iM5S(4kM+`k@CQ1S`H4cM#Z)kNA`HqB1CAjFURDFk%KB4Ab8$Da%8V$S
QR9UP"93&%i+k$%Uc2fk%DZ2dKb&Ua61)!6TX@Bk"U-DKl(ZS8NSRTmMIHZpMRL6
IqpK%LCQ81$3PYX[DlU%A$%[Rd"316@hh8)Fie,&9KcUfiP!($R9Xpe#6106%P4A
HdD%A$%[R8"-10@hl8#mSlDhf5`4(frQD9q,[I3`#4B3lNIFq&N'AfXlJP'&`5La
r@i-GKX%1`IDf"TX-JdhHbXAXT*,*dHpR8kN)Cif,+BUKYCA"-9Rai'eLm#e8B,F
*TCZiY)i[,@%&ZGUPGH3"qeS)"D&LY*[32q`Jj)$bI!SZ)QC9#+,Ml6SjP%jllf-
Q!cNdYPdPh'$5'XU,Z#(L'5!E8Ti"*6$Z2@#[`+F4d3TIU3BBMD#f8VTNZ0V0!NQ
Tf(XISqU04Nq&X,H)+PcEZ!VA@m*Cb&M6#$NTUS'0(8!!*3rCqJ49e@'[!$'@Zc,
+Q&Ja-'3iaKLaV'p'mZN"pYD8QE#Lf0EeY'c$iVGaQDkd2J&`iSd4rmKC%!NHGk8
k)YbmJJ4P%0GfYd$PaiHD0lL+$*HhJR@STHJ9c'GT2khI3X*j"CNRT([P!Cd#'#T
dD$!VJK),eT)+4,LRBTf3!1R#`(-KmiBbVFlb$#ESNb,JdXDAie"Ckfi--9'C6+A
Y&G1Mh'fDG84%3L@S',EEL6MhcrCMXFC542e'm#QPST-Lhl4LAS)d*NkHYEf$ifa
KU[lUBBlQDrrPb,I0D-3,PjmU00ZBB,)0NX2*6SifV3$"HE'pDHZC)E2SBl%$la&
$q*4Q6!Qm4+E`DNEY(#p6hU))60IKJ@YD9*ZlR*3%jrCQ@,#%FDSiX*c%FbHL8Zj
XAZC1FC,a)&HMlYP'+[jbQR+(C03Fb1p(eKdK![cdk1`MXirmA4qTD5#P40S390)
lEGddUUEhrZMXDE1RI3FU*qmIj8'4E@dchH*-HL*K%NkU[M1PTm6bfmajC+kY43k
5mE@H%0(AEEPALQP#$YC',D0D&ipRdZFCG1(,TPMPPl[X&IcTidq68,THFCLU@SX
B5'98VC!!"3@p@CLS1iX-a#K%HR4[&&@ENU+4M5)LK%6jYG)fUV*bRfic%K(CH(f
I!$1kfE4CmibTJXF['dbjH@Lh4V)5Ja`&M`F0F"J83AK*BAH1#"#Nr%G"Iir,i(5
B90'aL'Q$+[*@#kNjI-L"`ZS!*B400hjD$(N&MT!!)Q3S6llGD`T2&Bh8-)ARaa)
L0)e698'J8e8(QF3$Y%,a4Pi%+,C"1KCS+8AN4U#m9Bemqi`U4c9rR8c5TiHmk%1
c#FfG+U*&p0k6D5KSeM&K#Y9@G9!8rPqe[NS9Ke*"J1lIH,Y#fESGc9ZSQDVRXRX
HZ!N'Cik`%"iH6b$I,4`M**'3!!NTlh+0&AL,j8+TMl'#EM&iGJFrd"482"@+VA5
Up!XHr8VP+pA95"KIqGeSEkCp0T(McTd09r+MPJd6Z3B2lXA%1#Kk2mM%1Kb+cbX
K8KZpRLU,PqV[R%0hGY)`AZ"k,f%1%4YGC+Ua5h1#d3He3`pM1bH$V-r6TU4!QVS
G*Sjk!1MrjdYNEUdGc80,X9NjElqbBkJIrq53!*L*$Z)A0hZ1T@V1"8JXV`K!D*3
"Sf&L'STVKqlkPZIb5ZfbKd5DS4'CG5Y9S@E2B%Fr-5,#)0'9`54PN!#4"8'CLFY
HNM)UhHa&C5q(3)cZXXp(F0MG1Pl2eVq)1a#Yepj2@HYm[Q#M#c6F5(+'SP%(4Cm
8DF6Mfi1*rI#LjD2d%!@TYN&bXN'G'fp['a3*!"Y&!0MY0C-!l$&e19K@r5-ZL'J
3FD95*STiB)@Bc%l[q"XclXla2-aDde[VMq-"p!#bi406X5H4f8!ap9QUdKP0U-!
DR@j8pA)@i'XC2X@Uq-DcDTrDKmp(kL1mcP*CH+%V(Cd40D+Rr[+1Z*'2`1GKpE"
q)AL-`pSHj349K"08XBIHSF2``@&S`Q(Si$"dbMMT9Fa*,abQ2`*Mrk`4+ib9XqL
ad16I`4Q849qB&GkG*6h*5cV-bd"RMpSM"B@QFP@1MdZjm!(iJ-mKG3LI1P@(38j
8-A8@98iG3&1$DN"R[pU2cLBi)IXZ#eQbGb1cKdq4+RT5#p)f2*EJGTNmc%bLdkJ
DM8bLJdHQ`'HcfSb2@CRab9@jIcN)BQ6i5BeKX2SNXaTm+-#0e!AH@4qpDGETYN%
i28$5IHSCkC8ZjkHIP*IA4$8(-kHkj@@ZAKRCP6qrjP"j`0m[paaJ[PX(M-R,GhM
!jhq0!clILJ-fD3G-,0kU!fLS59lN#UJM4&4*Ir1V&SR0jeA-Z)20CE(F5CGN*UT
PQ*c*hD4PVFCQDN*&AmqVPR$ab22UFcfjY&R0HAK8cG&h`Z2[HGLXRVf!,4"kVJU
d$G)(JpV`8)LGF[N9blI()TRkD-lQ+PE4GFQ3!,B4GA&JTk`!!#,IaiSB@p8F-IQ
F*MH5)Zm@QK+$iY+cI)QLVD0bZ*Q)MM2lSK3Y6kC(SR%1)PUH"8&b(a&%b9$'-*J
&`qCFFq44JZhEYH)@dB8YB4X5dA0m&+AA`JfGL,"q0Y#LR[hBElGRYV#bK(%-fZG
M&+TB61#-@K1L4cPE5B3H`9DIp[!""'aK%l$85#ceL8'$ePiNhc1)Y-PQK$m+Qk8
+IY@++LP6L)$*jHK4'*C@&*YVTik,b'di[jUkaLq(S!*C1#ZF6D#3!"K+aVKl#+!
6MdBJ#RC8,A&FVmr*1C@MRkh8G`ac"-(1bY!V2CNpH&QlIcm0F6d2B`BmGFAqrIA
$aqSjjZ2**hGijc[c$6f2HMH2Jc)K4J+jdK9PSha%J[*50HF$$+VQ"e%LmA*@#0(
!S3`qpd$B0(PF#RXH#l[-%e&0hPD*+RMRN!!5D4Mf2)L*L4kQ84jK#)B+cF5-eI"
kJk&LZm'!DS[X)b)B"MJB9KL#J8&S3c#m'"3-+l4JS%AFc3!iGZCN6ZNKrGcCSr8
P2FrIVF!J-*H0qFN,dd2D,+8+)I!)MXYNp5K6mm5#6**GVJB+V&e`b+jcp6R'[C8
d"`Jb&*JjYDUF!b&-+V"6)&+KqMDU8)FG+MYJ%L`*Ih6d8LL)pNEq9r"@Y)@rA)A
X(e#ed3FqlS8Ad6DU)!)E'jMDf5'XYP8&E99'U%h*HVYKdffc4mQ'K%FS+8dS&4H
P8#VH&8,Tp!T&frKZ#+E'FJ$8$j-"l3A(TX5aMArGB`e#Km%89r3K&fmb#Ti8C,,
(k+`KRQ%Ym)9$#TMq"5@R6GlN0&fME0jV'Nk1LHRa8ib2&L'+$4H-B5+NE*R)E84
Q*a8#XX#J)lGCU!8G)3Uj$#XFF2YXQL)#Q66)E1A(4%cjU(+HP$[qq#)0"E`LS3&
)J&&PqK4*3mA'Q!S#JQJ)*A$5"B5@D)@abYUDJKlAR,Mf@GXJL8DhLXFM+THEr$T
e4mZAb5)K9LSfGFqa0Z(mh*!!,!TfaNU!`+`P&aEjm[AAeK&MmV933Ci5l0PUESM
'&`04VN"kjZ)U3Nr"MXY`A#QpU(RG!mLQ6$rbiH%bJ`6Y0hC$8-0Y,IC9'"Xlb!P
2ZGJBbN'mKNjHp2)q#L4GU4S-AUCp6MU#B4ALPU8e'G8-3`fL+%2KlH$SpCPIQi&
18ihY'i-DCLjf'`Q!*0cZTHNE8RNAS&@J"H-e8ilHIU3q![1+3RSNQT(VZQI!3,0
LC&6I'55i-el['4`&*aqC3PhX&q!&"kb'G2Y$56)[J[FAhP"i`@k!E`jqX*5X#lb
G16fd)L8AM$ME%#%#*C%(a%@&[DP,4jC&pD44,*i1Y[c6)+-8(a0l(mAVHV"8XH)
eEqGVLlbGIlYBdf2GXcr)Bk&JP4lVApUhll%B%#89YEI6*Y)6%*!!#'q45qMQ3B'
C&IilmK`e!e55F!b!EM$5Zb)4'cX+-6E,c9-[eN6qTX+D642l,QMbN!"Ij#2'',2
b#VIR!B"%9MNeLc*1HZ`fP3Ud5RAjEM0Akjq8AVhT1"0J(IhjM%!Tq4!Sj-%CU0V
(3dAM$j[J-9B*$l,F)1#E1fbXKS)HIp%KRH)eJ5+Y8i68L0MD*,044#QBq'&SdCe
B4aYk%eQ5!1SPB(3mJ%(M'RUEhk&NNa6Ha-[TSrI%!icHh9cXl)9J5SRa[K!M[-Y
)`$"QmrFXm#5j'Zm`bD84NMqRLaGQYc+Vddd'Xh0TEN82%Y,p3IEaH(Q%5+"pLmS
9(MXimX'NU[cM!4)546eL33R[F[TmKZAF+4Fcp5P2XAUR(,EiqSGk9B3H5m$Ye`,
(2I$"T'-@ei9EGKUf&1+C'["X+BVTaF2DPYlS)dpKU6R'RU9&ji#`q*j+eFId4bJ
Tj%%Z)%&IbSYFj6D1*%$ce&YF%MA+m8+L$)+@&+P2,@HN+`3B49f64)p-E'qPKr8
GSbS$++1U-1Yim!1!fiC!VTM3pQJ0P$@4"`p'@@28MbkCKlI)-"Er@j&a)f'bdiJ
5B)XbiQiU-U9AY#m11JB4"4GipLk$!Q4&963F9DH6`mSkqG3H!r"9A2!i9G!IMNp
jk@G["l+rQ&`l9iIjRc*@Y-mQRLb+[EJ`,lR#T4$&PLS(Z[Rc6k5UTYbhl)2XBiY
j5%*2,&h'JLZQ`VEFpL$%Hr0,%2QGAR"26d#8a8E(&'#5(8rJBCP6TE(F1VJ%Fm!
*J`Q*0mHD55382+42jr&#-Qjp%)Q`h*J642m(*qRGZk*(NcqCqF'N%hYqpMC($(Z
LD%BLH2$4U#Y*AZ$BA+#F!`m+$-1ab("`-FG'e("%+31@f2ERXe'rJapJ&bc-(84
Qi%"Lh%5!RLFld4i[#"@GUmR"KjFV*1&6%N6hQ@9&EVmI%i"i*5IaqJa*2%ki'j*
iA`8PmISm5Eb%6'D2hR5['j9I1P'c1)6dNqDA`+bIf#YP36R`)'Bj@P,`,+AkG"r
5IhTpjI&cqLZ9pF-K@(6@(bF$Y,ZAr"DC'N4#M`S"JBjaej6l&6N@kH"#1$0+M`@
KE%E5&LQG)FD1afL+aa+Td`TZqbS'5IGi`,0$-S1XZJ!J64p`NNU*1'Rp49"'dL@
,fHr1-Abp8c[-'&(iPhHSB@QcYRd-26B!GI1@'T-Bk6@1h[3VFh"aiJ'&EUTBl1e
-9BBAbqA9qmcE"2[R"'meYGM3d3dGTk&MdU*pJN4P5*C-cGY@XL4pBE'3!&hX3-'
3!&3NKq1H4#K9JSK#BGXE!(b*'"I)6-%!lVlbS1LME5564()a3J9BcH4LqS$GKBh
dB,2+m3GkE,mqmFUKqqpCC`m#d[b$GfpEH[L`Aee[%-@X'NRIf,BDJJ[NQSQXV6h
qVlr3#`kQT0*fNRi`J8m&CRlaQNirRS+ab-0)%XB9C'#Ch%q6'XbYP*RFPd4%2`K
5B*Z2+d`&i(+3!+Uj[Tb2Tepq'6r8l@EJYif-L$f15f!+Uji5fIJK,m&&C-DRcT@
F1(QZA[I"GK0%1L,1(DZZ2jPcB8E-$GU&rI[&MH#-Q"-Y[kS)*JBXhbG"cEPp@d%
+`G*A0G)Qk5AFP`GUSMLU2cVSVB$Ea!rdL-T68p1LTQ4k,kia["!E[+`K3C%iV!L
C)d85-c'&"N9V(JZbr-(Y)ZNC20"R6E!lPaa(FXEE`k5G3aZ(%'ZP08)8p$#4bQN
G)h@()"HM)LJ8iA&iN!![B-Lm(G05-JVL"jRN"6U60D+l2&9C#j9+p'#6d`R4H,%
N3&5hCPAHV*N58dc'lJEK1XQ40h%#D$h-hX*S9Z"Tq)'HUXVRD!,Cm!%60*Ka6q-
#[T6UK$0E!#F6L"(YCGp+2%6,F&!6(YI1l6-f0CQN&fPbX[#iFNM2bkmN!D9Tk,,
R`)QcHBRDN!"ZHAhL%QBMNRkLcK0i"fU!XK#50IT'--LX&ETCAP*K5&e)X[%@QP0
RA%Kq@EGQqq5ALQHeM%3mp!%b2f-f9A%a1*Z5"Ea@#DG'HY`f+HhZA[!JXi@6MXU
k&1)XCa!9NAXGR1$piHhD9*d3K+dpmM%kYih#fb#"EVFJq)d'X`Gh5G+9kG1&afd
M5kX'Upk#8Xm982PT"!p4((K*0pj+C(A2j@1aKr92&jkS-&i8KkHmQIcGB8mDGQf
l@#H!CHTL!PMkG%2(CHJ8'dPc`H5Vh`JjXZ6,L@2E!K@0dCj-B*Sj8IGlb+F6UlC
&3!YQaljdqq`%(H#ki`2BU,K64KGb3[@52eqSkqN69rQKd635iME!JjU%hR6%UMN
#a5)d!qBqcc%J*IVc[BGi5E9D&P$cm26!DB25aU1'*4U1XAF&(E2`JUXc*cCX$b$
b,1fahmib&!0pQXNB48D)5pd'NG8!H)6kZXMf2+FFQKl!f24XqSX,&Q'6Z`D!,B6
I0$qG4IZh)FE#G"CB+PiH0#b`E&X!RX'4mDTY"-NR3@c[[b2fM%&3Sk!a%U8GfbG
+ema'QB$cf*25q)*0E8Dk1'V!p141,a!GFT!!BQJF&*6G"3AEd$rA)1IUTZdMclD
43PE[D$$lAh+Kep`@ZJ3(q[DpcEE&jI9ip[RT#,V-Fa8QB0X6pGC'&KJVY,4rd9r
lf`SiJkMpEC-SdQIqYZ**G)-pMPHX-0@)b*HXI"bQ8L2H#*GB"eAGLFH5+18(i5'
5fNKmqU5j4cDdCkRk5"ZFLC8QpE5Pda$*FSXH,bdk9"38EA9'AD+L$U$MBC[kb9Y
SF1%4*`kR92B429jMU)Z'2Y#P(NK4m@LD28MAkB'&ASlZ8qN*5HY%YjbVlcRaLUq
Nj,'$,b-4FH!`%K"RMj@FifKrH[1#H(Ai!-AqPr6NR$cEF`l0*32q&kS09G9[hAE
(dYhZ''eh6'i(!2G1$bJc2(V6c8q6SFqI$T,4qrpD&0i$m0k254NeSM11MM#UY$Y
4,0R#"h'T%mDA9M)Ea)23MAL51eNdE#S+-MbQ)S&ek%V!,RhM6%QFMrk0G)%Z'Ar
jVq55L%#fII'F6RFj2hY`DjI60&YEcXrq2e[1YS2RY!KU`h,`i)Ccmd#qMp$%2eJ
e1")B'5`2d#2N2IiriAaL2aiEe)(($8B$'#r'-$Ipah[J2i6"bJC2B'iL(SAUlV0
l5Z,6(3SrL&dm4Z*F-c&!Nf"fUi`-MmJQ!mX1`E,M0fIjl'r#-J6mNl95`$pCZc8
#rXRqlkk!laBk3-!r'C%#rXR)eJUB@IiZ#RJV@0BBEU2M463E(f`!FLm`dBkq((6
Xem@aTmlGc52RZ[rk4fj&PU-GZIQlPAN`5hpPC1RZC1hT-IEGbD+hKV%lpR4%@MD
cFFI6adq9[($fH(fPYPr$XCl[KqSa[(IJQ-I*Xe3+J)8-)%)cATj4YPFG,%lNT#d
kBShip-Dp9!8*4EcST$T$)aBaHMFYV8SA[68Rm0&0BM%[hkd-Vr%Fp&cNI*p@C#"
KX,-l&QLVr`+"DUB3dD&`I8reU@1r3F$frZ8FZ-ePLJ-&5FdK(m#Y2SEJ+m6MC09
"H`F1H"C"@(N5KS`[T"1',`L9)dhH,C+U2NBGGjPXr"Q+jh8j@d)Ta5VXQV40Hdj
9RhUK2LHpAEGUdqATE[T++,6G66I+4e[Pc0`HJX0m1j0,(83ZYGZ[LAi-4h'QT!E
D4jhBpHbjG$D8#(AB+CZ)4(bJpZ5jGekSN8@0M0ldKfafYK+ML)cY19Vj9k1[maa
&3832m`@2[9mh24DpjhdNCH#djId&aZEcRKIYl[5'IpUGr["2mfUbZqVbeV%ErED
4hi-[Pca6AeQI!l`lGZTirE(62H!GZ@XkQ6B1q@2fGqQ3!'2"Ke$L!)mp$p-d*"i
iBE00mbXLNp!4$fd,ZimKN!$p[FI`rc(r-81fYPd[3EH1(8Z2RFkYBZIKEH5@AQi
d&6pp-S[P4p6Y#d6Cb9HhG0BhHY2Y143e$4D5frGXacbCm2Bhr1rTE*LH4cYQb05
PBm#S#k0V6`kA90GAKR[1P(KcSU!Je$)qUZLQQ"h2Gd*d*P,iBYBH"SXmE+Y-L%I
VX1dGE4RS25YP4TUM$#cYaH@6e5qFr2kjNXT6H2#Ldp[PbRLe(&Ia,$+RMZ1C#qj
J+@3`ajIkFHQ9bR0Rc[TkYX2V@6p#0Z!hS%ka,NNAECKNLFd18QC8ZGepH-8"4K5
aihBfI"NERRUPjflZU'Sk'rRM1[E1TUhhf-mDrAA0FfZ+rBj3k)8l3L&kR1,f`HS
B(&8ZGNI)!DYqiafLd3[E4#1eY@Md3NddLQm&'Ve`pp(SK@fJN6'3!&CGV`A5eQE
`f`LN&bl)FS0)89're&Ihf-Z(REqVlmQKA1HGFhpc[,i(XDIR$[b0pYq&8(qm*(6
bE%l*fGU3!(E'bbHV!F@Fl$Q98l+VZS4q$TF-N!$B!3!!,Sa"4%05!`"6E!p9$88
d!J"M4Zicljdl$#-L-T-4%H'JU%LN4'CN,Vhh$YI8h%pQCUk@SSKLXG#&D&DQlld
cXKp489$4h%pQlKq5QC!%$5kAbe9QDQUZ9-4pd8c0c!M(iIHq-q#iRrlUrc[RlrX
rhpR2Gmi"'ef""-%6j*+8d*a[HcSaFBEbJ2aiM&9qR&[p5IHR1eZX@4l"%8*hFfI
EHT'kK-!kT**9I*A8-*EUY5h@MUdG+eT,aUk3!+qZ&1@AfiRdT%"YrX*%@92qSqR
iIM9*R+CjE#Rd(f)brfrKC0QTc09LE9hS9q)arRhKE$P15H0I&RiKVeIqU5fcZHK
mFD"@CRZ#rN9mKJmUr&BZ9NTjIZ%%qEBb9R[59Nd(Lp[jN!$#SI)$bRIDIECb1P`
FSGPYpp-I4#ZI96K2,P)@D!ff0a2Tdq)Er*(#UA+GFT(2,(a3IP&j@([*GSC1%Fp
aBf&c'3P"@fYE4`eLJREHpJ*Y)cl2(bp-NUZ8'TjEf&mHS$bPI@kVTm2%K9S,@`q
k52bD2eXi4kj34QNPYNCdM0L+MbYF,$G6f[,4K52PMXTiVGEQThPLHbh'YMZ4[Lk
'mpF+ZmUVPD@m8f&[HBRbYKCU@d8lL&'mS2"(qGr+(pSQ@c4Y,'CTRpNqTVh%jEa
RB4mj6,R+@aIq+RqSr+DpE(Z96K4RD#GY4qNhiL[mpm,TmLQPR4CKfdar%MrL2aH
fP+mTNEa*i5rb'Z92l9qfME5TZ)9R&pjp@RjIbG%qX'fM9m6,fJ(E1r5kq#kr9*J
TleHkDjrBrNElLRYiYm,1mPlP)1pAq*Em9q@`pTlY%-d3Jl@9YK8d3(b1hbX-NIF
T1rQ4`K[b9Z@XYXZfJkD,PGa5H%'@P#$Y8pX''LLUQQ!c8BGI9"ab)CApLJ0e$dh
)dVM18rJaITZ[j8GjSTDS*kBN(NZmREJfNEZFXHBd6jbf,,Q,[MlPQ+JQ$e`[bBG
FNUc!f&`E+1,9&%Rqh#2*fj-P14DQ'ZBCQ29!&Q(Lak3+3Q8`!jG9UZX(aPDU'Nf
V9$edID@U%hZ-!TP#V*-#"-'Cf5d42NCX#V(,'1r!@%Pf3V0QP[aQ58l4*9Ph5V)
V@G%QI8klq0m1fKDk*M6b@ZJUrpZ+qN(%C[r5`"84rTV`!@rkReGIr"V"8Z8AShE
l9eeC(Zhri--e%D(rAP2KAa%GhU,#(qD2N!!hR[IhU2h)d@)h%8TI(VhQ`c8Yd1I
eB-T#9N6dk**@c,Ym'KAUM`ldLj[A4#b2r[m%D@S2T8H2R[4Ve#P46I4VIUGI8e3
Rad`Jd53lZ9pMeZm8(8lbf*I)b%j0SNl4l`c81-%k49Pc3Mq4K"iX)BJ8bjeB`&L
BP!3N(K3lU@EbJ41SNh%3B!,9+KNS4S(JJ$C0""6U0+P1TT!!-J)a8k%Y(JaP8UR
A&'qQU@4*&pM-@3QY38k+ETab+P!U@M$R4C8"IPV%#G*24E+Ja%"%K49T8@83%q"
&9!cd#CSSVI3TS%@#Jk"&kUq8LkJ3j'-[-XP!"6-4`LeHB"#+4"AhJS1)L!5#+CL
"K(Ur32d-9fPK5J"ET)3NRNTH%&Y!Z&,e8SL(qb'-HUm1JCVp,Vqj8R@CZGqP80,
8X)NS%ib)rkU,Qp(GqXd1c)#NCK2KNJJMq%@r@C&GCY%#&5l1f&8cQBQi*$`ZJBK
5D)+%3$3Te'8L+p&KMPHZ%$!EiZ(ke%!%I$59[(KjTJ94*R#BK8U4N!$QK5J5!UP
CB&*qPm0,'9a&0Ym[%b1N-`IK'j8-3r$)4A#Rc&`+!5TA"T*lbR)B0JZZ*Il6f#k
E`#"Hm#SJppijf9-aN!$TKBTl-[GTi+HeVJ3%)F!VcVJYj2SdA4B[-j9p8&9#AB"
ILkH@8#Skr,l0p&(MeBrGeR"kBN49))N!EYDi)XJ%SlJ)4MaV"MeBF%K``58iA%3
%cN*2*j,HlUl#EVc'c"EJjPSP&33,8bp3`54le4%iJXU3!&iikB*22i-Mb1!1*&c
!H38*5S9ZN8!@K!X-$1YR4HJ0L'GPj$0d-1-R$BLSiTh""',mISA-NAVBP#ZLkSI
e,H#0!%c`bJ#,*+B893CkPdJG4%aaN!#&%!`GR*P+[m*d#DU#P+%Se-qX305D,M#
CH$`"!4U+#$8!C[%#B4LQ3fDLD#%&Rp*+"q%AN!!b(4!PH-VSL+I*j)0Q#[CKF0!
JTjqERGaPPR*FR%b3!2R06Mm@IV)J,5MC-E06F""4N[3J*YjMei`9$DX+&P%&#k%
5#a253M$63r5C`'jb%*h)bLlLY"X%%M0-(RYe`DZ101K-K'JM1RcN#%L96Qb[Nkd
&k2R8`PD9&SBbUB31"e'+"#X'3PN4,e*B)q9%5qJX8PK,@)4m!NHJU9H+R'))ZH"
1i*eSlTb-JAMF+6)IiN+`-!NaJ(%38b5J@[#TKDfm3ZJiL*6JMGJX*pN$Ni9a%&8
A#(L1*KFX6,fAh365'%fQB#mK2&iJ#'M1VJ*p*++$BT!!dFCl*38#4k5D98i+JpQ
)Y&fl*Q+9rlaPpHj9HhElSp40iEALMGTGZm0AE*@ZKSGZM-"RK9VaapTh8BXlMH'
eEJ[TDX5'j9'K+k)hESli)#)bG2HraAYZ+fk9[mSc1BL-L2N8did6a)R%()&Z4d`
`DE209RQfh3fRc@jQdVkD#h3,Q(f5(0*JPBd+c%UB,D+F(Sd*hX+-B86!6ZH)FQB
IQ'bBlU,PAJdlBR"S2-NJBrB4dpRMMJ3LCRF'p%kBY)1a5A*!2c((-NhB(IlaNXK
0Qk0Al9L1ZQPdD+3BP$U&j"c6$6%m,'*cp**i00%e%lS-9[Rl1,,3[Lr'HL$@E@%
Z3[8kXHICKC@l)hE$&4'KNHl1Z"P&I'(5[Pm&jQYNSAf[BVd6ka#BcT)FR#r+4c,
&S#2lYN4Z@K)CkPpcppCU[+`6`6B%*KHX*dAjaQVaqT(Fdp4Xh4cKYT((,Dhb['V
6h9[)iDEHT-fV`f3$@@McYQ(Ya2`J6$3JPBTbGJQJ$E4DfL5a$3Q-fV4NHILH8(q
N[)Qj%[kIG`6bl@%+*2RZ*k)PTjc*"N@&4Lq*##2#kLEQi-lD[!,)6iEXF*KKN!"
[*XSjjD*kmfE2FTS#h$GkeRD60UXDNfB`GC+Ff8k8,eP%abe5JRT,8TQ'[9E,V)h
X2Rh6jSJpQjEZLG`G[558!G"QRB+)"I2,-&Q5I$e@$-STMpqH(1PDD(6%ZFh4DjB
[LFD,8G5Qk#AVL1**fU`m,D(+G%5-A"-D[6`mrYZHIdd`cQhb,HjZLQ3D+TH[fEJ
l)Mb-CEN4XGS)T*0C5CJMRB`iVb9XY-S*f6"ABDL@%#`,H'&k+c3bG*9laMJqNib
iCVTPjKQ"R$-#q@e%Gl,34[6"HMAQ6@%QD`RBXi3q9NG#8`,M"S(aQ0PSa-`lC+-
IR#EYKeK-r'5Kr9!"1(QBRi&CU5AB!'FHc%$Vk`RcRfhYm*rBNKa2p3qR8TZG(l+
e(i*CJr,$CF#)`U3c6"-YBB&lBf+9fr$6MFN269KMd[G,Q#B`-kah%j+)aXFmh4"
A+YJKTGU3!()'GNJ*`-l%T!*'dGS8(3r@H!LJ'laJKbJ-E'Gdeje4hqQm(D#0Z)G
2fY4BZl8TZhQ$MMrhN!#ZfT!!aLCY#$Cr5%ZB59SE`'QcaCV6jY"$510$TQT$1IM
cVI*3&mafV3h)DS2Xe1DUp@bET11K$6fM$F@"U0BQq)KEPm&[6SG$`ij2Kd1[QV5
K&*-3XY#'BQ1'IS)j0QCS%ke0Hj)U6Gi8',4mdjSpUhH[#89LA,TlHG6Q51*HTQ%
f*SYKTNVbkf'LT8-QilJ3Y5Pm0li)R,FXh4dH'J(Ti@RDm&,TE1Hj*aahH*df(!I
)eGSJ*l4*%ZK#J4i3+'Er%@KIJAB6D'1"9JMd4i&q*G!5KZf%ecU"PJRd9i'q,P"
9S*X&fTp*[b[3T3,p6+#"![fA3!F,e-)dAQEKGEDq+Y#I"9V(j(5"ML4e@fTP5P%
2U45S3b5[N5Cf9bh3"8`GT$m@k$('mc9$h5I3Pe&R%1K-[2Fa[Dmb'1-&ZNLJkH`
L5+$2#E5h3%F,p#1"*JLd0DZj,f4V'c[2!)'mTV9L&0X&QXFJc4,S+B'Q#64!S+m
`4C-CLB8#I91JI`LdLT%5*Y"R"(T0S"m+G+e!"`Rd(`aeN4%(U1(am',CiKiM&-c
A"IU@3,m6k!f"MKAS9)'qaQK+CkjrRY(d#b2)+Y!iGPU"R41E-9QJ9`6kRN$R-j!
!#U0JP8$EX3dS&QKRJ4S%ZNHJ(S'H%kM)2$*%S&N#c@!(aPlHCRl[`mif3U$Y"CV
$VKFa@Z(pCjPh*JRd+AD'rJa'4hEQ8S%f%ZJl!XdAD$q"ILr3S`)G)p#*$0J`p[m
L)k@'Z3D(fFYbc%lQeL-#2F4f#m$Z-MS!qlIi,,+#HI"$GXK(Q1K@J@i6D(FQqK(
cIMec(%6R#I5`3(H"G,Bp-G$&FXpQYNqcQC!!RkPqKqh(``*Y*Y$2"4SLd'rB!D$
#)G!c!TdL*0l(U@,cYir*+mVH-UqKkFB&VZ#9mf[kK1@@C4`D@0AkDT,68MQjT-1
U8GXcp`mjdbjL5QckMVN9"9&cUVYr-[MFp&0'XbT-DYYep@MlP@dMkTT%6Nd,fIG
PIGCR`iVl(Icfr-4A%cb"'kBekl4dFIRP!m-[YV`f-ql)cYNY'NF[,1fm0hrGM*1
*"Nd@#fYIhchHH[Ip@@rqqDqRP`@Xq1H!RX[l2h(i[EmmrqZ(MbGIN!$qfqMYd$%
2A(Thk%XrEAkibpPGAhhpilqIIE,[hmEqrIGAQZX1dhmk[KBqm[kF$hjiijFeMkb
rpp`ARrIkq+PRh[VVS"GqHlP05Y#RrfM9HmQiqkkrmpf,2hrdi,%E@lr[mFHQ4EH
llCQ`pTZM4@H&j4'28C-GY2(@(H3Jp2L$d1-2ZN`@fU#Z@+-E'C3&-d-cSL([ea5
0pb(60Y-EGHjY%$qK34Sdj`jpib$8M3HEV8'$bjN5!"eFV`e+3"8IVI6JYVj*!`"
rLdN9c(jYm(l5U)PbTebBH6#$#3,p6"Q-hhV"@12VU3B(Di12D-DUQlXPG)ECaV#
E+L3CQb,KU9fE9S9'mB1KNCZf4Ui+M@4VSQli,DS`JCY1#bc'@4CDjE'%j-AD@05
R"U0@1KD9XV%0QM%$B(0K50F-kJm2%E-2Alkc`V-h%6!f8KZ,#XYBd$m@[F[BbjU
acde+EabqI$2R$'hXE-fBPbTp&Y,HfMfVFK'CKGTBSpEFGIh%@VrE5d'qAmY(I6J
I[A`qkX6jkl6QCFqj[cANlpAb`l6QB9GmapU`Hdh%SkMXj@IH`X(HQR%qH[jmp2V
jAj+&PMmFke0@2cVcr+PDFeq9X$QV%Q*#VCN*`6j9(d4YqZK4%$'KlSj%60KKdLB
Jkdd))`YY3J6@aCLIJXR@QQIlU-M`8G(HHL-Kq2JAcPY9ibI-2llq-'%Jp1CCcdi
BjPl[)"ID",aq6F$V9ekDEkhPP3,9'LM8qI-%VAP6dA,*iJ85AlF!Epj",3rl-Ym
,rM,3U2CMfdJ52"FHYMZb`XqZET!!aCk)b0h,)pD`#rqkH*,Ge6Af99qZq$4Y@[-
rD3(AG*1@KpHD[+PNJDi)%9eCV*B(pihh`"4,mTmf-V(M-B,FZTT)5*BQNHj%EhT
S4(YKZ,``A0Ti[,Z04piBR`iBGM+adb64dYV$0"`qhKmIH4Ake&pa9qql5rA+TG-
1H%KXAMH-(f@94jHPZQ&d#A($q!*-8BFHV8KbdaJbB@liH5'4J"Y'ZG1kkG(3QZS
-!XQPMFBV`ZJ1-+dPqBmQC-+FmI0!TL6$#m%,B2AQTIqcTdF2e%EL5GN["kbbS8D
8Ijb2#G+()8D81`#@!C9r!pSV!jTJ!jTJ!jTJ`aDm+mphhpHPD+dI%VL4X5CY*&V
`N5V-%8PZ$'FDN!$JQU0C-q#GcB$fd)#A0X0!(ebm94N)66B[A%0VT[fY%mrj%&d
jFS3fLT`@fp*m!8ll+Y3'`j!!j)lZai$8B8"'-m$G"M55"QbcB52!qYfh,rkd$a(
S+*aj&-im#T!!4QALc1A3L[-fcl-6Ka+i#qbdKS#f8lqGPYNTJEh4hYQ9qREKHlI
`icPNH&6SlNKHHd)lj+qpi`Z*[lE5HhNh21,$MD(aa+hc[JQ&-'amdc$QM+pTZ2N
pCF`1E8`PbiKMBNcD',cdM8%q'A0+NRm14%B(j99fLPb2`J-YjpST[Rkea)%1LA+
l3$Y&EQTjd@i*UqFQhNVVD'l!%k1[A680M9`PlHYSLDXNTNjTkk,DdD2U,FKD22Q
1C#dHE(*RB6Q0H(ha%%EViJ8QEA'5e6)ZM8Qehr-TkHL`LH(S@-1[4IKbV$FXMik
)EaR5I3,a*)cEUBf,598j$She1*aq(%lI1Z1[ATk-1qNNr2(-fMK8amDKV4L(ER$
FBNQH[P58Tq0&qVI*--%`qf'+4ARL$0%b-CKTlR!6eDNjlpC36&SZmPJZFPIZIP"
iaNGK[mIJ&pf*c0d2&DJbjZ+6BqiN5Ck4CUFCGSVhhYpR`r5$L4(Tli)mRCbL9%Z
N)"Ll$rTrcE96I0cXA)&j#-`Rk!L-'mKVbhEfLPTTNY2SqpV[I[)8d5VrlYqU*HE
C+GJ@D2e9215`ihUklhVkFGFM"09FK1[II0HrZ9m2DhYd5k*QeTh*RK6AXV6eX9h
LMK9ClIG[Ik$m[V)RLTqTIV,dYVqfEFH54XeDe3bSrlcLkaBp'YkXHq2-5aGIV(V
qr![RrVjZVE*lGILUd+9,`TCrpR(8[k-hEI`AZUl0eckkqZ'VIrhNEh[ha0aCi19
6Vj`m'M)hrHb4brfk"38(K0c$r%Efh5XjQCFZAmmih1qYlRdlGf[rHYIA1VcGUAH
IRPQp#RkFm8h62j[mdZkRPMqhrRALEp0rRr'0VA$5IbErGpSrj[rcbq"lErQr$jS
hDm323iB1rmir-2(E3B2(jNr)'cpkj+L!l+#l0kjNAXUjIRK"4[I1I4qHq@$5i`P
YM-d0LIcrV3p%`93TEIKdjBTpcqhBYA2VP[HhIE$rh32[((V[NB0H*pa4iL"c!T9
9Kq9#i,J[aY#jQ2GIR$[XfDIQ@"Bq[HM#9e1R2"*i[!mDrh'm$aVriHD$,qCqjCp
pfJGrFII"Q-AMF[X2HfV1X`XA,AKkkL06M[2"66pckNpl#$rb!1L@2bA41fZiaHp
ifICZ2rS3Iqi+BYaqLYX[8H&hrX9cDbGS9KlelrM6Z#2JJK1*GGdNVpcKkM4&0c2
41bJid8eGilee+lrjIT@*C-pel'3bpk$-NSX[ifPm2BrPAAJF5M!9F5[',0b2-9%
2m(*q(brM6r"LrJb[jNrb8T4[m[0DhTChj#@m%@r'@r%D2S$Ammpj"ImDB`4kB,[
I4-'j0c!DjL@-X(U49r(RqARq!NV%rTf[3qNSE04Z[TU(SfaG+&r+Pr!`[TaraMr
Q8IcI2*T[`R#aIr&)[SC(m-hm'[q)Aq8ImPIjArNRr'pm,pq$AIqr8I!b2m9Ii5G
41#Z%*kEcXr`)[mclm@imL!Ic!'$[F5rk"XrQGrN9RX-cq58)AHFCr$"%hq,GH9r
H'5cYqHZm+hq0Gq"[mdkm0qr$Hr)XhSXAm"rj$2i0EmVrj%hi,l`GriQhj$rce[a
A2T(raUIchjQ!$8@)q#6q(ckCrjG2irrJmrNrqCHJiakJI)rI2$k,Mq!rm#&m+"r
1[q-$mIZ@$q+$q9LHcbI`2$kHMqBMq5K3RSd6h!A99aLp1D$h-&m!QVZ$eVlmB6k
62mL6q1-mJEIK4YkF'hLLm2pm&K"44-$%+lR%0r"2q8UqJZrMcr%GI"IIbEIb,Ia
p[Ser`2IcGrN"rJira0rM"ir,![mh#NjR!3`GNVR+(Gc#,r"!2Sjr`FF!1jGldIh
jBTl,Kr&Rq90m$S3@mUIj)SKqaDIb+I`4X$a@&QM-rhM-,%!%E$ca9PRJ#p$`&Cq
0hiPCi#rih6S,M!'eid"[Ie"-k(d@p#j#&RJDe$i#HQqC"ELfNciZ1P*fl%4`(54
Kf53@&T+3!(D&K28V@9K!3Q`P#FH'N!"3j#,"rL8*a9%NP'Dcd*Q&*La-*H&f,!Y
&,%5`F*Q&eLcNNq"R3[kf,-`RSABl#hYCQ%a#faBN0+TLi4!*c4MJCZe)D&9-`PT
'U-)![-qZhbdPi3!,lm5ad)b%JqbSRc$8ANEdhX%NV'D+9V0MKc&(K-eN`8##c"K
NJ36,44)ZP,(`+JZM53KN$JeN"`[U4d)`B`YQ4!6[Cq%N#icdB#BD`!iFX)i&jUB
!aK``Mi33*`X0,%55N!#qQS4X4NVf0KDBZZaK*0beXm#1HTGYf*AZ,-aQJ4hebK`
5F[Da`,BrKlNXam)#fm)FjUBFYXfC'eNia3)$PTP!`U9S&V*BQ-i#!h1*NA+GEHe
e4ZMe95b`if@3!+25$$r,JiHCK`kAX(#1"HDR`ib@lQGB#'5"HD8lJpbAXI@0BB&
Tl4[-!MYVhq%XX&0fCRQY-f2VaRDX'f2VaQM[eTJ&4R8hYK[G'&[l!b``UYXc!1e
9&KL!VQa2ZPDc8-%#fiHZE'Hk-Y(A@"lT`"4eZ-B#CB%4e)(jY32,C@phBU%P#b`
IG@,(km48G'+le)Q4fkQ!K5NNp%jM)Bb&G"Bb@'"TU$Fl4ZmN%[S`&AhB-IU`p0'
((E[2Yb`B5HM*dQK2YJdpf6EdC)I[bA*Vcb-XX,65Na(DFb!,,-ePXIBJLlNMLl8
6@@`,XeLHbQ,-@Hb3!&Nc@'$%C6(![9Lklm95GLrQa&jXHhTGCB'e3leBcZSeP`9
fT!,QS!+@a`ZBL`YBGLPJa"@`22iMfq`I5Hk6Iic@HDaCjpeK@TTec@2@c6YJSXb
k6Q&'i,8Jbk`R3bLj`U`[ffr@ddV-HTG!Xhl-DGC,QTMe9MDB*,0H)m"%``6$6$E
VpABBA(`1KXm9Q&8`+X`9Q+B`8mak45P-!``Z+V*K*TVe&VPQ[8Fa6$h-1TLG-(Y
KS,`(P*[6G0fm@0FpJUkA$G2eQ[QkAM&6ee[8k,TBVZZQ8ESZ3@!&&[YQk2TcKh4
p9aP-LDl[2+$V@qYeIFY&Q-kkrKiZpN*S,aK@fA9pD3ZB[6!C-&0dI8Q5VSH9`Qc
3pHSV6VdKd+Qr81R8rhlHUDr&C'f"8krFkp5PE+Iq$SI""Bp0eRPaXUj[K,%Pkmi
#Q+R*HR*#-SL'`88+&Li)ZDBPkmX@*qYG`04PIV)HecCC2jD4V0ZMNrAlCb6VjFC
N[H`F6'kbrN3*6*pN[AK1X[j-"-aPQ-R*HR9&X[kN#M-T@5re`ab!!D*d@,*qHbF
-%,HKm$BBEMH''3i$aIikQ"d`Z24R`R`*!d#eD6"9-)%`B+LGPkbhpF#d50BlVS-
"`58!@J+KNLE*HLX+!m*D3A&018`T$"!eqFRkJ*8`10!!%$F!31XrJc%NkaA9bAU
,SQ5p"i!eJ1R0kFPkA43-'1XJq!BFmJB1mmEFC2f-'@B[$)KmD@+brM`BRYm(%jb
XRhI#`"RRXf$bN[8A0X#%`A5#'3)$ajq,JB(bFeH6pA9JA,XD"KZJJ'!4!!8i4S#
`U3B'"*T!l+IBZ*9a-&YJ)23F$V1M!@BT0VIFSr-k$h+K4drK(Yh9!*-1Nq[4PmA
!p)'CiY(6"*M*(Rfp(3BAk`Gkp0J5Q)d`FcakPbU2(PIKdBm9`f4kp+)bMfiYmZK
f$`cek19C(VdB5TmCiY'V6hRd*aGlp0Xc2(TE-(F%N!"'X4kpe3L2AP2[dHXM22V
R!&)4jp'r2ZR4Hi4jp$G!f*NdMrj5L%H[!V*UY%II!D@l32bZGKjp*`MB#F6@DTJ
S'!"k[j0(h`D#YS&Kfc#2rX%"MliIK,dEkG%26I6Slef&kHV49q-b()V#MhMdjC-
mqQGJqQbT4imfHc$k(G9HBK@,hlb"P$5R+D3JSYaKB@9`6&NcRPE+8dLCDkYGcD9
&'r$e,bLAqf2EmLjaSQ-lGp8*-XAR((amDf1MD5MELdFH59[%'qIUZEf)Tj9"N!$
lLrL6!P'4af64MeAaqbYTJcZ'h-qR3#qe"mhRLja422NLbZek93BRE6N4&`$FlJ1
9["CP3BZ9'qrZjh&PI'84AeI1hbcLV85LH3V6(-X1p-[#5TTLTk3FL`hR!D49GM@
,!q`N0j(l6E,Q14i(N@rG45TTRMZ+qHCH&PlDk@LHCZFTc36Q,4X4(@DrCq0VLqP
#RPE%8lClVaD6UbRfHi[aGqI8(BbTfR[9MK"JhQm2DFF6bdSCdlTihi1Ta"k5biq
@9E)E[pX05KcQLJ&PjG`9KeHK9(ba251Alpj@c"q)`pr8i&ffmfH+H,fGPa6a@P%
qc[@0#81TEl,8VZB6l$5b#LB6Ucdirp'jqm$rk1i$0l[l`2(Z2R#6Z`qNZVZ5IZ[
ZlZP%G,6phR3iL&bGGRHZ9mQpA1*Z*f-UGRGhl2q*lJk!Zp2#H&S*6aC2XlTBkCa
B8@ib5NM(9aUD[S2rR8lMjp2%R"Dmf8jHPmCVD6B[2X2[,qHe1pJHi(PcJVq5aQ)
h40Q5EQ+Nc"6pl9$%'Q1QBZcU[0-SUpZ5REJe5I1Gl!'Y(jZJ5#(!"C&VMd9b31a
MLd55H#ZrhX(Gk@L(bPUFJ+pl$(a-fDS6m'&h`VG%GT'hbd[jRPMq53Pr0jBr@F,
2ar)A5hK$,)D%mTfar,N5AKR,a4+q0*EAPr#1XGbrejY0ZP1Ve@'B3KbXHpJ8f#*
L9c'R'mR-D[G6YTa,CVLX)%Yc*c,$FL9EA[20Y1j-,GX3,+0m-r0`HhB4McQcNeH
AF5ZDff,HFI[TP-I56k$G-CH60R1peC'dKHaR2lXk#NRaCRc)+$kbl!"TY&2Lh$,
m+RX!8S,&T5lNRR1NZ@G&1!+DZrK4Tf-brUUD0e-CVHR!aG63$,,*+E(H9*C(G,H
dBcbBSrSmkemJLdGb[G0%Il9#h6!C'!$9i0B$pFkS$26(bDHiTcJH`Z%%-NVR2(q
aQ$F8m`(&[#dqja6cl4Km*c!f&*RS)kKpq1P&ZYYLSpYL[pZLbQe4RDT)XX3T2,P
Bm!%2"[$DNS1m5lASf-pGeGk,+5Kb@Z6Y!!1)a(CUiCjUNkp2C%a&B6bj1Pj0#&#
D(!BRa8&4*9p@lI@SSBPA%kBYI9+(U!TG[RYXD!*+lC[ASEKq2)PA-EE!YdK!%6`
R'BP"r1GY,$X95!&P4G`9kjkeYpZ$FhPYk6THG*k-&*,A9j[)j@K#A3*jjH2BVT@
TQ(4Jr'ASSfKhRZ)56YF#3T!!+J@eQ4Xm5hVPK9Tmd%SZ6qfL56f!d9$N6N0CDS*
Zkij[B(MlIKk,jVBB3lfp$L0HL@9RE"-Q2HEp5Tahq`PD@hL"hBcr-CH2Xm68m!S
AEeA'2kVQEDYjH!R(heXX+qC2dMjm(j,mD[iQ9Jfm)YE%-[eF!Sq6D6[b&XqQVFN
l2*Z1XMU-C8a`(UBZKTcqU&PXB+Pk5#`@X+3Qi%FPk(jp!pH*43+2UqI,k&`H&eX
CRkfV@-,%if[A,9f)@Q"Yh!'h"()@4edNPpCcr#PIkaP8%C9!Db8[,qBS2%Qbm'+
[8Na(NqmKh*ZYih2pD0(5rBaEEDp9p8VHTCL-"R)9apF`I8Q0T39"M8M0I5#b3F&
I-l-Vpak`mrA92)jQmBiZ9TPS5TkacpU"4iRIJRC1@Xqb%p%3c-lPiaX1mHefRPB
2`,bYPhfH9a!&(aRh"VVh"#5Ni)PaC3*2VJ+G[UY)qi9FRPIh#IIE&BZVJJ`N)ZT
Qa`Z%q05Y2J%*+G*p9D2lXUHk'i*eT#VL,e[*QQCADQAFblQ6C2*!F`Z500#cTMB
)'$QGQM52M'rB`NjAcVZd11jdAk'`kf8I23G13%)UK252*6bYfKh`"RV4Ql"ZEPj
)Xh!aY4%R9Bm0*cB6J@JNCkBfkM1pl@BjECQ+5r+eGGIFGMKKJ@+@peBSYPH,q1B
L[P(J+hI`Sq9mC4crV5eIHBDEl(aG'RmqPTmTiMhX[,k-0fT'`TPBJPeAb4mmb$p
HacHAQ3L-bFK-0SlCB2*0NmbbV)if4@4f$DRM+TQp#U(fC(D&I1XNXmlN3bFR(QU
+mCF9c'eBfE#ULPpeaXS5[dV(UVX[hjRENaR*kc2)9e!fl432,*Tm0Q8*S5X5l(c
Z63JN`Ij[J9[r[`,1!A$@KbJFD*c['`FME`SAC1XU5EDJ@-+&0&'fSZL"03VQkJV
C5Ndh&G96MaY'!rliN68hPk0aNr,ABSbc`"UlZ10lV)$F9%C"YPH!NR6aL'8DiA@
r+F-0LX0BCSLb[4)'"4MX&5YNqjNlNCKq[!T,(Tj+1F9l&(q-$a@kY$LHmSPEULZ
f@h,[G)lM9H%S[K1IH#%@16aeC+JIY@XEj"R$4IRqFk,X`9#cZTfLr)44S"L5YEa
XPhbSI*HmSi-S&ip#X9iUb4XM4IRf+Qakm(X1baB-a)36*)GP0TPH5*13!)``aC-
"&Nkbd)k&I")#YV1`MS8)&[S4eS"j%M)"QBB!`,%b8Ek(SQR(-,`jIE@%3A@L($G
(Y*aG5-NJa52lU%CL*Y8mL,PXH@1e0`iN-QTf#Df8X`9*cGj'+ahC5iRUl!jBYb-
A`b6eEPH-m,il"-Zl-k%G$VL#)@&a0P'pXKVB+kp+kT9Jb&cT6TDYX4a-PR1`c%Q
6b1JZ1Dk$U1DF*jKpNTS6KIXF#eNfN5`jAe)bX$qc'0M-HQ!cGdKUjLNbbjE``)(
3NiRbdR&f8EfN31V5IPaHLTE85d6(T3c-XXKX1QDcb@bB+(G"jIMb38a'L*E,A@Q
-8m"B,NR&i)9+q6T5aI8)A-*NV*2N$1aLPhS8,Sk6e-0`KRVi(,%%c1%)bA(i-Me
QFK`H3X00MRlRD3q6T9p63V,F$d"L0iL1Yr))MGf4NlZI!DTH9,Y(JVPl)$!S$T3
f'*L""*-JbAhMJ)(RqZi!TQq-T2BPEZTVP1619EK#JE$19l&!@Ne$(ZX-ChBV!cA
G+M!-[jY#pN[Z"VCZd35V%RZCf-E%cS#UEV0a#jdUbPE!EJGIqaV'ehkPT,CI"CR
f%CKe*cH6U4m[(+q(B3K1Bd#dLr,VJbA8CmPjZSk5j0FZL[)bR,*$#dRYF!#m(D)
NfX&2CTQikSiV82Kf+E,0fcX*epZGX'i*b'p2Jp6E`l%F6CC6XHaNPY41&mN-@D!
6$N!l3CAD+C[JfNYUlc3XHb12@(U(86+BZhFkX"N%-Gq,Q#0CHLHK8!2H9HV!e@H
IC1N6`E*`RmX%d4L)Eld))a!pLb4,ch2Xm$eA5@V2N`4j"-L@AZ4!)"F!QH@5e+`
MC!EbXiJAXr)NY9GEc(T95CCH9`K-Z4Hb9d%FD#aSKTX#(++!Z+6J+LQbL0DJ384
T68bfLiirQY!BNk0T$!PrfPQ`NG!NNL6L*U1)Uhij)-V*5H46'#D$56&!LA`m''Q
5Im+9%pRNTfPS1%Ka`BZ5j@FrFB(Mjd$#qr0!bG(k$0(91J0"E8e1qqXRN[TV#*R
P5TD*-aM0[a9,MZNX18rr8R,-5#26'G'l,09&0"%Erq4+bI(NCh5h55j9*8IT**T
SNQpMr+BIKHcX0Y&5JNXiUJ3Mk1bV4EN4LZif!R(f3k+P84-kXND3!&[C*,@'*0N
D3E)-f%i6Y`Z1HMZ"8jmN16j[5QY0mZFSjQZG,+S9b#Cb4B0N`6!JXNF9*2G@C"2
EQGJ#FMpa*dAT[Q-Y4)ZqND3aLfkM'JC#1pY,$QF"R#JlTk)P81%dp"9a5$,*#C,
&Xj'1Ke6+![ce'["h5FHJp@Qd)mkiE$%5*!ECGN'TeLiNFFiA(9hQ%`VM-2!L&Nh
eX3a-d&$Bd@c'SZTd2rUK0'a-1C,NI@MPd[U*MV*ca0YPTfK(K&bbH++%YM,*6r5
4j#F`1L-Y!Nr#jj!!LfFU)+3q%i%8mFaPKTN-M&aG)9QUpp0`E%Ve&(LGT$$(Nj-
3,+AB@SqJPT,-a2BKLeb@$L0%hYiTUEGaSpiQbIdfbH5h'dZ1fm1*c'dMfA`r8S,
U4f2Lm%F6Y$q6SEmNk&``e++AUDdLe0B'5QSYfJP(l6bL[#hqR&$E&L#q"XrATp(
a*VRM1U4T[!eeA%`FA9)K18UUL-i5E,E*dBKd3fSMG!Q@4R0T)M*'+c3SVF)!T"@
9(+f'Ni2@P%Z1QUZ%UkB2J9+6,mN$20!E+$S'V#3D"L""U`-QJ@d!2&`2$bpE,6V
U2b1Ap@Jjj(S$F(M(U+M'"#1$@f!Sr$+d6$e3Jh(K@e`$%TYVS#Lr14d6P!UYLj,
8ZMa`eKNPp3eN*FFEF`RX-fE*FDDHd(*Q,d1JD2%C`V45G,`dND!ZEX1b6V489E,
@[!T0I98`18E99-RaI!'C2Qq8(1FVL24j0*S[S!Gd[$#9V-qK`h@"a(-aNZAFG0B
QR9X-+XkKRh+"e,qM0'J+LTf[fdGMbJ6,fY8d"RpDB'd#p51M+ZK!8iD,&K&13VX
Q)NX)R$KGZ#`j6'C#Y+Q'KFr)cTNQ34j9bNpYNZ06P[e@aV'`K9b[a(MjP#a4ILj
IFZc`N!#,(DaUX'2T6PU(1i`@JpY5QSN1E3l0-mNkUJQH(D+DJ[j"GM8Jb@#)86,
d,iZ4("JdL#5E0KPrG3T&NT142YDMXBRG50#aD(kl90&a5*9a&A3NA(DX@,)8P6'
8YBLKl-K9pb-9*@0dqRB&%r4R$jc#"+58JdSRc"-6-E'JMJ6!cRV4mF`3G+Pb0F4
dY)92)XAUU,$H4MV8'b0[cN'h+hI%+I8MD)2`a90(5Qde!KQYRP`0!$JcK1[4PjY
ALBl2BiLk#V5ICZc4eb!%IcG%lK''PpCFdI&'!ef#[)!GdZD,mNXSJUY"GG9*E2e
SSZjjM"R%"pBAkNK5If%+JZ9F%lS)4eZ(dCaShYI#Rr0%Lj*%&fdA,%)P65`A,+E
@G"'L&%XAZ36,KRTfqHQVl(,P&(DjEbHjP*q,`M"58Gi"4mH)MKeC5(H1AA@NBV'
V(5&JCjANf"T&pQRV%-QaVCMXj$D3!2I"!9)&f9p'Ej[8rFKSkVZS$mM[4NVb!3b
K4+RXGe"jNYpTL9',SZ03#p+0(*TS`[-Tmkk)AXB#r,)($P5fqFcqJ31R'Bh'+BB
%Jf'UaI+$`6#6@-b(NRR5H0K&8ip'3-KS-#3aj05M6B)0"N-Q--D3!+5&"N2#D%2
m2f1#mBX6EXIiVXKPAJ*4m@d#L`Q'K-PX0MB9-5EID(cBb!LB#46SHR#8aC*JX8c
e58`GG2akM0(i#"J5M%mEM8qVUMV61)F%JTVJR6("4B09pQq"m8',`6M6#f*+'fJ
BCNRb#6hbbQF@+(M%5+KHD25K(jaM56*1Y4JX6'Pr#r&8JR&@b"@$C43d@Y5&c#Q
2$`r1(NE@mBKF,iqAc&c'j`A$f+B5,5#q2d%rcCb8m1!LXRS+diG618H5f4MIFT4
[-U8r%FU,"qGceS,(jaTH2A#bb'$!CVp`S@P)0f@NXNKmUI[6IpllGIVMl&r,+ff
b3h,DC!F%+ArVFq()"@ArZ#BrcMRmp*aaij5$,)4Ib,JE%R+PcC(ATribY@rlUAm
Hk6hepial!38K)BSkqC[*Nj@MEUC$rmN)3a'8bb%'5q#[0dM!Rkf-I,PamrqrrAY
j'mR'aL55Qa2qqCd[ahpaY0a)X%I6EFE#IbBBK`Gq15A`D2[!Va#b6cBaI'miHX4
L12VR+bhQ'%BII3ICiZJ[&X2*A(@5qUdkhS$0,63B*KJ-X`hr9Er)cVeL-9bY99A
1PbfppT-L22bESM`bmj(q5Y2'mE1hJejr+fP+Rk"dr-5A!J+8R`UQG&*QB21H)cZ
B092j6MQSE-ZmS2a-0ZB`XGe8CB9k9ZAHImmV9)c$8aIq8Z0RqbQjcq8%"Ta0$lE
F#``)fGmq*bK%-4'l-d$C%Z!0[`3d$@JG&2)Ed*m%0!Rk-dMTS)M+1dh%1#9I'3'
9pbR4MK!SE"qB'Cac*#4)U3a5YQBUp&*)AmlrqR$k[A3#'!!!(4p"4%05!`!bcJp
9$@8e%3!LBqj6[lB[cD1mLFp5XjQB54kC8TiP55XAf"aJT'N+2TVHT$B4ScF(Hc@
d,*0!0i1j(#p('r,j'J)kNA&RF-kXLqlX$M)N4'DAJbc(@aLFpDTR0M#SM)IVB(!
9hFK`@!iEQ3cpr[hHDp0'CSklGqrR(aZQ*`9"N!!%34!%J'Kr&qBMd5KHI-XX-d'
j'GLAr1[B$UhpR'Nl,c%TLHmbCj`j9k(LF*Sr(%YT1hcY*h6IXJ)N'MLQ#TBa`45
ImhY1Q1QM8[jJ@cNZINJ%lL-#6pr1+JYl6MaGLBpLqH0aqH-Z'-4N`ijNmNPib-3
8i*Fc&TkHLSa6@N%RS`Y%q+A#D+"L4,XR0IiFRrlYX12[faaYC*6UZH1MiLfjDDj
YLMN1GcV)9"MpIZGSS'SK$FYeaJB@Y*5CHiHedpbMRB604rjjljETCqGAmN1c6@G
K&TRT)l0Fp@9Sq,'%VikV,Zq`S,DYAa%DpBV(H,KIEF2h%+[i-4'bA'%9F`a!%EK
D4bmdmd4UM#5,R&a&fUCNQRe-Zj,X`cKLX)q[[HSiaNFlAD,2i9dS1+`[Ea+UM@&
L%61%iBJ[2cjXa!aLL!X!@$c[pl@jZT02-B*Z,da"US0rc5['%q'il$55"IaVF)M
*6I(%D+HA"(4$1+5IDDcMFIp[L[6XXD'@bH")$&QRfkRqkh"+dpe)9J@G#56Y$0f
AhP"QLTK#F`Y'(!+@eq2m2A"[2LT)Kr!RL&3qT"p%j9cXB'S80[S%PP'T`CJS9lJ
cZLk!3Zb'Q0@Z*'%3h$*VY)23Ua+KEGe)eUeldHYdRLPqmIEkmRKaQm,eL5@TYrZ
HAqI3j`biY(4L"eeVJ6laB4kGB)&V5d5FEITR[k**E)0pAPeAAC-`I"r%GUr5"j!
!`KT%!QYLb4pL+N18QljHVeZrRJSjhFZfFK(9%8Sr"VGbBcLj2M#QkPH3!1C,"Lq
Yar9UKA!Y((YQeE!((h$PE08+%%!6)cB'%-2V34T-$@pKL$5526i$0,F$J'3+(3l
Phje9(5d$-)EUY[b!-["05FBBbC4TSah"B6Z#lLa"`CU8GRXTaiDTE)[+*EEKMir
"M)9%'4+YSf3-HJ9)G6RQZ,pYY,2X*IhGLkSM3*IUjUX#AP%I$kpFp@+*1$`H&P2
M`82rdACNB9M"N!"8HNMhZaH&95mbeQ3$eU[1+-c6Kqh0dp4`,d3kbA@&NMCFIHr
IP)(8D$jjqbeXd$[V@PaZGNLEdlCpQ$j02p0p+-cNFQ`I4MTJ0k9UhS)UD5ENL!N
fb8`Y,9(1`%B#+4e9rpJP$VpEDqL*kLZ-8DV6d2e,rZ+RMq)++U')-T!!&aqqTG[
mP*lQ%&,FM@dalR5[$8JT,hfmZ'8%0Q3JT9VFKX%b5ZB'[%*U82F0qd,AqUrTiJI
GH6q10TdD6E@X[m+43Y@he)S51)1"p95B*U5%8[Bk(0fQ)58B#'&`R3hj!5N&NAD
-$1cXm"V-E-'"JQ5Di!V2M8Y*KR5+B3kRa)0+TRa+*P`[MHE'Y8alDi@i&'N%N!!
F(l!4188Lrqr9bkeV)F@-M6UC,ZD%IN`T05+*e`3P-HMMJhfZ5AhPU2m[R%JX&Ac
B0&c[-hXCiU&$+bK-$24#24(L(H-LL&4'E""RM@LPK-LZD8T+DLGYGd03VCaY*!(
P-Y[%8*pJUdk2B*!!1eU!)@lAY!qJFFR(Ld#*fql%i!*U4+6Chqk$Q)+%(LHNUD8
Mk4AYji!ZCLJ%%@PhQ*fK@$D3!2YGA)HE9Q!"ER'@N!!"%m-9ML3R6jKq"P#dBcZ
RhqiMCTTJ&klBc6'e%+6Le90`r6ih!0+RFd1l(9Z'kZCVQ`$U0Um!"iGMYH4Bi+$
0GNY8I"6#a'&-P,cFp&')*KUEkKBhSY[HBDjES`pp&&S'Kc1,[T'$P*lUASA8i1A
mNkNrFJF8p@3118!BN`hj'KiiCX0'+ULl[6#ITCl-@kP[PJldpce$S(Y[53V*V#8
Pq(NR(mcYdM*,Gh"4ZqFR!8+H%4bQ+D4YQKTU'Y6f,QTE&2$[dd3JQ-IT2KF!Ud1
lCmX1G,1E,R9UQlS65iHDJYSpQiHD,QXE[ZMmSJeGpN[dGrbPq`q9GFjTcBPDTVK
$$lk,-!fmVR-(,92m)R0jf-@1$[Ve))#6I'r*d*-Xm9f`a%H**'amdpP+L%4$G3q
k&#A)P)FECTmKP)m4lMir`K#KPP+,%"N,YNlNR``VqD6-D#0'[4Fj-cI)@l'qplr
b")3B+jTCTHkVD,rUbZH'fUpZ'@Sr*QpSXkQTVRmjTZTQHZkSZl,NcpLV9JE[B8V
Y,CA#)"K#4X6cil00MbhbQ9QR0jPeV[fkaFHCiMD!U#m!a3H"l%QA[c#a[,IZp4f
@ZX,Pel()mHMK(9TG2bhM220"'!8Z*Jc9PC3,Q6E[*)8U513+&MFJj`RfKRID*`D
M'k"UG!E)$4J`0Mf`Mr['A@3d)dG`N[IhBI!A$4'@ULB8*pr3lL-)XjNAV+LEcd)
N6Ti4-'"*MT!!AeBkSElp@Ji-%3-X2`5"Xp6*4(piFQb4QEBHBMG#%IBJ*ISG'10
llXJ8Db%L"N,r5825&4a&-'fN+Lf2&,S&&c+K#I)P1kBU(62-%aD*$D+&bFGRqR$
",6L8i20)"c0YK+'`ELCp**!!50`VU6(D4R)[2me0ePXC(U0*8JN!5q0bXrAdB&r
kSY9#TABb'U92*0FR-1LA+5hLh[jMK"#ddCCJqmd)"e$KD(N+RF[Z)q&#U*f9')6
`#b6(-A4l'+R4Hp%mJ+(bbB$hF39Q(&h8c&S''jkM*PU"C`iRj5B[lD$8mGFE'6K
UAE9%R%#b[,IpDVL)S@K[Jf2ak%Q!*JR3N!"*G!06r@[AA*VT3m)QVI3ATe1`4HK
dddT'H9*IkGeI93+9[eK@q3JkbY4&&kG$3CTjUSUTS3Zq8eac[6iJ4Jkb5d)*iHT
hfQmD802RXlQH"`J`(9PCFZ6(If5EZ"SrDjamqaqJJR8LJ@ZZJH&f08KXEd"#8Qb
A#,h6+Gc9(GVY3Xj8&lh8Fhae"d6$4EqLVZHATJ[4$e#)1MiS4B10,Ka#N!$#AI,
KM+`#RB,#p'JC5Rr[#AK6cE(Se`AE83QY%C!!PUeSALRjQVl%AA3*05Xk8k(iDS0
$h)fL%,"UT!$!QP19a@rZq8S+R!3qcUmU%bP,rme2pTCd#lZd3(0FDrQjQEVi#f-
39q1j%Hj!!a0+Q-5!D,5pVF4$l%IQ[9Ec$iqqZTN05UB(9D3`D"S(E6"S&&h`dF`
&$`ekrI&2(LNamR(P8USPh2%2MhV&rP[K`IbZ2"bkVlpqf2,GZr3cCB($pI6A99p
mlBQ!lR[jd@'MV1h`0IVVZMD[rSQf2B%U)H)QN6mDbr[kEiAk`P"l'N*0i#T5h$!
"@Pjqe#QqRhQG4bHVYa&0@+NaD)cfj"+iY'TDC&SN9DVQTjR1Vc4iC+Kp2SMp(QQ
iIIDL&*chS@$[IIq1pS`A#21B8mZ%9A)&QpVh3Kd*5lQNb[JDUB-lJF5ZM"bLdmK
dc!%4FIAjP3)YJM#,k#Pj`8T8,TSUfKmf0E9hq5`-*Ih1j+DpHGjcarYk*'IJDSN
HDGK"AA*1LH6%"3UddfC1580j`MLIQe)PXZlj)$B@[JKM4DUDK1'MBF2ikEhEc%R
N-r-2ZY&SeHfBmYENM@CQb"P('%DTaib16Vji+5`m1`$@pM+JQpY1c&Y$iJ!4S'B
qLXdD"C9#MNl[B9QT&e9C[M9!)BB#+,SiE"cB(J"SGTMEZd*`f41T@$8be0lPk1$
mdbM3ck-NN!#Dh6cTb(PN&[9#dG,0ITklSS-4k,5%b2`,b)3[NUYFP9aL"9IE(pj
mc)qdcqheUBVf'`pP`L034eMB48+2L'!FS,L@ZEdHPlba,)0Q,!L8"@Mi+!K1*DN
M8J13!-DMVKmZaEDVea1mT&Zh"9X`j-6(R3CA@kKS9#3M%*BI+rTT8hYCIem&Gj3
9FJ)26&pP%JSjLK@QY%$Lq4,he,M(%V@Kf0EppB02@X3lTK!B@k'kSJ`XlLaBh!"
9MV'C[DTdmIkq-(GdTiFm,3hj0$[NdrD(24EHmkHjE%bkl2LICUYM*)jABVYc9YX
pr5[R$)qZAX#'Phae`l(4P9[+ClKqjLqhk8Z69066QijdrfU)2ZKbB+))2)mZC[5
CIBP[ArMV"dAZQCM4HdGQBHlG'UjPk-)hcA5e1pRKrTd'H),Sj,YjHmYq35pYE0%
bC&++4Rm5#)XafdpH*'3GCUj,JC(%fVBUF@G(aI2kH,#6N!"e'%JlV1eU0hK4'QN
&+k6Y,Z4U*jY`2-G(,GiIKRP"(L!mmG#2mRJpH%r1FQppr(pLDJfQ9([KGcP%PFb
mBiQFDGJJX*UFBb*q(1qZLNE(Z*ki[AjCaQQBR)C)&3R`c1'J#Q-cC$DK!CYJa5E
)E%80f)UXf)TN0Vd"Qfl&TXYX5J-faBT0NGPb$GKb9Q`jQ@fU!GZ8&GY8b*4c5&[
Z+DMJUqHPUk9L9@V"`!ZDUTNUVPChAJ-j%J"Kj##aS(CflGmYI)l[iiAm*!@be8U
6H61kdX(l1mD53ZP4@9aaM6@ADLe5`jp3h#[Ziq'4A+p6EkcIPhLJMUEf6d,FJY!
B391"jr[l)QR4SjJkM2kDS)93VIe@a5mJcP6DGkJ8dRhbdlYD)+bI,FTTr1MHICm
1fdjFfp#4c"AaSjY'a,YIZ0Vf(*b(VfhSP*`acpd[hGpf%XjMkK2[E@L9h-Vih6I
2-9C6MpD6C4Dcc2%&-4mVJYZ+@EHGR$baA8"hHc6$'!1kD'qi5+FLb(`+S!PCTC0
l,J(a3MK3J3kZ9eH,ka8q&d&'+VqYMRrXGpal2@dm%AM&I@3b8&3SSQh2cVm24PK
G*B'*+6@HldPZQA4)aQQ9AM!0h,D+$kabc"R+S)'8Q6HhC4A%L6PE9R%j9A!+#U[
9eChVM4RSdQrmkXpI%+1VIAK"K8%&K@%fN!#'-Y3+A"6RX%dF5E-lB"$"Ll%A0'5
ri*M$bfj+5hPrcT`if"aZAk!*,%#PL[El#KNUD4R&R$HM#G9STl5%+[0R9haY69p
4HN*&KK5F"#SBbbVDjcqI8cR-qENU4qkk[E,rlk5B5l9lp('4KJi`!Z0)2Tr),AG
iCVm"1aF#TrNdE&SPI%R33SQHfeT9-ZA-'l@[lQ89&#e@h5Ph$$$2"RYTXfjVRH4
TGZYZ!Hcecj8q![E"6TTkQ%fp48G#Q$Nf,@j24(*kZl*,qjil6i2,h8"*$1pL`rr
VCafZ3SN(-'fl,6$*+6P9Y-A2YGCJ,l'J)2,9Tf!dZlQImeC&ID29DAb5fIp+h[F
R[6#Bf),QF[&2!NAi($5A'p,RCA1j+RhfQmX&kI-9FhPFqT`aPaG*RaI0jC2dqFc
IF$dN,GGDXCf&DYERI3pQ&$9Xd$,pYi,Tk4X4prQXbINEJp5SY6*pZmP8H2f169!
``""4#d$X6%S#HS%c9%1%e&kqRP60ND[jJHV%%)`P8baCb0"58R%a#TMQr&jPR)k
pPLVE8rkjZ&,mqcNZ(AiZ1dV3I0Z2J65L")Dj-N#Bdj!!!$*A"JecUK*SjXT!BNj
"!Y*F'9c-'CI!09F'((-@5B#E+i13!$NRVpp*)#5P!5$ak-A0[EVl(qY6rSHJPX*
UqXT3VQQQ,TC3P3'j4T8"bF`c%A&i2j*222jER6A-H-$9l64R$VQ3!%`5IR[br&f
((VKC(k"+5RbJTKALJI2mAZBBGMa`l9!JPG$hSq&d5$m+XcqT`IP8i"8jj@lk`V3
0dq+5Ya9qr6(1NiqMi)[j)%[59+klGB6cXrV%XKqYUkF#k0[+9B#pLjTSh8BqaP@
BaEp@M,3)$+D9ch(&pREV5'Pqr0l@-TM,d6(#Q#Xp[*,A9M8HU9he!fiJ25r%E-(
1X+MB4P[AYVjDr00(XCc(p`-ZHX8`23S6A2EVGr!!dTIIeAG3-$LG'ZQQLIjkT6j
XB%'`+J'Y#QE#34Kc(E1IF2l8KK4DeB8m9KTLjN!%D-TZ(mc2S6jA-p+l"HXkAkp
&X1Md!a-!d(5(1E`3$5[U3'd(k[A"C4NXUk)*,cb8`H&%,epGQ8ERerS!4U0l1i!
&jF1DqQlpVC`JKFE$2#DMVF$#Jr1R+&6FTFlCPE0*U8eA$URA8dLF)lbGVMBTq#k
&qV`'(T@+iY!,DA*pL!X%BPF'VR9d,DEkGJ(d[bJfjjCc5INY)ZXqAP0Sp@Nma2Z
Kh8kMM)6JT,q6@'m4lf#T+c9m`9R,2Vbbik)cb6iZbaqc-X-9fI'mXjPpc*%(G-X
-HIPME)CH3,iF$!Arb")HE-,$MN+(9!%@K2URM4m!R*L,F#06)"hJV+$af6Ia#Y$
V++XFC48IUrKBCB*9*J,9A93h8&Cr4MR0Th4+ISEQ#%$4294*qIrU"+H3!'FE*"Q
!c(EBe6f&Kbm+2IPRS-b+4LKFAFadZ'$)f"MNqQZh4R[,r0PdL+2UX(-JdqQ+&3S
R5pQ3!%Nfa)BKiQXeq8XBB#QEN!!DKaKJUbV6@A*P*ECeDUA1#dZc5`K[e,a@!f'
+SGrBSCNqUkA%UR2k-bX'F34rU(liQ6pSI+810%iM'DR,I!3#"C!!"Y)D9aRUHep
aY"#518Yh"LkS1T3a&HKPQ6!Bh`LNUcdRZ*l5!1LiPRNli%VLCaSUekB&Y!a6V'r
Qm!L2ENJ925PpT$!iGBT22I5Ml&!"2me#dQjJX1'`Y('!c&&!Gr8lriIc&6HLd9d
X9'$&$BA3ArAQQCQ(!,&"JGN6U63CmFQ%klfIUL0IKZF"G2&Z,K@N0-,EDUS4h[B
X%0k29`eIPH#*Ma)&MU"MMq0`iT!!l9RfPlGYaXZE9mP`U[F1rj&2rIS%Gd61i1%
TcfbMK-J`MR#ELCL3!!6U46(d5*FEf1D68U4&#aMZRQfFkC-4RpY%D3Q3!"!C#8H
D""')F,fhiB+1HBUU@a53!2`G5)jJd6`5$$%&!HrM`cBD,-llAFEAXMrjq6e%'Sm
iACPY('fCkEY`A#k1h2'#SV)P,IC,+ZDX-hZ3!$c21YeTjdLeXcEYM((VjA&pj9Y
H3FfVH+bUG`J!JGN9"1f[STZA(BqZB5!`XL#S6B-J8CcHPVr8m%YX`a`,h,#FI+R
Dcd"@fNMj3)Q9Y#hIkN++TP[NlDV&GL@r!M$h!J%Q+8kBC[2UCd-5-X2`1MZNG$F
ij2$rLe"r'MfpRaa(Z[kBA1hAJA6,ZVJM$`"!C4S)GbK5K(8rJ*(DXp(2r@%hZli
iqm9-(e2SH8CJ-`VML*9DVpee(*S)K9SUVRUTh*haJNN61fj"h2Va')%5q'SK6df
%KeP((*2&'L*`6ME@8p*@J2M6)R8M1`-9#qf0jAL!J#@18kF4YYq(e"i0hKBq$59
#$eHJQMVP#k"6pe"P)ak&l5(4CDX@XT[-NI2M1b&m2-'Q$IV8S+TD+DdN19ZP)4X
cG#d+VkHUBT)1+`QMe(f4!1Br`5ZjkMq"@(aPGPRkS@Mj!4D"`XYC'!Z'kS0)(%`
pe)8$!1$VrmJYA-6,c`dm$"YRR4Hf"0XM4JaTb(T+!-EY(TJq4mCq%L4`UDX!S9P
@RAA4Ua!D20)&)5TBB+Vq*B,2VL+8&XQIk!d@L$BI5BfZ8$h%*Be#bD4UU&iap+e
mLKk9*3,IdHBJU@FRC%bqCDl3AFdL6--94DLSVZ5Sf6@'(dIBN!#9YC!!(Ak+KSF
cqQ$HNKpp%1S04a5jCIdSei!Br[862"3@m4Qb[akZFT8Z-K5U[Q5HAA))R4$3jjY
G,S`,PEKHBCHE35ANFZ0L3IaF#Br4ipMk+#XN-@ka4c5[+G`GfC9f5iL"01XZ"PE
@4Dqr6)cC!bBE(*!!4rFTSa'eHJ!1M+Xqf-AGqDeFfhL+0KF[E#i%(i3V8VI*,Ke
M&jM@*`Md'b&@JN'MKb#Ljr!SYK"Q$LLEFfc5SSH!%"iJK(3YQ(,5LBm[#rLJpQd
m,F1eEdIT-FAG)&r#9dEfmd&ZaUZI@r#Di4THBHk2I-T)l&RJ`2ld300ZEX'2KTr
X%#Pp!Q80a)X)K+5cMC*B!M("!,Ta9a`[Je++V+$%q[Z`a4b"8A'%#Ec9ECiYTZ,
Lj)flZBV!-(`13r"lZ8d25!9*Mh#eH$H2db3U"UD&C9E6M3fQTF%S$T!!EmZj%Z'
6#*k"U%*L8YR0%NraS9qhq&TGRS@((Q`*(`G$N5Y*$*J8jah#P(LJ*Rb@4#4'YJh
'S#*@a,TB)`L&dIH&er"Y`lq&i2``'G6Sq#-#9)mi0)J#"I%Xf[8Xc"3rII6!,6h
G')%#k`JFZ+PlUKheJ3-[k1jUamf!lMj3Rc)Iq"i*LfRh#i%$,qe%k1MV+VfmTR9
iK1V)5QHL*N"K[bJ8PIhe,*5q06)#"6AK3SJKme5JXKX$qRr4J'aT@ma@"e%E
`PY2mhc*SC,k1S"L""AS*qSXVVL0SVBlqd3%FFEePKD9Dc*3DjU4H+'LXkKJ,jb@
c$m$"PVK!3`Q"UlSa8B5I1#EMdL5P,L0ZFU3([%2-NqM+1KBdLH)RiSI,5(1"-Ep
#5e5Yr'cN&d"##4GpNiX)k@"%3LG#[me!&BH*R`qlbqV,VT@)4SB2[2%)3!b8Nj!
!SKVp-RESKiV!8$2#aABJY-Yc4%#J$6N-1"!D9h)$MbHrL5$40i&b"M&L3I@,hB5
f,U0#*(CLB8ZK#&'"X%0fJjBbb%$SF8CT3TT1Qdh)Z1Te&#,3ErB60!EZ3Z,#k1r
c6[Y`e"9GANPPQG$J)Z'lDlBaI+rZUcDJ4%q`S#Ujk`@"BULcfR3APpU$kQUV-%q
iGl4ra68rhE(lrJFkd`efR@S"qabN6pDTrTikHqCFBYqTTNQb5kbVVT+kc5Dp+rj
r3&)eFV99UM+c4G1fa4,`m"+jX82EYTJ!b*6#&"9iC6mH,Y[2G9-M3ZY8#MpJU[2
0P%@)Cp9ab2Y+m"DP['9(VpGKjEMF`&(S9A4,Xb$BUNQiDZfUXHU&X+bXq*QaFS8
,rrJ&3C-`C#55`P-dNCc@fTJahT!!Ja,H&*,*TmK*d`M)ZL*-CdQ[m#+9'#l5EH9
Z5H58KXm,1)[R"I)*U@%QXpj2"pGEdPHa)R2@ZZT,HV2,jrh"@p5e"@XD!#9T4jj
!")EQT0faHkZ*@!(2RZQb00#1e1AUB9ENV%%Dp+BNSNQE$#lmVi#`i,09JeUqN!!
efheTiZR`0qGP#Ph2qa#iiDD(G'h0HDfrEmI%qc`GNPNGm)BK3qmM0FkhfU1ql0c
@J'PR!mGG$4b2T"e5f)iGU8`@ZH&JB9j-iE*JACNT3FRjC$Jl+BF'TdP8dV4pN!!
)(VUeCGV+cacBRRBlEAK%@Mef"LN4&V!YY0N2J*N-i4A,GP,PB`TLGCJ8EV0RBHk
%9F#j`Uh#BUQT6m)Z6)Gar21N90k$IjqNjkqMf)R+GF86XkeVHG@KM#-i@594R8b
C#@1D4$("*8,ie4&'Ce[*@4$@&DrkmpB(pkl[j5N)LcUF"TbLVqA#ZTc(1J4@B!'
je+c`88Lb0q@(HE8jPd5SbaTI%'Q2*$UI4C'$ZTp#qK%'9'aAHF5ZXYHZmT&GCCe
GC8rH2h-,9mlPGr$8cMVHA))(FRJcMY2-([%q#$2'@VkPQB*@NqaS48$5@M5ik-%
UHQLpqB2ZMIM%F5Gq3@(JKRd!6rUI+CcNc8PIM#GF96#!fr"4JUS$)DdfEl-*Ra%
XMappGZdr(EV0c'fK2M"3B5"fKhF1GICHG3M,FJ'[&)r$c+!6qZMqCFGj(++N+SA
8r&-a"-l8b34G9K$Y`fNN)B!&6i1a@%#i)`V-err$G!U(TFqpl(9@pj'J)A8Y++S
IcrkCjH#ccGm`pG4de[5qrEh+ccpSlDajLF)qhrLhTdp[kPREZp@m$AAcl,2repa
[2QYZlHLjlpPhHKEpmpfr2[$YKarihH,&Lrrf0cdl[rbVXadI[YMb,jprepcqG12
IQLmm[FIm[DFEcAfhDKCprm222cIr[6P`r,mF2QZHqC[IR$ArlerHZ[CP)`!!2!j
"4%05!`"T*""9#fbR!0&FPrqlchZcE(EL'YFdK$5j,-YfLFPQ#C***@MFa,LZ'C1
ZU3hLb0E4A5Y*h#1HR05[aqiQ8D0BQSUePZ%`iM!d#JP*B#b61XjL-b"L14'XckF
1Y5!JSZ)%+kPSp[hmllhl[&%kc$RIj`FET+FS*i)JH",C*9lHkAEMaIr8,"L!IRN
AP+YiD6$'BC)XHl$ICfd#UP5D&SL,dEm,ie-9N`$CYNRl*lf8XSLR5Pm4Lm46NV&
(0Q3PEC83aY54`HEL&[Imjf-qkhI6,RcS&`hY!DGSJBJQH6!B8[$MKc$$0ZP0Q-!
NFTK,`S!1-d21Nk6mqDVb08d4dA1`#)VR"GY!b+bTiqTTli"bqY1#B%!NBppcGh-
ra#1+H%kFa4A4&)V'CJ&8U%DZK[AeIr4+e`-6U,18VBNhV`K%IDH-[TqX#MPYdC!
!"YfDa%2FAck,qrIlIDIdp@ZpPL*pC%D`DJd5"fhS0Q4k+XekP#[(bllA*EDl%)A
ST"bG423k&TedBAKSq&d$5"T49CJ`4lJI'aE@h1fHqe5D4MRY*FCqVb69$Y1Uar9
VekrPj"+pQa4MA#5MTl5B9f`2a@Nj''jb(%Qdi%3NG5jjD$33A2$Yk1DUFcTA[a1
6*!1e`i`QMR"$6Al88T8IYBf5i)UQ`@R!Qf2YL(MQG4L8mpX3fBdXGFFKDlj'M)-
i"S3$YRTMh&@@Vc'10%@)iI,4GES'(+`4KQJrQSGa*@iG83!UPYp%Th(@DEeZTj*
"NlFfM"AlH6ch(m6fedIcGl$)!De)Tkdi"-!%Be`8"J8GSQc`(-5dD(T@EaERVdV
0c+L,*PZ6h`C%CUm0!`NP'fVb)C4C2PLD4J0$T#Cd3iX3ZrrIb8*RfKPB5!1er`j
L@'NDYQpaB5"NlK8b"#b2c1LT+M"kMR*qhY[,GDG%TQ"NYL3'L%#26-FQ-XDfhE!
B2[)Vajq!8GZ'I`e[i6jS,82FCD[lHe[J5"-h'Y!m&DK$-i9QId"%X`20r`LdSMQ
!j['!#FdiQQN"Ia2!THl!l%5M!FL!Z@-a''8+e68j8eAj*YmTQ12k!1LFiN$j'r[
p+GZjMCiC8Q4J-4&NkQmBd)J[eG%cV+2q*LGBET+l15*#e!#8,"lS004"G803BIh
8kS@SSjl%[Z@9[$i36GQ-*TePeSZe)@A*5c8c)adPq[lQ15!@2)VA!)pr!'-!c%f
fp-,d3L"#VBBa[NAFqUf*l[Q'V3$PGE`eaJI(Z([UU"Le"&1fYGi$pf+E0-LNkh9
jk6Qk`&#r@(GK-MYJFC0YPTS-Y6E8UFQ'3qVEam[ZldRap,43p,Nq0BR%HTCB[e4
L24)(@1,!8SN$BTe%*KTZBX35D%R9UHG$cJD2X$NQEHj9cpZ(#&%I-dla*)",0KV
e#,T"rNi&+[Yb'dHJ14#))bM2YRT$FX1SL'0ZGpIp$P+N)*r-hjLHp362SFDe'"r
&F8jbE)U5'"KQ1C-a,Tkfl(*T$ZECmS#!HX*26`J'&XImQiV&k-&LC+pkmA6T,PH
2p"QSd(Z'Jk)IfeN5AC8q!a8a35b56H3M-0FkiRQ@'H"fklRT%'rRr[3dQ0[rD15
Hm`31+60qF!@fm8jkFBK!0!$q(d$i,jl++3cE,Zf5SLc"+HEi)Gl'ID%iR`8E#eH
9eKASe-2&8!YV["8Dd(GeH53"#-YkkSd`0SrUE(i,Nk6'e`(U"K5Q+RT#)PDN9%b
m*HlKE3%RLcV%94DT8#4E9+51A$JB1K`!A9%m"3ElMfHmeN&(!46K%!r6mQjhHB,
3'fQ4S2De,$+i0@pdA-PDqXSSVKJ1F4mP,@06HAU[P#3L5E2LkLK%Qkd8`B-X`SJ
)46qDQ+8Um48BVU+2d`FBTdUEpD)M3YUXBCZ*S5SqSr6jh%1m88hL0DM@ih9,(F#
VAfh&+eeYJ81'SK*BIK84&p6cH*@Uar%bUTB2(J)qG"f[AR8-Vi"k!DrpkLKH0R8
3QlV9)Ea5UKQ[1V84R898%VQ2XX-pHV8CaZTCUSYp2Q3GGBdk2M0KVKBqUKa0maq
XLD1UPAdd802)q9`f-&V)a4EU9KZP!FM,$3+T5&P(VGi24YN!BqSSSZVN+"HLUYA
H(659EM$I!2QMHmHSHJ"GjIL0)4FDPrclD@,q%jS9IZjHYQ28RmNkE`Ze-,E(FEh
+Af98GPcKIRm92Nri(p,V#HPrEY5I*E%XC(-`,D#HTb141P1[bjeeb-G#h6fN2L"
eTck!ccqT6dRGGFhblhpZ9,d%3+RaA%9A@CiQ[-+H%4)J#X$9rDU-c!pFi4"a[qZ
UG+mbee$3,QA**dS!'PTFQNq3!&AGMepFj,jM8[-J!5A&i$(#emDf*q#8d)$IA6B
6#U$SCb1"%1MjlKP`$dQZ!kJ(-Mk"A9jjL`Gifb`JiaY"lTZNEQX1Z"H4596KlST
252JpMj!!G`aP@`a)ZaJ&bPp4AR3X+ATkLS&Z99a4@@Iq@l6-)[F,F**B&$YeHM%
2LkFZEZ(K@(cb+qLL(%ZcjE&FaG4+GlRY("BhBrX,TMIq$RmKj5C!6&Z(l4#2K1+
haVVJ400@c`JQ#N6AL4m0INciSH6lM9aCL+#l0H3#k'a&0M930Yh45jm!+TAZ13h
F#Z)!iRq)+eHlZK)0A'r!B56a8`ma!`261biM%iFrH3L+rqFZ[+cd)hIQ,+(2IdG
R-55,!"%`GHU!L$!Em1m`i&'T!jKIjQ3Tc,(JAHH,2!T#L3#N2X6MUS+A!X#+&rH
$l*)X-pHV,AJ0X+cHbV*k#l*kPRX#)k91!0ikA33(!Fr%d&J0b-ZGUhHA[mM$JD3
!1Sh0Z*M,J%'+!B-k4YKQpAVk[N[lp2AVJP1$aKY)#,2N&%Y'-,L$-PXTAMAU8c[
B"E`De!HqIe3YGImDSQaff2VkVN+)r'eppkP'(*hCrHXTCJVieG+Vp9f*e1K@%JG
-@II+e&GX)1p!bUB%`N")J%D@&e8e%k%*a"6JNB%B5!RN-XF!j)@FI#SQ`D#cUM3
Y9%p4BPcXKl&Re43cIDDX@bFk1JkMidk)JB-haR8DR5CdLUcV3GDpUPI$TJP!VhG
F8N@Q-)XlhSkVq!bccc"p'M9LImkq$p+a4@U%5iZI+K+M26KmC'UIlDJD$S&8$A@
Uf$9,p5%baMl$)!C%hKj-AB4`lCeeLDeh68f`T%jNRBa`p%bPH`+5TK8%Ma'4c$(
bD!H8f'NJNBc-863cHLVGde+MB0ZV0,fYGiQe'ikUR@bD)UECB5[+'MG*ccCKNR6
SAKbkR)%V0!1R[FJqV3I*#HXCpLUKPppQj2jA-@'J2Pi%+bD'"!ALZ)3KJE$NB)b
1be3%YM6HD"QhD%"B&-`bBG#,IS[,!!Kch"8bLddiV[k$Zd62&22"IDPqf`SKNh[
U-*f*J4B@e%&m'p*)!FE94ZC+8f&8p$jU%1#B`E)16$KcM-V0V4MFSN%J'XLiIQ4
22d`9FbMMVT3bQKrXpa3%+C!!&V+JIeU6UXq@8!8J#XebaN&Q$FQ1)N#,J+V[k&1
VSCJA-P)fNa-2r6-LGl,)#d)N'caA,cQ'cp9dC"bIhiKAM!8reIi6P'Am4bR,q"q
L!-ZILGIArUV@1[p4A1PNA6G5erkVQ$kB"08lrR&(`KI486!#lk#$d%H*3IEM80I
4F4L6,'%1*B,jk0bc9aqPVRRPahBpQh8Y1VS@ah9p@1jDA+TV%9hR,0@a`MSHBph
@1lUY(pGY61kfINRG-L$IE%0()8+c@pNaQijR,,XZ'mj+0X"jLKd%9%S%r'%!",p
BjlRD98L"1&$qik%1XFkI*36#aRVG,HSP"N$)I49%(VK#f84#4301J+jZKT`Ld+'
2deiL%J$B,jSjJUj9&%"EMkS+%-99e`$)'QV4r1*iaSV99Qq+%c%ZDV4hL!'h"MS
!&Vq!q59+jTG3r3jF8,XT@0F!YDEXaGh(&"+@FMG-bU[#YV-XdqcSJfU-jD"FQpf
VMQFXf!C(0bMAJAK$'clAPkC*`EFFC'HjCmJCY0F3d6%@hN%Q#P*eY9%)'#CBm!i
'CS@Z%c)JfLjZm9m&`&e%!0aI&DUA3FI!Gc&XBbX"&$d(3R88"dFZ*KAd)5d[-"Z
!S))--Y*4BjQc1)a,S9*K!G8S,+!qm(%,U+Af"G45B3(e%J#YCI`#@LcSG6$!BcG
MZ+f%B%&Fc9`jb%N*CM*RNpZf0e6A%,N@E9#1Cbcm2'89Dh&B8$$&8k6+pYe1LQa
i(5QbM4#T`l$*281G8291Ib'fBG!dq13h#D"H!*!!Q3IACD8*b)ar)3cV9bp+BTU
EHMd'HjJ0EkmB!H,3M)K#*&pRc1(q#ATe@K"(-B2)#Mm6!+`S%1eKj#1'"R3q$B+
E'!"@6#IK,DeYAqYX!eLc&8&ad(HG*#,'iRI3"aP`mE-B%Hq,hH@jr2c1+"Cr(iG
8B+8I+%dd"8PYUReF9be#!m,JfY["V1D'5%05L[MAJN(1RM"kE'T*Nk&kH0mJ
[T5d&)VLkbJ@&(3"[`Lr[qY9kG2)8XVN2aKNcG8YAjfiCj-MJ6l%-41DD$LJe'q8
JR220#)"&00Cp0qeD&"hN(#qVH0c3,JA)Q0JqC*PpC)K0@FNF0YLHNaC`)62Y1cC
'9f!!8d&52MS5-La@P!qf"m*bCrXD9L"Uc@#lX"@Gd3,P-!lh"ICI3#!I1SZPfR3
ALRfRK@)IXj!!mf-A`Y4$0`pc(%XkI[Va!`)0QF96C%!fVi!4Y"CETm-!fJqcC+[
B6`Ne1Hjd**RN*#YMUTNDlR6mp$Hd53aZ5,D6bB+4rU)cM2"M#+a26DSM%bFkUf-
-Gc)RJeI`)BDDm5'+qa$8el+YEmTEh`4,4'5P$J#N''8L!1bNP+d)&#jiRd`KP"d
&F#5Ci-L8K-%ib8a+2`eeI,pJ%)(2C3i!kbJT2r0GM,$%J)Q5+'V"i[3dAD-DQ6%
BH)2CM8`Sb!S1P3(C%i)6YE&*MeGeNi%kZ2GK'bFc+3XLiK+LZMSB!e)J4Zf')!d
2@5K#K5)9'08*(V5$",F`!@ES8Uja'$$EF,4`+DeYYATA%b)bB)a,b6V,a)&m$1L
LLk@*fi1V%c+b4U$P!Rk1imGS[#TRRf*jB$Id[Y9"0T9Q0K8,#`$l'FJq5LMhkU$
a`VK,jY)LBpfib"DpL+h1FG&4IIhUS1M403+6#DTa6"d86rYHiKU$H[!L-p`e5mh
!R$GGA+0YX-*"Q)a4bbj,SA0P501X#CNd834rIKEmEG&SV-%"[c9aCY5J#XBSA)h
B,`0!Dk31$Ti-1C[4LC-km6Z#d%fXNj9#*h@#5@X+1ISfZEqEe[PKmQac1lc9iB`
18$D&9Bb!Ua-,,VDKq5LL*qMM8ibhH#Kq,I,elj0'ia#U-55&S`l"T!HN!`%N$R4
+lZ[YdC@r6jj&9Y@*4MC+jVB-YNZ*41D#8l"lZU$8-m!ZUIA$G"h'[Lch-)'V#b5
N3,544aje*(Q4Y2N#K!D49GU"1dr#f33,GXhL&$61*h8pbKQ+2&rd-!@pdZf&LQj
fHhZ++2$%-#Z1Cca*!HkUQ*83#C!!LdN5$eaSal)RJ$+XFLq5JY),T(kG0mdqH$V
R,34-VkEkEkUQ&krfrrPrm555aKbUDcfC!TpMbLS3h5L**G3kr*Mad`Jb(*!!K93
DBiZq&98@iZaP-TT`550m-J4[3&ELS`3U)JaTTbSNbI68hA"!Rch@6T8-k"!P96Y
E(165N8SQHhJcZk%BF[9akCTiGrjG!Ip0Z",1R%cZp`GhAJj4K4$@hCF'%X3m#`$
&q53"I-EDMed@$hj`!KQb3cciA$UUBjc!P*Veb3qKR#(U"%rb6VhQ`f$Q,DLX(E+
J3,P4l4!8q2"IMrp@U16e-)hkHBH4'K%d&#R#p@Z!-`$)ar*J,ZfiP'CXGKf&3HF
STdBVITcikB#JSa-ZpRrlmFPSK#%Fik)0!E2[H-CpQa['rZ28cTp*Nk3T)[#TaK4
M`J6&GL`C4P8L)0EF4`#(KkHBD4PH4rC1ee'90SqjV[l[EfUabSGZ4%j9Ze4lCrd
J1I`jBBD,85HiRX+2Mc(l6jIlY,UJN!-AABLkAH#UMkl5P6X[rba6kdSV"4jDQe1
df4B*4A'NVej6CNi'H[9jUTmCQ[D$F$6@UJNAL(LHm&Uphi34T*AIe&b*%L%CBiD
)j9cc9c#!418XEDJb16jqF%a'NYlR0Jm-p+M#3X)2I-##M@iY8#fGk0KX'de23hD
i-(5)hi$+H50eL*p&iJdX[jq@pUqL6rhENVN)b2XL(-lq1JqLLQ!ZfNmZBT4P"A1
4Ipi&#Y$#3)%f-SAe"MPP!+6&,c"P99hMb'J@U)X(@9E,B9RY%LI6EbQbd(l+3Zq
96"l,%!k+MP[1V)f8BD'q(VbUm5CJ5Vb"kMLQL`XQp&M6+B[4$ijK)UU!0&-5@',
36JLCr(Am(ZLp-#!C1mAqp(hfl#-C6*!!TIT,+ET6AlpK&MHaj83Sbf1b3F8R0e)
34TP+Je$+c#a)p!(00q1cNAfQ@!$TS`$b0U%E-T8Ej1Z5d5A@2bB4Cdi`aE@@Lkp
&GrKTC1EDJb%bCAG3YS#3!%lCmEE"CqQ6-ND-8e@-JQ$94K*6N5Uhj)ib%,eIZ8#
'Qp4cjf43eN'JM!QY+5!MPdTfh+U*d&GG&@jcFfQD"1aPK'pB4[KJ9S+B'D*l`ak
JmZrD%DEjj`@%U@Nl3b4b!&bYq1Rp*MN#A%"hb+M@V2RR+9!"HPR0KJ(NLL&8%Q*
P`SEVZSK9a8B*XG)@6eSI-fNS%$k`B-)l-8NdTEQPN39-C!L0q!M9H5hXcdri%kc
kbPFYh2UTk0mFP-3jR`9[F9N%e8AA$5IlIamhb)(L-!*&!cUZKp#TjBHVVR"EFB"
%p&apf"%![Nr6Z0@1+S)NeRmIL5q$131Kq)GJp$pb9@q1TU,Lf,%l44&9V9BpAaB
ZC#,h[AU0PaKp44aVUY*+[+"A@G+J1(Eece@k56kK`L)#c98p23U#&!kBC6U*5U$
mQ**4P1P244SmNMX("CZhfX9N$S5"YR-Krm0&BK,$9fF%-lH,56,"GX$K)f",Y3P
Ab2dMP"6%mH1["%4XEE0h6Z!l*!I2Ya!mmkNf*962&+aK%%YRlQqBdmG,GU1p$QS
`[mB#BiS"4V++$i[f4k%)fddY,3fe$4,5XJL"D-YNJ#Td-Sr!*-ca84c#4+fP4(Q
T0hqibUM"j5L*1U(+E@C9-k%J,hNlM-j3)801,I*qAb*[-NHB5R6)J,NZ358Rjc5
0'3[mD[d[lk*J(BHqjT&#FVFN*qHEk['-4pm"m5&BTq5XCLLdH`#NZq(qNE&pErK
!Z,!d$F(#)+(1Z,aH-0b-r'JL('U0,H0G(CS4)0!@Cp!!"e5J4K2&q#2N2,43M$p
*M@&b*!*L0!bRScjXf)3!5&*6)%jTKf+kr8`,CCfN,4*3E&%!mQ+aPY36USV`PlN
TDfND43M($J*q965a$DM!m*Fe-GTJdYT`%efeS[Z5KPT8Di"6a)2Gj#i0%TM'+PM
1Cp9G&A*jN3HbMMPHNq[kGZNLR#!qK-+h'D"Q-aac-#bqD!41,1i%R*e'[fpaElK
*UZ4FZ31UJM#2QDdf!%L*j#Mb)9M1K0C(EUSMM0R(kZ"31PIXeKK'1BbR!e)'4e8
@()CPYk@A0M9''FMFKSAR-K!h&j1%!`LBPMR#IDG32A%Hkfc)0K$`'@$b*b"l*LL
USXd#3f[1VLPQjhcZa8r3dTI6#k5IZTBh&J5c*Z+i5`epX6L*!VC0T3-A$rM5@GB
D&8q&E5)C0`FC%#E9S48L8#)4Rq25$De,5E&E[J66#&6B1"N9YaA6SH%$!IUf%EL
8C2beSUZbSR)b5"E')meK6S6+JZKXC#*8#Gc1UCSY%2aX'RC@a`KRi)Vl,a1*EYd
%F$SJ%qN08NmeQY-)@Q3b6HTrj#dL0G,B1Cj3+CSfX8Y"3fmUcKb!28m@eR&'SZI
F@f!Nb!ie-qFQ(#bU+%,Yh$SA9l1*3)N-$Eh%K+eRPd#@D`bp)P1f`UHQQ*Y`@$5
"BcRdUZB(Jh3!G@T"-*1Kp!aTmJC5,!"5f5FCdQdNq,IX%T@HN`FKpRHe(1bep,&
$l,164pB,FJC!"PQhT!aJJ`"6cL$V2LF"*NASE+KVaG41rc`dCL#eLb&`EC8K-b0
pdc8#6c"i2)M+AC4Y!Udi$$GMfh4hm*-VEDK#"GI*eF3X'#U+!KhM,pT'f8A1Lid
@aY*qPZhQ%[-DDR@bh@BbRl"XYdRU"0QZ[+ip"(&-S*X4KE"``V(`@ELrcQ-NF31
A5ijRV,eG)JNSda**fXMX68kB)-S,M*!!Nib3!(YB99Dk'U2MTi0F1hAFC4-l3"Z
CLShq%5*mCKKHqcNa@5,ZYEPfiPll0K(hYMT$9"HpJ1XJFqbjb4%Jce,IPS2N$TU
fkpH%,2aecK!clN(J(%@52h98I4[N"*'0#FBqRV1I*I#0L+bM#h`,G34PX`AZ-m(
RV1VEdR%1Y8YGF1p0pBS+GaabVmP0N4%M+eA(MFB6JMR&B4,bM%GF0MB153DKEN*
jX1%SkkC3'Q,!3"GJK-Q"SHKa'$,-bif5L"4S2&6Ml'PGPFYI@"fdp3D8'E0JpR`
C64&,AC+(d`28qT)Y!T5iQ8eP,V*Z23+mT)L&*Vd*Y2PYBTp*arQ[FdKbLp*9A$&
F&lVYE8MQ[Xi302Q6%'Jb'0J9@+LMKAEePG#)&SF#HcVYiJQ!KD#J*!feJm9(+)Z
bbk1Kf2-Y-DZpd)@2ZG3rkA9-d`Nb3(!qm``&&rHAdl%`31e3VZ`ZMHlC!P(S6Z[
@GjU@CkPTN8&l%USL22[*8Hjbc`+i,+mjbR[G`d"-CZZIRQ,8RRBcQlCFU)$@0$$
T$R,f*&-Zd"&(BN20K1UC,c,bGL*"1X"*(A68-#M-,*0-"A"89@L+4TVSVl3(T61
Jj"6MY3Ja`D6PeXR-P%3)DfbMb(!N,Za1e3br%kXCRR,)-[c1)3L4KUG)b!l!53C
[Y)eH![%FkN0Llr!8&&050Ic1m3a0UGi2a6q*K%SN&*!!qiG$2,'B1T!!0aUNLKZ
N2+bF$$4N)GaE5D!hhp&923%IqX'@*QbCLkSJ!)a8Z30CS)-08V3"-'!B9F22$Xr
!DpC`aL&d0[`XASZ(CqRYcT!!9*'241VpkEZFcVpkGlm6),kCA,8,JNb-S15rZh1
aAShGE6IH%P2X3ejf'1S*@+6C+0B-2jYr"UpCqE1iC-j'`V+cc($,f+-KBh#(`h#
lNA9'L#39dd$+c3!cS+T5P,pHEVb2aNET`d0QZid8k-!P$G@PpC%TjQY`UT-lSBU
JSRd"fAA3+5II*1Gk54PL%CAb!J'G"3k2S&,[15b#VPU-,4UUa[f9J3[)$aNC*K,
kd`I#BSkMF+,8l&bR-iLB*RST6GH9NCcX3"Ul586$b@%0UL+F!e44IEk6P)63FC(
!ZSeYD'@Z%fL)YLj[f%S!AVSia@`GLF)eYX4+4RB3S`B1LNN#kpmrNV)5m$Yd+Kr
A*VAV1Qf5Bb)j+F*PYK9Ej`N*%#+f`X"*Kb3PQ5k4dfkVpM%$$*qJ*Af&e%4J-(#
mc&dL@Ykk%MVh*LcMe,cR&brZJPU!jZ5-lGQS"S'QTM'RL6Xa+)eGYC5)QP9)FJb
2ZEYh8P5$"JZP'qK`[+9Taj*X1k+3!,dG&paH3X1)B+%`Q-E!&2fe9%jXaH2l*JD
T)XGM2`AU!FFD-HF[2C*""f!S6caJf@1)@RV$15YkH,-%2('BSi'c0rN)2l$)lIA
P3,'0TNLaE4aU)DFf(&,Md1ZAQjqFQ4GNdDrpS6#B)%-0UL`d0MFA"e0jTDpBcTA
fkUQS&-h1k@5i&A0JF#'P[fX%3%Jf+HP@S28+JB9SU8NR4YE!A!,"q$A4%Y230"c
$'mSddFI9)8+9M8Rf-8)Ib#"9`p-SBf8[T!QFaJ3)f8YC(*2ibM'*Vh3QmCA@*,k
L5F6b5[Fj*P%[6m)L6m*%k%"k'ZXiNZ,L9kDiP!R3KI+0B(-TUM"m04EIA'L2MUP
)H%T+F)eD4k@NE`5Yek9)Hj%AL(`!5hHcTD-lAp9eTQqS*BG8)$UQUpa`d3FMl)V
b@'Q-(e%Y,ZX%qfH1eZGjVFp5VFrV@TqAY$l2kRbQAc5SmJ&SUSTGAfYi5J!Pj5#
pZ##F-+p-[B4#VPk#![X550r6(I6Z$AXQR-`,iPJhhpkM*0BHI@ENdB6B0[,DPYa
Bfchl#S2Vi$L%M5I$d3P&f%J([rMfA"j9%PZqq-Rjl3P4ZHTm1$HXA$E4JF8ZEKd
@6EK3"#HDBRBKl[i3&q*+`LIUrl)Y)8DZ,&ZF@afj[2,*bRh"lIY%"GZ,XAd[ffj
b$f1l58PmqYph,&UG%$dhNaYckcbA@jmXfahF"N&dGc"XmLE#%IQ#aYf&#aSPmEX
VbljFPa#M6DmpRTZ+h[2+hZ$UNeT62-'GlZhBl&35"rDmAlIe8p&df,NSefc#d,p
m1IKSNGM'*YSQ6l6C[3AEQj9%VU&l"C[S-ME4PI*%[h"-G!qld1(q("FkP-6blKq
UE+**0Y&@RBRZF8a8G(ZaA935I`T1ANF6C5ch-*E[*CDcD8EPl6lhHQch+BPAHZr
rNJk)-Ee0BMSFXZCZT8T$32hCK0'3!*NIFkr$aCL5F,XIb'G6AXDQ[**0Q5ke-ID
h6F!(Ze,YhS3Ve8TLek@edfMDl!!8q3$fd!(!*$8A"b"0fq!Za`@$NRLSCf9iL3H
`ah%!4pc6XIN)@$6jrlaaQcaN0K8d(*-T3GAj%P)VZP%K#3H#TR`N3qk*k'")56c
lXlkA'4Z@-6B)4l))&h%SCXk1"Gf`Df2Z0EJfTL41IajrD`N(B`)$&'NlUPiY9K*
c1Tql`BlNG6U5Hk8M8GMK&E00@j5%Gr5cdG[NJ9lp"TY#bH@RD5$La3h$-P((kIK
`BC155*fprLef!!2X!1VC!45bJij2#)TYhZ*J!UDMc8V`[KPIc0SH"100M2&1QI&
aaXSiX4*GEPF5UaXdrmBBrMSar&k*i4)*HqK`X'fGN[$h1JpZq&5-Xd('T5'#bI2
A8[%F%8E!3-(NEYFSLAA22jjJV"eJV+fATl5)"(AXk1GM%%9XHjH5H1bf*bBbPTS
B5jf-TB@%e-N68qJ+QpTk*IM@(hj"LSdfBq1-C1-bDbFULCrr9p[Ufq6#3f6@cTF
'cS#,$VM!K@%P-IH2Ilq(TXKB'jGCZdr+3MUXp5V"FpHG#jE!@T1F-58Q6&F5-aq
j,r+IX2C$*6(rRVmYS50PJc3j$[rR-PZ&SrTF5B51qEF58km-J%h%9)P0(JH6LYJ
3bjAJ6q[kGfm,LT%4%eK%$(e"!JIrMDhj#HRJhI0qi'+!XB-!ihdra55+aFKI"F-
+fq*9%R[qcj`%1r3Gl0"VCHEpNfMkF6!FCGY!NPArimpKbZ!8i*N9k`(A!FDiYV$
TXf!i`VEK1*Br1@4Lc(LDQ((j'dqq#(EX%6hr![Db6FJ`cdcEf%YN-0*"`lj2$M4
q%JbhX5dJP&12rXqCM&Nl',0U(4NPMS&lf$B`DXk26aQ*865NkMCVYkZE-8S*acm
6"Jk5R[B[dr@-!8qcJ1%E3X$JB"+1-2E2KppR`qkJBGmR!k-I#dcDV#3f2[rYHBa
XGM#bU4@#J*m)N`GTVER(F&*J89LaAR4GC-2q3ScrLc"XJ)*SiIFM,"-mc6,"0q6
MPBBYX@#pNYLkTZX($+J3Ncchl4YhX19+i['rr1T*P[9fX+aAD`p1(BH,$0Sqj8S
*$C`G@hcFX8P-!R%1[h"q*`2H6c05riDGe)-Rj8'"#A0I#[Fb0V83QaBi#$eB*$-
"Kp*AjriP1lT@GR4*'B!XA%[9A8(U364NCS"FATcpjUrC*&Db55acJ)q&%VRR8CA
GKCp4PGhY5R$q'j0q314qTCDaESF$I#a%ah[YV0Rj`&-rCmaV)HBYF!#1B,(-'"c
@EdcVcpa'Jk)#R&SCf&JS$9F!'f%6PSqbaGG"A(,2h2qr`3X#@-N)B*NGE!6hf%R
lC2'rE@#-V'@-h,%%4L,$(FXpR2BG'BQ$bkjqI20i4JVJJM('`iDf43RqVGVRI"5
!kmT+"Lk@fF'&JbNJmH2aPFqc6&I,3-81'96SXJ8Clrk$Kr0BCQQKc,*!!KB+'li
$%2chVBS2L+5D@M(m1)Ef)TY!9'F#)+QkYEIrQ&M"'+E)$#YL*,"(*J#3!2QpHfr
l,E'#(@P82Y)pIrRYAmrNdGr2j2'e-lQTrrHD%PfeL)N(ZAiC'HUh*#B%$4j,(e4
PleZ*+0HdA&hQ6E`92-)PXkb-iYiq`QqLRSfNG!QZVdc9@(BQq-LZ*hHG@c#FrFG
2M8NamQ3Kqr#++cB9APef*'UGN!$bTqGGcaY1d#)q3c9rFRGad*H(!G6HAM3K@+f
'$4emdbkIje,HF&$HN!$i`qk6Cm+HmaLH@Gj`1EQQb,l"kR+jD%XkYX3Z#PeBG,V
30rpKeXPApGHZ,V[m0+iQ`L[Zfj9AAXdR"(f*UmYmRK`-+@`0Ijh*KB3rl#SkJqh
eE$Y+`485#""4NXp$d`Kr[Gk4K%9Q&Th*13N&VpHKN!"TURMf1Ke9MKPJ**@@YdM
''&@463[ii)@kVP1b%[qDV#UK#T8BY%H`5P3ppJK8Sp,j6%bfIlbRLb[PLchMKb#
ZY#YJ'UqidUkLdDHJb1(M0A[dHlSJ,kN*fJdHl4T5i[T!0+N9Kp@`jh,lTTN6pTJ
pMrcQj83-&AYZUZ%SSNl@44rjkHl%&5j'YK3L!hC3"K4Ibbr@Ar-@Aea`eq'8`F6
eem,4cEXQ"#mZH2I`h[)1(Skk,PS[8X3AFX6PCR5'L(pL%E&)q,A2LUQ$pBM3l@$
9Z!iQbK(5pIHPkfhQ5&hd*bFYh3E&I[KZSaKjZ$!FZGa1)#Ie+48!%fjM(`Q)Yqf
1MDD'@NPm2Tc0R&5#iURmpIZ9e0DIV0mj,h@hMKRYBlD'rk+pe6dL&0()UQKQZ8G
J42(@A&(I2"GbPp4FfIAL,qjKaN&'H%p81)&1`lRmHec&Dalhir8%pq!e(a@1XYc
,H35[E+lJjHCY6H5FRM5DBkMFEi4c$+V5r5Lr`r@k$U#)CdC4lAq6C14EVM6"+'"
E%EJ$6TqVj1&!B+06V#1-EKS#4mb`b!a-*ZE8#`02a6j@,EBqP'bRiUK[353f'qD
&J45()d1FLJf!SmeK1)2i*C+#!(LH2!`c4&QS`%`*+NGaK2)Q0lPUmJpiS'0S1[G
M1Eqme'@f"%ba@-3!Sqpm@dhCUP!V&8V,0GK)cVIc$@14CE013$KYGL`8$aJJbT`
IDQ(&ei+a*#KeKH!)AM[V6LD-+VI9I"Q!beRZ3633-8RRqZZ"4REG*ea['02rqFi
l5B5%,JDS#dUB@B@,*ea5"dDG$TT#'Th2ma"*CGLR$@2@#hVqI$KP*5GjFT0U'-X
j9jU$U96-A#l#JF4GJ8e"`B%UeDjGVB!0,9eb(dDK,b98Y+cf3!ep%(LY%)CU6la
cCqC1FY,$8R2'683M(ZaEm'A!`LSV[0lhCB!FJb(JfDdcNICM0pRL0JamNID5k()
4ZR61ZT1FSNf90&$hSXcQMf&r)a(8c)R'1J!kX)pelplIDX'(&(84JePC#C+(i9V
D6%X(1R51I4icpPC01cVcTq`9FePF16*"4Pd0r"D)Q3b1Pf'`2TmpK`43fI0c,j-
40IG1L"Cj+aD#J`k*a$f#@AKrf))SjS,2%56bPG2jhh%jJMB@"'mm5ZbKEL3hPf`
-*(Z1I5#jcp1V!B-'EFdde%c,Y(TcJYG3U-5d,,LfSCRl"SE1FiZTH&FdpX&GC(4
$&6D1`$AN"ZYN#MlHbS@J%81qNa9pHaP&,%"mcC`e&ZGH4Y9p(lN*X+"+4p3fma8
L4jC*,T!!)&U0Np$6lCjjaAFhK$eh8P(0!J1&E%141+CjC2V'%G@c)aTMepZdVcX
ZPmLLdi8cIbT&iS",'QUQ@9RNbfMf8b@$QEq9UXX,EVJkRrl!0MC-!b14H3j#'Z&
ZZ4)p#3qfB%!VD%"-(&[T[YHS)G*J35&9lq0`J8c1,+)LZQHfXf+Ylp4GK-44JZ%
kHkiJ"QUY+EY,)JE8MDJU4h'2QKKcaE*A!mN$Z*P+LEDBqNE)K3hIP3ApJp)9&(l
F4%e8qaVT@j3p&dEpV1bj&'8pSFk'UqjZkI$dDMU",JXPfEX*G-"Tb!4R8K5!M#`
H[*3QEiHieTpLMMNif)"'Y-(&L3Y60AC$G$EE1[+dKJL(#V+dNBM-#9I(+**HYRH
L2La%SM-0%E)NP("cUY,2VTFp'"D'+hAh[E2-f6)P68ZG68[$UGU-V")IYr8)#L'
c6l@B"'U"LHq0-CZZ-MG-$8@Y4'C9haLK3QVU'$08L4Q)D(%`[eQ(q5D"U8BUfIm
pXj5[HDmXRIr1al'8praR,,@6%KAhY'Qa0'Nq)M'PJG`1T1T!9+K3aT29,!KY$A@
bcV!CP4*Rka8m*%#A04V(Y&6GD@Qd#RE4+5"&e#iJ"3@mY+$3#[06NK[hJ0%RLr!
JNUQB$0*d#K(AX"A$QNaSK,h3h-kKX6(60N1h'(qq%iA5G*!!L,TK,2h1RCG*E$Y
c8USpeBp-e1G,Ee)2-N5V#Uc5,b-a*cRMNL[APU!aUQNjl5A69`ZU4NV1[A#8mSh
I8JHeahYb-QmG&VE"M6mLZrNZqlJ,kh3[a$@4ZcP&5F2*j1l,KrVc'm9qN!$d48a
KN!#DrM`dEhedKGIQAcK%KF5lmdGC`KNNp&,6FaZD9QT'R'MfBr2IjkI6jPTh[S8
Pq*!!F*kDbNidVe1cl9Ndcf*cIIi0fVc#REqI*Fa!`JPUaZp(-j1Db5%dp@`3Pq9
"0,%%+a*Z8V0f&jU(U@PDK@BHflaAhP`i[Y#L'&0KSY1Y9C9h`-f[TR`,41KkJ0K
h*AF29e9"Xp(LUbVIBLXqCNY&#D9`bbL&fhh)9K!le&G3M@e(2UV+heFJZXS+U0L
8Q[+*eUS#%Z"p5"d4D8F8fbLFdj8rrRab8GD-Dc8&c9LiJL*$9*!!d$kY)SGNj*L
+VN2"*k4-1%@AU!NlBCjCQCp)*DJ`mh!eKb%L$&&-IZ,E&b(f@qPEm3p"(p5,r,`
`9'8iIHD&NJr[jRP%#8Er`lY465@UKB6,eBeN4FkmP'Kb3&+1Pbb1*"Df0C[P)[C
ZmXXmG5$R&I'!+cHUi!I9N!$$Tm)*8E8%hk3L8Y3FDX4&p6`e6+*D5Jf0U&kRKP0
8,e'M@85KZfKd`&eI6%qB%J4bUMkNcUTA!K!F+H9GHpF%rAQ%H)3rUqEIhP[0,5F
c))5QLJqPZbc#T5la!&8YlIppmfElJ*I4B*P`$32Aq+UMrPKe9)%MGD(4E-Q6ZUf
$XVhZT,qB2US0rIbYNrM"-ULmZ*F+SLA&r,2A8!&b$eam9lhNL[TIkSdU-%JX&"B
#'H3*i)#"j"2m1RZ%a9QiL#+4I9KXe%c5KN-RZ,%JMjMF8)1V'Ab-`$hF$pc'kTU
UJMak%!F5BfSpE8H$($dQ(aSYb%ZRSLlFe#4$Yk0J(Jmp&-8)4H"q,p$eRDMqk!B
`ISH@RjBH8QD89Fl*K--aG8I&l6$"2DXmZ,UXFTkmM3Uk!2$j,6kB-j+(N8T014j
4mZi&jM+QB82XYRFNZ)&386lBGU+V+$f09IPEM'U*8VHYV,JI#FM6TPjD)$h0rU!
#ZpY*%abJe21k8kCLL)"d`3A9h5+a#-9rl,FAAa36#M!5U4!NlDZXB*mTUdGCF*e
K+QD9-+N$(jcR"bNi(18"[k9[kDX!q,YeXkI%8U$E+186KaA'BcI)26C1$iLJ3Xi
+pY$Vbjfd4D[#hiMDMf#`PcRE+dcT8jM5Pd+%8eCb@UKB+YP3BUB(FNKS2!,[qRm
S8A&i2JX#YqRD4Ah*MkdS+bMFQF+3!'+fQ[,+N!"'LVjDdj8!J43D69,%T5"p#Sr
cD2$!M@RX#A,Gf#+jqH8D@pX$[@""-4i4FP0-KqM,$dAl"&HJ-*VC3cDbT5+d-MZ
T%RSMZ54+%I9`aeEF@fT`fEfa58A!3fJh31U$VjDQf3qB-C!!51FmR(6L,$2d%d*
K)-9!FTp#88EdD6aL)-+2@kZq$)#-+UJa$Qe()-p28L![-CfZbBMV1X(CJ+SmTb5
Aq`&@8E"P+C*YPCbdMCfX5Q6c8KYDT!d-ZB&bqH"q9dh"bb#TXSSCK2UJQ&88*d*
9[`PKb9i(8$N%8J@3!-B2)BfPK-j',K%4hVqAULb'dUNS,Pe#X`A6di6#'&iI,AK
C318#lkecDZEKK`9HJAkU6SXX#a@C+V-eM0fiq6-4b4T$1bY8mbB,H0j6ep&R'G2
`U#YXJ1ZYGB43aC)H@JJ)E+H`&*c0r$MZ&#iQj@@F1@QX5QEQ4k19k`mGpHm[b-A
,@2"-3p)9BNN2AH050AZTi5Q5'bIPK%`dlU*+d`e`LfM`8+ASD+GqP++3!*%l3mU
KSjl$"Fm35F'"YKEU&$+!kGP,DB`0*PC9%81UZ!0'MTV+,UT)icmK&&%6DQ3AUq%
'[M44JCN9Hc'CSp39(0S8LF!D)M4j+R,[`5Z-@&#TPR@$!NFP"V'PPm5@U-5@qGN
5@p6V%PY8#l&&28jX)A*ML8p*$&!IN!!CNLFhLZ@%khM%&J0lb#crC@H1aimU),V
-Z9R`$!e9Tr*Z8MK!Z$jUXDe@$c3jSR1d5f5IH[lrKRf-EF3JlZpRB+"&(RTCa6Z
%3K1$RX$$LU$1D5KlhAp#!S@58bJ+JhN@"3[-3K@2BA+Q&0`S@C%+CLJSX`PT%!S
Sm814GNqhe46m&*-jJXC[3QBiHpDa5KV63Q&E6H8I3q'i'Ie2$lAiXl,G%)KNj@q
'+)CHdib+&'PRAZJ)-QdMIXbBL*PPr$#D4f+N[Rq)Rmma(400jm%BZ8BrH)Y9IBU
%1Z9L[9VC8#r)3md4KPTc9'eeEmHVaEfCPU[Qhk@J`6-GKEc4Jl43V-C9U!EXJ9V
i#1"MFhSDX8&`h'3,$++3!01DbM@K1TTd`2G*ErEQQVlXKj'e(fG!Da+3!)Xcq%3
R!e-Sq$E@1pJr5kV1%@T&9fdSA+"H)'"Fa11`j#)(EX+!e51lJ[F3J++L4(TbiD6
-*F4JeAN*-3LN`qc8``aHYh"N&jM**SD&RN%P4c-9ZXfUkTpbhk)21!eCQF0jMe#
G(j-VaH4LqYJ8)p[q*L[5E4!UCXd[IK5Uab#Jf$eS`8mK1A5[-fJMpKdLLJ6Z!2!
2dm-q'"%Y$-8r3P(BPHr$b&99q6j3pKjA6H8MHT-A$ZBS$&,D#%83@GVedERm&RX
8+VQF3l4"8Th90dKTXY+$@5*@Ve!i&iiXMSB&D0EE#0C%)!LS9!q&#aA5@kR+VX-
Bd1jK'q*535!S%*%91'*0[aE"!H8+!3pBF3DXG"VlPqk10VA(B&BiSIl`hpFGbl*
a@bp6bBp+DLiMlXL0@ilU[&B8DfP#bGEi!FXk#hU3!2RAdi1P!'b@!Gh8r,DX)"F
"FkFBTkDa9GjQMb+&TJ8SNe!4I"Xj8ir*4I2L@1SKU+1RIV6rBa41V1fXBN'55*3
e)pG3*-1b9aNT$F!%r#TF&,GCAV&[Jh%HKPT%E#1NJ"N(YSed6KjPSMXiPlSh&b!
`24Ep2Kkp`T)hJjJf`b4TjLV-P(+N*8M4'mM&p*68#3V8NShqRXIBil1U+AU$Q6f
B6aLBR`dXLFH-k*P4F6-053pJB(HFAZi5"*+B0#NDpH-$qp3S+L-"K5#h9jKl-JA
$#YKLjZhCQ96X*+T6S#N&,K%E-QiQ)4i8c-X!QU[EBJ!G"$L@f`3JZ(ba,J"F2PF
AM!,YL"2i@ciRi(M8e[*l#63'8(eRqEhM0TYNa"Tj31I#4Mak5`CMbfF,Lp(`'YU
)3GN$c%#6$#8PN!!2"1*P!"1PSBdfJ@&k6+&eX2dLTShU2-rL36Qc82#H&N#RB1"
hkjLkc+2T&c'TmF$GKZ''&$CdK9@5R)DSM5%R0XpH#V`Hd(&`Tki25eeljMJ+8JQ
k+V1PLKGCf5H@"0MqkE!-f(*Xf"SkMJX$Rh4RYa*JbqBbB'X8FCd!Qc5jl!'+U%R
2&JQiCCq3!)"EYUrQ3,B"@lJ%h($P6ASJfp`YmV#-))ar(N)32elj5A'QA2b'5))
UC(X'M5C"`F0R6%ZjHeaAZ9[q-FVGFSGbCrB`9fSff4rIS+N5UqEQ5)2bVaq(%#F
PjHh(K8Y3m*`05EYkpq1!T0k09kT5R"(EL0EQ@p3CKZX#%M+UMBMDHJPmX@*&4kN
`2l[+CaC82[2"AT!!ef@T5'8'5L#bF1Y"HP5%5ZCZC$I+FK3N``aDBGSM&m+cM`V
l"3#)#)Jh'FSGT!Q#G3prFJ@J6iXm(l`PX8BY)-)e3`dL-N0ampYVXTEET'!m*3I
M-ac"H1d,pQ#mGT)8M#q4[%%#)B9RS@L,k4p2f%YR!PdbVjJX$a'&e3!Ck&lq6-f
"jFm5D5,M2S1#DNHRQ+Pk#"K1+1),3*R,#Xk%cK+5J!Gf2Ml%8@acP,QL$pf+IZZ
F`a%JIU`q[Bq#2VQUH)@pUQ*Q28"ce*iNGaD$1H3-N689h&8`0G5+i4c(F0+aB5S
'F"bE"U"Ui'&C@LD*6)PXaCV+H5K8,j119MT5Q0*Id$eXN!!A+LrjXl32r9qcG3i
paY"02RqlEL%mXR)APdeJXS#@N!$0GP51&d4J+0UBLXXHmfaKMl2X6cY`$4rdL0A
3%4,b8!C#&LkVZ1Qc-Q&2cE4H5BK$)KBB&+4,(VTb+5f`AUIBRK+U$!jbRi5Ib8"
,lS!3DZHKU[)ejF2Xj8A3'XrIKq$d(6*%ZUV+YQ2EH9GCf9aA@@@@EX!F'[K@m!%
Ud[$iGqPe(LMdK"43!*e!2JT3Yqf+@ZF4)mphSJT&R!TPIrJNURVc(j9NENa9PAI
9MG((&6,Flij&-SU1q@-HQ%Dl'k,#`9"eLkMPh),+l[6GkE[CSdNclMPX'%$&ccR
A8%9kSFJ)lmE8BKZ3!!#'CMm5kY$$I4+94@S+HUcHVQ+MAi`fX%,LYXa16b0$+BN
%'k3L8$,4SCNC6c-L3i3#f)VS5&$X$CMcc8pleG1ISJ"$2*J&9G)J!iHiPB65mmJ
`qk15UVJd"D1rcL0e%Te,%kL10%3F8kJTli+Up2,8Np)P@U3U(T-[dS6cAjC-`QA
Vc9'GUGH8VkI(ddiY4S&4qf`RkH)acLF+c'"-Q(HYT[)mTY!LC6mqLl("apM3#6D
FG,!"KC'*#JYJ-*c(pZN`3T%LScGXaF6JBr[2,5KEVlY%'B$*SJrC%YCa#fLcZBd
YJ'%r9Nd,j,r-&QL6)U0qbK6-(B&R6j!!f19jAjUqCaUTr[`CC&'!KrZlU2)ZRiU
-2%NR+#"c6GAhH[!cJTmJIJU2Pmf,$lEMfL6QMM%HN!#IT5jXI9#FV#$H1lT(S3,
IiA#d#!Ddc'G-k**FJR+jeflZ`H0"bdTb2d,@UHc5U9krN!"8!%,!!("bXjMa%i8
G!Z92a89NLUj#@K"%,hd@8D(N&!%J@Z+V4,%LPI5)34DFCBNedp+K-*CNlUqTQTE
ZRUpY0*8Ud&,aCD%@4p@rVDK@K#"p3D[H6DSXIhLF'ICf-Y8#T*9X1%0Zhl63-B9
eAk,9I3P90UTB-b3%VA(D6J%U$C)qk('20+fkFG1LiT!!TTid4URa5l#!R*mfr"a
'Edfi%%9QA5#AJ+aQ4bA+V5Mm#FD$a3%B*Yc'4NC5*PET(KPk8`@1d%2LkD@$C9,
R*G3hkRJ-,#B`R,qJh)Y+aPAPAT!!fKSdKS%B(Q8SP)NCrXJ!2'`T+aqQJXVXMqq
3!!VAecAAc@!(5*-`AR,4kr`5Mb%T-BS+0j+,TCUlT1(Hlk9V3lJQ)e&0+)jj2Ki
A0Gq12%e,chUEC5FRXP04)#TkM(%j5a@PZ1Y&E[S[e04%-6M9H"bfq1dqlJ-)mXX
G4(q*&`SPfXjB0RI*,%[AUKU(JM)b0PjJiLH(L&&(!"@&@e,i%0K5'F$,9(N8!F"
9"!ZDbV-%f,"%q5$-L84`'jr0d6'b5YAAl'"$,PJI$ihBH"L2MEjEYfSH&G(e(BI
3Q,+P[j,qLQ%&G69Bac8SC!F2m%EYE*%p"!(&k["UpJJ%UM+-3FP$JJ&3YbSH4-R
0J4C'B%l'j(TC!)9LKKlH$9C4&bdXi"f3!*L6SLTZT"5TG"A#eRhf+pN6+-KXBZT
'3ar[P0dp"SLB`1JQ+2#Q$3!iHNeA@F(Ep1"9f8b1#L-lklicN!#DqEm1h9h`0J+
SCdV6fUZqh)QLUkMcZ!4FQNQjSdI@-P!a1)!L"d[)3Fde@mV3"ER(VN*XNqXZ-4i
9#2ED!#29@KPFa+rem5%!JeNb`5jF-X&+K)VY9paEFH%Q%I#4A$ik##)@`!LTh'Z
p'fBl8(XCC&A"8HDD4bJFBdQ!4!F%$-!S8%pJB)[a@Lqr"F"9,fdVb0d`'e&$XS-
E3iNi"c(@9jB5HP*j#4r*bLBFaSf,#!S*44B1I1PY(`'9ARUM[6)ZNHQN0h801H4
)"k'*3Z*)U+%['ee!`j+5HeHG*qET[c*+KCPdLcCpGpI*56kTQMeB6++G9RehIa4
8DYNJ9550klY*bGF&@+5F-E'q[A#[EJ%N0AL!8Xp&i'$LQbCpLm#T[iJH(bekj++
6&9j%*95XaH$S`8G5pZ-kI`!!-BP"4%05!`"B)Jp9$@C'%4!KiqjKrffrPUVdjZq
k[VQHj['jVUYkUVCk3I0%GP)h"Zc+!VeZ*V1cb*r(e[+3!)lVQlQ&%-)9lHHA(A$
+M)K1McJA$K0VN[%mkf3HYa"Hcm*kK("k!b1%j9Q(dB#"*YfNQhdc(Z[[hprrph8
G),ql*1mP,cm!&AGH*2-J-L)5)I%!%5)'AfQ8b9J-2l+[@3!T*JH`53LLfHa"i#5
ck(`cjm!X45b9i([crVa[`JMq[V-JiceF[Df@)BpSp%MVd%H'hQjSN41h`i@+@1a
h[f$&Jf#ZABdf2fF%qp[p&YrALk3442JD9JbN6MH3!%9K)&iB51%-!ZN#AhU#5C`
[TlBL)#cYEj'P1#)j*JkANAHXccRHk"r`$`"XIpJIampPG@Yc(-UL-KU8&YmB6,5
bq+m"RiAj3#`C!5Zi(#CF1TQ%#CX`hId`'d69H*NhHiVrfKEKBKPDTG5!$%j2(29
45hb-LiqS4[c4Mm`iN!"'LkreU%YCp%[*V3#)km6P%)M+Le)eMG$[1h2+mH8@4hH
+BFrJl%9eeaAaJ2ElcScb3+IqJ$CGFY4PHX4PI*b-U2+N#YSR,E*R3iH[@Cd`0&Z
,E%B`h3`31863F4e#V$TIaTKre1E`'mPLE@T*4[d2HjV9@LVqU'hTVQe!MP['E6$
F+L28h`@!)-c,%-6jD(Q)"2+3!,&aX0X,U$%MS%B@+bV3hi'PpQ`2Ja($Rl,"IfM
aP"K"P8$+P(9`DHPL4L%*["4KR"dKR09j[V"mDrGNN!"6&`Lr2m[Gh@pj`QNXKa*
XGHE9(L2CeJl3H,Rbb%APN5L@"[EH(`hfGaNKK`@`lVRE)AARSaqT@N&lr[jN8PR
J&`[1lM+5!YBR!keK!q8`XT!!NaV-d'jVEfchA@'643*4+iVXqU)ldQ"Cm"NjDED
GS',+5A[EL8*q1-I"4$Bb+6&0*DC*-CeFlJ+3!$!C`+8jl,!bD$)'Jrhcqk6UEKR
j#S*%&c-b[1,dG#Ke1KEc*3dUE%#,*j!!bZS"3rU`XA%hUkBDEdjDGjiS,(QAll3
B5`5X-EbPlE3!1UQl+#pVJ*5XI2(2@Y68dNZa1Rr@*8&qZTGe,p5kYDCZ&KC50jS
hML)+'k+EHE'*P21D$-1!!SjZAQKQ*FT"-F(p,,jdd,$dk1*#VM+p`%3"m3BaYG+
dEKZXReALC!46-c'G%00*U4I@ZKH9`UV+SCJqbqU6bA!A#9immV!LH#Q[8b(j@%!
qqfKSpaHcFDKl16c2aI#k4Ge'PBMke0%3Ec#,T!Fpm+Pi`'hqIJd5)55`EI1mPDC
cfbhBG#Z,&iEAEH4cTXI,Pb&Jr1CF6SB&+$LP5GPfJMIQRrH*`Ra)p@Gbd[!NM94
E"iYE$3QiN!!,IK)Ald-PZEJR6A4T9TeKRL+9"-%p!m-"Q!4SCI-"90#ECU*9J#@
2,[5lA+8-LRc[L85"9rf*LKQGSI)+&l05U2aK6"5U4kr+a85PhD2,El6!k('jU@Z
ZJ03'#m%EQ)UJ'$BT3Uj%p9Ya"+TIb+YBA-MrdUS[6kXiT6@qXP1TqQ)k4+dR"KM
QHB89"BS#SQ6SZ6C$fjfjdqIRT#P8lmkj`2K(ZpXTq'&Qk&i'#3FPm+NbPT!!!Y+
iZrJl2*SIL6Ca!"DqlY@BHA)ZcF@h"EQir1FmpNZ4palfC#j&m90a+BJIPhVY+JV
QQBf6)9)V%&IXDpLd2529hQ0I9Cp@AUdmpPAP#Z@9FHbVVlU99b(DfU111kN1hU)
[h)"!kPpNc'YS3p8`+5q'`ZaFf-)JXMPC1QjVl*JZ,@LllaY6!,TX@cX,ph,[aUV
'hSe9qVY3r9YTbZB$#!fQr-Vm)N3i[*'&bmUF!1-FJFF$V&Bp)fV494DD0KNJXX6
L6+'UGhRE"DQqGV$Akej4AZF2p[UVQj6AhQ0H!i,G[+#m$"'lm5Jc&ZQ90d@Lce&
`&8DPfG8Ll622JS!SKj-3bTPF$V)MR+3M`QH!l3!6%i4qi10$Q'5C98lCPKLNpi4
P1l3DAQ)#HQm%p46HS,X%TE0F"CIa,MV!IF"8k"M'90riC(M5$R,pVQ`peI$eam8
'%Xi5+d!i6CLdACJH&QY&8A6R(%afQ6'2EV3LqklNm0q'5S5j-JLK!9p*Ud*)c)c
dG`!BM(+(-L`U%LSdEFH2qHYl8"(D@dM26reYf+S%IhC+A0G`NXejGT!!m#jYMUl
R`(jTFq4$6+VqF!"*,CK$j-`I$[MXG+b9MQdefYd5,hcSC$8!9'Z0mlhM#,$Y#c+
5&5T1T*P%*l1DiadL4F%*)-IiE`rF&UEfAh')9l`U$X#F5SXe-M!fVC9NCZ0NFRG
KI$leV'#'MLLTKjHCXDlm[rG4E+`SZRZp#%%-mmIiR'U4R+ZXA!M0[45V9XIa`H3
2Yd0cPE&ekU*H&,-&VB804KaHR0aE(mT[Ph-f-+M9dA``&XUAieE9L5jBQ5D'elQ
),FEb*JihZ+!Y4'b*9BUdb[r&ri[m$rk,([0I82P2`hm"r+FIP,8JK@3*lM-XQq&
mp6$q%,43Sl!L#4B8"Ufa)Ir$)F@3!'[qiG""$AN(ThECN!$r#iY14Qi-YbT*ZVS
8$YmZTbYimX2B`VCr1)3(,JlMQ,P)UPh+FMPYm14[B`[@N!!P&X[)iZ6cp@hY)5a
`FPHSkjeLSj%@3&cDaBMUiYZ`T0ZS1T-5CX+h3E!R!-f9@ddYT&SdUG`'9'ZUjDp
KDE'k"HeL5%eHM(+D),BZ9PF4!!X6SS$f[M%JZU(FcQEhL)fG4ca1kP`VUA1jU(2
jU(0GTXiPj3@3!,Y'-2EraYZ%E[YrrHH0ma4qep93D[6rpdXPhFc+)fqD&M`U(NP
d&kpij"&1[Ep`Yb&f#@8YEAYUUbV*&@4b13`M'Ad$2CB6Uf(Zl%6BZ&JQU%"-+Tb
ifLcI3$`Qe3QH4&MaBa+9KFqN"6bFK$AY,I*MGZ#)hJY*KL#X)"ZFS15EBAka&*%
iPJp2dZ&40HU)LeHd*&,mmGle[U5GJ*NiARY*JC[RN!!qY3kQI)P-K"(-T5kPI[C
`f9pqEiQ6ZP5"BlEqKFZaQ)bU5$aq)Bp*b"hKbGbl-VU)!Y``i2%UkAL!$pp&@)Y
N2PibNl2P(+HS[jZA)E"lTSr$[XSMQ2+Y)##dRIHCc6JM%9!'BqmcfFYb1ZJ2Ec&
S[!+&BMIL"(XXJ`XRL%r-9VM*VK5H&#IPf+d6(`rJm$riC,3D$Lar!$NcQ,b"T0P
"S**mR#UMHd(UGN`'Rlm2B-CQh(Y'B4(qLBRia*L%DqG'J2m2ah%%&`8JcchEL-Q
GLS5PI5cf#"GSflQL##Ra-Jk`F13Im1IpV$f94hM&$#djVE!cc,EJcfCB)!l,9IP
-5!QY8m1Kk0+L%06b[H[*BA!p&IJS&IJe-KiiqP%(Nh)[G6FCDDA1"`!#3)-lDbr
qSmBPN!"(ApEHQbqZYLf"S,I0i'#'!#p'ArdF-DMhMA[I46JqE'G`$N"Hf*M""ff
4JB`F$TQJ3laCZb0I(,%Fl*!!UL'(9!dp4*ES'j%[TQqN1$,NN!#k)BI8(A2)'Rd
MmNEk4SUM3`kT(A*)lC!!3p4Kqb"TaBXmA+md2S4&iTPCY(#bHIID(IF"BfE)-1(
fmKj#%AF82e(9J1&T-"$V801TI%ih(4DC6BKXBZpkMh9QU5#hY'qpllchp&+XHYL
1RmVqr+)P0FB'M*!!qMfB6JQF5'r#0-VCh40rpZ(2DX##qcMpa8aNE"rBYd-F*J&
XQB1kfJHMfJj6hSHEl6rQ*"RF+a(ZeS0p@)D`HE@"lKTEXI[0hR00$!IDe'6U&LX
`Ark-"0bh3Xfa!ZRP8'82-fYpib"AC8c#HUHiXrHGafHl1dAZS#ABc)S01(TD9Zj
AYRi0`Cp4R,HGmlf'LkpSj0HpHRIJ`q(+&p8l"(8$-'!V8Gak0e$JKQKU31N-bH(
J[L88R8DG!-(e9jZj%k#)@kp5`R4c`mL$`3k(VQp*Ki&%+TkV!-$Vj'9CQ1Sllja
bqG9HA1leb9!Kp2ap-[AVJpejBS+lFdB#0,J*TI$I#Bj$"d!4I[Dl)+f!EHeiFG+
A*!$Vj&ZRNDBpM344Pc(If,A`$Ak*MMD'45G3"%fimD+`6MMD-dJ1!`MEaVFA)kp
qk3k1c!jRjDZEKSIcXR%*'3Q#hPhqPA''q9hRXr2E,(2G-2-p!"Y1&+CFjh&cB,&
#aNB"QkM0KF$cphPMFpQXh$!`Ubd'a`#401#b#a2k5lml+heEM4!+[&jF%[4eJ0f
E-KYhE`+K,Q?"q1B2'r!"ZAKcGU&B8!PFLKlmN%K*)dX%pX4#J$hAm!BSjc1!
(,R-$1j!!R'#JBV+BXVqlS@["TK4`$AFr1%6a"@VSNCEBLe)kZTCKUp-bPKd8@I9
f(BjPCIfpI(9CNAcVARA*D(!XH&R1M&9A%ANeLi-f'(&e,Il8F)"PR(qN4,*#(r#
1(cNX6CLSL`3%FF1JbjN-p1QQV4Ya'Gqif-a,S0i(),STcbb)Lq'"`FI+PekUVR5
EaJrrH"rFP@&b(13Jr%ZLmlP%%"FV"bM!X'TV6RS+[)"Gd9erkMDpfhQC%3*"i-9
@i5CCP4Tj!&1FBZ%`HGMD*&+IU2ECkMf6J@IN*)'Sbkqc%3)V'D[HbkD0DTD,80*
`!6#`fXHUbjLB6%Ab'J!KE8XR1[q!iX`frVfcXI1a2&MlFEK3`UJpGS+C)Mi1#92
ZZ2%FE`i*`A%PN!!@BBf$#-J)%3iIN4%h%Bq,4$UZ&'mNJR)$iHFj6h(aarJT+Nl
5aklLjIa4GA149eH"&IbTP09ekZ1*$e(k-*,iS0'(UF5(-(fS5(b)d)IF@%$0`+4
EUNY8BbcJMV,)e@C-)c40jCJ"qjeBKQVlUmXFh5D-a&H%&'pC`3%LrlJ4f0)*Sh2
pqVk8LM,G`B9I-0ej-Q8,KE[c(hC-"TRTDqZBP'KD!"AFGK)JDIa8`e1cV'CcdYG
Xa$Qpl@6QF-H2fC9Qqj%hS%Dl5)dfAjBkX`(hQM"[a#2AED)059N,8E5bF[3NDGY
rJkjF,N*d)93)Zib&25AcQY[k3Q*0%pX!L@fFa$D9aNlhNYMk5'ah5@c&*$3(#Hd
Z#8dPNI@UMS5`6LA%0*!!%0$+K'Lb#D%8)"5[)T5HK&$-K&"#3LK1kQD2fZ$!RLN
%qYXhh)*MAlHReD!LmQlFmTI(AiVe([ph8cDpFD3Ha6$[Y2LlI"1T@q`-1bf1q4Y
mNR+YXG&Ki@k2"MVD&5QkXPV+d$NTl`[FL35%"YA!l',BdE(LeZdA+G#*9*IFRP!
J&d!8AkPa2F!49S"q'K-jiG)0KabiVE(+HEk6!@KXFDbkj[3jfcP,5h@Yda+ea'T
M-Gc815dJ0hQGh2#@9#ZTM2M"Z[p3B*TFL-NKM*8D"3Gf1-(AX41mGcZc5iVL#k1
lXA$(5,KK%ZZ-HKQ1mNJYN!$$1MNYF)9H1T@jUN"`)mCj"RF5$k3%)b)l&FLZiUJ
(!'(*Qq+eFSMeB"GjHEpq%8rm1rK-4@IrpGPB&DS2BJK3PB[BcS$@baEA!`+!"%$
i@i)$de)V*T&MlR*qT#3m`ppNFD4F1[`+CS#%"BKTFPjX',!9Il3D[DHD#PI9D0&
$",-0!QBF4+'T%CUBP"*dCYSB([Z5j,LfP)+1Lr5k5!q@BL-+E'Y!'D[Tm"4qaQ5
Qf!)@TQJ5kH'0Dh(TEDFD2MrLHJ!&),9G8#PhZ5[6MpAM'JZUFi@0@qlV$(2"42S
a1iX%%LGd!3B210X[4MlTCKF8ZFe`q6140EjSr`A(,64)FUjURrkC#2b4B--(02G
j#1$B)TbV(Tjj@ecmX6kB*LpQ06##TK(Aj#SMkCR!!a$JBbYGl++r-2-f90i)c,S
B(`[dm6BH'Bfdi%-cICK&mBab3Xh(TT(KjG8flJkaN6[lj828S1HK[JImdZ$$-V,
d9-1VCrRbX4%fGGkmC`c(CQ62UBC&QhMP[5ClM(r#!dJei5Ijkl-b*j[aNj8)r[M
i(r"0mJIm!JqKJqQIlG+(Rl!mkiI4qbB5'dbiq-HqG@GrC!h)0M[kMEL64,CAdmd
%hHc,m%hcpm8$FITiS-!hTBr3ak85Z3SIfqL"BRU!eIm)NIhY2#8fYj`Hm0%$Hm6
#5)YJ%I$#+eKHZLR36Bhbd)H+Xp')qkCS*%8hCqN'F(md6')Y&8a,BrZ#RBc0&""
"(``%+@8R&YRmTQF!$-9UCS0422Z-H('ql4`6)!2!HHa!f`AFf%mel0qZ%#-Cf@I
B'Biel#!6lfHB+,hri`YJLlp&iPh1aq&2'ikmaSk'#"I@BR%2,AE$p*IK`YYaB@G
K2YV1i!)$4`!(l$b*5Np+!"-#D-$$jC3-fN0(PjeU1&c+B#pkF4HTMQ+Z1KT2H&P
ThCjPq"G&aSj,q`aAPTf$DV)@%1*VF%$DiBiV+P*8[C8E94PfG*S9F)*i[kRM5"-
(%%V&MVTdbCSKPaiJ`d'DhV2b5Z5UaJX-8eT!Z53+,E&3Z%"[,X,LjTcmhN"X'4h
`@jq''a8T"i!-X@@HAQ96%k33l!"a9KaTiL4NE,@6Ua6rF409+RiP8P*rZ"jEj3I
M2)RY`50ebL09iL2%,5DQSKT-A%UZfbmZMLN['['2SQZPN!!F'1@ZpI6D%HTD5PG
23DJ,h$fI[Mlb!$Hh"l[kdeISdkcSk%rI"([jV&!E6lmfmS!*+LUPHX*%6RqV0LZ
X#PA1hq36C(BR+E3N+5+B+lBIBL@8jTb9&FeVaRFhNjXr%Pd64FDbpYPK*TQ0AEl
4dIKcA3hYdp%ElBA!P[XF6N%"a%(-!XphFT!!ped8K1adI#""$V4VDBdC6-90HS)
EV('b!Da6KGYSX-c1CHDhGaFC+h$Xkqe-l#Q)b-K1GPVh@8@c-f+5f'8&+@Tbp,#
)KQMKY!C(TP&%b9pRq`rZd3E#D5pT!e$&UErrNY3HHF1B,c)DFFQrI`1(K!I6QeC
VCY""*%i*S)PR0#5Z&2BK0X`-1aV@XHUDpCrd$D2E99(#jA'3!#q6(CPqHSBI+NK
IB@Eq4fL-)#2i!6#'Rh8bU(+k8H-Z,MR9Q5a)Il[21MPrl+@U16%k`563DMh'35"
F-FC*INkc1RZ4F,)Ar1l@4faRN!!FkVG`JRidZ2H[U1#H3R(AJJ(Y,!4fhfFJ)KY
[2,eJjk4PiqRT&$e8LiHH8QF4!JB2IiN+hf`mIE[8f(LiRSZFEaG-)k!F,CqlYIH
[3!S((mr`BE2XKP5M,+&2da0J(QqKU8-0,G(i-K$D8ciCZi4*V@I@#1c@KFTJA9h
8`Ufr2-QS!MLVGl-K6T*l!l[6'V#mER(f`U@cMN`#*PF`Q54(ffQab3&me-)(80-
DqeZ!*(pA(UZLiUT$K91aVa[F%%5Nmk[5'$H#mA2Xb!mf$q*hSUJc4B"c-M!fQ8A
('C-j5UIAX)X2Xi8X,"#!5MLF0EXMKr*hIc)3'1mHr`Q+R-Qpk8#54VKZN6YCTGi
XL#$!9V$*%rpa'9"kE8&dff4"6`+IS%YqMBf,@664X%2QG(EY9-2Zkj3fPck9Q9`
`hch'2(GXVpPi$Xj#6(jD3AB!5IGIi)SH18RE"l50,Tp6$F2HDfRX@'!#PHYYN6N
%lE@p*eAGQ5VTH)0"$S6X+hNV[S*U*SidRqrNBj8,T`B[2&Y1$*[Z,,#(cA8-KBQ
#c&e'3H,"M#%+Ne2cYe#8HqLcdf#(*K3R06KQGMQm9+,CQFa#j6HcbNph$3)SkG@
,PjS$P&NP!ppEP'3l'ZrFB`H3!"XAU*%@3Ad`-QbF%fU&I(CH3,"`GJUaiKT&JhL
INjbBl#53!&d)@ACGM#V+Y*!!dmA5%+GQ)#Dlcaee,+U3!#R%UAVEZ*Q`dSKL$jU
6XR+mcfiiTaUfl&6)qZ2FBBjF3%%JNC!!bDY1+KkcVE[aeQfKaRqKM[2((cDTfZ)
2Ip1069BTKGj+K@BQ"*j+#+FGiXC,4j0iT,&&TUCPpBiK!8UGSNB+-rF@Q4NHcEE
2"$%C-pZrKc!C+'0B6b1`!jI(JFSfFd+%!E*Ki6JED@[RS&Af&2)Q3rK41,k*e1V
[N!$%Vr,MSdGmH"3I5["3%)+Ubml6"5ek#S5F5NY*CCMXV19[T`EUF$*MpkU+6hh
0LfKQ,lh'IAq[jj)LZ-G9"cZ$R80A4A'RcXK5UEUFjh[2Vrc8M1-bhaEQ`-E`b5d
fJ3d@Af'a@cRSMLFR$[+Nc&%CSBTE91X-B&NeVL5!lX0)d)!ElSIerPjI!8CS%YY
KGdFA,A3305!6R9Ca8iN1F8kU9ibI'c*QS%bbPb@CeJSbq*a"kJ0N[a9N[pAJjQG
`T5mfMr`&M,lHb)2KC'"VNjUN!,)HIcBTEN0@+*!!4Qbp"e9p$e[V)3F#cCh&&P4
mr%F8bMB82VZU1A(`qkc!U(XTcIP*FI8)a3A'e3Ib-k-EV$,`3$Nj,Bc&0Z&2[Cl
d"r[aMfM#dXJK)EUHrDUT1-+1jZ!b!G#L*[BH`-[YF&(G%bZ(JqkZ@"QlkFC+m2,
P@!hBSD6#L-P)P@&h@"T[c3lJq*IaCcrql1)K$hl*T8Z'A(U4,id+ELI5mR)cZT0
e,2EH"Xdhi3r#M!jX`'G-9XrFm@XHk`E0Bam111k)TJYJ6jGpGaQFP54-UFBcc$q
0@1l*!1#1a'VBM3VSa&Y3%$`CfiDP`SQ@PJ,f"1K@YRHF'pZUc05@p`,dc*S(Ia!
ZiQ8`TZed-DpbXCFpeS0YD%B!TmXi91'QSh`*L#pAL1Y0d1)Xi-A"`$hfrZ4b8N,
Pa!3$U2cp@6edN!$-AYG"c5`A5NSG)2-cdE#K6$6)K)T`*K51bUre#i%C0JHV0QI
lM@ML9qEEM`fe3JeCLF`B#49N3!8C3JA&UN"31)bU421H'XI*JRh$V@QjlX-KLQL
plP*P2#&E-qbm`Q(1HL,9DkLlE#S5hD@GP'2lm,[#U4!2e!Y'#FAd[M'PG*F9"qN
1bkJlb1!hS&5b5TGS9'A`3fTddh*C%JZdQS&h0Lr6[#+Y8R%C39#LUcd8Ble3HE%
9KA`FkNe*J2D)KU`%ha3)QKXP81i9YBq1rJ3#ADhHR3P#YAk#2kY9[kiQJkF8PGq
&VJ"50PfUZkB%YahcLNemY6K36DM9),2mRhLS5cLk)*U@hl0"Y[cPf9L,F$[NJP*
8ldr`m'U`AUdcad(%@R3LKK!B$"35&pF01,#$kFhMp5q8jJ$li$KR2Q*$qPC$Ji9
p'`B@@Z%3&'SFQ,D2!VC")i(D3bfapC`BD,!-0YD2(I*,RqE[prd-E$,FFPCbF88
DmTk3!$[DN!$h[FC*(KKIN!"58`IS)eLVf)(R1A&l!'D3!1+YF0T+I$l53U#!,@Z
5fNB+m8`d+iM1%NbmcAm0a%E+I@FdCVXifA`PL&4cQ"ZrFe06r8JR3kVlb-%594)
ZPPXXMpSBkJA6PmHLd(q-a0Tmi9GDiCCK8jP0A3BRJ*qJ8MZj`5(FpFV9EFkThUQ
9V84UITj'DN65JiP0q*8!(E"0)5FR-Jc4Yd%0Y-&G[e4G4GX2B2YahKbD$l@FLD,
6-`aKmarh&ELTJ-H16j[idjNS-E'rMDe48c4p#&-C55PUB@0#+FcSS$I83#-8CjE
8JSh8JZe8`qrk&(I@0A"XKi)N82Z#k"LF6T4CpE5L(MDQ+3Gad9r`4HAVT#!f#[A
!3S&bX((),l0J)V0Cbfq1S`+l&!9Kk'EFEhNK45%c[q1$5U!Z2P"(+@NKZ[8HkXa
$'Emb$-YKe3%D2TSkKkcNP1LDS8hRV9C5(5DTMT3#pRd@B*q2`,l2LG$jTfk'-%'
1'MLGk4QJm(L!i,jA-N(9@G!8Z)mhV!0q6S@TY),pDhGd-,L(d(A(`F'pL)qGC)X
LYRC21%NJYE32JR-m9!a[j'--!-6!(j*E6i"GGKR#hG&+DX92m2j&NGbAQeK9AAe
AIUUij+88`0[1K"+$A$J*%J+Vc`B`L56R[fHB8'Di+8$,Rf9KA9jC@23RAmB-lVp
T@$L'KDrmf4CqT9CCU,LE%JbG"Q"N$JjJD!,!X&V6!3a!B8T6,aTmC*6854XA)B4
YC`I0mCGN1,B(K1&baXm$Deb@($*RJ[dGkKJ#hZ1h*c+"rSj4lENZ4cH#eaiN3qm
VLG&Sir(CjPc!dF@[prk9rQTCar3R4Z"`*lYVCqFEMbr)i(AZk)h(TfA38Q#&L83
!'NK-X-+%QT!!`CZX6QR`T903m1@+SX*3-@UFP(fj1ZCr!X1)C9J0dk'ebT%PbS&
ebS&e1(#(HJJ+Uab9LZY(-AY%&b&9'AeGG&hG[Abh"DTe1eK!#k920+Jq-!acr&"
`Mf@PM0j"QpeJG!#Ya`*+Nb%F+S)HCD0*Ilp(4YIb"V%PDP#QE+N+@pV,lU10!`[
2BC)%fGKjc-B8&4j9##l8FRMSeL+lD'Y"fTU0'K1"!5EK9B+df#"DXqek)Ap4jS*
lhaNL[P"r4diVlhCdlAd(iJXG[Tq!+L!q6URcklh[k+mD),j#k)V'N!!'J533B13
3`533B-6@jcIL0m0JRhGJ@kl"4aN@8kUd3bRHZ+M%9!9j$+C3&9l85P@*8P9@$bh
NLQ$dY)cjlrMBX*2S!hCeM#XlKqTYZ)10c'!MmFBlf-LL%)8JRf*3%bb`qQqaf`m
[H[4rAj3CIpq8DNdcaY-,B6+Fdl0K4lF4EqaHf-XrF!`SB5$ZCT,6,`bAUjIi3k*
#SA4c'9)Ki9JB3A9@*VCkR*[XdPC4C2)G84aLUrTLhV$E,U"jaDAZ8I9a1%QdZ3-
E,'!30*J00q$GM[4DR&0PDJ82%*D0-aJhCd(B%rd4(-S`#@)5a#5!LBC*'*-!*Kr
rL&h)d*!!!T10$"4LU"CaUI+K)4SjV&Z9&&8+c38d-$9DcMif[qb@C`+U'@jBaLS
-rA6,jec46Cm!l4QEH$!SAlc!J"m-&YY1ZQ-E,)0$0eR6i#3d(QLBD'$!b-KRA'l
cqlBVF!d`'HbU![0B-2,V[m2-XY1&",8r9UR$(h#[Zbb5$!@rZXL1SR)(3C%-3*j
fmE"HV8V5Q0b$AqhN36EFHilBM$!HVRHR(V'"0)&mEH9(l[%!IDN1L#!`[3+1S-e
k`V"k-arQXl-+K'NJK%1+'J!VKVXU6lqG(SFBUJU1ikr+#f$XAR&(jKLXVr@1&k9
qrT%lL`(j%)jiarZ3!"$P'cJ,iV84&#q-lTQmi8#bpJ)ha-#3!&miE2fSN8TVA&(
(KE950-5DZ#+0&"FSK[blJiBeDdmer0%Z"ZrQ!M`Xe1&cU,+,fB5GRB8PX2G*hq0
3NdRIedKT9MQI!-%(P'l%"b`rYMJXB01U6)Cf'*5TI)E6M4$dj$`'SAY2Z2pN!q1
f`aEDUSY$m,E13[jC2#a6#2p`h(Sr```HFI-G*$`R(,LJ`CqJd*!!YY!'Ub+D!V"
6jK-VXI%aCjk(i-,a$[eShUa(kmF2EGY19CJ!Dj-5X'pbFpq$Y#D,P6TdM5iF"d2
%$$DlQ5"9J%"BSN)!NUYA#5$Cem1%PPk08@@EmA+YH-R3A$LY)H6J)&F-+U8IMa[
Vc6JUQ)&l5L8AYf&Q,'V2*&qd96NDbH,UFH@b&jA,kLq4f+M1+5pIQk6Y*&kL)8+
eUEbF3DH#),lAPlQD!$SV,VQ,hGc90V,lPiR(@LRY(')"SEY!Y"JFX%jU2q#NG*J
!ai5VUNJ3TeFQ885q[JGTKG,Apb#4)MjS%G0#VZ4BBL&AbdMFFNAL[2h@'i@VbVB
aM0V'3ki(J`@0Y"5$aQ%d#@@'-+8f%qcMQXNrRCI@'B!i(1a#"*pKpUA[JGii`P`
dK-RaBX&-QQ!QHf%HMl-kmE1DC+@f5RQedZhm1fpKh&MZ5rhQ`5XVSXEFeI'2N!"
!jp5#P%mDrFBbCRZ4d!@VeI-NTCR$a[e-2kHHH4#KRKFTF9`TN[6X#[2T'JcS#!E
80i0!T0CiM[rr-VZ'I2V(bT!!MjrkMDZ68Km!mY1lI$[c0JkV%S-HmX+haP&YE5C
(V#$BbXdPI4LLd%Mk"0$mSYTV*)@Ui3l5e$PeQC0jd[J1ZfEi[90`X8K"MB#&`bF
dU4%0L#E4Z-AGbK01PT(l*G)Yl0!!X9c[ip3B9r3d%Q0J[*()eicckcr2SP1UQd2
D,FL&*p`,M-qi(ZL*,f%-4I,CHj%2mHH'@ckEMrcjc,Z4YEp%X0Z%B#RPA8VLK5-
#ESTSm+CkX2GqT+FIiJkqj@lIJi1)[Bc&cU3)fce@m(Y10B3[FD2ZS`6r#69Xrq6
[[*Pa)h8`i8FkM&i5rPS5q3N51!EJY,j%!Um5AI$,+a4KcaVRpD%D[GZ0hRq#`#0
V51!SYLpr,5&`[[AT![pbQ!4H!p#maThr1kqhpr2MF"3)(ldKZ)Lc1IE1`,d!3'J
[R!Kk@&491fP`d6*ZF+dBKT5(1!afjY'TVZJU(de9%LE#bb2I3)9J9PD$("6+[,h
h$NIH)j2",BKA#T[*4eBC*NrN)EKD8`U*2Rm`mkbcPmNZA#*@65C"XLUa['AbBh(
M,[kj$6F3fHBf6L3A*-`+&rY4,CZ9Ea5*YjZ4&R3Y-'cTJHVrJ9250aq)CS@!+AI
d#5-%561Qb!LVK!Kq9(p`)b5&*'#ajCkiXjq)QF-`Z4R)aXpjY++(e1bTKY!X#'N
+E)#$NfH[GKUpJX"`3b)Hr(2cNc#kr[@Ijd390i*RJp-[e*Gf)@D!F&#md-Y1mUL
1Z0"DZY!V'%bfNVXV,S5+4Vk"#cQ1ZC!!$4fkRj,D)H1Ql-&3`VemfF`,A*E"9%Q
$Y*!!1a`P+%$X(e+KFJ*0-!$"V+eLCQe`J0(@a""Ec%#&9SZKE(dKBSefL5&Tq3G
Gd!U4eK%MaI"MR6XRR$JbrHjVhlHT`i-K24kiK`edBi!"#ZLC562-`i+9UP9BUHX
*0UTQ+"Ye*D+Q-$4aYmGNYXl43BDJ0RE-lYHRdhNHe*@BTLB`6A-+de3bb#DKS`h
HP"L#!HY3Q+@Q",08Hc"QL3ZM#)@KCCJe3MIJB@jlK",(j`h-BLUI0IUm6S6LX6U
Sb%f!2@!qDCeYCkVldYP[r3X!qQiQCCk`QN,cba6p6+LK)NjqY@!B!RR6#J'D!0F
%['+K)al"kkDXTV"49B0X&"Tr*QP3K5PLGNi6LeCp%"DYfRQHA3M"U&9lQUR"BKM
ZYe"0N3QKh(9@$&h25H`AEb2*$*MBL%&$,4XjiE#')E2E2GC81l,!$b%PR2+NF*a
`N4Ye29!)!BV#lL5R#K41V!UhcG`PdiUDJ55`m0(9V)D##c5BEG*66%8*aEjZ9K5
N4f9bRE)S4@K4LY"24DKa%IS(RULBda4@%-UPVDQ3!1HJq4KQd*SSX$5'81jRKV"
eb*!!"4`1FGI'J,3R+kjLLqqJQf*E5U"eZZe#*ZqD`Q$#+AC'G[r4"ik99pda!+e
3b@rqB[(U1!2HRFm%hRaGrq!E)6#+KeSaHE$SJS8lBdD)0jpiE!j+a6mjrqB&rS5
Ka+0[a[$T"`8T9$dp&%H6"BMZTe8-VN(YX4U+,FYlY'G#EllHF"U6`*XhdJl3"P2
'ZSZIr`d-XK['dP(mqG-%UfEb3!rm`$FaR'YX(5lbBZ%UL"blmk`$Se2p'`a6Dj'
6&G0A,TfGH4B2AF5IbfjCrhN-ENYZ**4F1)'de-ABK`"GEXc`J)fIKE2m5UL-#dK
GA8D#DlPRcMU2!9[1Hrf!`Y%JBIdB2`D'aV)fK831'X6pkYVM#l(eF'*YQ6jlZbL
faXF323f0l%&Ajm'X9'IL-62a@)JIJe-#A3K$$#81pHbNa5!`jJAhSi+TS'eZSiI
Rf18feSV(Yd'G'DJ@L%X%TM%RacrbJ&df4h4e+iE*eG8YAXf)SB5ai!3Tma#6%eD
`LD'#qD8lm4+*EHGR%S[kk%9B%*UMPUh8ArqDRIZdY)9'fX,`83ZM3aDQA9#@T#e
-(EY3(KUb-19-0)QMejZ'[$E6MVf3!(DXrDKM,`eCD"mmPSGZAllHq!brL&)Ae$m
C'Aa)$$l#j+b!&$4m2ZH,-#KZ0Tl+4q$Ni2)lfMGd60GZk*M9M'6ki#-m-$4B`rH
)'@E`S*PBa8B%*RPL!Gm9a8e$35Y`3RMa5N`CYPJ-RdV3I1`a(N!fX[8hJZN!Lf-
URAlakM1Dk1)mS$J6#S!1S5Xa2&i2-P"#`iGJ+2MKCC'X)"B6f`8*SB&iEdTc")d
I`3a9HIqildq&'`Yh"N@"3Q91P%&P3ZN%VldpK!AP#r,fa8A444HCG9Th%LkRQ%6
+LGd6VjVG@@)%CrQJT2Qf9`cMpN*(b9f#r9ahTNpK4)2A"Sq6Up`Z)U`ZX(XTBSk
0YiF%4NFGH%)-)!Tf#4AfpL2J1,ef$-2+pk-T*j3A1m2b3CVB@Zd,EQe1K%(VL,d
RF-6PYEMcY"80JFTbFZ&"pD-e(0K#0$GQmQU1!a0QSLYhk4@5&d3abGG`9'`&+di
mc--63e'Dk8'V-$ZhLDB`PH3#@eN`e4iL+QN%C2-(I3rkfiRFY2[fTJFaE)6%D2B
l-8Jm9,@IKi%A'rTU#F%3mTFmr2R%`dqQ2m`-5ZNLZ66MmUNZ%@`@A$cdqhp1rfV
fQ3TT8Iij!S"JJL5Y[-SZ8j'cJRfJ3E`jPCSF&4!KrR%$#MZU6Rhab@@jUdESlG,
-Z"!$,rAS!bk08AJ$`dbC`T!!q8#[bB0XB,L0+518EVbTc-L$`SNLjrFr-P*h,9F
UE4fC2&c(0AFI$kYpef,VF1BcJ(hE6MbE&df8D%Vr0!K063j,D@SR)*UR9NcY0'h
&e%T6!p0@QMSa0@LD`G4*dabQ'CTQ-Fh4G"ZQ@CSZBVU0TK@B,Y)dMfN&63F`cG0
d(0-"QNjK1Nj6&kC601h&e%A62NalD6S#jc0[*N$0KH5rDTR!3-Hc!p,%(c[q@2'
R&Am-)c#%2#G*M,lLA`Na1MqM-2,Af5M`Ma9Fd0@0VN5V,b@'01*Q)YaG$N`Zemd
Mb%QQ9!&X!TKbr3@-AkY0Ik'6pG@ATUm3@9q,2fZBV(0Sk5R'E4Y[b"h"m("II,+
D0m'[d,flp-ArmUhE[cTkX@q@Ye60$IlDd,fM),PVBb&b$8M4J,J'QRV8ZMpHUc+
KpFhKSi&%k,D$,A2($Vi-bMb)8,d$+DiLCekimRrX*J0PL+60kbKfr[`[iJb#$bV
B@RUXDi5JJQS,Ak,k1TV%[F2-4AA6%Jf$@Gh&Pk[QC($cIjbY[KiESFZraUm4aLr
Jd(Tak0Sa`5Vb-2K`@Nm3#&)`5*VVK%)TYKYRT,0AD8"G0aV(J%D,IHcm@DNcQ#i
,%BqTpFl"%"rN#-*LC3AQmJ+81N1S'MBc8JK-9@4jG*26@dpkl`N9#i@SX154#M(
FMbrUZ+9mCMAjdZ"RT$H54Um$)4&IBT!!Q9aafK1R#kE5L0`"85L1Xea-eCH)ZC,
9HpQ9B'L+q+Te6!cC("I$KL#4fhciIXDqYD0`Mp@P-C!!iq(!QT&+B@GP$&&$kDb
c((JiZ[Q4KUlTXSDZ@AC(lM'k9Cr4b`2m,1[`,BjUEZ-j#kF'h5D'V*XbJRT4+GZ
XC*+"3VSM08T"R43A,B$jH[Die,k!bk!K+cGS56)!4@&1Mp(&a@#3!0YcHTVK+MQ
YFYHmG'ff1%h"-P!)"eSBb)G-&YIl"G4@!!-"&iQ1D@e$afhaJ*XH'-V)ijm"Q95
''0Gb5U*m2('%58b#BqZA-(,3Zh+fX4d1`(iMH,Lcq&VE1EfkbN&aX&Ehj+`10SD
+bIcVG$83@U!2hqE$3G$X1N&M5!eQU#)S[jl*F`"2`CjVP0f5+T(i-MR`01B"`80
%$"R1h([XRJcM$j)bMk(Bi!`5pQ6)6BS0bm6J6K8FTR&bCpeQKR8bmM%-h!p6kr#
GSN86@*3mDK($ZlcSNl4&%eM88f3qmK&)#+P"4cd+Bf2r,@BXBMH[LJ%M8H(!+JS
c[bfU'fJF)9,rjZI5Kdm5Jj2UJ[c2SB)Xd38C[F&3!3Qb4"&N+&f3!0&,p-!aJSb
q4S)%k"5G&B+-6L@1X#F%b3QYP#l)9cZ,c@-&'@dQ3DCd%&(lB+JJY4X*3CBS8)a
)DG8NK"Pq93M62%UBGTKKNj00B+V`(2p2TTBKi$H&a'd2K'21j2%6*d(Cjf!!RY'
KJ[V25rrk+aC8C@QDS1`3&2kK,PV@c-GLDI`J5mNX[PU@YV5CPQUde+SXY4qe&15
3!*CqN!#fe-T,j5&DfU-XE6l)dYZde*ffY)H@0Y(59Q@Tp9L$a&+ahEQdTDeBHTF
@PVl``[p*PpaFRED`&!Y,!DHhL(pL*'(-BGfBUh9MCK0k-YfBSf9Nc#9$M9N-8&)
JZ-i)*SCj&0$H9Y83jJ")TfHljC[YB%ZrMLe`%"35M``GI16U)S0q6hB5e$,+V2'
6ej8`U4A-EY66$%#)"k!+QmZJb3KD"m(0mkFCK-P2RL+`Up9YL#$&`i)*8Y#KdA(
@2JTLj%PLm5[j(p15pB"hrDlcBr(,(-l0+q(FH64M[c9GZqb@lc8i)QJEE[PFSm(
HELMi3&&`Glh,-U6$&$PlI`!&cd-QXT1#khaZSaUIZ6IArS9ll$l)c#BGf6fp(`p
eLSIQ%)`j,P$k841$Tp$QeL#-#AY-6M%p&8GJ--!Ip&#%!*d`[85k#X2*96#4m)a
bec*FF$+f*eKfrC1CrJNr8i+9IbU&`Y!8f,C+"a*iN!!a[!a4Q!`JN!#CNkG#LK#
Nr(-5Jj3I!XJLac`Bm28-(&HSX#fR'QScY061#rppJ*-KiR+eScLqiCphdZZ8r[Q
IbqPcK`M+DC'&2Vf5pQN'ar31U9V[N!"U66%)c89-`jf*j'"5r%0-J'SNR1hpkrm
EK`JdI#S[qJkPh-*'A!aPaR"-'V`3*0MDfSb(H,"A!-&Mq&FP1%@(3pH2$Jl)aJm
@rp4fVVMRqASH-#GkM[eA,TPEhV4J@'4TmJFd,iEV)p+5`Q8T03L-mcpqa!eAm2%
Bb$aU#FDN,$EjRcXjf'ZfNZ+HSeqM+dVqjr#if9mXaNEbmYFje'FJ0+-X4Y-NkGA
5YJEa5qXaar!`U5R4G3%0)%&'ELBQ'SQJ!6$"&4-`jhDNQlMaBmPJBq$dBEJ!N!-
JVd&%3e)$!%cH$e80CP35!#(LlN6[Y@FpkUdjQZ*FQU)rbRNFTIB+`cLGdXAf&$P
2FhHFaYbkADLfGeI&YMGYD6UXQkQd5K'@UH!i$X1k,-X5-G4Ye'QD@jFe#@&B3jM
kr@%-%DFMM@P!M52prU1eprIr[Zr[GlrVpdUFjhRffHFV(@8q&!(a!`!"N!-!)3D
,85i0"[b4HcqR3%V3)8eiVNck3mI5AbA3!"aqGe(kUb([Rb)M95U9J-YQYPpEY9J
k!Q$14D(-QDk@*YRRhZ*!+$(pdj!!pp&4L%!r$I$c%5BN*eHQIc3j)2ZEr5M+-IF
r6UidV#2%(RFkN@l$@E+RHim0@F5!XB2#2ZaDc,hP2-+K$KRmEQJC`MrRh#8c1$*
p"*fek2"2,ZiTFPY#Q91$,05qjeHjqp1-AIJ*ClQGQE1mjLahU6`DbTa`*pf+hf9
$k"ECXU$*CA[D1FZE&@56Z[9*BAd5-LIA0f(538c5$jfP1R4BG@M*,'p`K4`Q4cM
fc2+'[(FHB1,I"G5D81CGLjQ6eZ$R(3aA1VTKP+'!kc[iH4&"lNmGKl%X$(NITiQ
&q&NAmMjm"Bq!)%hh!M%(&aIJBJql1!FrYiHmX6jDd#0dV2,c0S5"fdl)3'L4Q2$
60HbU0pc"Rf`SM9lU0KMip3NqS-IRm!'Q$FrP!fbS*CX2X-dV-6kJ4!c`!59["Nj
BNSAF"`4m*RhElQkCPV@2$GD4FidY#FHdIkm9#d*EE-Eq5h#%ilLfFApS8BBYL%j
2jUpbV81Tq'0Z+eb@GBiH-qa$%Gk(icEZPK#pJX)j@9hSl#NNC``!&1ZG9mdlR6R
)kSLVF[X)1hkRkRKTXBQ0-p%ka`F39XF+RL!5C-Nl)1bl(led08S-)mB,'-Vi[49
P9HhY[Y)DRl8-YG5pprkL`PIqF@)XCGe6+"cM+"$KC@1lSaE(GLGcphJ-q4#q2L3
9h8$ZKPK'(E9Xd)*Yp+1)"GaELNQ%-bFX,T[L40#BKq%F3b4d5-5'N!"AGPSJTN$
iFC@%-B#&15`jkZK)'Tice53Kf#%B6paZ#`ABdAAD`X4EZK,LM9$aHRSDa%I!EHf
3!%)XmC!!0lU63V'B9#X#da9Pj5H+M%T0F4'@cp@8&CHh+dA+ZdV*UG)[+dkmk+[
%03aaS0KiSZC,AhPjFEQ1mK8CbaTdR!M)df&kS0Ga4(0IFaMQ"q@)XArr@fB6Ff@
j!mCDFT!!a9DC`m+kb`EdCj,E8#'XNhCL2M$P0-2YGK8c32!pR(ESS,4ReBS$i*S
"AHcLRZadIp2%+M%B,!Kd",KANlRBZJP%95"-cJV3-4%2@%)TQ'cQc20d$)T$%Kf
p$)MpB$kC-dYSFYC1C%PTQ%f(!MK$c2fdMF[%L,$iRZ*4mY`P1iCd0!%*be)5Q+b
B@S68'iG!DqjdPmck`PfbI6i@2`aPEZm86dr3%`&-qJDUKJDD5!EFb98l"YTbli-
`5$[qQ!#%DrT$cQd`[3qc+CMDPX[GAb$%MJ&!!b+&M8eDf*JPFQiUb!kAVBV%FK1
%-*f*jATdc4GL'De0L+@iNSdV&%3N8bA-"2d3bTD`5A3+)6GR%*K*@*dSrXD3!10
Ek(3l`85-`BMRKj[0ABS6c1Zb)b!+BF4$9CXa"XGA@J3G"Hb*4j+j&PZ@jHprBfC
N82#lE-TY&iLP$E%$bc$p5PC6m#Q1U-+#0ZC&b0*%B2*,GQQ,$NLkS$Ke`*`m9B&
#)BT8HrXTUp9A9+9BLbZ8iZI+P'+c8RkUb1Llk3+&@em@QlpNYr3#CBhUJ#1`Y*(
*j*28l+SZ+ZK3,8L!kM%bl"1S52MJkPd)89SCJk%%()JAGR*525+q!+jUiZ#V9-3
KbJIM",a8m354iDYHP*R6G*2Q$%a!,-K05J4XmY%aN!!2'UYl*`@V@ki5+MTiQS6
$h(q"+[!#',m*ZCiPE#FEh--H2#F'B6Q5!j(YH[$CN4cIBSFSK,dX'91*!ZQ@)L&
+$N-'k6!%Z@-T!5dBRm*Jek3S(Kri*[(81+LI!4XeI+%CDq!J#RJb*k'`F#HKi2@
FCdlDQLKi28G96Q)AX[1)b"@U$J#bGlXhBK,ZRXH+hFPK-F`qLiPIm%Xjb,"rBG'
!dG20$VSM!BbH8)U$FMV2YNSG-"#LRG3a[Y0,'dDf3#emBEI1ATZ11)lS`KF4`YH
+MYXGapP6@54DV-$V)RLB$40-9K0!*TSDUh@HT3['2JK(c0'PG`U'1dl-[8"XZfe
S8dlf,5*Da9-lILr%3&`4``B5LZp"8-B6$lQBS)3[UJJ#FND-N35$P61Nj,0JAlN
-I54PiFJk8-H@DKYY+Ep4)QY6*K+ERNjdZ(6K[SLJM&22KX5,GER2HZ"8M5mPrrU
+'9MP"kL,cjN4'kJ+2q*9iQqUU4*R-d+%%8*0pdbZfK5N5ZmqYi`4kl`A`AJ6mP'
U`A9p-)UDNJE)-LKm-F`A)El`m%@5,b,Z8MXF2H(LKc3h3V6%%8FkDA5HYJ89V4J
)SL5QCf%4iBYQ[QLK4G")9946QDL`U5+UP-4%&RfB-9FbQ"4+kh[HY*)ZDmbE9Za
Qe8,Q6+[)(-Ql@G''JX&i!`Vl#P%pXkTm'fHlRD+SFl)E8fG@iZ"cN9DT'%pEhaY
M6iq*ThY96iq`TbI`p%lqp)33GZhTe,LR-A9Q'6hYA5H9iYf0AH'%f"BV-1jp%EB
lL1Kc`@&*aa"I4X,f"jmPP5b`DfC'29&8H1V!L5UPb2FcjH5"iTUAP'S)fcKbAlr
Q+ce488EmA(@hrU[)ILpJDR&FU3%&r4j99MEJH&VZ*Z!PmbdfU(5p#m5lb,SX3'(
YLc`YPF,Selk05ZaTfBjXPJ@CV1(3SQB*8USEDMh5HUPYrJGhJ1MpYJ`aBJQ#CM#
3!,*01LVjkCfdS)c`RMGjPSM3-8cY#bkMSj!!YHaV(A,C`)*Zpbil#@#PEdJ!+cU
IJ*81i0je8J!V(@+3!$k6!&EdEM@`D1U'!3+@H2bT38DQKIR`eE#-04QN-`r)ddU
rCjRbNSamNZ1Aqr2-kl1#I0U0X%4B38*p4DSRX@ZQMp(ej1rleaN-qbrMf[6$j`e
5A$cN`DE&%`2X@'PSiGXLCrBVA4NfSF)&"D&Scj!!rAMABIpl"8F#rhrR9dfIe(k
Vri%VIahlDGq2KamqGd'jYqfqj+(`8j&R@TpZhY2ND(RmdEpliQphrdh(RlEIfIe
[hVdd1KQmH[lMkqqlVcN2l[e*b'Ej`,2rp#q1rGceIirqMicrpZ'A@DG1eP6jc-D
'%rYH1P"59'cpSr++XZF+IeEkjbrqVa[rmhYrPREVcEbFLfIIcRhpmV0[r0IArL*
ld6Y[,I[A*ImbqapHq+IRrrZDrrI+[hhe2hrqAclplSV2eRhlLmaYrc(e1l1@,[r
lN4q-rG$lIqEpKirqrCE[rqMhYrrKYRqmicqYrXdM[hVXMcYhE0UmpFQ0[jlrZlY
r1qHKZAmeq*F,(ZcpjDj[$RcYR[[AVPVjpIAr[1'ZQI(TUBP[,&kB[chG)+5hZ"!
FmlNLTHSjPZQV8JGZCCeLR9!D)F1VXe8qJDUG5$BUS0i(S!CC+-Pi'T@-FAJMkhA
4"2(Q[DX-QEiNb*F!XK`"%PdB(qEhf8YPl-Ilcek`3`P-L$Y#)CjeB+HYdV0h(ek
llVb9B6-(Q$%"aDE9EV%eS9-jc,UGcPYQdjlh'8ZCB4-Z@f`)h4dIJq*KB65Vb*-
(TCbd%M-8#A#3!$+d2`p+%-GZrX"RPPPXVA6JFG@"(kX1l#0Q3mqDea9+jeQc0$4
c4SCNEeM$"h$)8p1#L06$T`YI!A0@%HN,1k%Jq,PMcqB'%44Bf!ZhYS&pp1XC@dC
Be!,94p1TQ"pLUUV)k"+Eh!hd'%6r84UJm`e-(9CG0KN*@,[TiS@6&KZZY324MQ[
,F5f-kAj#*0K16+C%pK(5(SmXIkrc9KMU-5Clq@6U,6)jQ+m3%-SV50(6qYi)UaT
'@0@`m&89ZpP'l'EK)b([bKR"EKBqJTm[91aQQjVGX+N[-RD$$*S@K$+&&VfrFQ(
[qrIErC'$b(Di90Z,K4EY6r[jP[2bJ9(j"&1169cX$be#H'9)K'id0+j%+&KK9b'
45"bEM(rB#B,@Z)b%("dHE'p,b,[q09U3!'"%H[LQ#6dEa#V8"eP)4Mb!`q&)*Gk
4BFR!RMQcR'@%QicNX&G89HP(c'(c3Yj9Yh1(cF22jkUUG(@F`fLUNcQ-LF4pUhN
(!9cK!a)C,V)NFV8Eq!$L@(ZG3V`3@9D4&K@A+DH+P-Rb#Pr4L4T&Cakq+J9%RHp
859dXj+VRUP,6i+YjUH+j%UAN4%A*UE+DKMZ*ZV5#`+`k9AC+19'Km)Uh6RE%#,j
(1-(hZfS)[M'`VC@*i*IrFj!!9iq)3!F-ELE$5NEJ88M%a-Nf2pL6b@)cZeP3,Z&
kXdiHVA@k5e"d"AQ%)Pi3iDl2D8`HhGr*A!q9@KACjqF(pE--[2Zq"ZL+"R45m%9
IHE&5A!j5aALUl%5K6cRjR0RX+fG8"cbM"0RB9h@Y##lEclbZMYc9kl4V0V8(iiM
19R*,-KG#`N)qJV3m[%BM,3XU)bfCiLBM,F%k63Yb`kfbIb6YC!`&UT99#RKX[1I
32NSJJ34NBMp0cFja5!9SPT9"d)q,[iR%hfTJJKm`fRqp6[EVfHh%CTe!QfZCJPB
D$FLFB69NpHr(!)m'`-J$*T03D99[G&J2,d!"8I9)YqS4$jKm[cHR+UcBXbmkT!L
FZP*XF6DZX+bZR596"'PcISH$r`&G'h2SiI4HCBMBV8k!FQ'pQ`[V0kX4eX&iBHh
+RPbefI)9#@Z$,UaI@a-[V)G[F'(0E5bXAdY@*kaU)@A(plpFFE@a%Pk*[*k"`'k
f0"EBifG[9Q!KLLBQVMR'#-#Gjb!`qq0"$F&&8K2L'bH-$%#'EH3)U2RE%bbp%R&
PKL[$QpL+,U!JIdKJ+pPBNpMB@&k0`UlYT@BFV$#TYNDLP49ajTN,f+3)52NqE@+
F1$EH1)4[J![KH19#Z"#Q3j!!0P!N$r0`8cL[9#B2"U%#kX`a(PAXd&B$&B3!dB3
eLY$3K2%k%k$-mAFC#9j!aZF&Z6p)bqS55alSRF#8$ME&rJ1K6MUa)#haM0Q,"LM
jdZkkl-N*j0!4*@q`LK@N#P4)8DN,GI4%k"1L',$E0BHcd'FbBVFV2B1j8+-0A2Y
qT'GT6Nm1XB*)bellGh,Z2@qh4bjS9e#%)cb%5Sj20Y[Y5'+EXYH9DrVTY5eY2Gq
jeA1,VY16E5h$FQPD8Zl2-5pi*NJ24Ek-"lC$K#kpJ@c&k@iJNQdF@IR0hQ3ZrB(
"0)QXDAq`&D%'UT!!!mN[8f6ph5N[J-L1#G1R+HQbS3'%H0`lC"*#(fM3K$j3DIC
r-3@C!!#$%&V6I$Kp-A2kBX&S`IS+529B-%f985"J(#EfBVc#M+)D@c+*m"ZD(UM
%DPU)eG+KDX5U)k@MMM4SMR*1VYVUTS4[GGq8Sd)T,c"(l@3%'bq+DRIjdi5lMV6
AlbkC5"4cQjESEDUL6d9X,J[+XF'iaD8ElEbQXkU*DUF9*Cbee-kGp8NecXT@1DY
!L0(@eFRF3maiScKGYNTFSSK*)TPb4L3c`eCj)KZaVB#+EI&Y0jTLDXcBf-B!YLH
(kpiB64)EkeTFrmBZT$ckC@e10f3pkDlEN!#P%38"K-9-S--,M%eSSYPD5!defqK
+BJX4N!!PC$i`&Mb3!0-K2ANM&hec)d1+2EjkAeV,!AZK'X!1kJ,%cEREX&@[f'U
PJ8"bRTFl,h0Q4Ih1FabKTiKSDFY'G@fAp[!*CQ$YmEbPA!ZV31-BFTH-E3%!eqL
'jI(CBV[MlibN@@a9IFaF5BJhH-IC**UdJFcBLf+a8aA)UJeq0rJ8N!$-*'BSCFB
@lZla0(EC5f'jP-p4&DBi`aI89D#T)mA'bQK$2T-bj%Pck-JLENkP`FQNQ`ar-"3
SC!SBcd!fp`KYM+NS(1%JC!S+[,!H5qDkE!NMUQ%"185)0*MNBNajM$@j@dLKm[%
IX8ac`)M3!3`4d`,*Nl(9Jb5DZa&Jk'$Q3qUFacY(0&5ULaVpCBk[FdSL5iaf(ZC
I`&3IKS`"EHVR'9c*J@hM$X@CB9-lU$l6qIMJcCR1*@hPlNU+mSX`iF*m@YA+#KP
$S8P'i"d#)M26M+pe#F1K0hU8N4q2ULr@*1-QCBl[JV%d3'D'J'3-DABm)kIQAP6
e3Q'SR!'Z,#*4m'#5-qi'F!--Y%cNM!TlX"l!SMMQq&LQ9YN,CSp-pY`-'V*R0X5
aq`"hbGj%mbpb!a8DU)ZDc-+%HT3,eeS)Z42QIj2LAj!!0TK,rkr0lFcY*8C3+bS
aFKH5em+8LELb312T9,3AVC!!4*kSUc*epC!!19fJDZV6`82e#)j&6e,bTiHTqIZ
QLl0`p-Q3!(!e((+`XZ0SFqk+$")A%RK[P"RAQ(,#FBkkmPZS6,!U("&4!5iLJGk
k3hP2pGMV[@P0V&L20i3Y)*IYmbqbBETLBN8LS!p"I++jB,--GifGVB&"G5c[j')
BLiIBeZfL3%bES!UE,jj6L2Jl`N*44`8+Ndc+i9rQ0N[Pi)iY%5Le%0'AIMHrB0P
a'iP5KN6@dHkZJ%JK'HRca!ESXM#JkBH06l!`M8JbHk)03(Ird3fS-FSq0&Ufmkh
RL3bD(SS6e5)*EKZ&0Y23@(q4#bTTjSPUJ(C&aIS9c[Vh9-lkmk@kHYTiNp86ba)
`dK5&2JR59+&#!K2ISdbC4e9"85()X2PfU8PpeIDDq2EZV'Cl*Pe*")fZ!Z8)iMR
I02CKSeQGUF25`iRJJXGPe#p6hr6YUTcXRGSlZHUhYk'k@XH8FNcim5Y15c9%!C[
+L)+Tp[SV0QbmQbIJ@M8*D&'""eA1AD-kQH"ZX!-a"8*P6SE)d0T00,$NmU'rdSU
hR5BGdLCMk4HN*(ZZ696)dfeeNC)*FXDZ#M4Id)M#Zjb9N6Em'"14hUbSpFH6NRG
GjdRAhH2Nl[Pj0HkaJV'N)bP,K0LKJNRA!`AL3&3GhSFf*6E!a$XLMT2(+RA4ERS
`QF[BVT0GmIV2D8-m1(pqAHljK8dlcZ[IlE*GNK`"0VeKX19#h)3VUJP3$pL`Ui9
Rip*A1)DdC)!X4c-PQ8!3D8i'-mrV#%A$#29U8p$)M"'NkVVF'PhR3E0r,%(%&+8
[Y[DXmqbqB0b,`3T9+#9,0iI02`eATeiDiJBaU&`UZ8ajJ+BGE@`5qr9'#UGFDNT
IR%M)i3pji)!4!d,jVZC8%899Lk%ST*K2('"KNqYB`(J1h-X)N!$mj&40ii"*qZb
[f$eHc6eHDaFYQ@+[ep&p#Ir%(dUXeDijl3@9dlB`Tih!$BVQY"'KXRRKY1DdMq+
FKZNEAb@RLD-B8&*93*RG1!J1Y9l[aLhD!E2`mhc)Hfj'1m!EG`"0$h+JT#D!FRb
e!-Vf!bQ!8S0`9CQ[%9J%pN`!8ch)craaTP$+59Vh2NUBI4d,ZK6#V3+aQJS6#Y&
MZbp`e221UjLbPj[kG5H(p"$LNaQkNeNJ"fUU$fGV6VBd$L0ZR8Y1jP9!3#GKGCF
H++kJ"&1d[e(DUHX-Nlj@6cS,PZD$B!KNBb0K53fX$l!'88iXLk(bV,YMD"kjJaQ
&@!CK`eD)QiXqi4")`cF+IXIFXPEP&SqZb,$eZZB@-J5ZK!,fLjTEVMG@CYKm"lQ
&!Q)lX#9Dk+i"c+Z%kN[#'i3m3fI-dCh"!MP5lQ+K(#RR+YerKT54BdKYXbU%$Fj
9*I!f2B'Ec5b"hBCE2)RhK,`rRUdPFDaa%MIYSL3+eq[ZlIQ`NA[[&S@C90He)eG
`e6l[TKR0TI3*Qd%F'0%1I#(Z3*THU(BT#pCUiJE&C5&I,!iYR2UcmK0P[M0`+RZ
!3qT2jNQ!D81#%89lQ!*Mid$qGEdBlYJB(mMrqR)Hb"pYA!4hC$$AL)pY"06U,r&
PVQi9Q*3"H"!D,Nj`q+SK1,)eBRTE`UbP%F#epC1p#[YN5'Vf-CKV984118L4@K)
Q6TCF89r!TeakG)4iRKfITRS!`TaI5Z&NmCMK3`[I1"#&e)Q+Vf6TQqJkVqSk+ki
K%&Lbp"d+Y+XkPr$1(Jc3i-!3X#4FdF*GmBS@5#b0dU)R3FE*mXP9$hA8(rajU%-
,k*A@554rbX'bY"U`T-D4l$'@34+CIHra!4bfKJIb40$99$RC6Y1iU5@rcLdYje[
kIM9EfU)p6qT4IP+0`q))$b"j$4B9ZSGPdkQS$+1,P#RY[-ZZGA@JDeM9jGHk6U1
V4p9PdVUXb%S1-$#+,NAVHJ0GMkQk4V@Z&HKD,X$+ZY+d,M615Aq"LA!8(lXEj#D
kAVD)b!(Hk1+95Tb,Mk&Sj$-pNb#YkEJAY5&Yki!fT1erU!f4c(5,0S3ldS2D%'j
,Ii+&4FJifDS4jbf9QJ`fF109Ua``fe'0pfTKp4L&e30N+#Ji+D14PMYlZN),dEK
*34Y4Pc`TEmJP-P8q)JHL2I++eB$2K!dLc1!q4"qi`UIXf*-bfX%#5Bq4!PUdQAA
fD*h$V(-@kc4CSrb*,P3S`iP0R%kM$UE!YKCG(DVY*ESfSHYdSXZ5k"T$PcA49@l
U[+9e2Sr10e5GLUSc$CdV9*fM@QF9ZQj2G(@4Lr3$'l2d8CfP2f*A+9QUe1Z)b)K
RkEqj6#aG!%KRjK9rAR+bq!#aFkk0N@L#@ecqNp2AIe*Fj6[3hQldPGf%@PHq&Jc
dbMC'-*Vfl*1pKR`#2e@bD&M3+JIM63LSARSr9$0UEX4NJ1mYM$j!(hXF32"SN!!
Cp+,Q,TMdHl0-E0KMpLY$$qDLmZjpm&NkH(YZBLSfF)HBCY`#3p!!M+DpkZ#'IV`
j`#Z-&A*3rh#9LJApL,1J2kk'"Fe[h$cTCUXS9'fQHiACif9Hea3QD[HRP8IrmV0
$Nb*F!V@j@X@q2`H"Tf'9X4F"JmkmM@QL#q4"lk'V6+QJXM"2*drZ3j8RGl[+J!j
@[P%hh1"22hd#N!#CpE(jAqBk*&HMp@X&(aZT2TK$Mh&$I*C)[UXH`a0p!'a["!A
%"#BCJ(+9[if-1G(pYj!!q%$E!-KM0M$20$*Y2#-$RCp*dhfiTT`3SEV*p3'*$Y1
1E1T1r8cfec3&2`-KL!PYcfM2pLRI`UHbFX0Tl*&rBNq)3hBP3Z2dB-P123J)NE+
AT"5TZGc*peIMj#bD1,PUVMePeDk(rr61qJ@&+i!-iX,eqXQ%ZGFempSGp9A+M-d
Jp$1p9c0ACNjcdredZbSF"%*pqSR')PrCJ#AT89E**+ifX@T'2$qU#J*9hTKXJNb
XP)(J9iJ`Df,CMAb1mQMZ,p*#Vi@kBMXK4,CeHKErI#F02N9$(M'Na"(4[*ChIFL
ke[+Z'm`S%c-kH3-T3LjMi@K0l&P!C)"hjYEae,"j4&2e42,eEHVZi4dE99[YM0[
UDY8"eVJ$aLVCkZheE2@M1Tk+hfU6ZQ%PUAdN"9M@8K1Ak5VY!DK`6,[BCiUSi`[
@-5!U,pBa`3G[mZe+1BqMAP!Xhd'ME2Um#XrHjI0,Y(L0AmlA,[HM-DG!k&H(Ujd
F-'pPkT[L`kIVbAM3F`m4X66N'eLJfYiFGXeN2XF4VkABHJ!+['j9mp$eZQ1FEaQ
*$##ehi4VCP5Z@DpbcAT9-Z1h($25*e,bY55aTP$ZPbJS0cf3!(+kH92`VH4"eq9
$6QP2ASlE'#p@di[hNbV0HM'FSS$(qN5$,4(#M'Xmej!!D,!PQQ)P`S,6-c"mS9)
iC+%+J"Zj-UHCkTNRQb'SS*25X5+Bb`'dMQK[2e'%aY*Pm@ejcU$"fhcGkHk5Z8I
eTSG6ZjP5(MDU("6ER@T*Z)B##f*l8kd-"(-%D+C)X@dB"P`#eA`qj4bE-PqiHLU
CF2Y8Pa!3Bj!!)f*kJl+T@Si+T*MHEpk%4XEd@E40h-!lb*Si(P5"+ae!,TPl,'&
#QYV0Lh-kb+jQLcSJRcR965aH6aV21[6(9k@06F28N!#@0HYM3JlMUBP3('!Z+%9
R%@!G*J(5UD$U`TXmdD6dCH*))CK(30Sb`Gcr6SS,-A0Rr"&U8c1UbE@mZ[a'0G9
P,UmZVI98PpDEULiemR9e%TF@8q-TN!"9akT45QR@*i&X1CCS5,Ak4YhUJiQ'9-b
mk&f0jLh84!R0NCVejj`A33#GSmC*LPe&6KfMiFDd3ap,aD9UQX60[Lf*"PT3%f`
1TREV#cYIq2NL`"FQ[ZMRLaKI$&[b!RP-J@k%+E2Jmdk4iarN@2hH0(b6j`9-Lb$
J6`eYF-'6'T!!'LUD!Y@6!M@8!Q92J6UH!Y@9!R9B4eR)J#m0qdBZ9X95ESiTf`a
Jf",-,Sa#mD'&ZT5rkml[61h1I`UI`&3K*C!!%NLl#QN(dJkNAiAd!qN(-U"#"S!
-!'P5)8e!QS$X9b(lJH`(-UC#aS#-!FPG,bG+T1'B!-+"Fj9YfU1$D)%!8I5eTZ-
I[#e!&,e"EKL'%q#+VJLjSU9YRcc@eK+3!2IP$61%*h@[j01LT"b$6pTd4D,ke#4
8&Hp,DfimY8FC1Rec8iH8S@-h0p@Z$,PZEZTaCHMSc8hY8SBbkTSkp'%D6FFdL&,
e%b&FErYNHQT@1#&DM9ak0Z&56elc%-4Y+a$(U,&r'"0Zi*-j!&%)bPl8p#H)TMp
Y[1(M&G'8"%dD#eA0)Dr3CcAS1+A,FaE(*,q9fJ%0BRSdh!,3jiaGp-e5ZU$-1T&
JPFYl"+YFrY9U@1@+H$EhKhFR9rh9l,VCR*J8cqEqX16PXlNrc+ZIc6dBaqBHV*6
0,Cc3f4`em@pLL[KrSU`ZKeKGUrf$LeErf2qZV1iLBh8jeE#kR(qh@4dDD196!X-
#j#e2@I(YG$YIqU@I,`-b`*I8c%%XqeRM$PV'C)`[KqA`qrG$+28M2Lq8@Dd*alD
L3HR#I!F+X9"'QMT0#%pU"MC&43[ZhY4k'*m3S-j3@$+e3MCSPK"lIUPe+0cPICZ
4H)1Yq+J`'NA"f,@qMkZVABH)kib"QZqarfc$2j[a'*TS#`@N+AH6j-X3@NQ$,@#
6b8rHpM13!0262Lp[ES@R[lj40&Q0B`mQcKiHVSBpM+98ahPbbH5U3@Fbpfr&Tek
U$Gl3*-%BRMaE9dKrq6QqNDI9'h(Z@Iiibc4KQm[42(hUk)m4q&[qZ-XQYQG)KD$
mpG@[ARhpr-6NXFRJj01M5dEA"VH2fNDc4[rLI-ISaG(VSpH#Nk-r'jeep9q#raV
mkUK0mRm!!#[V384$8J-!FQB393XYT`$4E*1hhD9HbdU@@MYlQ!VAZLaV,@e6N!!
d"29ZHIr,3YTe@l3k((GTZlX8q[ifEB(U-10##eC!T8!)*X3BNk1)bQ#%8Yp[0X!
ia*!!4*!!+1B`#DNJP3$M)F6T-3clqhrI[AI[YY[h%mqFmccRH5mEE6G*5j!!!%%
3!%'J'[pZd!*')hid8ad&8NbD'P*4(dc&(UP34RTjL!c1IiCPr!C6SYb+J'!ml+R
`LAP0BQaYH4c"`CX-`hGSiH'LcM0LhZ!%6a-US-Lr`ESGh6S1Rr@928EMX'2`)k2
aD`Eq81QP)DkT"-V5LrqFPc[NQMlFS88'2p+de(BmfZA(-(rX"pS%$&5eM88JZjL
Bh#(4SiCS[ZGfTl5ihBqe,fKS5HR0E'a`&jaX#1kkbYc,XZ%,`d@NbMQi&bh4fD%
YZ)@kQ&$aQN-0CGdLD1h2RVFA)Qbl8KXa*5&iEF@M1([)@"PSeA5fD5!H%2AF)Gp
l)"K'"l,+hJD43kUYJQ-Gl8($j8r3JSqR$e-!H66Gj+c`$M&PPpQ82AGF%ee&e*A
!AYlZ`8Eq*,iSE"V'Kii2"clXq'M$4`3Ih3Phh%hU6XZXcBbLVKIkUX&09R8X8"C
kBUk[PbT+[1$EPcI6Ir#929V1F"GEq$c1BV95%V21T@YK,D`-,`c0C#aQ+'(qb1d
qf5$[fZm1"IeE'kr8YJ46[#eeb[XI2HYfTcHQRN`2ZM1c61iIUH-AY,[c-QYpH&r
G32HZd0B(5MCMbr39j))mXd[qc6m5b#UT$EbMDCXf"V)HE-IYHDUU4m*HG"FaGV6
q(5UMj0m)iA$Neqb)36jb&VHrLRVNerc)`YedC''AI'3qEX9S4aEZ9SjmQae*B8F
'q,)@eY'4lbl2Gq6EbT(Vf*(hj50BeX+j8BpFaiq828Y(bUcb%5bVl&+d)fA2XQk
YfH[D3kqZDrHBr9VKj"hMeed#U(BE2Qk(5k##XBaBap#TL-6F&@B&1iNKGGA4mH[
-+#EVm,%#b%3(0K2Mf)%,G1#@mp)$amB[FU!4Q)D2+MJ11M#,f-B11)SIX)aIpcj
!Tr0a(BhP4RDJ96i3LhV!h*1elY,G!@d5[eRNS"X4$jBUV4r#+Yre'UI$"IFCTi2
@eN4YGQ!k!E'9r@EPq2[mq+)3KVZX1KU-$@cV!e4GE'[QX0S%jkdAMF1"R4dk'Zr
el)"!PF81(+%$rq-cj`-P9Kb`MZLcGaRRX3-*ULTf)#RDJ88e11$SdfFI0FjP"h6
j`294$ib$qL&&'Gb8@$NV5U`++mD!&D-C+dE,V&J"9S`K9V$M0A3%(6HYF$G!!r'
,(Qp2*KahUIcb9m9I,K5M[+b,mR*ZmCGPPf`[S8k!ZJR8CR'Ffje+$R'"Nd1FG!a
ZFTIU&$fEN!!iS'R6mi$5)1"U!PRVc-`*PJ@!!ZVMZ[Ij)c9EZ+90YfNkYY8(5j@
AC[Bb,(fjb&(mjEVhT5maD"a9aF"+X-DU2LkUiBq+Q&$al4D0+bkka"TP#6A5Pm3
JhQ3f)Z5K0&l8B)*T#X05kQ-B'NIl"`EdhZ,34%%,UBI02f`)YK4FmFX1q,XiR*R
UpQHQ"qRp0G846dVGGV,1h9*h-V1P!DrGZlcAdU-,ldbVm05S`P0*H#SA6X%aZ#i
)$'c6ZTdDB!Q``6B,C'B9A!QUHdhk%GqVSD8ZH$+VH8h8TZS5EfLi8Ka`-RqhiCh
De14)94Q[#(U[B9[MYDb6YHmN9aS*3`U'NBZl8TX5V21R0ejl&1+'LiCMK%j+3E3
1PPl5#,af`%8BMEP$rU4,f0!ePGLI!#*RVd)A59Gr,,il`F!@mriVMh)*0S9-"5G
6prT2CUBR4pbeI1,HEEbDI1jF1p5)9cf@0iGiD8'BkN8V$$DP(9hU&9BFAH,BS!5
T$rl`9D2,VU**#'L#VTXZ-Hf)NQC&dS!Qe3[,C"9,RAdfB(Ul&LPGJfk%!$Ukp-d
JSp16MSibMRD&Mil5l2'l'MYkYQYYiJNa9LGZ2Kd-2plRQSU1Y++H'l[QjCRpprG
BEJ)irr#5lq%S'L4likj)0i5f2E&'Lk4dd@-)!q)"Hm9EfX'lA!-J,-2$B+A#a0l
"dJl01f3bIQEf1I)J)04%BQSr%f0S#RZjdUd0TLXYYFR4f,Z9[#KA1L*9fJ'PpHK
+@dRT%aLNLq(UP(jimF-JD$j@P4CS1&4fT%`&SD&$C8+!Zeaf@G%43TEF)8)AAeI
m4'M+3"06Yi+TDa$$+YPRIVHe`4G-TVUTFR-%08e'*1QY!M&%BY%B"[HD'KZ5)jG
rm4drRFr-hm6f0TU#Y9Q0+F(UYYj,@cIkrFRC1MhIEYmKB5QCGFdZ)MU#LrU'F[S
hU[bfmKScGH0'3IBH&(!(#-JfFRHQAM&fAlP9@dS)[TJ3R"%G$-PlE8KZTmGXKZ6
p&I[[FR@p%TDLphlY`"#DP#1m58NqNMF$K'bpeJb5ekqiP4323ffG%b932(aIH9a
lf(#6JZ5biMYP4(F3SN0Yr9)q0,p%D#ihSB6Xf9-Z5C(pdi`JHjT!Vi`MHr9b(fK
NVhlVj#(l2B'epRi2&Z,VSHE(@jjE6NQV2H@%#0j6ZDGiN!$,-[i[qpP2$hd03NH
R'hRiBchPV2(bdU[5@j%NZjpHN!"Lr!XdHe-j5Db04YKQ%S#!5[lLlGD(XXT1'Hr
C2E[X&,eQa-EQH!"CLZ,`"38aZJG,"c3'eV-K10ClbeDYPi3$ZAU3!2,"JH9Y#YA
M"#TRF[BejrJbl&SbaV`D&rX*f*KA%cKNc*[$Q$G(CFfHRqCM(LY8cXal0X2-DkB
JC4K9mc&[(fHHP(AjN!"ZPX+i-0e%Bjb0EAqrU0Ei3+&D#`AUV)3@52bbM$,H%bU
hkTefHX`Z4`"f#S@Ha,bi(FPH9UhG(jUp6CZ%&![kqDZ2Z[KRFE)D"'rHL&hFaBB
9X46CHebDpTQikk&Y@V[a(de)cqVU-rlM@I0Z*E$bjZ)$3aJb6Gc+KQa5KQaL3f,
bN!#VBTlS4DLN[8prb'[mh81eaYmC5j!!T&*#UF%Hc6mJ(X8AVjTbf2&AcjS4Q+Q
`RaEcCRX4$2-biBrMf12'G3LUV-#,"FC&!2D3!(c!MLaDENEiAJRAS(,+H*JBA5'
IDMPL0P40S&19IYj'H[NJ'29E-'8MT6hBUKE0ecG-4R5LIJ-JYiHTreYATjK0#qr
3a4eBiJ[+%Pr!%RFBbl(%E,DBK9M+3NT53j+bE4Qh+F&UE)G!bVa%pN2ESFKVLT!
!emkDEl&Sl3KP*r`(f9HVf"HVcTT&$fd+!,,&IKTI,6#ZC!2HB#U[C-2HB#SMf3r
9h%UJTQAma$AS*"hGJd,air[j)`ACFmZTBpNbIZ1mJ*FUC(*j##3&NUSTa*',4jD
i6EIh@rN`rJ*$hmTP38im&P!)p2IE+%523@0*&&6E!+6[RTf(EQ+UU#UPSPl()Pq
[1f)iMG5@MrdG@%69ZpZdIZ0Q"-Ff&l,J'$TkZX5Gk&iLj*XL)pm*06aPl[@RAfR
B9Pd*USIX6C[l80bZ`HBqDJb2dRdmS-kfmB&bYTZ)AF3F)XJ$fr-4ijYXa,K0h88
I30dT60dTUM,[GFF$k+BCX5P)(9K3V)d*qVP6ap@)e+(QmUhHY`f"8lA)l0MP42k
R2F)9PIM(P"U@mRNeTc@(LTk[lbe0!EEYUGf"9R5p5F$V%4$'RjV459Ai9SlRL,q
`9I1%r9e3J(9DEDrd%(&HH&Aca0!T4SRA5"S2Yl*PIdFDeNVlUUpUF[Gq[jT#h)F
d2,CBZbP#K9q,M143mIF$2)bE1pr3`R$"YdVB'L'b0lGB-19U-kTDS@SC8r9U$Y3
TNN@E6(E$4ELe(JqQJIQk2CI6)a`*GMJmf-4['lUVmfA@aDf`*fZ$adbJ[84B)Pp
AAC[5A4G""k-3"rKqjUJ'm0h"RB!l(k#GGLjQ!-cQL43UUjfC')r#a)iBUiSL)MC
mGNp6VD35FYV10m0L*"mC[f)X2TrM5I**+fqp#E@-D4CYrL3Q1-'B[Fr6P(l3LGR
53kZS-G$DmK!iS)r$CPr#&@r9A#1Y1IKLS%jRMG%q'k&@#Y'ZUDf&,PZ&&'#,`VH
diE"i")R#V!Xj2"rKNqUVX,qj+P32TKGBKIJ81T!!1b5lp-ama%[DUc0jT-XkY@*
C!jZ%iUN9hJE'G[UHaUXfIlC-E,E$5H[i+'56DTE*PGBf@)V'G4QPBJ%XQ!"@f"9
"jDb"lNI$d)B21lX9m"KK(G)#YV%!c+K$Kcj5KE8A)fdJCa-(`i(,JApKD-%kmaS
rm`!GXXKa@-8l0'[H'jS9B5#lZ&G,K0l3%[E,U1)M,JHkiPQAelBLla"()MmG#P1
S+f6fljb0EBcc2L+NDbId+edQkQMqjiNRUJX[BCLGKP(SJ46++3Y0JCJfiaL)D3Y
U4LmE-JS*&XSJ%281kRj!Nri(!"fR(UV9IQ"FJd-*0S9U6F!F-!"mZTHTTh6M5a6
X*8!%%e5XHDZBNK&kJFkA"%+CLDj0aJFCB2-J5(dFaXHpUX)3ZTk"C1ZCdNPXi*U
3!2N,C6%!V@K"9D5'0YDjq1*`T9+!epN+F"bT%TJ8ZR8hEDBdCd)PGr3X$D16-A4
Zb8UCS8XB3qH+@jYPk"+CSGY#6BbGYd0)@h#@`XcEq3#!RUXj3hhahAhD$k6,`*)
h-(8hX+8N-4"d0C4FcCSA1cr)*JZ'+4&$,P`rc"q16h[TbT36)#+m`D&N)e5XH)'
a2*H+M0r+8,U(`S[XG5H3!*)"pli$FX1"VedG5U%+&p#`lVb90%d*)FNNqX,HT!K
!mJL&TK`m5,1R@-Jj3kZA0TDXH"HJH1[q!fP[eRfX8'[cT1j-,Z"Kq9'A(afdKDp
2&QP9R6Yek$"K8dKK)#ZQL9'`9VcJDL8(b9`4X@BlBkLpm`b[qKq1L51-j`Si)l!
e5[2MUF#8S6-)Tl'$@m[L'Nm-8N9elL44FN9a4LXJpCANB3J(U6q0iNkh-BEA-SC
[!f+[P9QHb-pbS2E2'@Vr('cRL,d@L,f@-lp`ApUC6ia%mG+00ECJ)Ga*$E%EVQ`
ZBqe"*)c9N!#6f+fT,+D*Uf$bYQ*1SNTKmkFf0L-YVFSiaS0dXND4*XmVSQKbKm*
i%XGB(j%-8+U!EmA8[Cfc+ZFpN!#ZIc6q%d-F,@G%DC6$0*8lVT[XQm[pqVRYb!E
Y[aS108NCX(3*"Xh$Lf('KPTf`aM"LY3Q##@&@ebZU!e,3Y+`6&8E&XDU)MlBI`"
N&jD$D52NY-,'d@Ld`Jm[`54rT(iKP5&mEKFH6h#Ri)%SAlV*AQ)16R#PJ%&M'Mm
%XmBJ,Dm6+%K*K3U$Z&XJ&[RfX!dUP!dUF4YHZU4$lq0E9'+,ShMF`94+8#-"aUd
)*V&Y9P+LU1cQpK6VC-XJ'V13!+VH%d$P1fC@JD%hFX(&1J)c,&KeRlaiP'k"%c"
R!0`1imJJ!rS'R!!qqZ)5!iip-Y&aPSJ1Aq(hISR#8Le!,4kA(@a[DRTM3c#j"Aq
P5KaDaYrAeZ0"!R3ebAB-EEXT%-'5r"J3N!$'0,q9YU+(E@C`BTfUkNk@I+L%1kh
X`DS*,!@#!+e1QJ,0Nc9NNR5X3T+188P5*XK'PSl*4jEqc,Bj$FA%mQLNkA,RB40
"R[*N'S9%h4U0B%p$#JErjPRhVQ-RGQM**XEIKqT2-Q,m5C8BIqA8)5A'(dXM-Cl
""*!!BX6i*%QchF25B#@&CJqP6L6aMTm$Kj`NVbr0*"NNq@dC)XQ,+Ga,#SGY#MG
$Q(ZPK,PRm*!!%ZEH$"2QKk6lkj!!%ZEammd`qMeLp28f4KFMckZLN!$RALPjVV"
FHQKG-I+mhp81mVcAL6c[L0k0qS#6kYj(4DSIkNj'Ce*GTb3MPaBMm$,N1m#)p3p
NB'p5"SKe9G5q+15k9bEA[GMS-B"P*3Uj[UbANHXdPIQ3!"$V5@`CKIeNR!%SaK(
0Ab!Kf`G9XPf+"*J#N5BLh[N3NCKFl8*VYM04hf%MkSXISX49cF%A*b(d*lq,`QH
XiS3q5fkYSUNFb56cec,bIDe-jQq-3ZCcGS9T+bR$R!RqR(kZC-l10*2mQPBZERe
&3[6[kT!!0LL-i#k3!*!!rS-Uk9qX8Y)3#+LZ8V4CfG,3J'DXY38(LKm#5A@IY'*
m)jJkj*!!U[!Z"3bS@MC)e1$NeAeJeAdqcXjZU4Lr,Z+PTP%`T6p$3B6k%[US3HG
'([EEJJKm#5e8Q2hpV+Ke8,U+93ZT45-AK5E-J`Nmh3h!iJMlkMdjR-#(pKfQJ))
YfB@&&IS[fel*bT%CKb1USBFdK"MU5Aa%B%Xa&-'FdRC'mUCN&&Ma+3j*@j("8%1
[003JEDl3k+K#Ta%c+"QINQBS(4m[+mM9Fj+%$DYM&@!,1l4IDLlXF'peBBI!Q%[
j`Jj(hlV%dj!!P,3FfHR&9--9pB3IkZ[3-d4V)JTRXHUibUV$K1,bS&`K(INV"%@
PKK@9'VP5H%&j%!AP3E9U#MXc&)M`XN$%4VPa+K,*E!5&)HjRV+B`a%DR-%3l'A@
*'SCBSl$Gi"5'@-2#%'[bK5(@U"9"iU+()BkqaEGL5Sp9LiIL0JpJZZ&Bi`BP(1&
4`a&aIF-FqMGUcJhP08fB)M)2SBNQ&TSiJG"%S90S!UPV#%r340ceH0QRK#I@5m-
6-#5cJ6'LeCAbk-)6-$$64&Y+3K5'CN)89eR`B)UVPS8SYV%3a5MA#@Q))M"'#Pk
c3)A!YUU3!'c&Ja@'HS)9Sj4JaC[%kJ`%+qT0hFiIV*!!QiMRDmaT$&c8ZdQ8`-A
&$"-PD[M#UiB[&)"B$9pi(l$`4Af13a+qf2Jr*AbaF9`pi3Z[(,i)1B8[1"%r9L(
LakK%r!-8[RJXlH',HY-0*1%,KP#LNUDZ")',&IS1&2U95U&(-8+!A#hd4@UKMf[
@'!A)P)BNiD&*Tpf+LJQekb&%S)+dU9&3"PN2+6r+Z$i&$iJ+G+5(+A!`UJ*bQ$j
0bkmqPP5JTZMZkiAa(YhcDYQRrU,3Uf92hC&9pP6CTr(CCCq+1kcH"",Y0k-3T25
)XG8dSASd6mTp-b"kPb*P0aj)j)P&+,bDYX8fK6I"Tr$D,H0[L#GB)E+-Aef4+"G
ha,hjYaV"9YBN-@NcL-SJTNbZlKD63QD3!+TmfZpYE*TN@0QFZINrZIMQeN$mK$9
2G'#VH0jVD'4'Y,!r,*j`&CCZXHUq,MjC8%&`60Nk-!6@Kq1R9&A%(F2fr-SS%jj
j!'LAfhd&cX4r-MABSNl+6@ejaa3N"(#lk8Aq3*A#lhB8N@f0m%4eQ"eEM0@,*3a
B$&B[cL#V&aGMY3-K'iC-KdGJf)1cf@NEX(Rark*XrQCa0J0I3HfRAQd"VL*T0'2
FcXrZ,4*'E!'lYa`kGQII+l2ED4Z`Hm[rMZbqPMafVb"f8cSTc(mj6)j2cDQm@h-
&QC`*I-!-Mb)*%dBS*q,$(NMAV--MFY2M'#b0`+`FA'+-c+2!6HjA`Q"*q0"G[8c
BQqGcB%CeM!86"*!!$PN03Heb)+M$c2I1h$*b)i+k&aYGQ&J`*T'Z*5*h"5S#Lk1
kD+[%4GY9&ff[S)3*K'L+1,P*JBF1M5B'-5Fm063Re&4b-HZ[,("RPaQmreTGCNZ
`24Ppdpa-baV9T0TE@LZ-#5+8'0CbJ)EVMc(eMAm-PIIT*JFkE$Q6TbIf2TU'"a"
!Q$Uh&A'E3e2%@+L*f$La3LH$YQZ'VmI2(r%aDYJ4-19UJEfS[M[NkX08i@iY3SN
@BDAkiULfU8VeYENLP"5J9-ZSQ9XkER3P283!pKqjDM"20iNeGhh@Q+I*4k)6H49
d`0iId#K0K"*2RCUr)Nq&Iai,$Ih4P[j*cH##j$D$DkT"i$%-K3kS+24Sf0`4CUM
$"BmEU&$3Ca@a@#NJM-QNHX#d6@-[R3Z+[9K"L8J+5K)&Ied#CbjBD[IeaC1`I"+
4b'[L,1fYMU90Y6D@FN6q,V%d1AKF`*e#TFV8Uc!JkiJa*$CJ'C@jj5-k26$JQFa
M*e'(8cjPf`JF24LM)#N"Ve#f5i*@kDlY5!UT3m98LXGKI'PdbY08330r&fJ+,-P
!%@mLCV)L(P1,11pSC8NRA3XK1[JLPRq%)HS*-NfX&[-VY3hE-[dYbHdQ,HibeF$
-U'*1XbY06R12""Q+A2X9F@qH,j6GCQ%'h'E"!q!f1HMY8&$rmIi-Z-hUSI$-Dmf
kc4V&EBl09YfQ'Y3S2%518kfiReEM1XGQ`(9D8APfT4)(A!GjZ02CHEj,"AbXl$c
lQ22XCmkcSalRb5Y!KrZm`5Rdd,ccV)F!LZ)m9CC8-P6km"#k6eAdfl)$I9(L3-G
Qf)%HG!)d(%bm`&R-A'JrFk%GpEK3PE&0Y5TMdq*#Qm(TrbHid2T#0BYKE1F&[dP
0B$K4C"PIYJiX@FbBN9@fMJGN#04Q3Bd0NP5)V,)ADAV+fld)cLcQ*RQ+*6jdX@0
EE-HBdCiAD"YQ(LSer@3$,GMY"#5VRIm)'i*XX%FR'liSJ5QJ)RAT(`J`dPM*TrH
YAQibKXbHL2pq-Sa0i8GkL3Nfr1""PX5K'"[jfUTLLqlKNrZrPA9bEp"Gr3Tjf-*
1&`TK4R[K10X5@dZQT(5mdU8'Q)EQLTl5*6hkKZIThkMRjjIAR2jEFd6,2V9SfB'
Ki!eXkJd2"ee+DF5m2RGq#RNV635Qrl`cpdIpr"YQ"5AVC-0H@d!4#qK#d'hU`PY
6NC!!(X'bT!XCd!M*$"8HMB,`@-![JaZ)S&%#I[ZaI82UbGVSDkKQFlkdj#c"9h`
*2e5A80[BN[%e%,T-9m+1C,62[ZLA+AfAZY61N4`Y'1k2ZDM$&@&QbrMEkpiekCT
a1RAC6$+caFaRi8pH'6eB6%[M&C-*j&Q8'P(9cXL@Sp+b*H,@c@m*Ba9NZS-K(%+
HE8mX5bQb4`,QGX-6bi,hL#HXh#c&h4"h,6-P@"X9Re,Trc9R!f`U#JmX@TE5M36
TYPF15NaL6))E0#aDjKd+EQ3Sb`ejR--fY5IVkQc"pQ*SQqT0P6ID6CH*F0JBP#)
cCd9GIlqZ8A)'*3l"05DCG!!A,Fd-MUQ$UGXmSM8c0%Nkp#!F1AAB8226&3kF$[b
'%SL`B3if$0Z2d"GpQZ%LAK95DVXpV!ih2)1AP',bmfBf%f89$M3cc#j4Y*r5PTX
C,-L$`bDAbfAISlhTHMU0"`4A[f6SJ203GSN-XlS3#$EcT#f0QkRLIXrr6T5U99'
RK`AiEiMhP0q0JNr"bDUal-DKkAF"RG#0qMUk#"e`[SYTHRAR)`MA('1Sdbi0I5Z
b8mRN36A&[1"`ZQUU46(c1)Qf5j5Mqm2KSc3P(PTb)8K6j%[L!92&V*56%8EZfTe
0--VlfjbkY&"E"lUS1CH6ZmQ%CX`brJpe5%$V4hG46TXj4-9jATSF5#U9$5U"'GP
X6IfE4A-Ga6EE4jeEED9N&-1Tda'[4EcZlY#YXIZQR0FqUdLaRmq*(kQCJf88ZRE
5Dc,$Li(fkSfRX-j*$&P+8cXMV$1QHqPLh#4kbZe*3#d1XLc!JKZ[b2c2(cEEZLZ
8bCe(L(lK38*16X5QJLR(d15M"EDS#PMe$92ShkJTmmTV+MTL5$q$bBXqEA06LZ0
m6XIemH[p1PHSaUE3N@S9)Q@@+-U%lq-+'53+FF#rR4VZfZEeS9S)-EIVK9kU+fG
T*Eaj2,`+#(fVV41,42p*@NVb#piP&`QT'!!kDdHP58bUXaM@k8RQ45CZRT!!RN4
0M#ZXLTLC"IdbEH(-62b2iJ)Fc!8F`0DmN!"ET6Zh,h!I$GB'k`"*9D0)F@&V+p)
Xc%NG6"G3M+JQ0V(ZaM#QR)r'KE&k!8b'RBbMiQ*'F6-5GX1i&)6%e+JmNEa+QFl
Z8FfCQUmjZDj$EeV8@meh5K'JcR5NP#V!krfjbU6T6'E3bd('kTT"Cqi`(L22lT-
apYR[bV1@XEMU3bjUh2TN1LfXTE&10F4d@$&R0jdcR5@p-R6mUPEYpS8"chd-84N
!RYX(eU,6GV8Ki&A-N!!aSiEh4j3*fD*LA%Yd`Yhm,*&4KmcM%)&RjHDDl6$j1d,
G!XT8Ha!1MhJdrC'G@YKD%3q$3!2aMXVA%c0c6q8eq5YPXc8rP0UUAG$VGPm0TT+
QTXB8pq&dG5%,E#c!@eT(D1YKe@J0L+,*JAH)N!"36%'qcBN6Qp&5%&c,L*cb*c&
5D"PHr&Ujq69ZIUAFr!Sh2e&ZIS+Efj5Efh#c9,PCLT[jbXemh&bRh&b(QlR+c9c
Fr&Ljq6&ZEP"ZEX$06FV06I*&UeTKSi%)9T!!Q(F)CI28&mmp6N-ZRbaSV'Y46&5
q@ME2I`NrkaX2jZ&(R&ffIM@!Lip@L!"cB9SC,f[CG-,`*YaXp"@*@@8E"bGdiNC
&N!$RQ!1Y#,CQYQLbf!e-i!B)h%!#bf`#0p6HLjmU*UU+LDTkI3b*Z1Kf5i5SKGm
8-k2i`c3b&3[(153Hk*9aMhH1GdlRbd4#QUTJL0c"1j-dl8!fIi%$ZUR53'N+2p9
(Nc$kqQmmC(""G3)[G3)"pX,je+,3A%PYNC2`'"V5*9`JiM8JBiXqQUEc)4hMkF6
aUjA[cl6'5LkRl%XJi3@hNmZD8JUYX8@rp"0bkKJfUH4bX%D-6EKFjd8KGJ`IiGX
If!4$DNcN)k6'D)3*@#IEhk`42GiKeG688haC$9F+f*0Q)e#Y5M)h,F(dllqC+4j
IZL34-(hY0a21iB)+A(6La)m0cjf+GrPkaDeRB1S130CHPJ,K1"-L`maie"0cX(8
AEIhr"a2PmXh2+1RA9C5BF`D$m!(eaC!!B8*FfrbDTUH'(pR+M*mbjh1+,c)pXeC
G)-abAE!UM8pGjI*58q(T8P2ip"-!k6N66paNH'l1#pIj`r(A03FHp-kCR4#-b`2
!kGfCbCD+(c`k-0c0#D!TI+-VYC+Yb&@DFS!8pVYa8G@H6Fcd94ZDJ2$T8Ma'I&f
d15',jIrS'Pj2F1PdHlGC(de#*qFTV*A@[!TBXD$Tq8VVAFXU6)@'#T9SL'Z*icm
H"CC-0k!,%jFTM+PIG@M$f-43-8`X)0HSS#%Ur3K)[+3*($Nj!Q3c3q9@hm#j[D3
Q*8cG#CGfMKMZ`3Zj@r)THC%0T[4-f`,e#&-rE#Me2jei"*9HD$MV#i[(A)2aBpp
EEVVq0c00PF6qq@HAQjYQiZZCrU,@bLfPmmkHU3L-CJ5Rpk0IS!-99@*M[*@D(EM
61dr3*Hk3!%jal-5I)hB'-XJ,b3V@qB*ZA%C""Ul$%I@bH+MLQ4eDcr(V$+E#a%6
$@Am)LcJlrc*IN!$Kp'QqP2#Cdj(4l&%(dVi3S46Dm'Nma,-ABP(@0i!BFrf&RE1
LS35@*%CE8Qf`YF@''*jA2qR'P2fX6lTl*SL2hAP-#pq0'h3EidGmrSjMRh5lLZL
RjrQlMh'6B"95*,j!+[AXeF)[r0*I12-A#mGrdZd2d`(a4TrH-j1,T'6rcTRL-Hj
%bYh1k%QK2lVJE&+6TYRrYV$*D,aGFc5"EY05NR#KTabk�cc@d)Ja8T59i4Q,9
M+2,d([l`BET)VXUKQUGmLVD!XYIF"Fj1SCmf3kArB(l6FR-maq3Y-DF8A[@+Xm'
)*&,ETB3L2ab,T*T!iVMLb!D43+dAf$CH"d$UJKIKR$Xm1$3#eaCH41V28ip,PYX
P2BB1rq2HFT@)qCl5TU*$[Diabhhe*$@kMHN0NJ@$aBr0i38*Pdq5(E1TN!$5c!e
0##"hFFG0Pim&)MApe+bDbkHJVF+J68T!YTmF*prmij4J2G[ciShT1)ic40E5&2!
fDT`Hl&PU5!61H2&P9fi6ARIh-,@2K"(M"GR3USP(mZK5Z4I2rqIkbh5$Lq@G6Xf
&XeeLR31J*'ce(*T(EdACaH!UfU,-R$)Jh5"8`9m(eeMRd-,V((`+LfAmCbZ@'R,
,!4aj`9)i30@*60k9f9UGSq[Z[DVYJ1+ZF1kT%+QXEjjF-!BQ4*h%aJ1jjGD!Ci)
INf0rm#CpjIj3JJLjZ0bZjlRb$Yd`3A@(9Je!@j'i3r3LZ90hX5EB@2QBZ@l-EDH
(08c(F`"jlL+3!)TAS'Y+r"332C,)YJ,%42SU%S4cbp@Qm'2R#[9RYJC6R+XdNPm
4"bP#B-0cTr+VBb9ep(0JNlK62)9N%Yd[*V)4CU$T+NTUYQXU&4%SZ!*ZD'IR""@
Nr(Tqj#UfQ''D1+8caPK01f&Q3!rD93$Tj)a%J&)*e4I%4PX3if)@Nkdj&a+BVpm
$"Kpr$P9VQ)$%r*!!c0)hL+9)pGpCBLkB#SDb*UIJ3k46+QQrVUQjFV'Sm0F&Ja+
3!!VXDZrINf-`31N9!Cr5VE6p,0b$"mAqK1F1EDT2DFC5fl(XJi9lTlq##c6Xe3a
JA4%QL(9J#,R"%f+4Ijd+6-d"M-mb6D'0c4@bkT&ZD&FfV14TV&H0Y#N%VEHCiS8
SEVY+&N@ZR4U[(VZBNhHD8LVD*U)6T9#lfCr8p5R5YahXYXJIaZh0SHIj-2r2P"!
4m"mc-eTicF'*`TN''qS4AF4%hkb)[TQ*,R)@rAfEk*E'I)*CfLQ--QX*r)K)AV9
U%F-UED38LDai&8%J&L+HG&1,DR+MImFIV,1aM8eICBa+U66PN!!j8$+-J$4bL%+
),)##4!rG`f5qGmmJ3$46BBQC6GNL-XhU)H-B6$'4EK&F%@1Z(ZU``V5B##j'(p1
1q1fU',E4Q`"00E8+RL3+l@4+e)949aH5hE[MZLrlh&E0'PAF,T!!5INA+Y"#D@Q
dd',,De1A*bZ1j&Zjq9043Pf4R'M+#&85di&+FYJ368NX@@a(3('0(Y&Jl"FAV)8
KMDQQAX"XiAYe-MARYl-*E$H6#(CJPLP@BXlUXiIcY$rSZ'EcKX)1c!M36hF3'8)
T4UL%IP4Rl!Xc!RRYqN3aar8K(k64*IjeIZ%!VN5`R4QA!)')j(#V2di,m$YX@lV
Xr#Klj9!@BDFZ4@R(VjVBHXVYKL9@0a(cQP191+!FUANKDMGPRD*f'$mk-hqLXi$
Ndk43ZJL&V1cL-eCC$4FcMFa%ZN6q%)Vpi8*K6'A(-aff)F5+@cCT&r5*5&0hX05
[#fUeAEa5Lb@RjPXZZpLPiAfUTZ0beB8p6BUKK`LKXTmC4UbpR9HI2i"8MGlP9'd
haLR)h`X!Z-N(N`!dLC'V,%rI42S!+R+qV)jS+dUj3e`J[k3dT4ENUrjaTL4#MKT
Pb''P#jl3(FRmSPq891kYa',I9#F46dXVc`kfU!)(0&PN2p,pG9-4UiMk""Da"bH
Q!JeJKGJ*$H"Ni54Hr8Vdd`@p3FVMXBmc%*HQ)N0l$Sq3!)d`LDR`$Z%VdG9Pq@p
d@DBl!Q99&"ci5VbD3mkA&Ic8E8%&AQK8TjJc)TbP8'B@H-aX%bYGq)@lm@(U&Q6
0V'C0Q)&JNe93J+T$,Vl8mfq6@jhJESQiIFlL[%0Ff%YZ0mZ-F9iN0dIrNYS%1Af
TZJNd-S6iASQ6),"58"ZNZ-EFe-l"#EJ@qACUmMSR`lQ&BI"`L(9-G+Y0)T!!P5j
'CCXFc`VS46rEAF[R,S[mE)28d65G[4Sh9DBk*48er4b0hj3L,(AqD,'J3qTZT!-
1QlRcciIN4I`!"(VC4Fq8VI-i8+ddrqN&P("I$cSUlJT12m)48blSIZDG*H4j1e4
FRSQ0MYPcmM5*!MN&5Cj(Y*XabITZS&i#B[[D(X'#dGb+MfJ4P`L#,e(k)!$`4l4
*mmYCiaX,NL'J`X2Qb@BaKiH*r#h"G$93T`*9HmHbd*EbRD4,4VFah-CJUJT-89H
ASHAd1$21Ebh'MJ%*1q5$fKVH32[E1[($$q`G'pGZ3N-(-pZ&p+@[cVQ#[c$lA(`
lL@23@8T,c,q,!E&S#&1+3""0+S'J9*fchY92AdjS!TULq`+6a#KC+$+""lZX8X4
`*I&EaB&f!X$Y"8!j3SdbKCd$C"#JDh!QFjTfAeX8eHcNd0QPbj6U9J&+X*rQT0[
BEjGfA+5IjpA!ad3E8YZK"V![CJ@cF1N9@r#&)3q#[h3CGKMf-SNJGd"dQ@)G0qk
mI#XZ2c$YXRJXp,bp+Hqbrai!$J0L,#"d#MfaPXMUef(b0IDAF[2TLqD1m*SR4il
i*SR(FTmAQp,q!l(,hYTpDm9'1PiN[lc(&0YLCQ30hlc#IirD"3ChM25FG)3LXK3
eb,NDjm'jEP4F(`,0QBeZd!ff`#D4@lrITi#k$HmdZ"AiA`8FhpbY#+F[*H#l61k
M5Fp+-L@9d"rK!+E%+0AG-[iVr&%YRS1TiS6AP,2)i#[XR-NHLXJ&-G#$#[`!hAD
qc%2"-%dE'ja-J*CDZCI45G!3P&bkL&d`Ja@JEE,,c+DATRl3HNHUG*BZpKiq,VR
f%h$Ab2lB"B9@l5ID%B!@SRE%08"IT0ZG[V"VC)6"i8UU`ap"SFl)#rCP2f8k1!2
Qe"&bAhQeA5'X8qQCDkL!9"-5Q2$h3k(cjAmU&`j2qIkT,bpE`Q[TVk@fUUTU#6i
XlUpp6@J4QLalGYjXHGEbd1GI#J&mP$iccG,acq[(#BZ&abdE,'lK"FXU`6pqHBN
`LelrJr"r1fqfr&lia,+B[EEd[LLmp&GKjPph,2VGkLR2[2cD-jerIUSckD@Qbm)
h"GmERd`*Z1%00+h$mZADYF*rV9elG2cAKDD[#qHr,T6qXr$`pbmh#8ppA6KJ'Er
MJ2"IPY%llV@mq2Nh[K,qqqIM2KAqM-mGRqeb@'*Eha%HHi-ZJ+[pUd$V,VKSZCl
,%`i,JDSU)B[p'2(G4jBpRGH%mjBI#'p2&LjErZ%rPPYQ6"Bqr&Ki4rKmJ[$L*q-
X-6a-q,aFZ"hUIN[ihEMRK5R#`Xp06`Q@'F+b*`Aha5H%P)q&mm,C#F,VJQ@FjFl
2'i4A2ppVDIrm6m)[K$)FQ#AmbqF&6`RIR#'Xj`H#-fBYR$(6FTH`82Mj0#&[K[#
"F(5'F%,ipM4KmM3KHiD3!#X%CJL$H2'Pm-%chbm4GJU@V5rpcT+(CH@@[b(XHZP
IThaj8AMLYjD*FbU%`&p@VKD%D49#f5SKm%EjbSXIchP9Q,AZjGm,"9m+U60+KD&
j3UMLVmpIr0DTXPRMK+&biHPAT`Rr85SX"J#3!aJ!!#(i!!"6-!#3!`J!N!-J!!!
r2!!(UI!!N!-+@-!!AF!!!&h!!*!$'Qi!N!-"GJ"1F8U$CL*"l3!J)$`r2!!!)Mb
Tm!!"5N&Q"%T!C`T)3%K"))!K33!%3UG"q[r1d2`"!#m),c`!!"PZ,`0K!!+X9)p
R3%)i#Pj#Tbmm4%&836mm"0@S(h!"%F!+ANUICaK1F6!mUA#R4N2k!#SLL%(k!#!
`2+P`TNG+JfF%F!&1G8lY!#*1F8U$CJ+Tp(!!6R9J"J#3"3&1F4mkrrC+(fB551I
Ji%(krqT3d%kk"Dj-h`F(,cVrhNjeB(*"6%&%4%008!!$!*!d8(*"E8MRB2"d8*r
#,dJ!)#"2)P3aD3!8!"JK3!!N-A`!!3!XdT%K33!ZS!,I`NcI$`C1G8Si#PjR$#!
U!!KR$#"!)""R"Lmkri41G8MR(`C"q[qHF!`L+J!%`VJ$'Q'NCJ!"2NKkrij1ZJG
Z@%q`H[pDCJ!"$U%D,JJ)+J"!!!4R"L"i!UDJ'b`U!!3U+J!)'#S!"*I8PG3J1[p
@S4ir1!)JCJ!!l&42,%JJ1[p%)JE#Z!-D@%&K!2p-)$Vr2-#i!aT"q[mi))"+K@B
%S5*J"#"&S#GQ!!#d+NJJ$P#!3IVr###!)$Vr#P'!3IVr!##!3QG)HJ#m,a9)H[m
#,cVqiLmkrZ)[1[l+,cVqbLmkrXTK!!e1-"pR)$m!5S9R##"0S#UJ+f!%)%fJ)b"
1S"mJ4k!E-Gm#)'"J)%kJ(b"(S"Yb!")%j`RM'H34!!%!)!)"!1!J6D"T!J!!(i!
")%fJDYA8ep4"q[jf5T!!C`K`!D#BF!1JQ#"0*8J!#(!!60pJq%je60pJq'!!rVi
r!#"1S"mJ4k!E-Gm#)0A8ep3`1!)J-F!+B*()*8J!#%cIB2K1G8j@!!")j`!i+'i
!$%IkrLT&q[iU)"5`NQd%)")SJ%U!Ea)J8b*Z!!LL,L!8dC14NR!!B!3`22rC60m
F!%jH6R919[r)51FH1#BZ!!JS,J!-+'i!%%(krESY52r83Llrb+%D,8Mrc&92U"`
`(cS!$%8!!'pF5'lrl$!&8d8r!+J298m[,[rXU!d`(c`!$%B!!'rF3LHTQeP2,bl
rl$!'8dBr!+J1)"mY32r`FJ%I!DQE)'lrm%U3!'F398m[#+QQ-"p)`()%`)&Ra#m
Zrr#TSf#m%#i!&'F+@8mZZ!+Q)&qJ'cmmS2a1ZJ5'9%mY32r35S"R!!'H,`"1ZJ2
@@%p+!'F+F!%G3!!@6[S#'%KZrq4)E[rJ5'lrf%kk"@T2l`!-)#lri+%H,8Mrh#!
)C`!"C#!Zrq5K(Le)rqJJ#'F!!93[,[rN,`K1ZJ@i8%mJ!fB!!+CC6bmm3dp%48*
RU"mJ(be!rr"+J'F!!)iJ3#*3FKM6`5m*6VS%Y&K2FJ1`3@Cf)!dJ3(!SdF!Y52r
d)Qlrm#44F"M9`#e+rrJ[#Nkk",TB6be!rr`JE[r`S#P35LCZrp3R5J!S@8m[,[r
`6VS9c#!IFZM3J9'!*d!!,&925(Vq-LmZrr4)E[rm,``["#mZrp`[,[rJ,blrk%k
k#XC86bmZrr#TSb4Zrp3PE[r3!!`PE[rF!"!PE[rJ!"3PE[rS!"Jr2+'B6VS$9P4
2*N!r2+LI6VS$5P42)J!J#l#"CJ4`!'!#F!%J!#9!!"`P4!!J*8`!*%Kkqm`r2+$
m2cbJr%kk![K86am!6VS98MmmSCK1ZJ--9%p+J'F%F!'JQ#"m!!!"@M!35-$JJ()
'X)&Q$%(k!+iLI!!!!c`LL"em!!(rb#"ZrmbJ'e92U"``(cS!$%8!!'pd5'lrl$!
&8d8r!+J298m[,[rXU!d`(c`!$%B!!'rF3LHTQeP2,blrl$!'8dBr!+J1)"mY32r
`FJ%I!DQE98m[,[r`UDB`(dM!FJ6!J@F),blrm+QLB-)NE[r`5T*R%&92,`UTTM!
I5-"b"-#"CkS[#UQMB+33,[r)(8!!&NcI((K1AL"I6qm!$Nl36PErr%MR!$"#,[r
m2cbJr%kk!La86b4!5S"RA#m!6VS"J&K25J"R8#!+*N!J3#mS!!`r2+$m2cbJr%k
k!Gj86am!6VS81#",)'J!%+!I)%XJD!!BS"mJI!!!!9S`%%M!i)"b"V#"CJT`!#"
m!!!$2##!(A`!!Irm%#lrr%cI$!"1ANje6PErk%MR(cKC6kPe)"mU!%KZrqLSG#!
0)%!J%(+'d)%Y32rm)%"F5%2Zrq`Lf#,B@8m[2%4"9%%r2!69UD!J(bK!)%!N8$)
U!!L5DJ!%2!%d+J!'P'S!!Mi#0LlrmNM$1#lrlNM%PS3i!8M%PS4U!P+$iS-p3rr
f0Llrm%M$1#lrl%M%PS3i!NM%PS4U!P+$iS-p3rrd0LlrpYC"282rqM)Zrr653Me
"rrKC6d+R5'lrp%Kk!'Cb!4m"FJ%r!A,r,`&#*d+RU4-J(bC!,`#SF`D&!*!$H#m
-)%Y`%0(!,`LSpPP2UA8J(l#&C!*Jp&92UA33(fB#B2C`rcm!3QFJ(k!b,`ZT&#m
-UD-[,[rSU(0-haci6Pj1G3!#!!"19J!!51F!-#4Z!!JJ#LC!)%!L+!!#$)&"6%&
%CKBL+!!'$)&%3de3CJS`+!!+FJ1`3@F%F!"J!R!"60m-!%jH6R8[#PP22cbSER!
"(`"1ZK*i)&mN5&P22cbUER!"(`"1ZK*Q)PmJ5V(*CJB`2!)!B!3`2!3!*&p1G8j
@!!![!cBZ!!J`!dM!!S!!!!J!5S"["(!"B!*`!#BI6Pj1G8j@rra)ja`!0Li!#$m
$6VVrc&42(8$rr()"X!&Q%!*$"rp1Z[q!X%0Z"(!!B#KC6cmmU*p`!4m!6VS4m#!
I+J"C6cm$(blrr%kk%H!J(bJ!X)9Q!R!!60m!1%jH6R919J!!51FB-$JZ!!JNEJ!
+)%SJ%#C!)%!b%!a"384Q+$)S!!)-3805CKif"(,rYN&R'L!S!!4b'1+S!S!!N!2
r-J0)`E#"C`4`!'!#F!%G3!!160m-'%jH)&pF6dl36PB!!&925'i!#($r2`"1Z[q
5%"pR%L"Z!!JJ+!!%FKMLU!*!!2pJ!R$r6Pj1G8j@!!"96dKZ!!K`rcm!6VVrC"!
ICa!JEJ!))#J!"!+!!2q3!f!#F2p1ANje6PB!!%MR'$JQEJ!)+'i!$#",-,`$!A!
!*%`NJ#Bm!!!"*0H5"T)!!!*)"T)!N!-J+$`!N!1!fC,CNLJm!!!%N!$CNYH5fC)
'NJ#3!h`'NJ!!J!"`!#4Z!"!NJ!D5!*!$*!D5!*!$)!D5!*!$5!D5!*!$2N*!60m
F'%jH6R919[rN51FI1#CZ!!JU,J!-)!XS3#e!rqK`*0R!,8crl(!JfF!Y62r`F%M
C`#e-rr4`2YR!)!b3!)Z`K@-'F'91qJ#b3N!q!%*!28$rj$B(F#5f3'4)F!5f3'3
%F!"J$(!!-!0CJ'S#9S$NJ(J!1!-Y42rif+lrk#4%&)!J,[rid)$3V[r`)%!`V[r
NF!%8%R)!%J,MB0&Zrq454f#`3N!q!(!"2!!f"h!IYN"N4(!"YN"N"(!!B!a`!$!
$8i"U!P+!iS"i!$J$,86rr0LZrq`N4"5!)#lrr0#!d+lrp#"!-)C`!435FJ!5!Z0
Jh%"54f#d3N"-haci6Pj1G8j@rr")jami*'i!##CZ!!`k,J!3+'i!%N*!2!!b"A!
!-!(3J$3'FJ!b!V#"Ea4#3$3'FJ!b!Y+"dS`J36#!8NCJfN*!2!"`!Me!rr)f"VC
&C!!!Z%*!2J"#3$e!rr"`!$!$jB$3LL"!)"!Y32rd-JC`!$!"d)XJ3"J3GJ!@",C
(B`!!JM!ZrrCb!F""d@lrm(!!-!06J$3(FJ!b!V#"Ecii,[r`GJ!f"#e$rrc@JpD
-)%0+8'B5)#lrr0#!d)`J3$#Zrr*8E[rb-Llrm(!!-!(3J0#-)%!`%$e!rr"J&M!
&d%$34M3Zrr"b!$)#dS(5M#""-)"54b!Zrr6LL#e!rr4J!2pX8NCJ!2p%60mFq%j
H6R919[rm51FF-#4Z!!Jf,J!-*Qi!$M)$F!!`!HD!1!!`!h)(`%%k!(!!,8$rr$3
%FJ!b!Y++)%%5%(!!%!%d"A)!-J,LS()"`)(4V[rm)Llrr11*dSXJ36)3F!!`!5e
!rra546!&FJL`3@B'3N!k!&*%-Li!%R!!-!(3J,#ZrraM!Q#U%#lrra)Z!"25!C!
!!8cI$$K1ANje6PErr%MR(b!NEJ!)1#i!$$SZ!!ib"(!!-!(QJ$`!-J4d"m*#2J&
f!$B!eSSJ3a!3G!!8!#e#rra`!$!"0!9b!$)#d)(QJ()#X)&R$()"X)&R)%U!Cc4
J-M3'FJ!b!P5"dSSJ34)3F!!3!A)3ikL"V[rm0!Cb!$)#8S(5LL""%K"`!"!"iBL
"V[rm)#lrr$3(FJ!b!Z+S,8$rr($rFL!f"A3!0!15JZ+S`'lrrNcI"2K1ANje6PE
rf%MR(cJQEJ!)+'i!$L!m!!!"*0'Z!")J2!!!!NM4VJ!5)#i!%Le!rqab)01Z!")
L,J!5,8(rm#3m!*!$J0@Z!")N,J!5,8,rp#4,'"*f!"B%,82rq1D$HJI'49*$282
rh#BZrrMLJhS$aN983ce$rqCf!6SZrqEVBce$rqKq3-J(I!!F"$e'rq*i!HYN8d3
p42rJ+Llrq(i"bSGR#(S!1J46K@!#H[mp4IrHH!Jp42rN5NCR4LmZ!")[!$m$8NS
[#NkkrcT2l`!1jd$4E[rN,bi!%LmZrr!r!bmZrqa1ZJX)6qm!$LmZrr3r!bmZrq`
[,[r`6VVmV%r[!!j#3$e!rpJ`,[rBX'i!$'3!!6S`,[rLCcSN3$mZrqJ[,[rd2bl
rj#m,6VVpMNr[!!`5!#!+F!!3!6e!rpTd!$3!e+lrl#"#%""b!")!dflrj'!F2bl
rjMmZrq3[#dkkrI"36ce!rpS`,[rQd@lrj$!ZrpU`E[rHCKBb,[rB8Qlrf(!!-!(
3M#"!3K"J!2pk-#lrfV"Zrq"Q!!#8-#lriQFk*%!r,[rS,blrp$mZrq3[#dkkr3C
2l`!-%J!J#R!!%!%p32rDG!!d!05Zrq`J3K!3FJ!5!00Zrq4J($mZrqBr,[rN,`Y
1Z[eS8%mp32rD-#lrjY&Zrq4@E[rD-#lrfP0ZrpT+3'F!r`!i,[rBGJ!f"#e$rra
6JpD-)%-3%#)Zrrc5M#""%)"5E[rBB-i3,[rGd#lrfc3ZrpK5E[rBFJ!b!Y+-)%%
3J'!!rVib,[rNF!!`!9k!jS"-haci6Pj1G8j@ria)jami*Qi!##SZ!!`SEJ!3,#i
!&#e,rmK`*0I!,8[ri(!Jem!Y5rr-F%MA`#e,rq3Y62q8*M`!!!%NeklrP#!m!!!
#50'Zrj4`)0'Zrj3S2!#3!i$CV[q8fDlrP#eZrj6rY#Jm!!!%N!$CV[q8,@lrP2q
ieklrP#eZrj6r[0QZrj3YE[q8rp4`I0'Zrj3YE[q8rk3J2!!!J!$4V[q8)#lrP*!
!M,#&B`T`C6e!!#K1qJCkF!!Z!%*!28$rM#4Zrk69r!!!J!!Y5[qS,@lrT2q3!#e
m!!#!!2rS5'lrk#mZrk3JEJ!N6T!!8%mJ,[rSCJT`Cce!!#K1qJBd*'lrN!"55VA
ZrkKMD#"Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHlrT#e)rr!JE[qSNHlrN!!Y52rX)!K
R$L"Zrj!!)QlrT#!ZrqbL,L4Zrk69l[rX,8VrN!")E[r`,blrT#"Z!#41N!"36b!
Zrr#`V[rdC!T`Cce!!#K1qJA!)'lrN!"5V[q3!"!3(8$rS()!%J$5390"28(rd$!
Zrp$33$e!rp)JEJ!F)"$3VJ!J,8$rX#4!,``[,[qi2c`"*#mZrj!!6VVlmNr[!!i
b!#!+F!!`!G'Zrj!!,``[,[qd2c`"*#mZrlK1ZJHk6qm!$LmZrl`r2!%N,blrZ#m
Zrl41Z[PF6qm!$L4!,``[,[qi2blrd#mZrj!!6VVlS%r[!!ib!#!+F!!`!G'Zrj!
!,``[,[qd2blrd#mZrlK1ZJGS6qm!$LmZrp3r,[r3,blrZ#mZrl41Z[N+6qm!$R!
!,J"#3$e!ri`YEJ!Jrk`JE[qXXHlrX'3!"+K#3$e!rjJ-EJ*)rjKN!!$#-#lrM'B
!!)`NE[q3!&*+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL
4l[q3!#e)rq`J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[q
N)'i!*%k3!&"2)#lrm,#Zrr4N#R"R28!!+%lk"%)JE[q3!&+Zrj!!%K"`!"!",J"
`#$e!ri``"h)"`%(4E[qB-LlrQ(!!-!(3J0#Zrl`J3$!328$rQ#!(iSJZ!&0Zria
J!2mi"'i#52qB$'i"!2qBC"!JE[qX8UlrV"#ZrjPJ!2m)"'i"!2qB1#lrQ(B!0J3
Y3rrieS2@V[r-)%-`%$e!rjSL,[ridUlrb#""%K"`!"!"28$rR%T!C`!!`JaZ!"M
rM')!!*JNE[q3!&*+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"
ZrkL4l[q3!#e)rq`J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr!
[,[qN)'i!*%k3!&"2)#lrm,#Zrr4N#R"R28!!+%lk!bJJE[q3!&+Zrj!!%K"`!"!
"0#lrM()!-J,MU)k!8'lrM'!!rf*`rh)J1#lrR(B!0J55Jq+S`%I4E[qD)!IQU#i
!Q@lrM%*!28$rQ$!ZrjL`E[r5C!!!`M!ZriaQ!!#-*'lrN!"55VAZrkKMD#"Zrj!
!8NL4l[qS,8Mrp#"Zrj!!NHlrT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj!!)Ql
rT#!ZrqbL,L4Zrk69l[rX,8VrN!")E[r`,blrT#"Z!#41N!"36b!Zrr#`V[rdC!T
`Cce!!#K1qJ*B)'lrN!"5V[q3!")3F!!3!5i!F!Jp32q--!Gb!F""d@lrQ$)ZrjK
`!$!"d)$3V[r8)%!`%$e!rjJJ"q+),J"6E[q-B!$r0M!Zrp+4E[qB1#lrQ(B!0J3
Y3rrmeS2@V[rN)%-`%$e!rjiL,[rmdUlri#""%K"`!"!"28$rR%T!C`!!`JaZ!"M
rM')!!*JNE[q3!&*+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"
ZrkL4l[q3!#e)rq`J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr!
[,[qN)'i!*%k3!&"2)#lrm,#Zrr4N#R"R28!!+%lk!9SJE[q3!&+Zrj!!%K"`!"!
"0#lrM()!-J,MU)k!8'lrM'!!rf*`rh)J1#lrR(B!0J55Jq+S`%I4E[qH)!IQU#i
!Q@lrM#"Zrk`b,[qHF!!`!C(!,8MrP,(Z!#"PB#"Zrj45V[q8%"!JE[qX8UlrV"#
!)'lrP&+Zrj33%#"Zrka5V[qX%)!JE[q88UlrP"!3)'lrV&+Zrk`3J$!ZrjT6E[q
D5N"R!2[H)'lrP&+Zrj33%#"Zrka5V[qX%)"Jh&CZrjSJEJ!BdFBb,[qHF!!`!5*
Zrkb6lJ!JN!#*NF!Y52q8-#lrQQFQ)'i!'0('XHlrP'-D)'lrP&+Zrj33%#"Zrka
5V[qX%)"6E[qDB03YEJ!Jrj3`,[qD8flrQNT!C`$lCL"Zrj45V[q8%"!JE[qX8Ul
rV"#!B0`JE[qXXHlrX'F)F'Fp3!!SB"3JE[qXNHi!)#*Z!"`LL%*!28!!+%cI(2K
1AL"I6qm!)%l3!(!m!$iJ!!"i)$i`)#BQ)(JJ2$dc-J!!1N0[EA"bCA0cD@pZ1N4
PBfpYF(*PFh0TEfi`-c!a,Q-!!$`!2L!!!(JJ2M!J*LBJH#!m26-b!!!k3fpYF(*
PFh0TEfik4'9MEfe`FQ9cFfP[EM!c-$%ZB`!!6PErk%MR(cJq,J!)+'i!$$BZ!!T
`!$!$1!Gb!$)%N!#"FJ'`J@m!!E3p42rS282rkP*ZrqJ`,[rSX'i!#Q3FFJ!b!0+
-)%%3%$3(FJ!b!Y+-)%%5%,!"C!*JeP0ZrqS`,[rUX%GM(()!-J$5M#""%"!d"h)
!-J,5M#""%K#`!@-#B0J`,[rSX'lrkQ8#B()i,[rSGJ!f"#e$rr$@M#4$%K*`!"!
"28$rl$SZrqTi!$J&,86rp0L-*N33%a5!&Ulrl5!Zrr$3J0#Z!"!J3$!328$rl#)
Zrr65JG+Z!"!J36)3*#lrm05#e+i!%#"#-)%L,[rddS(5VJ!3)%%`J'!!rc)`,[r
UX%GQ"P*(B!$r"$J(GJ!f"#e$rrM@M#4$%K*`!"!"28$rl$`ZrqTk!$S',8Arr0U
-*N83%a5!&Ulrl5!ZrrM3J0#Z!"!J3$!328$rl#)Zrrc5JG+Z!"!J36)3*#lrq05
#e+i!%#"#-)%L,[rmdS(5VJ!3)%%`J#!Zrr`L,[riN!#"0#i!#R)!-J)N,[rm8S+
5JV#"E"i[,J!3,``r"Mm%6VVqA%r[!!``,[rU8N!q!'!!rP`[,J!3,``r,J!+-#l
rkP*!2`"1Z[if6qm!$$eZrqS!#Q!!rMK-haci6Pj1G8j@rq4)jami*'i!#$SZ!!`
QEJ!1+'i!%Le-rr!J2!!!!56C`#e-rr4#3$`!0JDf4@3XH!!i!be%rrMBLL"%%"!
L,[ridUlrm#""%)!J,[rid)$3V[rd)%!`Je*'B-i[,[rd,blrm$m&3QG1Z[fb6qm
!$%*!2!!f"VC&C"*`!$!$d+lrm#"!5K"Q"&*'B1K`!#e!rq3f"VC&C!!!U%T$Cc)
J,[rNH!!i!be%rrcBV[r`)%38%()!%J)Q,[rm8i2@V[r`)%-@%(3!&!15JZ1S,8$
rj$3'FJ!b!Y+Zrr!J34)3F!!3!6i!,@lrj2rXF!!Y32rS-!G64dT!Cb!J,[rSiiJ
L,[rXG!(#JS#",8$rk#!ZrqcLL#e!rqaJf$3'FJ!b!Y+"dUlrp#""-K"`!$!"jB$
3Lb"!)+lrk&*'8Ulrj'!!re4-haci6Pj1G5*I)&qJ*5k!DJ*#Pdl4)Pm5(c!I5J&
R"+G'B!+M4Lk)6Y%LAa)I-"mJAdS"C`5Q4f!#SNG1d3#3!`S!1+!"!!8!N!B"!!!
"SiS!!D++!!!&5e028P3(dJ#!!"`%FJ!@38a59!!+!,T"9A-b!!!"2N*14%`!!3&
+3dj86!!!!@*$6d4&!!F"EN4"9%%!!!(14%P86!!2!GT%6%p(!!3#QNC548B!"!,
@4Q9KG!!!!a**3diM!!3$(NP$6di!!!0D8%P$9!!%!fC3Ff9d!!!$SP0*@N8!!!1
Z8e45)!!"!lT69&)M!!!$dQ&eFh3!!32HBfPMEJ!!!rCNBh4L!!%%!Q4XChJ!!33
DD@0X1!!!"$*fCA*c!!%%2J#!rrmJ!*!)JIrr)!!!%!#3"B,rrb!!!#!!N!@&rrm
N!!!`!$lMY!#'rrmN!!"!!5Rm6!#(rrmJ!!"3!*!&L2rr)!!!B!#3"!)!rrmJ!!"
b!*!%!J(rrb!!!))!N!3%!Irr)!!!NJ#3"!5[rrm!!"KB!*!((J!!''J!N!@!rrm
!!"L-!*!%!3$rr`!!'-3!N!3"#2rr)!!Bj!#3"[rr+!'(i!#3"3%!R4`!*Um!2ZP
S!!)!Ta`!X(`",66!!!-!X4`!cCm"*2NB!!3!Za`"#E%!2ZN`!!8!a4`"1ci!2q+
S!!B!ca`"@r%!2Z1`!!Irr`!"L!S!N!ErrbJ!JH`!N!@!rrm!N!1L!*!&J[rr!!!
"!*!'KIrr*!!"AJ%Tr0J!K[rr*!!"Y!!qkE3!Krrr!!!#03#3"BMrr`!!!S8!N!@
errmJ!!0G!*!%!3Arrb!!!mm!N!3""rrr)!!Br`#3"!%)rrmJ!"QJ!*!%!J$rr`!
!"(`!N!3#!Irr!!!%ZJ#3"!2SrrmJ!!8'!*!%"!(rrb!!"6)!N!3%5`!Y"!!D3`%
PAC3%Vrrr!!!DN`#3"!%&!!!J!!@b!*!%!3F!15!!'Y%!N!3"#!"+)!!Dl3#3"!2
SrrmJ!!A8!*!%"%X!CJ3!'`N!2ZSX!)$rr`!!'b)!N!@"rrm!!"XY!*!&J[rr!!!
E1!#3"B2rr`!!'d-!N!@%rrm!!"Y1!*!'rrm!!D*m!*!&J2rr!!!E@3#3"B(rr`!
!(&d!N!@#rrm!!"eK!*!&Jrrr!!!HC3#3"B6rr`!!(fN!N!3%5rrr"!!JE3!i3L`
!J[rr!!!&m!#3"!2Srrm!!!F6!*!%"%crr`!!$L%!N!3%6Irr!!!2fJ#3"!41rrm
!!"'6!*!&J2rr!!!6)3#3"2q3"!!"Kr`!N!3#!!!()!!A@!#3"!)"!!iJ!"GS!*!
&J2rr!!!AG!#3"h)!!#$S!*!&K2rr!!!K3`#3"!4,rrm%!#&(!$iNB!%&rrm!!"H
d!*!%!3Mrr`!!)Qd!N!3""3!A!!!Aj3#3"!%)!)%!!#+K!*!&K2rr!!!LU`#3"3(
rrb!!&qm!N!8#rrmJ!"Jb!*!%"P0dBA4eF`C`FQpYF(3)a#"cG@CQDAJ'8h4KG(9
c$NphEQ9b)(*PFfpeFQ0P#dPZFf9bG#"%DA0V%%9iDA0dD@jR8'&cFhG[FQ3E4AK
TFh4TEQG3BA0cGfpbC#e"F("PBA*KEQ0P#dPZFf9bG#"%DA0V$NphEQ9b)(*PFfp
eFQ0P'd9iDA0dD@jR8'&cFhG[FQ3Y3A"`C@&bB@jMC3P6C@GYC@jd)$%*8f9RE@9
ZG#!b#90PCfePER3J-`P6C@GYC@jd)$8*8f9RE@9ZG#!f#90PCfePER3J0Rf9:
|
Changes to tests/all.tcl.
1 2 3 4 5 6 | # all.tcl -- # # This file contains a top-level script to run all of the Tcl # tests. Execute it by invoking "source all.test" when running tcltest # in this directory. # | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# all.tcl --
#
# This file contains a top-level script to run all of the Tcl
# tests. Execute it by invoking "source all.test" when running tcltest
# in this directory.
#
# Copyright (c) 1998-2000 Ajuba Solutions.
# All rights reserved.
#
# RCS: @(#) $Id: all.tcl,v 1.10.2.1 2000/07/27 01:39:20 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
set ::tcltest::testSingleFile false
|
| ︙ | ︙ |
Changes to tests/autoMkindex.tcl.
| ︙ | ︙ | |||
67 68 69 70 71 72 73 |
::proc $name $body $args
}
namespace eval ::buried {
proc mycmd4 args {return "mycmd"}
{my proc} mycmd5 args {return "mycmd"}
}
{::buried::my proc} mycmd6 args {return "another"}
| > > > > > > > > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
::proc $name $body $args
}
namespace eval ::buried {
proc mycmd4 args {return "mycmd"}
{my proc} mycmd5 args {return "mycmd"}
}
{::buried::my proc} mycmd6 args {return "another"}
# A correctly functioning [auto_import] won't choke when a child
# namespace [namespace import]s from its parent.
#
namespace eval ::parent::child {
namespace import ::parent::*
}
proc ::parent::child::test {} {}
|
Changes to tests/autoMkindex.test.
1 2 3 4 5 6 7 8 9 10 11 | # Commands covered: auto_mkindex auto_import # # This file contains tests related to autoloading and generating # the autoloading index. # # Copyright (c) 1998 Lucent Technologies, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Commands covered: auto_mkindex auto_import
#
# This file contains tests related to autoloading and generating
# the autoloading index.
#
# Copyright (c) 1998 Lucent Technologies, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: autoMkindex.test,v 1.11.2.1 2001/08/24 16:19:10 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# temporarily copy the autoMkindex.tcl file from testsDirectory to
|
| ︙ | ︙ | |||
66 67 68 69 70 71 72 |
set ::result ""
foreach elem [lsort [array names auto_index]] {
lappend ::result [list $elem $auto_index($elem)]
}
}
namespace delete tcl_autoMkindex_tmp
set ::result
| | | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
set ::result ""
foreach elem [lsort [array names auto_index]] {
lappend ::result [list $elem $auto_index($elem)]
}
}
namespace delete tcl_autoMkindex_tmp
set ::result
} "{::buried::explicit $element} {::buried::inside $element} {{::buried::my proc} $element} {::buried::mycmd1 $element} {::buried::mycmd4 $element} {::buried::myproc $element} {::buried::pub_one $element} {::buried::pub_two $element} {::buried::relative $element} {::buried::under::neath $element} {::buried::within $element} {::parent::child::test $element} {indented $element} {normal $element} {top $element}"
test autoMkindex-2.1 {commands on the autoload path can be imported} {
file delete tclIndex
auto_mkindex . autoMkindex.tcl
set interp [interp create]
set final [$interp eval {
|
| ︙ | ︙ | |||
134 135 136 137 138 139 140 |
}
namespace delete tcl_autoMkindex_tmp
# Reset initCommands to avoid trashing other tests
AutoMkindexTestReset
set ::result
| | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
}
namespace delete tcl_autoMkindex_tmp
# Reset initCommands to avoid trashing other tests
AutoMkindexTestReset
set ::result
} "{::buried::explicit $element} {::buried::inside $element} {{::buried::my proc} $element} {::buried::mycmd1 $element} {::buried::mycmd2 $element} {::buried::mycmd4 $element} {::buried::myproc $element} {::buried::pub_one $element} {::buried::pub_two $element} {::buried::relative $element} {::buried::under::neath $element} {::buried::within $element} {::parent::child::test $element} {indented $element} {mycmd3 $element} {normal $element} {top $element}"
test autoMkindex-3.3 {auto_mkindex_parser::command} {knownBug} {
auto_mkindex_parser::command {buried::my proc} {name args} {
variable index
variable scriptFile
puts "my proc $name"
|
| ︙ | ︙ |
Changes to tests/binary.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # This file tests the tclBinary.c file and the "binary" Tcl command. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1997 by Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# This file tests the tclBinary.c file and the "binary" Tcl command.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1997 by Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: binary.test,v 1.7.2.1 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
test binary-2.1 {DupByteArrayInternalRep} {
|
| ︙ | ︙ | |||
36 37 38 39 40 41 42 |
test binary-1.3 {Tcl_BinaryObjCmd: format error} {
list [catch {binary f} msg] $msg
} {1 {wrong # args: should be "binary format formatString ?arg arg ...?"}}
test binary-1.4 {Tcl_BinaryObjCmd: format} {
binary format ""
} {}
| < | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
test binary-1.3 {Tcl_BinaryObjCmd: format error} {
list [catch {binary f} msg] $msg
} {1 {wrong # args: should be "binary format formatString ?arg arg ...?"}}
test binary-1.4 {Tcl_BinaryObjCmd: format} {
binary format ""
} {}
test binary-2.1 {Tcl_BinaryObjCmd: format} {
list [catch {binary format a } msg] $msg
} {1 {not enough arguments for all format specifiers}}
test binary-2.2 {Tcl_BinaryObjCmd: format} {
binary format a0 foo
|
| ︙ | ︙ | |||
1460 1461 1462 1463 1464 1465 1466 |
catch {binary ""} result
set result
} {bad option "": must be format or scan}
# cleanup
::tcltest::cleanupTests
return
| < < < < < < < < < < < < | 1459 1460 1461 1462 1463 1464 1465 |
catch {binary ""} result
set result
} {bad option "": must be format or scan}
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/clock.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # Commands covered: clock # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1995-1998 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Commands covered: clock
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1995-1998 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: clock.test,v 1.13.2.3 2001/10/18 20:17:17 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
test clock-1.1 {clock tests} {
|
| ︙ | ︙ | |||
34 35 36 37 38 39 40 |
after 10
set end [clock clicks]
expr "$end > $start"
} {1}
test clock-2.3 {clock clicks tests} {
list [catch {clock clicks foo} msg] $msg
} {1 {bad switch "foo": must be -milliseconds}}
| | | | | | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
after 10
set end [clock clicks]
expr "$end > $start"
} {1}
test clock-2.3 {clock clicks tests} {
list [catch {clock clicks foo} msg] $msg
} {1 {bad switch "foo": must be -milliseconds}}
test clock-2.4 {clock clicks tests} {
expr [clock clicks -milliseconds]+1
concat {}
} {}
test clock-2.5 {clock clicks tests, millisecond timing test} {
set start [clock clicks -milli]
after 10
set end [clock clicks -milli]
# 60 msecs seems to be the max time slice under Windows 95/98
expr {($end > $start) && (($end - $start) <= 60)}
} {1}
# clock format
test clock-3.1 {clock format tests} {unixOnly} {
set clockval 657687766
clock format $clockval -format {%a %b %d %I:%M:%S %p %Y} -gmt true
} {Sun Nov 04 03:02:46 AM 1990}
|
| ︙ | ︙ | |||
333 334 335 336 337 338 339 340 341 342 343 344 345 346 |
foreach i {91 92 93 94 95 96} {
set dec1th [clock scan 12/1/$i -gmt 1]
set monday [clock scan "monday 1 week ago" -base $dec1th -gmt 1]
lappend res [clock format $monday -format %Y-%m-%d -gmt 1]
}
set res
} {1991-11-25 1992-11-30 1993-11-29 1994-11-28 1995-11-27 1996-11-25}
# clock seconds
test clock-5.1 {clock seconds tests} {
expr [clock seconds]+1
concat {}
} {}
test clock-5.2 {clock seconds tests} {
| > > > > > | 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 |
foreach i {91 92 93 94 95 96} {
set dec1th [clock scan 12/1/$i -gmt 1]
set monday [clock scan "monday 1 week ago" -base $dec1th -gmt 1]
lappend res [clock format $monday -format %Y-%m-%d -gmt 1]
}
set res
} {1991-11-25 1992-11-30 1993-11-29 1994-11-28 1995-11-27 1996-11-25}
test clock-4.41 {ago with multiple relative units} {
set base [clock scan "12/31/1999 00:00:00"]
set res [clock scan "2 days 2 hours ago" -base $base]
expr {$base - $res}
} 180000
# clock seconds
test clock-5.1 {clock seconds tests} {
expr [clock seconds]+1
concat {}
} {}
test clock-5.2 {clock seconds tests} {
|
| ︙ | ︙ | |||
408 409 410 411 412 413 414 415 416 417 418 |
clock format [clock scan "next july" -base [clock scan "june 1, 2000"]] \
-format %m.%Y
} "07.2000"
test clock-7.3 {clock scan next monthname} {
clock format [clock scan "next may" -base [clock scan "june 1, 2000"]] \
-format %m.%Y
} "05.2001"
# cleanup
::tcltest::cleanupTests
return
| > > > > > > > > > > < | 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 |
clock format [clock scan "next july" -base [clock scan "june 1, 2000"]] \
-format %m.%Y
} "07.2000"
test clock-7.3 {clock scan next monthname} {
clock format [clock scan "next may" -base [clock scan "june 1, 2000"]] \
-format %m.%Y
} "05.2001"
# We use 5am PST, 31-12-1999 as the base for these scans because irrespective
# of your local timezone it should always give us times on December 31
set 5amPST 946645200
test clock-8.1 {clock scan midnight/gmt range bug 413397} {
set fmt "%m/%d"
list [clock format [clock scan year -base $5amPST -gmt 0] -format $fmt] \
[clock format [clock scan year -base $5amPST -gmt 1] -format $fmt]
} {12/31 12/31}
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/cmdAH.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # The file tests the tclCmdAH.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1996-1998 by Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# The file tests the tclCmdAH.c file.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1996-1998 by Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: cmdAH.test,v 1.10.2.2 2001/10/17 19:29:25 das Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
global env
|
| ︙ | ︙ | |||
1170 1171 1172 1173 1174 1175 1176 |
test cmdAH-20.3 {Tcl_FileObjCmd: atime} {
string tolower [list [catch {file atime _bogus_} msg] \
$msg $errorCode]
} {1 {could not read "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
test cmdAH-20.4 {Tcl_FileObjCmd: atime} {
list [catch {file atime $file notint} msg] $msg
} {1 {expected integer but got "notint"}}
| | | 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 |
test cmdAH-20.3 {Tcl_FileObjCmd: atime} {
string tolower [list [catch {file atime _bogus_} msg] \
$msg $errorCode]
} {1 {could not read "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
test cmdAH-20.4 {Tcl_FileObjCmd: atime} {
list [catch {file atime $file notint} msg] $msg
} {1 {expected integer but got "notint"}}
test cmdAH-20.5 {Tcl_FileObjCmd: atime touch} {unixOrPc} {
if {[string equal $tcl_platform(platform) "windows"]} {
set old [pwd]
cd $::tcltest::temporaryDirectory
if {![string equal "NTFS" [testvolumetype]]} {
# Windows FAT doesn't understand atime, but NTFS does
# May also fail for Windows on NFS mounted disks
cd $old
|
| ︙ | ︙ | |||
1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 |
list [catch {file t x} msg] $msg
} {1 {ambiguous option "t": must be atime, attributes, channels, copy, delete, dirname, executable, exists, extension, isdirectory, isfile, join, lstat, mtime, mkdir, nativename, owned, pathtype, readable, readlink, rename, rootname, size, split, stat, tail, type, volumes, or writable}}
test cmdAH-30.8 {Tcl_FileObjCmd: error conditions} {
list [catch {file dirname ~woohgy} msg] $msg
} {1 {user "woohgy" doesn't exist}}
# channels
test cmdAH-31.1 {Tcl_FileObjCmd: channels, too many args} {
list [catch {file channels a b} msg] $msg
} {1 {wrong # args: should be "file channels ?pattern?"}}
test cmdAH-31.2 {Tcl_FileObjCmd: channels, too many args} {
| > > > > > > > > | | | | | > > | > > | < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
list [catch {file t x} msg] $msg
} {1 {ambiguous option "t": must be atime, attributes, channels, copy, delete, dirname, executable, exists, extension, isdirectory, isfile, join, lstat, mtime, mkdir, nativename, owned, pathtype, readable, readlink, rename, rootname, size, split, stat, tail, type, volumes, or writable}}
test cmdAH-30.8 {Tcl_FileObjCmd: error conditions} {
list [catch {file dirname ~woohgy} msg] $msg
} {1 {user "woohgy" doesn't exist}}
# channels
# In testing 'file channels', we need to make sure that a channel
# created in one interp isn't visible in another.
interp create simpleInterp
interp create -safe safeInterp
interp c
safeInterp expose file file
test cmdAH-31.1 {Tcl_FileObjCmd: channels, too many args} {
list [catch {file channels a b} msg] $msg
} {1 {wrong # args: should be "file channels ?pattern?"}}
test cmdAH-31.2 {Tcl_FileObjCmd: channels, too many args} {
# Normal interps start out with only the standard channels
lsort [simpleInterp eval [list file chan]]
} [lsort {stderr stdout stdin}]
test cmdAH-31.3 {Tcl_FileObjCmd: channels, globbing} {
string equal [file channels] [file channels *]
} {1}
test cmdAH-31.4 {Tcl_FileObjCmd: channels, globbing} {
lsort [file channels std*]
} [lsort {stdout stderr stdin}]
set newFileId [open gorp.file w]
test cmdAH-31.5 {Tcl_FileObjCmd: channels} {
set res [file channels $newFileId]
string equal $newFileId $res
} {1}
test cmdAH-31.6 {Tcl_FileObjCmd: channels in other interp} {
# Safe interps start out with no channels
safeInterp eval [list file channels]
} {}
test cmdAH-31.7 {Tcl_FileObjCmd: channels in other interp} {
list [catch {safeInterp eval [list puts $newFileId "hello"]} msg] $msg
} [list 1 "can not find channel named \"$newFileId\""]
interp share {} $newFileId safeInterp
interp share {} stdout safeInterp
test cmdAH-31.8 {Tcl_FileObjCmd: channels in other interp} {
# $newFileId should now be visible in both interps
list [file channels $newFileId] \
[safeInterp eval [list file channels $newFileId]]
} [list $newFileId $newFileId]
test cmdAH-31.9 {Tcl_FileObjCmd: channels in other interp} {
lsort [safeInterp eval [list file channels]]
} [lsort [list stdout $newFileId]]
test cmdAH-31.10 {Tcl_FileObjCmd: channels in other interp} {
# we can now write to $newFileId from slave
safeInterp eval [list puts $newFileId "hello"]
} {}
interp transfer {} $newFileId safeInterp
test cmdAH-31.11 {Tcl_FileObjCmd: channels in other interp} {
# $newFileId should now be visible only in safeInterp
list [file channels $newFileId] \
[safeInterp eval [list file channels $newFileId]]
} [list {} $newFileId]
test cmdAH-31.12 {Tcl_FileObjCmd: channels in other interp} {
lsort [safeInterp eval [list file channels]]
} [lsort [list stdout $newFileId]]
test cmdAH-31.13 {Tcl_FileObjCmd: channels in other interp} {
safeInterp eval [list close $newFileId]
safeInterp eval [list file channels]
} {stdout}
# This shouldn't work, but just in case a test above failed...
catch {close $newFileId}
interp delete safeInterp
interp delete simpleInterp
# cleanup
catch {testsetplatform $platform}
catch {unset platform}
# Tcl_ForObjCmd is tested in for.test
|
| ︙ | ︙ |
Changes to tests/cmdIL.test.
1 2 3 4 5 6 7 8 9 10 | # This file contains a collection of tests for the procedures in the # file tclCmdIL.c. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# This file contains a collection of tests for the procedures in the
# file tclCmdIL.c. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: cmdIL.test,v 1.12.2.2 2001/10/08 15:50:24 dkf Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
test cmdIL-1.1 {Tcl_LsortObjCmd procedure} {
|
| ︙ | ︙ | |||
78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
test cmdIL-1.22 {Tcl_LsortObjCmd procedure, unique sort} {
lsort -integer -unique {3 1 2 3 1 4 3}
} {1 2 3 4}
test cmdIL-1.23 {Tcl_LsortObjCmd procedure, unique sort with index} {
# lsort -unique should return the last unique item
lsort -unique -index 0 {{a b} {c b} {a c} {d a}}
} {{a c} {c b} {d a}}
# Can't think of any good tests for the MergeSort and MergeLists
# procedures, except a bunch of random lists to sort.
test cmdIL-2.1 {MergeSort and MergeLists procedures} {
set result {}
set r 1435753299
| > > > > > > > > > > > > > > > > > > > > > > | 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 |
test cmdIL-1.22 {Tcl_LsortObjCmd procedure, unique sort} {
lsort -integer -unique {3 1 2 3 1 4 3}
} {1 2 3 4}
test cmdIL-1.23 {Tcl_LsortObjCmd procedure, unique sort with index} {
# lsort -unique should return the last unique item
lsort -unique -index 0 {{a b} {c b} {a c} {d a}}
} {{a c} {c b} {d a}}
test cmdIL-1.24 {Tcl_LsortObjCmd procedure, order of -index and -command} {
catch {rename 1 ""}
proc testcmp {a b} {return [string compare $a $b]}
set l [list [list a b] [list c d]]
set result [list [catch {lsort -command testcmp -index 1 $l} msg] $msg]
rename testcmp ""
set result
} [list 0 [list [list a b] [list c d]]]
test cmdIL-1.25 {Tcl_LsortObjCmd procedure, order of -index and -command} {
catch {rename 1 ""}
proc testcmp {a b} {return [string compare $a $b]}
set l [list [list a b] [list c d]]
set result [list [catch {lsort -index 1 -command testcmp $l} msg] $msg]
rename testcmp ""
set result
} [list 0 [list [list a b] [list c d]]]
# Note that the required order only exists in the end-1'th element;
# indexing using the end element or any fixed offset from the start
# will not work...
test cmdIL-1.26 {Tcl_LsortObjCmd procedure, offset indexing from end} {
lsort -index end-1 {{a 1 e i} {b 2 3 f g} {c 4 5 6 d h}}
} {{c 4 5 6 d h} {a 1 e i} {b 2 3 f g}}
# Can't think of any good tests for the MergeSort and MergeLists
# procedures, except a bunch of random lists to sort.
test cmdIL-2.1 {MergeSort and MergeLists procedures} {
set result {}
set r 1435753299
|
| ︙ | ︙ |
Changes to tests/cmdMZ.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # The tests in this file cover the procedures in tclCmdMZ.c. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | > > | > > > | 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 |
# The tests in this file cover the procedures in tclCmdMZ.c.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: cmdMZ.test,v 1.7.2.2 2001/10/17 19:29:25 das Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
set tcltest::testConstraints(notLinux) \
[expr {![string equal Linux $tcl_platform(os)]}]
# Tcl_PwdObjCmd
test cmdMZ-1.1 {Tcl_PwdObjCmd} {
list [catch {pwd a} msg] $msg
} {1 {wrong # args: should be "pwd"}}
test cmdMZ-1.2 {Tcl_PwdObjCmd: simple pwd} {
catch pwd
} 0
test cmdMZ-1.3 {Tcl_PwdObjCmd: simple pwd} {
expr [string length pwd]>0
} 1
test cmdMZ-1.4 {Tcl_PwdObjCmd: failure} {unixOnly notLinux} {
# We don't want this test to run on Linux because they do a
# permissions caching trick which causes this to fail. The
# caching is incorrect, but we have no control over that.
file delete -force foo
file mkdir foo
set cwd [pwd]
cd foo
file attr . -permissions 000
set result [list [catch {pwd} msg] $msg]
cd $cwd
|
| ︙ | ︙ | |||
69 70 71 72 73 74 75 |
# Tcl_SourceObjCmd
test cmdMZ-3.1 {Tcl_SourceObjCmd: error conditions} {macOnly} {
list [catch {source} msg] $msg
} {1 {wrong # args: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?"}}
test cmdMZ-3.2 {Tcl_SourceObjCmd: error conditions} {macOnly} {
list [catch {source a b} msg] $msg
| | | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# Tcl_SourceObjCmd
test cmdMZ-3.1 {Tcl_SourceObjCmd: error conditions} {macOnly} {
list [catch {source} msg] $msg
} {1 {wrong # args: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?"}}
test cmdMZ-3.2 {Tcl_SourceObjCmd: error conditions} {macOnly} {
list [catch {source a b} msg] $msg
} {1 {bad argument: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?"}}
test cmdMZ-3.3 {Tcl_SourceObjCmd: error conditions} {unixOrPc} {
list [catch {source} msg] $msg
} {1 {wrong # args: should be "source fileName"}}
test cmdMZ-3.4 {Tcl_SourceObjCmd: error conditions} {unixOrPc} {
list [catch {source a b} msg] $msg
} {1 {wrong # args: should be "source fileName"}}
test cmdMZ-3.5 {Tcl_SourceObjCmd: error in script} {
|
| ︙ | ︙ |
Changes to tests/compile.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # This file contains tests for the file tclCompile.c. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1997 by Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# This file contains tests for the file tclCompile.c.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1997 by Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: compile.test,v 1.8.2.1 2002/03/15 20:10:02 msofer Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# The following tests are very incomplete, although the rest of the
|
| ︙ | ︙ | |||
186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
set x {{0}}
set y 0
while {$y < 100} {
if !$x {incr y}
}
} {}
# cleanup
catch {rename p ""}
catch {namespace delete test_ns_compile}
catch {unset x}
catch {unset y}
| > > > > > > > > | 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
set x {{0}}
set y 0
while {$y < 100} {
if !$x {incr y}
}
} {}
# Test to catch buffer overrun in TclCompileTokens from bug 530320
# Backported from Tcl8.4 - hence the non-sequential numbering.
test compile-12.3 {check for a buffer overrun} {
proc crash {} {
puts $array([expr {a+2}])
}
list [catch crash msg] $msg
} {1 {syntax error in expression "a+2"}}
# cleanup
catch {rename p ""}
catch {namespace delete test_ns_compile}
catch {unset x}
catch {unset y}
|
| ︙ | ︙ |
Changes to tests/encoding.test.
1 2 3 4 5 6 7 8 9 10 | # This file contains a collection of tests for tclEncoding.c # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# This file contains a collection of tests for tclEncoding.c
# Sourcing this file into Tcl runs the tests and generates output for
# errors. No output means no errors were found.
#
# Copyright (c) 1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: encoding.test,v 1.8.2.1 2002/03/02 05:00:39 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
proc toutf {args} {
|
| ︙ | ︙ | |||
191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
set f [open dummy r]
fconfigure $f -translation binary -encoding iso8859-1
set x [read $f]
close $f
file delete dummy
set x
} "ab\x8c\xc1g"
test encoding-11.1 {LoadEncodingFile: unknown encoding} {testencoding} {
set system [encoding system]
set path [testencoding path]
encoding system iso8859-1
testencoding path {}
set x [list [catch {encoding convertto jis0208 \u4e4e} msg] $msg]
| > > > > > > > > > > > > | 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 |
set f [open dummy r]
fconfigure $f -translation binary -encoding iso8859-1
set x [read $f]
close $f
file delete dummy
set x
} "ab\x8c\xc1g"
proc viewable {str} {
set res ""
foreach c [split $str {}] {
if {[string is print $c]} {
append res $c
} else {
append res "\\u[format %4.4x [scan $c %c]]"
}
}
return "$str ($res)"
}
test encoding-11.1 {LoadEncodingFile: unknown encoding} {testencoding} {
set system [encoding system]
set path [testencoding path]
encoding system iso8859-1
testencoding path {}
set x [list [catch {encoding convertto jis0208 \u4e4e} msg] $msg]
|
| ︙ | ︙ | |||
212 213 214 215 216 217 218 |
test encoding-11.3 {LoadEncodingFile: double-byte} {
encoding convertfrom jis0208 8C
} "\u4e4e"
test encoding-11.4 {LoadEncodingFile: multi-byte} {
encoding convertfrom shiftjis \x8c\xc1
} "\u4e4e"
test encoding-11.5 {LoadEncodingFile: escape file} {
| | | > > > | 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
test encoding-11.3 {LoadEncodingFile: double-byte} {
encoding convertfrom jis0208 8C
} "\u4e4e"
test encoding-11.4 {LoadEncodingFile: multi-byte} {
encoding convertfrom shiftjis \x8c\xc1
} "\u4e4e"
test encoding-11.5 {LoadEncodingFile: escape file} {
viewable [encoding convertto iso2022 \u4e4e]
} [viewable "\x1b(B\x1b\$B8C"]
test encoding-11.5.1 {LoadEncodingFile: escape file} {
viewable [encoding convertto iso2022-jp \u4e4e]
} [viewable "\x1b(B\x1b\$B8C"]
test encoding-11.6 {LoadEncodingFile: invalid file} {testencoding} {
set system [encoding system]
set path [testencoding path]
encoding system identity
testencoding path tmp
file mkdir tmp/encoding
set f [open tmp/encoding/splat.enc w]
|
| ︙ | ︙ | |||
258 259 260 261 262 263 264 |
test encoding-12.5 {LoadTableEncoding: symbol encoding} {
set x [encoding convertto symbol \u3b3]
append x [encoding convertto symbol \u67]
append x [encoding convertfrom symbol \x67]
} "\x67\x67\u3b3"
test encoding-13.1 {LoadEscapeTable} {
| | | | 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
test encoding-12.5 {LoadTableEncoding: symbol encoding} {
set x [encoding convertto symbol \u3b3]
append x [encoding convertto symbol \u67]
append x [encoding convertfrom symbol \x67]
} "\x67\x67\u3b3"
test encoding-13.1 {LoadEscapeTable} {
viewable [set x [encoding convertto iso2022 ab\u4e4e\u68d9g]]
} [viewable "\x1b(Bab\x1b\$B8C\x1b\$\(DD%\x1b(Bg"]
test encoding-14.1 {BinaryProc} {
encoding convertto identity \x12\x34\x56\xff\x69
} "\x12\x34\x56\xc3\xbf\x69"
test encoding-15.1 {UtfToUtfProc} {
encoding convertto utf-8 \xa3
|
| ︙ | ︙ | |||
290 291 292 293 294 295 296 297 298 299 300 301 302 303 |
} {}
test encoding-21.1 {EscapeToUtfProc} {
} {}
test encoding-22.1 {EscapeFromUtfProc} {
} {}
# EscapeFreeProc, GetTableEncoding, unilen
# are fully tested by the rest of this file
# cleanup
::tcltest::cleanupTests
return
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < < < < < < < < < < < < | 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 |
} {}
test encoding-21.1 {EscapeToUtfProc} {
} {}
test encoding-22.1 {EscapeFromUtfProc} {
} {}
set ::iso2022encData "\u001b\$B;d\$I\$b\$G\$O!\"%A%C%W\$49XF~;~\$K\$4EPO?\$\$\$?\$@\$\$\$?\$4=;=j\$r%-%c%C%7%e%\"%&%H\$N:]\$N\u001b(B
\u001b\$B>.@Z<jAwIU@h\$H\$7\$F;HMQ\$7\$F\$*\$j\$^\$9!#62\$lF~\$j\$^\$9\$,!\"@5\$7\$\$=;=j\$r\$4EPO?\$7\$J\$*\u001b(B
\u001b\$B\$*4j\$\$\$\$\$?\$7\$^\$9!#\$^\$?!\"BgJQ62=L\$G\$9\$,!\"=;=jJQ99\$N\$\"\$H!\"F|K\\8l%5!<%S%9It!J\u001b(B
casino_japanese@___.com \u001b\$B!K\$^\$G\$4=;=jJQ99:Q\$NO\"Mm\$r\$\$\$?\$@\$1\$J\$\$\$G\u001b(B
\u001b\$B\$7\$g\$&\$+!)\u001b(B"
set ::iso2022uniData [encoding convertfrom iso2022-jp $::iso2022encData]
set ::iso2022uniData2 "\u79c1\u3069\u3082\u3067\u306f\u3001\u30c1\u30c3\u30d7\u3054\u8cfc\u5165\u6642\u306b\u3054\u767b\u9332\u3044\u305f\u3060\u3044\u305f\u3054\u4f4f\u6240\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u30a2\u30a6\u30c8\u306e\u969b\u306e
\u5c0f\u5207\u624b\u9001\u4ed8\u5148\u3068\u3057\u3066\u4f7f\u7528\u3057\u3066\u304a\u308a\u307e\u3059\u3002\u6050\u308c\u5165\u308a\u307e\u3059\u304c\u3001\u6b63\u3057\u3044\u4f4f\u6240\u3092\u3054\u767b\u9332\u3057\u306a\u304a
\u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u5927\u5909\u6050\u7e2e\u3067\u3059\u304c\u3001\u4f4f\u6240\u5909\u66f4\u306e\u3042\u3068\u3001\u65e5\u672c\u8a9e\u30b5\u30fc\u30d3\u30b9\u90e8\uff08
\u0063\u0061\u0073\u0069\u006e\u006f\u005f\u006a\u0061\u0070\u0061\u006e\u0065\u0073\u0065\u0040\u005f\u005f\u005f\u002e\u0063\u006f\u006d\u0020\uff09\u307e\u3067\u3054\u4f4f\u6240\u5909\u66f4\u6e08\u306e\u9023\u7d61\u3092\u3044\u305f\u3060\u3051\u306a\u3044\u3067
\u3057\u3087\u3046\u304b\uff1f"
set fid [open iso2022.txt w]
fconfigure $fid -encoding binary
puts -nonewline $fid $::iso2022encData
close $fid
test encoding-23.2 {iso2022-jp escape encoding test} {
string equal $::iso2022uniData $::iso2022uniData2
} 1
test encoding-23.2 {iso2022-jp escape encoding test} {
# This checks that 'gets' isn't resetting the encoding inappropriately.
# [Bug #523988]
set fid [open iso2022.txt r]
fconfigure $fid -encoding iso2022-jp
set out ""
set count 0
while {[set num [gets $fid line]] >= 0} {
if {$count} {
incr count 1 ; # account for newline
append out \n
}
append out $line
incr count $num
}
close $fid
if {[string compare $::iso2022uniData $out]} {
return -code error "iso2022-jp read in doesn't match original"
}
list $count $out
} [list [string length $::iso2022uniData] $::iso2022uniData]
test encoding-23.3 {iso2022-jp escape encoding test} {
# read $fis <size> reads size in chars, not raw bytes.
set fid [open iso2022.txt r]
fconfigure $fid -encoding iso2022-jp
set data [read $fid 50]
close $fid
set data
} [string range $::iso2022uniData 0 49] ; # 0 .. 49 inclusive == 50
::tcltest::removeFile iso2022.txt
# EscapeFreeProc, GetTableEncoding, unilen
# are fully tested by the rest of this file
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/exec.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Commands covered: exec # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: exec
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1994 The Regents of the University of California.
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: exec.test,v 1.8.2.1 2001/10/17 19:29:25 das Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# All tests require the "exec" command.
|
| ︙ | ︙ | |||
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
puts $f "Line 3"
close $f
exec $::tcltest::tcltest cat gorp.file
} "Line 1\nfoo bar\nxyzzy\nLine 3"
# I/O redirection: input from file.
exec $::tcltest::tcltest echo "Just a few thoughts" > gorp.file
test exec-5.1 {redirecting input from file} {execCommandExists stdio} {
exec $::tcltest::tcltest cat < gorp.file
} {Just a few thoughts}
test exec-5.2 {redirecting input from file} {execCommandExists stdio} {
exec $::tcltest::tcltest cat | $::tcltest::tcltest cat < gorp.file
} {Just a few thoughts}
test exec-5.3 {redirecting input from file} {execCommandExists stdio} {
| > > | 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
puts $f "Line 3"
close $f
exec $::tcltest::tcltest cat gorp.file
} "Line 1\nfoo bar\nxyzzy\nLine 3"
# I/O redirection: input from file.
if { [set ::tcltest::testConstraints(execCommandExists)] } {
exec $::tcltest::tcltest echo "Just a few thoughts" > gorp.file
}
test exec-5.1 {redirecting input from file} {execCommandExists stdio} {
exec $::tcltest::tcltest cat < gorp.file
} {Just a few thoughts}
test exec-5.2 {redirecting input from file} {execCommandExists stdio} {
exec $::tcltest::tcltest cat | $::tcltest::tcltest cat < gorp.file
} {Just a few thoughts}
test exec-5.3 {redirecting input from file} {execCommandExists stdio} {
|
| ︙ | ︙ | |||
428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 |
close $f
string compare "foo" [exec $::tcltest::tcltest gorp.file]
} 0
# Make sure that background commands are properly reaped when
# they eventually die.
exec $::tcltest::tcltest sleep 3
test exec-12.1 {reaping background processes} \
{execCommandExists stdio unixOnly nonPortable} {
for {set i 0} {$i < 20} {incr i} {
exec echo foo > /dev/null &
}
exec sleep 1
catch {exec ps | fgrep "echo foo" | fgrep -v fgrep | wc} msg
| > > | 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 |
close $f
string compare "foo" [exec $::tcltest::tcltest gorp.file]
} 0
# Make sure that background commands are properly reaped when
# they eventually die.
if { [set ::tcltest::testConstraints(execCommandExists)] } {
exec $::tcltest::tcltest sleep 3
}
test exec-12.1 {reaping background processes} \
{execCommandExists stdio unixOnly nonPortable} {
for {set i 0} {$i < 20} {incr i} {
exec echo foo > /dev/null &
}
exec sleep 1
catch {exec ps | fgrep "echo foo" | fgrep -v fgrep | wc} msg
|
| ︙ | ︙ |
Changes to tests/execute.test.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#
# Copyright (c) 1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: execute.test,v 1.8.2.1 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
catch {eval namespace delete [namespace children :: test_ns_*]}
|
| ︙ | ︙ | |||
578 579 580 581 582 583 584 585 586 587 588 589 590 591 |
set x {}
$x
append x { }
$x
}
p
} {}
# cleanup
catch {eval namespace delete [namespace children :: test_ns_*]}
catch {rename foo ""}
catch {rename p ""}
catch {rename {} ""}
catch {rename { } ""}
| > > > > > > | 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 |
set x {}
$x
append x { }
$x
}
p
} {}
test execute-6.2 {Evaluate an expression in a variable; compile the first time, do not the second} {
set w {3*5}
proc a {obj} {expr $obj}
set res "[a $w]:[a $w]"
} {15:15}
# cleanup
catch {eval namespace delete [namespace children :: test_ns_*]}
catch {rename foo ""}
catch {rename p ""}
catch {rename {} ""}
catch {rename { } ""}
|
| ︙ | ︙ |
Changes to tests/fCmd.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # This file tests the tclFCmd.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # Copyright (c) 1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# This file tests the tclFCmd.c file.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1996-1997 Sun Microsystems, Inc.
# Copyright (c) 1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: fCmd.test,v 1.8.2.1 2001/04/03 22:54:38 hobbs Exp $
#
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
|
| ︙ | ︙ | |||
505 506 507 508 509 510 511 |
file rename tf1 /tmp
glob tf* /tmp/tf1
} {/tmp/tf1}
test fCmd-6.20 {CopyRenameOneFile: errno == EXDEV} {pcOnly} {
catch {file delete -force c:/tcl8975@ d:/tcl8975@}
file mkdir c:/tcl8975@
if [catch {file rename c:/tcl8975@ d:/}] {
| | < > > | 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 |
file rename tf1 /tmp
glob tf* /tmp/tf1
} {/tmp/tf1}
test fCmd-6.20 {CopyRenameOneFile: errno == EXDEV} {pcOnly} {
catch {file delete -force c:/tcl8975@ d:/tcl8975@}
file mkdir c:/tcl8975@
if [catch {file rename c:/tcl8975@ d:/}] {
set msg d:/tcl8975@
} else {
set msg [glob c:/tcl8975@ d:/tcl8975@]
file delete -force d:/tcl8975@
}
file delete -force c:/tcl8975@
set msg
} {d:/tcl8975@}
test fCmd-6.21 {CopyRenameOneFile: copy/rename: S_ISDIR(source)} \
{unixOnly notRoot} {
cleanup /tmp
file mkdir td1
file rename td1 /tmp
glob td* /tmp/td*
|
| ︙ | ︙ |
Changes to tests/fileName.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # This file tests the filename manipulation routines. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# This file tests the filename manipulation routines.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
# Copyright (c) 1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: fileName.test,v 1.8.2.1 2001/10/17 19:29:25 das Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
if {[info commands testsetplatform] == {}} {
|
| ︙ | ︙ | |||
1120 1121 1122 1123 1124 1125 1126 |
test filename-11.16 {Tcl_GlobCmd} {
list [catch {glob globTest} msg] $msg
} {0 globTest}
set globname "globTest"
set horribleglobname "glob\[\{Test"
| | > > > > > > > > > > > > > > > > > > | > > > > > > > > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > | | > | > | 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 |
test filename-11.16 {Tcl_GlobCmd} {
list [catch {glob globTest} msg] $msg
} {0 globTest}
set globname "globTest"
set horribleglobname "glob\[\{Test"
test filename-11.17 {Tcl_GlobCmd} {unixOrPc} {
list [catch {lsort [glob -directory $globname *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.17.1 {Tcl_GlobCmd} {macOnly} {
list [catch {lsort [glob -directory $globname *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname .1]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.18 {Tcl_GlobCmd} [file join $globname .1]\
{
list [catch {lsort [glob -path $globname/ *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.18.1 {Tcl_GlobCmd} {macOnly} {
list [catch {lsort [glob -path $globname/ *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname .1]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.19 {Tcl_GlobCmd} {unixOrPc} {
list [catch {lsort [glob -join -path \
[string range $globname 0 5] * *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.19.1 {Tcl_GlobCmd} {macOnly} {
list [catch {lsort [glob -join -path \
[string range $globname 0 5] * *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname .1]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.20 {Tcl_GlobCmd} {
list [catch {lsort [glob -type d -dir $globname *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1]\
[file join $globname a2]\
[file join $globname a3]]]]
test filename-11.21 {Tcl_GlobCmd} {
list [catch {lsort [glob -type d -path $globname *]} msg] $msg
} [list 0 [lsort [list $globname]]]
file rename globTest $horribleglobname
set globname $horribleglobname
test filename-11.22 {Tcl_GlobCmd} {unixOrPc} {
list [catch {lsort [glob -dir $globname *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.22.1 {Tcl_GlobCmd} {macOnly} {
list [catch {lsort [glob -dir $globname *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname .1]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.23 {Tcl_GlobCmd} {unixOrPc} {
list [catch {lsort [glob -path $globname/ *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.23.1 {Tcl_GlobCmd} {macOnly} {
list [catch {lsort [glob -path $globname/ *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname .1]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.24 {Tcl_GlobCmd} {unixOrPc} {
list [catch {lsort [glob -join -path \
[string range $globname 0 5] * *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.24.1 {Tcl_GlobCmd} {macOnly} {
list [catch {lsort [glob -join -path \
[string range $globname 0 5] * *]} msg] $msg
} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\
[file join $globname .1]\
[file join $globname a3]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-11.25 {Tcl_GlobCmd} {
list [catch {lsort [glob -type d -dir $globname *]} msg] $msg
|
| ︙ | ︙ | |||
1394 1395 1396 1397 1398 1399 1400 |
} {1 {no files matched glob patterns "goo/* x*z foo?q"}}
test filename-14.23 {slash globbing} {unixOrPc} {
glob /
} /
test filename-14.24 {slash globbing} {pcOnly} {
glob {\\}
} /
| | > > > > > > > > | 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 |
} {1 {no files matched glob patterns "goo/* x*z foo?q"}}
test filename-14.23 {slash globbing} {unixOrPc} {
glob /
} /
test filename-14.24 {slash globbing} {pcOnly} {
glob {\\}
} /
test filename-14.25 {type specific globbing} {unixOrPc} {
list [catch {lsort [glob -dir globTest -types f *]} msg] $msg
} [list 0 [lsort [list \
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-14.25.1 {type specific globbing} {macOnly} {
list [catch {lsort [glob -dir globTest -types f *]} msg] $msg
} [list 0 [lsort [list \
[file join $globname .1]\
[file join $globname "weird name.c"]\
[file join $globname x,z1.c]\
[file join $globname x1.c]\
[file join $globname y1.c] [file join $globname z1.c]]]]
test filename-14.26 {type specific globbing} {
list [catch {glob -nocomplain -dir globTest -types {readonly} *} msg] $msg
} [list 0 {}]
|
| ︙ | ︙ | |||
1522 1523 1524 1525 1526 1527 1528 |
close [open globTest/x1.BAT w]
close [open globTest/y1.Bat w]
close [open globTest/z1.bat w]
glob "\\\\\\\\[info hostname]\\\\c\\\\*Test"
} //[info hostname]/c/globTest
# cleanup
| | | 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 |
close [open globTest/x1.BAT w]
close [open globTest/y1.Bat w]
close [open globTest/z1.bat w]
glob "\\\\\\\\[info hostname]\\\\c\\\\*Test"
} //[info hostname]/c/globTest
# cleanup
catch {file delete -force //[info hostname]/c/globTest}
cd $temp
file delete -force globTest
set env(HOME) $oldhome
testsetplatform $platform
catch {unset oldhome platform temp result}
::tcltest::cleanupTests
return
|
| ︙ | ︙ |
Changes to tests/foreach.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # Commands covered: foreach, continue, break # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Commands covered: foreach, continue, break
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: foreach.test,v 1.6.2.1 2001/08/07 15:41:20 msofer Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
catch {unset a}
|
| ︙ | ︙ | |||
206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
set a
} {a b}
test foreach-5.3 {break tests} {catch {break foo} msg} 1
test foreach-5.4 {break tests} {
catch {break foo} msg
set msg
} {wrong # args: should be "break"}
# Test for incorrect "double evaluation" semantics
test foreach-6.1 {delayed substitution of body} {knownBug} {
proc foo {} {
set a 0
foreach a [list 1 2 3] "
| > > > > > > > > > | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
set a
} {a b}
test foreach-5.3 {break tests} {catch {break foo} msg} 1
test foreach-5.4 {break tests} {
catch {break foo} msg
set msg
} {wrong # args: should be "break"}
# Check for bug #406709
test foreach-5.5 {break tests} {
proc a {} {
set a 1
foreach b b {list [concat a; break]; incr a}
incr a
}
a
} {2}
# Test for incorrect "double evaluation" semantics
test foreach-6.1 {delayed substitution of body} {knownBug} {
proc foo {} {
set a 0
foreach a [list 1 2 3] "
|
| ︙ | ︙ |
Changes to tests/http.test.
1 2 3 4 5 6 7 8 | # Commands covered: http::config, http::geturl, http::wait, http::reset # # This file contains a collection of tests for the http script library. # Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. | | | < < | 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 |
# Commands covered: http::config, http::geturl, http::wait, http::reset
#
# This file contains a collection of tests for the http script library.
# Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-2000 by Ajuba Solutions.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
#
# RCS: @(#) $Id: http.test,v 1.19.2.3 2001/09/07 00:10:57 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
if {[catch {package require http 2} version]} {
if {[info exist http2]} {
catch {puts "Cannot load http 2.* package"}
return
} else {
catch {puts "Running http 2.* tests in slave interp"}
|
| ︙ | ︙ | |||
97 98 99 100 101 102 103 |
http::config -proxyhost nowhere.come -proxyport 8080 -proxyfilter myFilter -useragent "Tcl Test Suite"
set x [http::config]
eval http::config $savedconf
set x
} {-accept */* -proxyfilter myFilter -proxyhost nowhere.come -proxyport 8080 -useragent {Tcl Test Suite}}
test http-1.5 {http::config} {
| | > | | > | | 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 |
http::config -proxyhost nowhere.come -proxyport 8080 -proxyfilter myFilter -useragent "Tcl Test Suite"
set x [http::config]
eval http::config $savedconf
set x
} {-accept */* -proxyfilter myFilter -proxyhost nowhere.come -proxyport 8080 -useragent {Tcl Test Suite}}
test http-1.5 {http::config} {
list [catch {http::config -proxyhost {} -junk 8080} msg] $msg
} {1 {Unknown option -junk, must be: -accept, -proxyfilter, -proxyhost, -proxyport, -useragent}}
test http-2.1 {http::reset} {
catch {http::reset http#1}
} 0
test http-3.1 {http::geturl} {
list [catch {http::geturl -bogus flag} msg] $msg
} {1 {Unknown option flag, can be: -binary, -blocksize, -channel, -command, -handler, -headers, -progress, -query, -queryblocksize, -querychannel, -queryprogress, -validate, -timeout, -type}}
test http-3.2 {http::geturl} {
catch {http::geturl http:junk} err
set err
} {Unsupported URL: http:junk}
set url [info hostname]:$port
set badurl www.scriptics.com:6666
|
| ︙ | ︙ | |||
286 287 288 289 290 291 292 293 294 295 296 297 298 299 |
puts $errorInfo
error $err
}
list [http::status $t] [http::code $t]
} {ok {HTTP/1.0 200 Data follows}}
test http-4.1 {http::Event} {
set token [http::geturl $url]
upvar #0 $token data
array set meta $data(meta)
expr ($data(totalsize) == $meta(Content-Length))
} 1
| > > > > > > > > > | 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 |
puts $errorInfo
error $err
}
list [http::status $t] [http::code $t]
} {ok {HTTP/1.0 200 Data follows}}
test http-3.13 {http::geturl socket leak test} {
set chanCount [llength [file channels]]
for {set i 0} {$i < 3} {incr i} {
catch {http::geturl $badurl -timeout 5000}
}
# No extra channels should be taken
expr {[llength [file channels]] == $chanCount}
} 1
test http-4.1 {http::Event} {
set token [http::geturl $url]
upvar #0 $token data
array set meta $data(meta)
expr ($data(totalsize) == $meta(Content-Length))
} 1
|
| ︙ | ︙ | |||
414 415 416 417 418 419 420 |
if {[string length $token] == 0} {
error "bogus return from http::geturl"
}
http::wait $token
http::status $token
} err]
# error code varies among platforms.
| | | 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 |
if {[string length $token] == 0} {
error "bogus return from http::geturl"
}
http::wait $token
http::status $token
} err]
# error code varies among platforms.
list $code [regexp {(connect failed|couldn't open socket)} $err]
} {1 1}
# Bogus host
test http-4.15 {http::Event} {
set code [catch {
set token [http::geturl not_a_host.scriptics.com -timeout 1000 -command {#}]
|
| ︙ | ︙ | |||
453 454 455 456 457 458 459 460 461 462 463 464 465 466 |
upvar #0 $token data
set data(body)
} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET http://$url</h2>
</body></html>"
# cleanup
catch {unset url}
catch {unset badurl}
catch {unset port}
catch {unset data}
if {[info exists httpthread]} {
testthread send -async $httpthread {
| > > > > | 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 |
upvar #0 $token data
set data(body)
} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET http://$url</h2>
</body></html>"
test http-7.1 {http::mapReply} {
http::mapReply "abc\$\[\]\"\\()\}\{"
} {abc%24%5b%5d%22%5c%28%29%7d%7b}
# cleanup
catch {unset url}
catch {unset badurl}
catch {unset port}
catch {unset data}
if {[info exists httpthread]} {
testthread send -async $httpthread {
|
| ︙ | ︙ |
Changes to tests/httpd.
| ︙ | ︙ | |||
179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
<h1>Hello, World!</h1>
<h2>$data(proto) $data(url)</h2>
"
if {[info exists data(query)] && [string length $data(query)]} {
append html "<h2>Query</h2>\n<dl>\n"
foreach {key value} [split $data(query) &=] {
append html "<dt>$key<dd>$value\n"
}
append html </dl>\n
}
append html </body></html>
}
}
| > > > | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
<h1>Hello, World!</h1>
<h2>$data(proto) $data(url)</h2>
"
if {[info exists data(query)] && [string length $data(query)]} {
append html "<h2>Query</h2>\n<dl>\n"
foreach {key value} [split $data(query) &=] {
append html "<dt>$key<dd>$value\n"
if {$key == "timeout"} {
after $value ;# pause
}
}
append html </dl>\n
}
append html </body></html>
}
}
|
| ︙ | ︙ |
Changes to tests/interp.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # This file tests the multiple interpreter facility of Tcl # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# This file tests the multiple interpreter facility of Tcl
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: interp.test,v 1.11.2.1 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# The set of hidden commands is platform dependent:
|
| ︙ | ︙ | |||
631 632 633 634 635 636 637 | # # Test robustness of Tcl_DeleteInterp when applied to a slave interpreter. # If there are bugs in the implementation these tests are likely to expose # the bugs as a core dump. # | | > > > | 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 |
#
# Test robustness of Tcl_DeleteInterp when applied to a slave interpreter.
# If there are bugs in the implementation these tests are likely to expose
# the bugs as a core dump.
#
if {[info commands testinterpdelete] == ""} {
puts "This application hasn't been compiled with the \"testinterpdelete\""
puts "command, so I can't test slave delete calls"
} else {
test interp-18.1 {testing Tcl_DeleteInterp vs slaves} {
list [catch {testinterpdelete} msg] $msg
} {1 {wrong # args: should be "testinterpdelete path"}}
test interp-18.2 {testing Tcl_DeleteInterp vs slaves} {
catch {interp delete a}
interp create a
testinterpdelete a
|
| ︙ | ︙ | |||
2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 |
catch {unset a}
set result [testMyNewSet "ok"]
rename testMyNewSet {}
rename mySet {}
rename myNewSet {}
set result
} ok
# cleanup
foreach i [interp slaves] {
interp delete $i
}
::tcltest::cleanupTests
return
| > > > > > > > > > > > > > > > > > > | 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 |
catch {unset a}
set result [testMyNewSet "ok"]
rename testMyNewSet {}
rename mySet {}
rename myNewSet {}
set result
} ok
test interp-32.1 { parent's working directory should
be inherited by a child interp } {
set parent [pwd]
set i [interp create]
set child [$i eval pwd]
interp delete $i
file mkdir cwd_test
cd cwd_test
lappend parent [pwd]
set i [interp create]
lappend child [$i eval pwd]
cd ..
file delete cwd_test
interp delete $i
expr {[string equal $parent $child] ? 1 :
"\{$parent\} != \{$child\}"}
} 1
# cleanup
foreach i [interp slaves] {
interp delete $i
}
::tcltest::cleanupTests
return
|
Changes to tests/io.test.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | # Copyright (c) 1991-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Copyright (c) 1991-1994 The Regents of the University of California.
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: io.test,v 1.14.2.5 2002/03/02 05:00:39 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
if {"[info commands testchannel]" != "testchannel"} {
|
| ︙ | ︙ | |||
85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
test io-1.7 {Tcl_WriteChars: WriteChars} {
set f [open test1 w]
fconfigure $f -encoding shiftjis
puts -nonewline $f "a\u4e4d\0"
close $f
contents test1
} "a\x93\xe1\x00"
test io-2.1 {WriteBytes} {
# loop until all bytes are written
set f [open test1 w]
fconfigure $f -encoding binary -buffersize 16 -translation crlf
puts $f "abcdefghijklmnopqrstuvwxyz"
| > > > > > > > > > > > > > | 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 |
test io-1.7 {Tcl_WriteChars: WriteChars} {
set f [open test1 w]
fconfigure $f -encoding shiftjis
puts -nonewline $f "a\u4e4d\0"
close $f
contents test1
} "a\x93\xe1\x00"
test io-1.8 {Tcl_WriteChars: WriteChars} {
# This test written for SF bug #506297.
#
# Executing this test without the fix for the referenced bug
# applied to tcl will cause tcl, more specifically WriteChars, to
# go into an infinite loop.
set f [open test2 w]
fconfigure $f -encoding iso2022-jp
puts -nonewline $f [format %s%c [string repeat " " 4] 12399]
close $f
contents test2
} "\x1b(B \x1b\$B\$O"
test io-2.1 {WriteBytes} {
# loop until all bytes are written
set f [open test1 w]
fconfigure $f -encoding binary -buffersize 16 -translation crlf
puts $f "abcdefghijklmnopqrstuvwxyz"
|
| ︙ | ︙ | |||
3792 3793 3794 3795 3796 3797 3798 |
} ok
test io-32.8 {Tcl_Read, nonblocking, file} {nonBlockFiles} {
set f1 [open longfile r]
fconfigure $f1 -blocking off
set z [read $f1 1000000]
close $f1
set x ok
| | | | | 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 |
} ok
test io-32.8 {Tcl_Read, nonblocking, file} {nonBlockFiles} {
set f1 [open longfile r]
fconfigure $f1 -blocking off
set z [read $f1 1000000]
close $f1
set x ok
set l [string length $z]
set z [file size longfile]
if {$z != $l} {
set x broken
}
set x
} ok
test io-32.9 {Tcl_Read, read to end of file} {
set f1 [open longfile r]
set z [read $f1]
close $f1
set l [string length $z]
set x ok
|
| ︙ | ︙ | |||
4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 |
update
fconfigure $s2 -translation {auto auto}
set modes [fconfigure $s2 -translation]
close $s1
close $s2
set modes
} {auto crlf}
test io-40.1 {POSIX open access modes: RDWR} {
removeFile test3
set f [open test3 w]
puts $f xyzzy
close $f
set f [open test3 RDWR]
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
update
fconfigure $s2 -translation {auto auto}
set modes [fconfigure $s2 -translation]
close $s1
close $s2
set modes
} {auto crlf}
test io-39.22 {Tcl_SetChannelOption, invariance} {unixOnly} {
removeFile test1
set f1 [open test1 w+]
set l ""
lappend l [fconfigure $f1 -eofchar]
fconfigure $f1 -eofchar {ON GO}
lappend l [fconfigure $f1 -eofchar]
fconfigure $f1 -eofchar D
lappend l [fconfigure $f1 -eofchar]
close $f1
set l
} {{{} {}} {O G} {D D}}
test io-39.22a {Tcl_SetChannelOption, invariance} {
removeFile test1
set f1 [open test1 w+]
set l [list]
fconfigure $f1 -eofchar {ON GO}
lappend l [fconfigure $f1 -eofchar]
fconfigure $f1 -eofchar D
lappend l [fconfigure $f1 -eofchar]
lappend l [list [catch {fconfigure $f1 -eofchar {1 2 3}} msg] $msg]
close $f1
set l
} {{O G} {D D} {1 {bad value for -eofchar: should be a list of zero, one, or two elements}}}
test io-39.23 {Tcl_GetChannelOption, server socket is not readable or
writeable, it should still have valid -eofchar and -translation options } {
set l [list]
set sock [socket -server accept 0]
lappend l [fconfigure $sock -eofchar] [fconfigure $sock -translation]
close $sock
set l
} {{{}} auto}
test io-39.24 {Tcl_SetChannelOption, server socket is not readable or
writable so we can't change -eofchar or -translation } {
set l [list]
set sock [socket -server accept 0]
fconfigure $sock -eofchar D -translation lf
lappend l [fconfigure $sock -eofchar] [fconfigure $sock -translation]
close $sock
set l
} {{{}} auto}
test io-40.1 {POSIX open access modes: RDWR} {
removeFile test3
set f [open test3 w]
puts $f xyzzy
close $f
set f [open test3 RDWR]
|
| ︙ | ︙ |
Changes to tests/ioCmd.test.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | # Copyright (c) 1991-1994 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Copyright (c) 1991-1994 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: ioCmd.test,v 1.8.2.1 2001/09/13 19:10:51 andreas_kupries Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
removeFile test1
|
| ︙ | ︙ | |||
233 234 235 236 237 238 239 240 |
set x [fconfigure $f1]
close $f1
set x
} {-blocking 1 -buffering none -buffersize 4040 -encoding binary -eofchar {} -translation lf}
test iocmd-8.10 {fconfigure command} {
list [catch {fconfigure a b} msg] $msg
} {1 {can not find channel named "a"}}
test iocmd-8.11 {fconfigure command} {
| > > > > | > > > > | > > > > | > > > > > | 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 |
set x [fconfigure $f1]
close $f1
set x
} {-blocking 1 -buffering none -buffersize 4040 -encoding binary -eofchar {} -translation lf}
test iocmd-8.10 {fconfigure command} {
list [catch {fconfigure a b} msg] $msg
} {1 {can not find channel named "a"}}
makeFile {} fconfigure.dummy
test iocmd-8.11 {fconfigure command} {
set chan [open fconfigure.dummy r]
set res [list [catch {fconfigure $chan -froboz blarfo} msg] $msg]
close $chan
set res
} {1 {bad option "-froboz": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, or -translation}}
test iocmd-8.12 {fconfigure command} {
set chan [open fconfigure.dummy r]
set res [list [catch {fconfigure $chan -b blarfo} msg] $msg]
close $chan
set res
} {1 {bad option "-b": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, or -translation}}
test iocmd-8.13 {fconfigure command} {
set chan [open fconfigure.dummy r]
set res [list [catch {fconfigure $chan -buffer blarfo} msg] $msg]
close $chan
set res
} {1 {bad option "-buffer": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, or -translation}}
removeFile fconfigure.dummy
test iocmd-8.14 {fconfigure command} {
fconfigure stdin -buffers
} 4096
proc iocmdSSETUP {} {
uplevel {
set srv [socket -server iocmdSRV 0];
set port [lindex [fconfigure $srv -sockname] 2];
|
| ︙ | ︙ |
Changes to tests/ioUtil.test.
1 2 3 4 5 6 7 8 9 10 | # This file (ioUtil.test) tests the hookable TclStat(), TclAccess(), # and Tcl_OpenFileChannel, routines in the file generic/tclIOUtils.c. # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. # # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# This file (ioUtil.test) tests the hookable TclStat(), TclAccess(),
# and Tcl_OpenFileChannel, routines in the file generic/tclIOUtils.c.
# Sourcing this file into Tcl runs the tests and generates output for
# errors. No output means no errors were found.
#
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: ioUtil.test,v 1.8.2.1 2001/08/24 16:19:10 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
set unsetScript {
|
| ︙ | ︙ | |||
188 189 190 191 192 193 194 |
catch {testaccessproc delete TestAccessProc3} err11
list $err9 $err10 $err11
} {{"TestAccessProc1": could not be deleteed} {"TestAccessProc2": could not be deleteed} {"TestAccessProc3": could not be deleteed}}
}
test ioUtil-3.1 {TclOpenFileChannel: Check that none of the test procs are there.} {
| | | | | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
catch {testaccessproc delete TestAccessProc3} err11
list $err9 $err10 $err11
} {{"TestAccessProc1": could not be deleteed} {"TestAccessProc2": could not be deleteed} {"TestAccessProc3": could not be deleteed}}
}
test ioUtil-3.1 {TclOpenFileChannel: Check that none of the test procs are there.} {
catch {file exists testOpenFileChannel1%.fil} err1
catch {file exists testOpenFileChannel2%.fil} err2
catch {file exists testOpenFileChannel3%.fil} err3
catch {file exists __testOpenFileChannel1%__.fil} err4
catch {file exists __testOpenFileChannel2%__.fil} err5
catch {file exists __testOpenFileChannel3%__.fil} err6
list $err1 $err2 $err3 $err4 $err5 $err6
} {0 0 0 0 0 0}
if {[info commands testopenfilechannelproc] == {}} {
|
| ︙ | ︙ | |||
243 244 245 246 247 248 249 |
testopenfilechannelproc delete TestOpenFileChannelProc2
close [open __testOpenFileChannel1%__.fil w]
close [open __testOpenFileChannel3%__.fil w]
catch {
close [open testOpenFileChannel1%.fil r]
| | | | | | | | > | | | | | > > | 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 |
testopenfilechannelproc delete TestOpenFileChannelProc2
close [open __testOpenFileChannel1%__.fil w]
close [open __testOpenFileChannel3%__.fil w]
catch {
close [open testOpenFileChannel1%.fil r]
catch {close [open testOpenFileChannel2%.fil r]} msg1
close [open testOpenFileChannel3%.fil r]
} err3
file delete __testOpenFileChannel1%__.fil
file delete __testOpenFileChannel3%__.fil
list $err3 $msg1
} [list {} {couldn't open "testOpenFileChannel2%.fil": no such file or directory}]
test ioUtil-3.6 {TclOpenFileChannelDeleteProc: Delete the 1st TclOpenFileChannel procedure.} {
# Next delete the 1st procedure and test that only the 3rd procedure
# is the only one that exists.
testopenfilechannelproc delete TestOpenFileChannelProc1
close [open __testOpenFileChannel3%__.fil w]
catch {
catch {close [open testOpenFileChannel1%.fil r]} msg2
catch {close [open testOpenFileChannel2%.fil r]} msg3
close [open testOpenFileChannel3%.fil r]
} err4
file delete __testOpenFileChannel3%__.fil
list $err4 $msg2 $msg3
} [list {} {couldn't open "testOpenFileChannel1%.fil": no such file or directory} \
{couldn't open "testOpenFileChannel2%.fil": no such file or directory}]
test ioUtil-3.7 {TclOpenFileChannelDeleteProc: Delete the 3rd procedure & verify all are gone.} {
# Finally delete the 3rd procedure and check that none of the
# procedures exist.
testopenfilechannelproc delete TestOpenFileChannelProc3
catch {
catch {close [open testOpenFileChannel1%.fil r]} msg4
catch {close [open testOpenFileChannel2%.fil r]} msg5
catch {close [open testOpenFileChannel3%.fil r]} msg6
} err5
list $err5 $msg4 $msg5 $msg6
} [list 1 {couldn't open "testOpenFileChannel1%.fil": no such file or directory} \
{couldn't open "testOpenFileChannel2%.fil": no such file or directory} \
{couldn't open "testOpenFileChannel3%.fil": no such file or directory}]
test ioUtil-3.8 {TclOpenFileChannelDeleteProc: Verify that all procs have been deleted.} {
# Attempt to delete all the OpenFileChannel procs. again to ensure they no longer
# exist and an error is returned.
catch {testopenfilechannelproc delete TestOpenFileChannelProc1} err9
catch {testopenfilechannelproc delete TestOpenFileChannelProc2} err10
|
| ︙ | ︙ |
Added tests/iogt.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
# -*- tcl -*-
# Commands covered: transform, and stacking in general
#
# This file contains a collection of tests for Giot
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# Copyright (c) 2000 Ajuba Solutions.
# Copyright (c) 2000 Andreas Kupries.
# All rights reserved.
#
# RCS: @(#) $Id: iogt.test,v 1.1.4.1 2000/07/27 01:39:20 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
if {[info commands testchannel] == ""} {
puts "Skipping io tests. This application does not seem to have the"
puts "testchannel command that is needed to run these tests."
return
}
::tcltest::saveState
#::tcltest::makeFile contents name
::tcltest::makeFile {abcdefghijklmnopqrstuvwxyz0123456789,./?><;'\|":[]\}\{`~!@#$%^&*()_+-=} dummy
# " capture coloring of quotes
::tcltest::makeFile {} dummyout
::tcltest::makeFile {
#!/usr/local/bin/tclsh
# -*- tcl -*-
# echo server
#
# arguments, options: port to listen on for connections.
# delay till echo of first block
# delay between blocks
# blocksize ...
set port [lindex $argv 0]
set fdelay [lindex $argv 1]
set idelay [lindex $argv 2]
set bsizes [lrange $argv 3 end]
set c 0
proc newconn {sock rhost rport} {
global c fdelay
incr c
#puts stdout "C $sock $rhost $rport / $fdelay" ; flush stdout
upvar #0 c$c conn
set conn(after) {}
set conn(state) 0
set conn(size) 0
set conn(data) ""
set conn(delay) $fdelay
fileevent $sock readable [list echoGet $c $sock]
fconfigure $sock -translation binary -buffering none -blocking 0
}
proc echoGet {c sock} {
global fdelay
upvar #0 c$c conn
if {[eof $sock]} {
# one-shot echo
exit
}
append conn(data) [read $sock]
#puts stdout "G $c $sock $conn(data) <<$conn(data)>>" ; flush stdout
if {$conn(after) == {}} {
set conn(after) [after $conn(delay) [list echoPut $c $sock]]
}
}
proc echoPut {c sock} {
global idelay fdelay bsizes
upvar #0 c$c conn
if {[string length $conn(data)] == 0} {
#puts stdout "C $c $sock" ; flush stdout
# auto terminate
close $sock
exit
#set conn(delay) $fdelay
return
}
set conn(delay) $idelay
set n [lindex $bsizes $conn(size)]
#puts stdout "P $c $sock $n >>" ; flush stdout
#puts __________________________________________
#parray conn
#puts n=<$n>
if {[string length $conn(data)] >= $n} {
puts -nonewline $sock [string range $conn(data) 0 $n]
set conn(data) [string range $conn(data) [incr n] end]
}
incr conn(size)
if {$conn(size) >= [llength $bsizes]} {
set conn(size) [expr {[llength $bsizes]-1}]
}
set conn(after) [after $conn(delay) [list echoPut $c $sock]]
}
#fileevent stdin readable {exit ;#cut}
# main
socket -server newconn $port
vwait forever
} __echo_srv__.tcl
########################################################################
proc fevent {fdelay idelay blocks script data} {
# start and initialize an echo server, prepare data
# transmission, then hand over to the test script.
# this has to start real transmission via 'flush'.
# The server is stopped after completion of the test.
# fixed port, not so good. lets hope for the best, for now.
set port 4000
eval exec tclsh __echo_srv__.tcl \
$port $fdelay $idelay $blocks >@stdout &
after 500
#puts stdout "> $port" ; flush stdout
set sk [socket localhost $port]
fconfigure $sk \
-blocking 0 \
-buffering full \
-buffersize [expr {10+[llength $data]}]
puts -nonewline $sk $data
# The channel is prepared to go off.
#puts stdout ">>>>>" ; flush stdout
uplevel #0 set sock $sk
set res [uplevel #0 $script]
catch {close $sk}
return $res
}
# --------------------------------------------------------------
# utility transformations ...
proc id {op data} {
switch -- $op {
create/write -
create/read -
delete/write -
delete/read -
clear_read {;#ignore}
flush/write -
flush/read -
write -
read {
return $data
}
query/maxRead {return -1}
}
}
proc id_optrail {var op data} {
upvar #0 $var trail
lappend trail $op
switch -- $op {
create/write - create/read -
delete/write - delete/read -
flush/read -
clear/read { #ignore }
flush/write -
write -
read {
return $data
}
query/maxRead {
return -1
}
default {
lappend trail "error $op"
error $op
}
}
}
proc id_fulltrail {var op data} {
upvar #0 $var trail
#puts stdout ">> $var $op $data" ; flush stdout
switch -- $op {
create/write - create/read -
delete/write - delete/read -
clear_read {
set res *ignored*
}
flush/write - flush/read -
write -
read {
set res $data
}
query/maxRead {
set res -1
}
}
#catch {puts stdout "\t>* $res" ; flush stdout}
#catch {puts stdout "x$res"} msg
lappend trail [list $op $data $res]
return $res
}
proc counter {var op data} {
upvar #0 $var n
switch -- $op {
create/write - create/read -
delete/write - delete/read -
clear_read {;#ignore}
flush/write - flush/read {return {}}
write {
return $data
}
read {
if {$n > 0} {
incr n -[string length $data]
if {$n < 0} {
set n 0
}
}
return $data
}
query/maxRead {
return $n
}
}
}
proc counter_audit {var vtrail op data} {
upvar #0 $var n $vtrail trail
switch -- $op {
create/write - create/read -
delete/write - delete/read -
clear_read {
set res {}
}
flush/write - flush/read {
set res {}
}
write {
set res $data
}
read {
if {$n > 0} {
incr n -[string length $data]
if {$n < 0} {
set n 0
}
}
set res $data
}
query/maxRead {
set res $n
}
}
lappend trail [list counter:$op $data $res]
return $res
}
proc rblocks {var vtrail n op data} {
upvar #0 $var buf $vtrail trail
set res {}
switch -- $op {
create/write - create/read -
delete/write - delete/read -
clear_read {
set buf {}
}
flush/write {
}
flush/read {
set res $buf
set buf {}
}
write {
set data
}
read {
append buf $data
set b [expr {$n * ([string length $buf] / $n)}]
append op " $n [string length $buf] :- $b"
set res [string range $buf 0 [incr b -1]]
set buf [string range $buf [incr b] end]
#return $res
}
query/maxRead {
set res -1
}
}
lappend trail [list rblock | $op $data $res | $buf]
return $res
}
# --------------------------------------------------------------
# ... and convenience procedures to stack them
proc identity {-attach channel} {
testchannel transform $channel -command id
}
proc audit_ops {var -attach channel} {
testchannel transform $channel -command [list id_optrail $var]
}
proc audit_flow {var -attach channel} {
testchannel transform $channel -command [list id_fulltrail $var]
}
proc stopafter {var n -attach channel} {
upvar #0 $var vn
set vn $n
testchannel transform $channel -command [list counter $var]
}
proc stopafter_audit {var trail n -attach channel} {
upvar #0 $var vn
set vn $n
testchannel transform $channel -command [list counter_audit $var $trail]
}
proc rblocks_t {var trail n -attach channel} {
testchannel transform $channel -command [list rblocks $var $trail $n]
}
# --------------------------------------------------------------
# serialize an array, with keys in sorted order.
proc array_sget {v} {
upvar $v a
set res [list]
foreach n [lsort [array names a]] {
lappend res $n $a($n)
}
set res
}
proc asort {alist} {
# sort a list of key/value pairs by key, removes duplicates too.
array set a $alist
array_sget a
}
########################################################################
test iogt-1.1 {stack/unstack} {
set fh [open dummy r]
identity -attach $fh
testchannel unstack $fh
close $fh
} {}
test iogt-1.2 {stack/close} {
set fh [open dummy r]
identity -attach $fh
close $fh
} {}
test iogt-1.3 {stack/unstack, configuration, options} {
set fh [open dummy r]
set ca [asort [fconfigure $fh]]
identity -attach $fh
set cb [asort [fconfigure $fh]]
testchannel unstack $fh
set cc [asort [fconfigure $fh]]
close $fh
# With this system none of the buffering, translation and
# encoding option may change their values with channels
# stacked upon each other or not.
# cb == ca == cc
list [string equal $ca $cb] [string equal $cb $cc] [string equal $ca $cc]
} {1 1 1}
test iogt-1.4 {stack/unstack, configuration} {
set fh [open dummy r]
set ca [asort [fconfigure $fh]]
identity -attach $fh
fconfigure $fh \
-buffering line \
-translation cr \
-encoding shiftjis
testchannel unstack $fh
set cc [asort [fconfigure $fh]]
set res [list \
[string equal $ca $cc] \
[fconfigure $fh -buffering] \
[fconfigure $fh -translation] \
[fconfigure $fh -encoding] \
]
close $fh
set res
} {0 line cr shiftjis}
test iogt-2.0 {basic I/O going through transform} {
set fin [open dummy r]
set fout [open dummyout w]
identity -attach $fin
identity -attach $fout
fcopy $fin $fout
close $fin
close $fout
set fin [open dummy r]
set fout [open dummyout r]
set res [string equal [set in [read $fin]] [set out [read $fout]]]
lappend res [string length $in] [string length $out]
close $fin
close $fout
set res
} {1 71 71}
test iogt-2.1 {basic I/O, operation trail} {unixOnly} {
set fin [open dummy r]
set fout [open dummyout w]
set ain [list] ; set aout [list]
audit_ops ain -attach $fin
audit_ops aout -attach $fout
fconfigure $fin -buffersize 10
fconfigure $fout -buffersize 5
fcopy $fin $fout
close $fin
close $fout
set res "[join $ain \n]\n--------\n[join $aout \n]"
} {create/read
query/maxRead
read
query/maxRead
read
query/maxRead
read
query/maxRead
read
query/maxRead
read
query/maxRead
read
query/maxRead
read
query/maxRead
read
query/maxRead
flush/read
query/maxRead
delete/read
--------
create/write
write
write
write
write
write
write
write
write
flush/write
delete/write}
test iogt-2.2 {basic I/O, data trail} {unixOnly} {
set fin [open dummy r]
set fout [open dummyout w]
set ain [list] ; set aout [list]
audit_flow ain -attach $fin
audit_flow aout -attach $fout
fconfigure $fin -buffersize 10
fconfigure $fout -buffersize 5
fcopy $fin $fout
close $fin
close $fout
set res "[join $ain \n]\n--------\n[join $aout \n]"
} {create/read {} *ignored*
query/maxRead {} -1
read abcdefghij abcdefghij
query/maxRead {} -1
read klmnopqrst klmnopqrst
query/maxRead {} -1
read uvwxyz0123 uvwxyz0123
query/maxRead {} -1
read 456789,./? 456789,./?
query/maxRead {} -1
read {><;'\|":[]} {><;'\|":[]}
query/maxRead {} -1
read {\}\{`~!@#$} {\}\{`~!@#$}
query/maxRead {} -1
read %^&*()_+-= %^&*()_+-=
query/maxRead {} -1
read {
} {
}
query/maxRead {} -1
flush/read {} {}
query/maxRead {} -1
delete/read {} *ignored*
--------
create/write {} *ignored*
write abcdefghij abcdefghij
write klmnopqrst klmnopqrst
write uvwxyz0123 uvwxyz0123
write 456789,./? 456789,./?
write {><;'\|":[]} {><;'\|":[]}
write {\}\{`~!@#$} {\}\{`~!@#$}
write %^&*()_+-= %^&*()_+-=
write {
} {
}
flush/write {} {}
delete/write {} *ignored*}
test iogt-2.3 {basic I/O, mixed trail} {unixOnly} {
set fin [open dummy r]
set fout [open dummyout w]
set trail [list]
audit_flow trail -attach $fin
audit_flow trail -attach $fout
fconfigure $fin -buffersize 20
fconfigure $fout -buffersize 10
fcopy $fin $fout
close $fin
close $fout
join $trail \n
} {create/read {} *ignored*
create/write {} *ignored*
query/maxRead {} -1
read abcdefghijklmnopqrst abcdefghijklmnopqrst
write abcdefghij abcdefghij
write klmnopqrst klmnopqrst
query/maxRead {} -1
read uvwxyz0123456789,./? uvwxyz0123456789,./?
write uvwxyz0123 uvwxyz0123
write 456789,./? 456789,./?
query/maxRead {} -1
read {><;'\|":[]\}\{`~!@#$} {><;'\|":[]\}\{`~!@#$}
write {><;'\|":[]} {><;'\|":[]}
write {\}\{`~!@#$} {\}\{`~!@#$}
query/maxRead {} -1
read {%^&*()_+-=
} {%^&*()_+-=
}
query/maxRead {} -1
flush/read {} {}
write %^&*()_+-= %^&*()_+-=
write {
} {
}
query/maxRead {} -1
delete/read {} *ignored*
flush/write {} {}
delete/write {} *ignored*}
test iogt-3.0 {Tcl_Channel valid after stack/unstack, fevent handling} \
{unknownFailure} {
# This test to check the validity of aquired Tcl_Channel references is
# not possible because even a backgrounded fcopy will immediately start
# to copy data, without waiting for the event loop. This is done only in
# case of an underflow on the read size!. So stacking transforms after the
# fcopy will miss information, or are not used at all.
#
# I was able to circumvent this by using the echo.tcl server with a big
# delay, causing the fcopy to underflow immediately.
proc DoneCopy {n {err {}}} {
global copy ; set copy 1
}
set fin [open dummy r]
fevent 1000 500 {20 20 20 10 1 1} {
close $fin
set fout [open dummyout w]
flush $sock ; # now, or fcopy will error us out
# But the 1 second delay should be enough to
# initialize everything else here.
fcopy $sock $fout -command DoneCopy
# transform after fcopy got its handles !
# They should be still valid for fcopy.
set trail [list]
audit_ops trail -attach $fout
vwait copy
} [read $fin] ; # {}
close $fout
rename DoneCopy {}
# Check result of copy.
set fin [open dummy r]
set fout [open dummyout r]
set res [string equal [read $fin] [read $fout]]
close $fin
close $fout
list $res $trail
} {1 {create/write create/read write flush/write flush/read delete/write delete/read}}
test iogt-4.0 {fileevent readable, after transform} {unknownFailure} {
set fin [open dummy r]
set data [read $fin]
close $fin
set trail [list]
set got [list]
proc Done {args} {
global stop
set stop 1
}
proc Get {sock} {
global trail got
if {[eof $sock]} {
Done
lappend trail "xxxxxxxxxxxxx"
close $sock
return
}
lappend trail "vvvvvvvvvvvvv"
lappend trail "\tgot: [lappend got "\[\[[read $sock]\]\]"]"
lappend trail "============="
#puts stdout $__ ; flush stdout
#read $sock
}
fevent 1000 500 {20 20 20 10 1} {
audit_flow trail -attach $sock
rblocks_t rbuf trail 23 -attach $sock
fileevent $sock readable [list Get $sock]
flush $sock ; # now, or fcopy will error us out
# But the 1 second delay should be enough to
# initialize everything else here.
vwait stop
} $data
rename Done {}
rename Get {}
join [list [join $got \n] ~~~~~~~~ [join $trail \n]] \n
} {[[]]
[[abcdefghijklmnopqrstuvw]]
[[xyz0123456789,./?><;'\|]]
[[]]
[[]]
[[":[]\}\{`~!@#$%^&*()]]
[[]]
~~~~~~~~
create/write {} *ignored*
create/read {} *ignored*
rblock | create/write {} {} | {}
rblock | create/read {} {} | {}
vvvvvvvvvvvvv
rblock | query/maxRead {} -1 | {}
query/maxRead {} -1
read abcdefghijklmnopqrstu abcdefghijklmnopqrstu
query/maxRead {} -1
rblock | {read 23 21 :- 0} abcdefghijklmnopqrstu {} | abcdefghijklmnopqrstu
rblock | query/maxRead {} -1 | abcdefghijklmnopqrstu
query/maxRead {} -1
got: {[[]]}
=============
vvvvvvvvvvvvv
rblock | query/maxRead {} -1 | abcdefghijklmnopqrstu
query/maxRead {} -1
read vwxyz0123456789,./?>< vwxyz0123456789,./?><
query/maxRead {} -1
rblock | {read 23 42 :- 23} vwxyz0123456789,./?>< abcdefghijklmnopqrstuvw | xyz0123456789,./?><
rblock | query/maxRead {} -1 | xyz0123456789,./?><
query/maxRead {} -1
got: {[[]]} {[[abcdefghijklmnopqrstuvw]]}
=============
vvvvvvvvvvvvv
rblock | query/maxRead {} -1 | xyz0123456789,./?><
query/maxRead {} -1
read {;'\|":[]\}\{`~!@#$%^&} {;'\|":[]\}\{`~!@#$%^&}
query/maxRead {} -1
rblock | {read 23 40 :- 23} {;'\|":[]\}\{`~!@#$%^&} {xyz0123456789,./?><;'\|} | {":[]\}\{`~!@#$%^&}
rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&}
query/maxRead {} -1
got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]}
=============
vvvvvvvvvvvvv
rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&}
query/maxRead {} -1
read *( *(
query/maxRead {} -1
rblock | {read 23 19 :- 0} *( {} | {":[]\}\{`~!@#$%^&*(}
rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*(}
query/maxRead {} -1
got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]}
=============
vvvvvvvvvvvvv
rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*(}
query/maxRead {} -1
read ) )
query/maxRead {} -1
rblock | {read 23 20 :- 0} ) {} | {":[]\}\{`~!@#$%^&*()}
rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*()}
query/maxRead {} -1
got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]} {[[]]}
=============
vvvvvvvvvvvvv
rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*()}
query/maxRead {} -1
flush/read {} {}
rblock | flush/read {} {":[]\}\{`~!@#$%^&*()} | {}
rblock | query/maxRead {} -1 | {}
query/maxRead {} -1
got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]} {[[]]} {[[":[]\}\{`~!@#$%^&*()]]}
=============
vvvvvvvvvvvvv
rblock | query/maxRead {} -1 | {}
query/maxRead {} -1
got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]} {[[]]} {[[":[]\}\{`~!@#$%^&*()]]} {[[]]}
xxxxxxxxxxxxx
rblock | flush/write {} {} | {}
rblock | delete/write {} {} | {}
rblock | delete/read {} {} | {}
flush/write {} {}
delete/write {} *ignored*
delete/read {} *ignored*} ; # catch unescaped quote "
test iogt-5.0 {EOF simulation} {unknownFailure} {
set fin [open dummy r]
set fout [open dummyout w]
set trail [list]
audit_flow trail -attach $fin
stopafter_audit d trail 20 -attach $fin
audit_flow trail -attach $fout
fconfigure $fin -buffersize 20
fconfigure $fout -buffersize 10
fcopy $fin $fout
testchannel unstack $fin
# now copy the rest in the channel
lappend trail {**after unstack**}
fcopy $fin $fout
close $fin
close $fout
join $trail \n
} {create/read {} *ignored*
counter:create/read {} {}
create/write {} *ignored*
counter:query/maxRead {} 20
query/maxRead {} -1
read {abcdefghijklmnopqrstuvwxyz0123456789,./?><;'\|":[]\}\{`~!@#$%^&*()_+-=
} {abcdefghijklmnopqrstuvwxyz0123456789,./?><;'\|":[]\}\{`~!@#$%^&*()_+-=
}
query/maxRead {} -1
flush/read {} {}
counter:read abcdefghijklmnopqrst abcdefghijklmnopqrst
write abcdefghij abcdefghij
write klmnopqrst klmnopqrst
counter:query/maxRead {} 0
counter:flush/read {} {}
counter:delete/read {} {}
**after unstack**
query/maxRead {} -1
write uvwxyz0123 uvwxyz0123
write 456789,./? 456789,./?
write {><;'\|":[]} {><;'\|":[]}
write {\}\{`~!@#$} {\}\{`~!@#$}
write %^&*()_+-= %^&*()_+-=
write {
} {
}
query/maxRead {} -1
delete/read {} *ignored*
flush/write {} {}
delete/write {} *ignored*}
proc constX {op data} {
# replace anything coming in with a same-length string of x'es.
switch -- $op {
create/write - create/read -
delete/write - delete/read -
clear_read {;#ignore}
flush/write - flush/read -
write -
read {
return [string repeat x [string length $data]]
}
query/maxRead {return -1}
}
}
proc constx {-attach channel} {
testchannel transform $channel -command constX
}
test iogt-6.0 {Push back} {
set f [open dummy r]
# contents of dummy = "abcdefghi..."
read $f 3 ; # skip behind "abc"
constx -attach $f
# expect to get "xxx" from the transform because
# of unread "def" input to transform which returns "xxx".
#
# Actually the IO layer pre-read the whole file and will
# read "def" directly from the buffer without bothering
# to consult the newly stacked transformation. This is
# wrong.
set res [read $f 3]
close $f
set res
} {xxx}
test iogt-6.1 {Push back and up} {knownBug} {
set f [open dummy r]
# contents of dummy = "abcdefghi..."
read $f 3 ; # skip behind "abc"
constx -attach $f
set res [read $f 3]
testchannel unstack $f
append res [read $f 3]
close $f
set res
} {xxxghi}
# cleanup
foreach file [list dummy dummyout __echo_srv__.tcl] {
::tcltest::removeFile $file
}
::tcltest::restoreState
::tcltest::cleanupTests
return
|
Changes to tests/msgcat.test.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | # # Copyright (c) 1998 Mark Harrison. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#
# Copyright (c) 1998 Mark Harrison.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: msgcat.test,v 1.8.2.1 2000/08/03 21:40:55 ericm Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
if {[catch {package require msgcat 1.0}]} {
|
| ︙ | ︙ | |||
397 398 399 400 401 402 403 404 405 406 407 408 409 |
} "this is a test"
test msgcat-7.2 {::msgcat::mc, extra args go through to format} {
::msgcat::mc format2 "good test"
} "this is a good test"
test msgcat-7.3 {::msgcat::mc, errors from format are propagated} {
catch {::msgcat::mc format3 "good test"}
} 1
# Reset the locale
::msgcat::mclocale $oldlocale
::tcltest::cleanupTests
return
| > > > | 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 |
} "this is a test"
test msgcat-7.2 {::msgcat::mc, extra args go through to format} {
::msgcat::mc format2 "good test"
} "this is a good test"
test msgcat-7.3 {::msgcat::mc, errors from format are propagated} {
catch {::msgcat::mc format3 "good test"}
} 1
test msgcat-7.4 {::msgcat::mc, extra args are given to unknown} {
::msgcat::mc "this is a %s" "good test"
} "this is a good test"
# Reset the locale
::msgcat::mclocale $oldlocale
::tcltest::cleanupTests
return
|
Changes to tests/namespace.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Functionality covered: this file contains a collection of tests for the # procedures in tclNamesp.c that implement Tcl's basic support for # namespaces. Other namespace-related tests appear in variable.test. # # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Functionality covered: this file contains a collection of tests for the
# procedures in tclNamesp.c that implement Tcl's basic support for
# namespaces. Other namespace-related tests appear in variable.test.
#
# Sourcing this file into Tcl runs the tests and generates output for
# errors. No output means no errors were found.
#
# Copyright (c) 1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: namespace.test,v 1.12.2.1 2001/11/29 20:08:33 msofer Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# Clear out any namespaces called test_ns_*
|
| ︙ | ︙ | |||
1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 |
test namespace-38.1 {UpdateStringOfNsName} {
catch {eval namespace delete [namespace children :: test_ns_*]}
;# Tcl_NamespaceObjCmd calls UpdateStringOfNsName to get subcmd name
list [namespace eval {} {namespace current}] \
[namespace eval {} {namespace current}]
} {:: ::}
# cleanup
catch {rename cmd1 {}}
catch {unset l}
catch {unset msg}
catch {unset trigger}
eval namespace delete [namespace children :: test_ns_*]
::tcltest::cleanupTests
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
test namespace-38.1 {UpdateStringOfNsName} {
catch {eval namespace delete [namespace children :: test_ns_*]}
;# Tcl_NamespaceObjCmd calls UpdateStringOfNsName to get subcmd name
list [namespace eval {} {namespace current}] \
[namespace eval {} {namespace current}]
} {:: ::}
test namespace-41.1 {Shadowing byte-compiled commands, Bug: 231259} {
set res {}
namespace eval ns {
set res {}
proc test {} {
set ::g 0
}
lappend ::res [test]
proc set {a b} {
::set a [incr b]
}
lappend ::res [test]
}
namespace delete ns
set res
} {0 1}
# These tests were back-ported with the patch to [Bug 231259]
test namespace-41.2 {Shadowing byte-compiled commands, Bug: 231259} {
set res {}
namespace eval ns {}
proc ns::a {i} {
variable b
proc set args {return "New proc is called"}
return [set b $i]
}
ns::a 1
set res [ns::a 2]
namespace delete ns
set res
} {New proc is called}
test namespace-41.3 {Shadowing byte-compiled commands, Bug: 231259} {knownbug} {
set res {}
namespace eval ns {
variable b 0
}
proc ns::a {i} {
variable b
proc set args {return "New proc is called"}
return [set b $i]
}
set res [list [ns::a 1] $ns::b]
namespace delete ns
set res
} {{New proc is called} 0}
# cleanup
catch {rename cmd1 {}}
catch {unset l}
catch {unset msg}
catch {unset trigger}
eval namespace delete [namespace children :: test_ns_*]
::tcltest::cleanupTests
|
| ︙ | ︙ |
Changes to tests/opt.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Package covered: opt1.0/optparse.tcl # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Package covered: opt1.0/optparse.tcl
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: opt.test,v 1.6.2.1 2000/08/07 21:32:11 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# the package we are going to test
|
| ︙ | ︙ | |||
29 30 31 32 33 34 35 |
set n $::tcl::OptDescN
test opt-1.1 {OptKeyRegister / check that auto allocation is skipping existing keys} {
list [::tcl::OptKeyRegister {} $n] [::tcl::OptKeyRegister {} [expr $n+1]] [::tcl::OptKeyRegister {}]
} "$n [expr $n+1] [expr $n+2]"
test opt-2.1 {OptKeyDelete} {
| | > | > | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
set n $::tcl::OptDescN
test opt-1.1 {OptKeyRegister / check that auto allocation is skipping existing keys} {
list [::tcl::OptKeyRegister {} $n] [::tcl::OptKeyRegister {} [expr $n+1]] [::tcl::OptKeyRegister {}]
} "$n [expr $n+1] [expr $n+2]"
test opt-2.1 {OptKeyDelete} {
list [::tcl::OptKeyRegister {} testkey] \
[info exists ::tcl::OptDesc(testkey)] \
[::tcl::OptKeyDelete testkey] \
[info exists ::tcl::OptDesc(testkey)]
} {testkey 1 {} 0}
test opt-3.1 {OptParse / temp key is removed} {
set n $::tcl::OptDescN
set prev [array names ::tcl::OptDesc]
::tcl::OptKeyRegister {} $n
list [info exists ::tcl::OptDesc($n)]\
|
| ︙ | ︙ | |||
131 132 133 134 135 136 137 |
test opt-8.7 {List utilities} {
set l {a {b c 7 e} f}
::tcl::Lvarincr l {1 2} -9
set l
} {a {b c -2 e} f}
| < < < < < < < < < < < | 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
test opt-8.7 {List utilities} {
set l {a {b c 7 e} f}
::tcl::Lvarincr l {1 2} -9
set l
} {a {b c -2 e} f}
test opt-8.10 {List utilities} {
set l {a {b c 7 e} f}
::tcl::Lvarpop l
set l
} {{b c 7 e} f}
test opt-8.11 {List utilities} {
|
| ︙ | ︙ |
Changes to tests/pkg.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # Commands covered: pkg # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Commands covered: pkg
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: pkg.test,v 1.8.2.1 2001/08/24 16:19:10 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# Do all this in a slave interp to avoid garbaging the
|
| ︙ | ︙ | |||
297 298 299 300 301 302 303 304 305 306 307 308 309 310 |
package ifneeded b 2.3 {second script}
package ifneeded c 1.4 {third script}
package forget
set result [list [lsort [package names]]]
package forget a c
lappend result [lsort [package names]]
} {{a b c} b}
test pkg-3.6 {Tcl_PackageCmd procedure, "ifneeded" option} {
list [catch {package ifneeded a} msg] $msg
} {1 {wrong # args: should be "package ifneeded package version ?script?"}}
test pkg-3.7 {Tcl_PackageCmd procedure, "ifneeded" option} {
list [catch {package ifneeded a b c d} msg] $msg
} {1 {wrong # args: should be "package ifneeded package version ?script?"}}
test pkg-3.8 {Tcl_PackageCmd procedure, "ifneeded" option} {
| > > > > > > > > | 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 |
package ifneeded b 2.3 {second script}
package ifneeded c 1.4 {third script}
package forget
set result [list [lsort [package names]]]
package forget a c
lappend result [lsort [package names]]
} {{a b c} b}
test pkg-3.5.1 {Tcl_PackageCmd procedure, "forget" option} {
# Test for Bug 415273
package ifneeded a 1 "I should have been forgotten"
package forget no-such-package a
set x [package ifneeded a 1]
package forget a
set x
} {}
test pkg-3.6 {Tcl_PackageCmd procedure, "ifneeded" option} {
list [catch {package ifneeded a} msg] $msg
} {1 {wrong # args: should be "package ifneeded package version ?script?"}}
test pkg-3.7 {Tcl_PackageCmd procedure, "ifneeded" option} {
list [catch {package ifneeded a b c d} msg] $msg
} {1 {wrong # args: should be "package ifneeded package version ?script?"}}
test pkg-3.8 {Tcl_PackageCmd procedure, "ifneeded" option} {
|
| ︙ | ︙ |
Changes to tests/pkgMkIndex.test.
1 2 3 4 5 6 7 8 9 10 | # This file contains tests for the pkg_mkIndex command. # Note that the tests are limited to Tcl scripts only, there are no shared # libraries against which to test. # # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. # # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# This file contains tests for the pkg_mkIndex command.
# Note that the tests are limited to Tcl scripts only, there are no shared
# libraries against which to test.
#
# Sourcing this file into Tcl runs the tests and generates output for
# errors. No output means no errors were found.
#
# Copyright (c) 1998-1999 by Scriptics Corporation.
# All rights reserved.
#
# RCS: @(#) $Id: pkgMkIndex.test,v 1.16.2.1 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
set origDir [pwd]
|
| ︙ | ︙ | |||
161 162 163 164 165 166 167 |
set dirPath [lindex $parsed 1]
set patternList [lindex $parsed 2]
file mkdir $dirPath
if {[catch {
file delete [file join $dirPath pkgIndex.tcl]
| | | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
set dirPath [lindex $parsed 1]
set patternList [lindex $parsed 2]
file mkdir $dirPath
if {[catch {
file delete [file join $dirPath pkgIndex.tcl]
eval pkg_mkIndex $options [list $dirPath] $patternList
} err]} {
return [list 1 $err]
}
return [list 0 {}]
}
|
| ︙ | ︙ | |||
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 |
} {0 {{football:1.0 {tclPkgSetup {samename.tcl source {::college::team ::pro::team}}}}}}
# Proc names with embedded spaces are properly listed (ie, correct number of
# braces) in result
test pkgMkIndex-13.1 {proc names with embedded spaces} {
pkgtest::runIndex -lazy $fullPkgPath spacename.tcl
} {0 {{spacename:1.0 {tclPkgSetup {spacename.tcl source {{a b} {c d}}}}}}}
# cleanup
namespace delete pkgtest
cd $origDir
::tcltest::cleanupTests
return
| > > > > > > > > > > > > > > > > > > > > | 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 |
} {0 {{football:1.0 {tclPkgSetup {samename.tcl source {::college::team ::pro::team}}}}}}
# Proc names with embedded spaces are properly listed (ie, correct number of
# braces) in result
test pkgMkIndex-13.1 {proc names with embedded spaces} {
pkgtest::runIndex -lazy $fullPkgPath spacename.tcl
} {0 {{spacename:1.0 {tclPkgSetup {spacename.tcl source {{a b} {c d}}}}}}}
# Test the pkg_compareExtension helper function
test pkgMkIndex-14.1 {pkg_compareExtension} {unixOnly} {
pkg_compareExtension foo.so .so
} 1
test pkgMkIndex-14.2 {pkg_compareExtension} {unixOnly} {
pkg_compareExtension foo.so.bar .so
} 0
test pkgMkIndex-14.3 {pkg_compareExtension} {unixOnly} {
pkg_compareExtension foo.so.1 .so
} 1
test pkgMkIndex-14.4 {pkg_compareExtension} {unixOnly} {
pkg_compareExtension foo.so.1.2 .so
} 1
test pkgMkIndex-14.5 {pkg_compareExtension} {unixOnly} {
pkg_compareExtension foo .so
} 0
test pkgMkIndex-14.6 {pkg_compareExtension} {unixOnly} {
pkg_compareExtension foo.so.1.2.bar .so
} 0
# cleanup
namespace delete pkgtest
cd $origDir
::tcltest::cleanupTests
return
|
Changes to tests/regexp.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Commands covered: regexp, regsub # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1998 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: regexp, regsub
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1998 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: regexp.test,v 1.13.2.1 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
catch {unset foo}
|
| ︙ | ︙ | |||
522 523 524 525 526 527 528 529 530 531 532 |
# Go to index 1; a* matches the lambda (or {}) there then stops. Recall
# that a* matches zero or more "a"'s; thus it matches the string "b", as
# there are zero or more "a"'s there.
# Go to index 2; a* matches the "a" there then stops.
# Go to index 3; this is past the end of the string, so stop.
regexp -all -inline {a*} aba
} {a {} a}
# cleanup
::tcltest::cleanupTests
return
| > > > > > > > > < < < < < < < < < < < < < < | 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 |
# Go to index 1; a* matches the lambda (or {}) there then stops. Recall
# that a* matches zero or more "a"'s; thus it matches the string "b", as
# there are zero or more "a"'s there.
# Go to index 2; a* matches the "a" there then stops.
# Go to index 3; this is past the end of the string, so stop.
regexp -all -inline {a*} aba
} {a {} a}
test regexp-18.11 {regexp -all} {
regexp -all -inline {^a} aaaa
} {a}
test regexp-19.1 {regsub null replacement} {
regsub -all {@} {@hel@lo@} "\0a\0" result
list $result [string length $result]
} "\0a\0hel\0a\0lo\0a\0 14"
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/rename.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Commands covered: rename # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: rename
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: rename.test,v 1.8.2.1 2001/09/12 20:34:59 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# Must eliminate the "unknown" command while the test is running,
|
| ︙ | ︙ | |||
170 171 172 173 174 175 176 177 178 |
set msg
} {called "incr" with too many arguments}
if {[info commands incr.old] != {}} {
catch {rename incr {}}
catch {rename incr.old incr}
}
::tcltest::cleanupTests
return
| > > | 170 171 172 173 174 175 176 177 178 179 180 |
set msg
} {called "incr" with too many arguments}
if {[info commands incr.old] != {}} {
catch {rename incr {}}
catch {rename incr.old incr}
}
catch {rename x {}}
catch {rename kill {}}
::tcltest::cleanupTests
return
|
Changes to tests/scan.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Commands covered: scan # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: scan
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1994 The Regents of the University of California.
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: scan.test,v 1.10.2.2 2002/02/07 01:54:04 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
test scan-1.1 {BuildCharSet, CharInSet} {
|
| ︙ | ︙ | |||
227 228 229 230 231 232 233 234 235 |
list [scan {+1238 -1239 123a} {%o%*s%o%*s%o} x y z] $x $y $z
} {3 83 -83 83}
test scan-4.39 {Tcl_ScanObjCmd, base-16 integer scanning} {
set x {}
list [scan {+1238 -123a 0123} {%x%x%x} x y z] $x $y $z
} {3 4664 -4666 291}
test scan-4.40 {Tcl_ScanObjCmd, base-16 integer scanning} {
set x {}
list [scan {aBcDeF AbCdEf 0x1} {%x%x%x} x y z] $x $y $z
| > > > | > > > > > > > > | 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 |
list [scan {+1238 -1239 123a} {%o%*s%o%*s%o} x y z] $x $y $z
} {3 83 -83 83}
test scan-4.39 {Tcl_ScanObjCmd, base-16 integer scanning} {
set x {}
list [scan {+1238 -123a 0123} {%x%x%x} x y z] $x $y $z
} {3 4664 -4666 291}
test scan-4.40 {Tcl_ScanObjCmd, base-16 integer scanning} {
# The behavior changed in 8.4a4/8.3.4cvs (6 Feb) to correctly
# return '1' for 0x1 scanned via %x, to comply with 8.0 and C scanf.
# Bug #495213
set x {}
list [scan {aBcDeF AbCdEf 0x1} {%x%x%x} x y z] $x $y $z
} {3 11259375 11259375 1}
test scan-4.40.1 {Tcl_ScanObjCmd, base-16 integer scanning} {
set x {}
list [scan {0xF 0x00A0B 0X0XF} {%x %x %x} x y z] $x $y $z
} {3 15 2571 0}
test scan-4.40.2 {Tcl_ScanObjCmd, base-16 integer scanning} {
catch {unset x}
list [scan {xF} {%x} x] [info exists x]
} {0 0}
test scan-4.41 {Tcl_ScanObjCmd, base-unknown integer scanning} {
set x {}
list [scan {10 010 0x10} {%i%i%i} x y z] $x $y $z
} {3 10 8 16}
test scan-4.42 {Tcl_ScanObjCmd, base-unknown integer scanning} {
set x {}
list [scan {10 010 0X10} {%i%i%i} x y z] $x $y $z
|
| ︙ | ︙ | |||
319 320 321 322 323 324 325 326 327 328 329 330 331 332 |
catch {unset z}; array set z {}
set result [list [catch {scan {abc def ghi} {%s%s%s} x z y} msg] \
$msg $x]
unset y
unset z
set result
} {1 {couldn't set variable "z"couldn't set variable "y"} abc}
test scan-5.1 {integer scanning} {
set a {}; set b {}; set c {}; set d {}
list [scan "-20 1476 \n33 0" "%d %d %d %d" a b c d] $a $b $c $d
} {4 -20 1476 33 0}
test scan-5.2 {integer scanning} {
set a {}; set b {}; set c {}
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
catch {unset z}; array set z {}
set result [list [catch {scan {abc def ghi} {%s%s%s} x z y} msg] \
$msg $x]
unset y
unset z
set result
} {1 {couldn't set variable "z"couldn't set variable "y"} abc}
# procedure that returns the range of integers
proc int_range {} {
for { set MIN_INT 1 } { $MIN_INT > 0 } {} {
set MIN_INT [expr { $MIN_INT << 1 }]
}
set MAX_INT [expr { ~ $MIN_INT }]
return [list $MIN_INT $MAX_INT]
}
test scan-4.62 {scanning of large and negative octal integers} {
foreach { MIN_INT MAX_INT } [int_range] {}
set scanstring [format {%o %o %o} -1 $MIN_INT $MAX_INT]
list [scan $scanstring {%o %o %o} a b c] \
[expr { $a == -1 }] [expr { $b == $MIN_INT }] [expr { $c == $MAX_INT }]
} {3 1 1 1}
test scan-4.63 {scanning of large and negative hex integers} {
foreach { MIN_INT MAX_INT } [int_range] {}
set scanstring [format {%x %x %x} -1 $MIN_INT $MAX_INT]
list [scan $scanstring {%x %x %x} a b c] \
[expr { $a == -1 }] [expr { $b == $MIN_INT }] [expr { $c == $MAX_INT }]
} {3 1 1 1}
# clean up from last two tests
catch {
rename int_range {}
}
test scan-5.1 {integer scanning} {
set a {}; set b {}; set c {}; set d {}
list [scan "-20 1476 \n33 0" "%d %d %d %d" a b c d] $a $b $c $d
} {4 -20 1476 33 0}
test scan-5.2 {integer scanning} {
set a {}; set b {}; set c {}
|
| ︙ | ︙ | |||
626 627 628 629 630 631 632 |
set msg [scan "10 20 30" {%100$d %5$d %200$d}]
list [llength $msg] [lindex $msg 99] [lindex $msg 4] [lindex $msg 199]
} {200 10 20 30}
# cleanup
::tcltest::cleanupTests
return
| < < < < < < < < < < < < < < | 666 667 668 669 670 671 672 |
set msg [scan "10 20 30" {%100$d %5$d %200$d}]
list [llength $msg] [lindex $msg 99] [lindex $msg 4] [lindex $msg 199]
} {200 10 20 30}
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/socket.test.
1 2 3 4 5 6 7 | # Commands tested in this file: socket. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1994-1996 Sun Microsystems, Inc. | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Commands tested in this file: socket. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: socket.test,v 1.14.2.2 2002/01/26 00:30:31 mdejong Exp $ # Running socket tests with a remote server: # ------------------------------------------ # # Some tests in socket.test depend on the existence of a remote server to # which they connect. The remote server must be an instance of tcltest and it # must run the script found in the file "remote.tcl" in this directory. You |
| ︙ | ︙ | |||
63 64 65 66 67 68 69 |
# using the remote server are not performed.
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
| | > | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# using the remote server are not performed.
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# Some tests require the testthread and exec commands
set ::tcltest::testConstraints(testthread) \
[expr {[info commands testthread] != {}}]
set ::tcltest::testConstraints(exec) [expr {[info commands exec] != {}}]
#
# If remoteServerIP or remoteServerPort are not set, check in the
# environment variables for externally set values.
#
if {![info exists remoteServerIP]} {
|
| ︙ | ︙ | |||
547 548 549 550 551 552 553 |
set sock ""
set s2 [socket 127.0.0.1 2400]
vwait sock
puts $s2 one
flush $s2
after 500
fconfigure $sock -blocking 0
| | | | | | 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 |
set sock ""
set s2 [socket 127.0.0.1 2400]
vwait sock
puts $s2 one
flush $s2
after 500
fconfigure $sock -blocking 0
set result a:[gets $sock]
lappend result b:[gets $sock]
fconfigure $sock -blocking 1
puts $s2 two
flush $s2
fconfigure $sock -blocking 0
lappend result c:[gets $sock]
fconfigure $sock -blocking 1
close $s2
close $s
close $sock
set result
} {a:one b: c:two}
test socket-3.1 {socket conflict} {socket stdio} {
removeFile script
set f [open script w]
puts $f {
set f [socket -server accept 2828]
|
| ︙ | ︙ | |||
820 821 822 823 824 825 826 |
} {3 127.0.0.1 0}
test socket-7.3 {testing socket specific options} {socket} {
set s [socket -server accept 2822]
set l [fconfigure $s]
close $s
update
llength $l
| | | 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 |
} {3 127.0.0.1 0}
test socket-7.3 {testing socket specific options} {socket} {
set s [socket -server accept 2822]
set l [fconfigure $s]
close $s
update
llength $l
} 14
test socket-7.4 {testing socket specific options} {socket} {
set s [socket -server accept 2823]
proc accept {s a p} {
global x
set x [fconfigure $s -sockname]
close $s
}
|
| ︙ | ︙ | |||
1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 |
fileevent $c readable "readlittle $c"
set timer [after 10000 "set done timed_out"]
vwait done
after cancel $timer
sendCommand {close $socket10_13_test_server}
list $spurious $len
} {0 2690}
test socket-11.12 {testing EOF stickyness} {socket doTestsWithRemoteServer} {
set counter 0
set done 0
proc count_up {s} {
global counter done after_id
set l [gets $s]
if {[eof $s]} {
| > | 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 |
fileevent $c readable "readlittle $c"
set timer [after 10000 "set done timed_out"]
vwait done
after cancel $timer
sendCommand {close $socket10_13_test_server}
list $spurious $len
} {0 2690}
test socket-11.12 {testing EOF stickyness} {socket doTestsWithRemoteServer} {
set counter 0
set done 0
proc count_up {s} {
global counter done after_id
set l [gets $s]
if {[eof $s]} {
|
| ︙ | ︙ | |||
1299 1300 1301 1302 1303 1304 1305 |
sendCommand {
set socket10_14_test_server [socket -server accept 2836]
proc accept {s a p} {
after 100 close $s
}
}
set c [socket $remoteServerIP 2836]
| | > | 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 |
sendCommand {
set socket10_14_test_server [socket -server accept 2836]
proc accept {s a p} {
after 100 close $s
}
}
set c [socket $remoteServerIP 2836]
fileevent $c readable [list count_up $c]
set after_id [after 1000 timed_out]
vwait done
sendCommand {close $socket10_14_test_server}
set done
} {EOF is sticky}
test socket-11.13 {testing async write, async flush, async close} \
{socket doTestsWithRemoteServer} {
proc readit {s} {
global count done
set l [read $s]
incr count [string length $l]
if {[eof $s]} {
|
| ︙ | ︙ | |||
1359 1360 1361 1362 1363 1364 1365 |
set timer [after 10000 "set done timed_out"]
vwait done
after cancel $timer
sendCommand {close $l}
set count
} 65566
| | < | < | | 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 |
set timer [after 10000 "set done timed_out"]
vwait done
after cancel $timer
sendCommand {close $l}
set count
} 65566
test socket-12.1 {testing inheritance of server sockets} {socket exec} {
removeFile script1
removeFile script2
# Script1 is just a 10 second delay. If the server socket
# is inherited, it will be held open for 10 seconds
set f [open script1 w]
puts $f {
after 10000 exit
vwait forever
}
close $f
# Script2 creates the server socket, launches script1,
# waits a second, and exits. The server socket will now
# be closed unless script1 inherited it.
set f [open script2 w]
puts $f [list set tclsh $::tcltest::tcltest]
puts $f {
set f [socket -server accept 2828]
proc accept { file addr port } {
close $file
}
exec $tclsh script1 &
close $f
after 1000 exit
vwait forever
}
close $f
# Launch script2 and wait 5 seconds
|
| ︙ | ︙ | |||
1412 1413 1414 1415 1416 1417 1418 |
set x {server socket was inherited}
}
removeFile script1
removeFile script2
set x
} {server socket was not inherited}
| | < | | < < | 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 |
set x {server socket was inherited}
}
removeFile script1
removeFile script2
set x
} {server socket was not inherited}
test socket-12.2 {testing inheritance of client sockets} {socket exec} {
removeFile script1
removeFile script2
# Script1 is just a 10 second delay. If the server socket
# is inherited, it will be held open for 10 seconds
set f [open script1 w]
puts $f {
after 10000 exit
vwait forever
}
close $f
# Script2 opens the client socket and writes to it. It then
# launches script1 and exits. If the child process inherited the
# client socket, the socket will still be open.
set f [open script2 w]
puts $f [list set tclsh $::tcltest::tcltest]
puts $f {
set f [socket 127.0.0.1 2829]
exec $tclsh script1 &
puts $f testing
flush $f
after 1000 exit
vwait forever
}
close $f
# Create the server socket
set server [socket -server accept 2829]
proc accept { file host port } {
# When the client connects, establish the read handler
global server
close $server
fileevent $file readable [list getdata $file]
fconfigure $file -buffering line -blocking 0
return
}
proc getdata { file } {
# Read handler on the accepted socket.
global x
global failed
set status [catch {read $file} data]
if {$status != 0} {
set x {read failed, error was $data}
catch { close $file }
|
| ︙ | ︙ | |||
1498 1499 1500 1501 1502 1503 1504 |
if {!$failed} {
vwait failed
}
removeFile script1
removeFile script2
set x
} {client socket was not inherited}
| | < | | | | | < | 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 |
if {!$failed} {
vwait failed
}
removeFile script1
removeFile script2
set x
} {client socket was not inherited}
test socket-12.3 {testing inheritance of accepted sockets} {socket exec} {
removeFile script1
removeFile script2
set f [open script1 w]
puts $f {
after 10000 exit
vwait forever
}
close $f
set f [open script2 w]
puts $f [list set tclsh $::tcltest::tcltest]
puts $f {
set server [socket -server accept 2931]
proc accept { file host port } {
global tclsh
puts $file {test data on socket}
exec $tclsh script1 &
after 1000 exit
}
vwait forever
}
close $f
# Launch the script2 process and connect to it. See how long
# the socket stays open
exec $::tcltest::tcltest script2 &
after 1000 set ok_to_proceed 1
vwait ok_to_proceed
set f [socket 127.0.0.1 2931]
fconfigure $f -buffering full -blocking 0
fileevent $f readable [list getdata $f]
# If the socket is still open after 5 seconds, the script1 process
# must have inherited the accepted socket.
set failed 0
after 5000 set failed 1
proc getdata { file } {
# Read handler on the client socket.
global x
global failed
set status [catch {read $file} data]
if {$status != 0} {
set x {read failed, error was $data}
catch { close $file }
|
| ︙ | ︙ | |||
1638 1639 1640 1641 1642 1643 1644 |
flush $commandSocket
}
catch {close $commandSocket}
catch {close $remoteProcChan}
::tcltest::cleanupTests
flush stdout
return
| < < < < < < < < < < < | 1634 1635 1636 1637 1638 1639 1640 |
flush $commandSocket
}
catch {close $commandSocket}
catch {close $remoteProcChan}
::tcltest::cleanupTests
flush stdout
return
|
Changes to tests/split.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Commands covered: split # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: split
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: split.test,v 1.6.2.1 2001/09/12 20:34:59 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
test split-1.1 {basic split commands} {
|
| ︙ | ︙ | |||
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
list [catch split msg] $msg $errorCode
} {1 {wrong # args: should be "split string ?splitChars?"} NONE}
test split-2.2 {split errors} {
list [catch {split a b c} msg] $msg $errorCode
} {1 {wrong # args: should be "split string ?splitChars?"} NONE}
# cleanup
::tcltest::cleanupTests
return
| > | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
list [catch split msg] $msg $errorCode
} {1 {wrong # args: should be "split string ?splitChars?"} NONE}
test split-2.2 {split errors} {
list [catch {split a b c} msg] $msg $errorCode
} {1 {wrong # args: should be "split string ?splitChars?"} NONE}
# cleanup
catch {rename foo {}}
::tcltest::cleanupTests
return
|
| ︙ | ︙ |
Changes to tests/stack.test.
1 2 3 4 5 6 | # Tests that the stack size is big enough for the application. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # | | | > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > | 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 |
# Tests that the stack size is big enough for the application.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1998-2000 Ajuba Solutions.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: stack.test,v 1.8.2.3 2001/09/11 18:23:45 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# Note that a failure in this test results in a crash of the executable.
# In order to avoid that, we do a basic check of the current stacksize.
# This size can be changed with ulimit (ksh/bash/sh) or limit (csh/tcsh).
# This doesn't catch all cases, for example threads of lower stacksize
# can still squeak through. A core check is really needed. -- JH
if {[string equal $::tcl_platform(platform) "unix"]} {
set stackSize [exec /bin/sh -c "ulimit -s"]
if {[string is integer $stackSize] && ($stackSize < 2400)} {
puts stderr "WARNING: the default application stacksize of $stackSize\
may cause Tcl to\ncrash due to stack overflow before the\
recursion limit is reached.\nA minimum stacksize of 2400\
kbytes is recommended.\nSkipping inifite recursion test."
set ::tcltest::testConstraints(minStack2400) 0
} else {
set ::tcltest::testConstraints(minStack2400) 1
}
} else {
set ::tcltest::testConstraints(minStack2400) 1
}
test stack-1.1 {maxNestingDepth reached on infinite recursion} {minStack2400} {
proc recurse {} { return [recurse] }
catch {recurse} rv
rename recurse {}
set rv
} {too many nested calls to Tcl_EvalObj (infinite loop?)}
test stack-2.1 {maxNestingDepth reached on infinite recursion} {minStack2400} {
# do this in a slave to not mess with parent
set slave stack-2.1
interp create $slave
$slave eval { interp alias {} unknown {} notaknownproc }
set msg [$slave eval { catch {foo} msg ; set msg }]
interp delete $slave
set msg
} {too many nested calls to AliasObjCmd (infinite loop using alias?)}
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/string.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Commands covered: string # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: string
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: string.test,v 1.23.2.1 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
# Some tests require the testobj command
|
| ︙ | ︙ | |||
251 252 253 254 255 256 257 258 259 260 261 262 263 264 |
} 0
test string-5.17 {string index, bad integer} {
list [catch {string index "abc" 08} msg] $msg
} {1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}}
test string-5.18 {string index, bad integer} {
list [catch {string index "abc" end-00289} msg] $msg
} {1 {expected integer but got "-00289" (looks like invalid octal number)}}
proc largest_int {} {
# This will give us what the largest valid int on this machine is,
# so we can test for overflow properly below on >32 bit systems
set int 1
set exp 7; # assume we get at least 8 bits
| > > > > > > | 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
} 0
test string-5.17 {string index, bad integer} {
list [catch {string index "abc" 08} msg] $msg
} {1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}}
test string-5.18 {string index, bad integer} {
list [catch {string index "abc" end-00289} msg] $msg
} {1 {expected integer but got "-00289" (looks like invalid octal number)}}
test string-5.19 {string index, bytearray object out of bounds} {
string index [binary format I* {0x50515253 0x52}] -1
} {}
test string-5.20 {string index, bytearray object out of bounds} {
string index [binary format I* {0x50515253 0x52}] 20
} {}
proc largest_int {} {
# This will give us what the largest valid int on this machine is,
# so we can test for overflow properly below on >32 bit systems
set int 1
set exp 7; # assume we get at least 8 bits
|
| ︙ | ︙ | |||
676 677 678 679 680 681 682 683 684 685 686 687 688 689 |
} aueue\334\0EU
test string-10.13 {string map, -nocase unicode} {
string map -nocase [list \374 ue UE \334] "a\374ueUE\000EU"
} aue\334\334\0EU
test string-10.14 {string map, -nocase null arguments} {
string map -nocase {{} abc} foo
} foo
test string-11.1 {string match, too few args} {
list [catch {string match a} msg] $msg
} {1 {wrong # args: should be "string match ?-nocase? pattern string"}}
test string-11.2 {string match, too many args} {
list [catch {string match a b c d} msg] $msg
} {1 {wrong # args: should be "string match ?-nocase? pattern string"}}
| > > > > > > > > > | 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 |
} aueue\334\0EU
test string-10.13 {string map, -nocase unicode} {
string map -nocase [list \374 ue UE \334] "a\374ueUE\000EU"
} aue\334\334\0EU
test string-10.14 {string map, -nocase null arguments} {
string map -nocase {{} abc} foo
} foo
test string-10.15 {string map, one pair case} {
string map -nocase {abc 32} aAbCaBaAbAbcAb
} {a32aBaAb32Ab}
test string-10.16 {string map, one pair case} {
string map -nocase {ab 4321} aAbCaBaAbAbcAb
} {a4321C4321a43214321c4321}
test string-10.17 {string map, one pair case} {
string map {Ab 4321} aAbCaBaAbAbcAb
} {a4321CaBa43214321c4321}
test string-11.1 {string match, too few args} {
list [catch {string match a} msg] $msg
} {1 {wrong # args: should be "string match ?-nocase? pattern string"}}
test string-11.2 {string match, too many args} {
list [catch {string match a b c d} msg] $msg
} {1 {wrong # args: should be "string match ?-nocase? pattern string"}}
|
| ︙ | ︙ | |||
794 795 796 797 798 799 800 801 802 803 804 805 806 807 |
} 0
test string-11.37 {string match nocase} {
string match -nocase {[A-fh-Z]} g
} 0
test string-11.38 {string match case, reverse range} {
string match {[A-fh-Z]} g
} 1
test string-12.1 {string range} {
list [catch {string range} msg] $msg
} {1 {wrong # args: should be "string range string first last"}}
test string-12.2 {string range} {
list [catch {string range a 1} msg] $msg
} {1 {wrong # args: should be "string range string first last"}}
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
} 0
test string-11.37 {string match nocase} {
string match -nocase {[A-fh-Z]} g
} 0
test string-11.38 {string match case, reverse range} {
string match {[A-fh-Z]} g
} 1
test string-11.39 {string match, *\ case} {
string match {*\abc} abc
} 1
test string-11.40 {string match, *special case} {
string match {*[ab]} abc
} 0
test string-11.41 {string match, *special case} {
string match {*[ab]*} abc
} 1
test string-11.42 {string match, *special case} {
string match "*\\" "\\"
} 0
test string-11.43 {string match, *special case} {
string match "*\\\\" "\\"
} 1
test string-11.44 {string match, *special case} {
string match "*???" "12345"
} 1
test string-11.45 {string match, *special case} {
string match "*???" "12"
} 0
test string-11.46 {string match, *special case} {
string match "*\\*" "abc*"
} 1
test string-11.47 {string match, *special case} {
string match "*\\*" "*"
} 1
test string-11.48 {string match, *special case} {
string match "*\\*" "*abc"
} 0
test string-11.49 {string match, *special case} {
string match "?\\*" "a*"
} 1
test string-11.50 {string match, *special case} {
string match "\\" "\\"
} 0
test string-12.1 {string range} {
list [catch {string range} msg] $msg
} {1 {wrong # args: should be "string range string first last"}}
test string-12.2 {string range} {
list [catch {string range a 1} msg] $msg
} {1 {wrong # args: should be "string range string first last"}}
|
| ︙ | ︙ | |||
880 881 882 883 884 885 886 887 888 889 890 891 892 893 |
} {abcabcabc}
test string-13.6 {string repeat} {
string repeat abc -1
} {}
test string-13.7 {string repeat} {
list [catch {string repeat abc end} msg] $msg
} {1 {expected integer but got "end"}}
test string-14.1 {string replace} {
list [catch {string replace} msg] $msg
} {1 {wrong # args: should be "string replace string first last ?string?"}}
test string-14.2 {string replace} {
list [catch {string replace a 1} msg] $msg
} {1 {wrong # args: should be "string replace string first last ?string?"}}
| > > > > > > > > > > > > > > > > > > > > > > | 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 |
} {abcabcabc}
test string-13.6 {string repeat} {
string repeat abc -1
} {}
test string-13.7 {string repeat} {
list [catch {string repeat abc end} msg] $msg
} {1 {expected integer but got "end"}}
test string-13.8 {string repeat} {
string repeat {} -1000
} {}
test string-13.9 {string repeat} {
string repeat {} 0
} {}
test string-13.10 {string repeat} {
string repeat def 0
} {}
test string-13.11 {string repeat} {
string repeat def 1
} def
test string-13.12 {string repeat} {
string repeat ab\u7266cd 3
} ab\u7266cdab\u7266cdab\u7266cd
test string-13.13 {string repeat} {
string repeat \x00 3
} \x00\x00\x00
test string-13.14 {string repeat} {
# The string range will ensure us that string repeat gets a unicode string
string repeat [string range ab\u7266cd 2 3] 3
} \u7266c\u7266c\u7266c
test string-14.1 {string replace} {
list [catch {string replace} msg] $msg
} {1 {wrong # args: should be "string replace string first last ?string?"}}
test string-14.2 {string replace} {
list [catch {string replace a 1} msg] $msg
} {1 {wrong # args: should be "string replace string first last ?string?"}}
|
| ︙ | ︙ | |||
1159 1160 1161 1162 1163 1164 1165 |
test string-22.13 {string wordstart, unicode} {
string wordstart "\uc700\uc700 abc" 8
} 3
# cleanup
::tcltest::cleanupTests
return
| < < < < < < | 1233 1234 1235 1236 1237 1238 1239 |
test string-22.13 {string wordstart, unicode} {
string wordstart "\uc700\uc700 abc" 8
} 3
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/stringObj.test.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | # # Copyright (c) 1995-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#
# Copyright (c) 1995-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: stringObj.test,v 1.10.2.2 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
if {[info commands testobj] == {}} {
|
| ︙ | ︙ | |||
317 318 319 320 321 322 323 |
set q
} {a b c d e f a ü b å c ï}
test stringObj-10.1 {Tcl_GetRange with all byte-size chars} {
set x "abcdef"
list [testobj objtype $x] [set y [string range $x 1 end-1]] \
[testobj objtype $x] [testobj objtype $y]
| | > > > > > | | > > > | | > > > > > > > | | 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 |
set q
} {a b c d e f a ü b å c ï}
test stringObj-10.1 {Tcl_GetRange with all byte-size chars} {
set x "abcdef"
list [testobj objtype $x] [set y [string range $x 1 end-1]] \
[testobj objtype $x] [testobj objtype $y]
} [list none bcde string string]
test stringObj-10.2 {Tcl_GetRange with some mixed width chars} {
# Because this test does not use \uXXXX notation below instead of
# hardcoding the values, it may fail in multibyte locales. However,
# we need to test that the parser produces untyped objects even when there
# are high-ASCII characters in the input (like "ï"). I don't know what
# else to do but inline those characters here.
set x "abcïïdef"
list [testobj objtype $x] [set y [string range $x 1 end-1]] \
[testobj objtype $x] [testobj objtype $y]
} [list none "bc\u00EF\u00EFde" string string]
test stringObj-10.3 {Tcl_GetRange with some mixed width chars} {
# set x "abcïïdef"
# Use \uXXXX notation below instead of hardcoding the values, otherwise
# the test will fail in multibyte locales.
set x "abc\u00EF\u00EFdef"
string length $x
list [testobj objtype $x] [set y [string range $x 1 end-1]] \
[testobj objtype $x] [testobj objtype $y]
} [list string "bc\u00EF\u00EFde" string string]
test stringObj-10.4 {Tcl_GetRange with some mixed width chars} {
# set a "ïa¿b®cï¿d®"
# Use \uXXXX notation below instead of hardcoding the values, otherwise
# the test will fail in multibyte locales.
set a "\u00EFa\u00BFb\u00AEc\u00EF\u00BFd\u00AE"
set result [list]
while {[string length $a] > 0} {
set a [string range $a 1 end-1]
lappend result $a
}
set result
} [list a\u00BFb\u00AEc\u00EF\u00BFd \
\u00BFb\u00AEc\u00EF\u00BF \
b\u00AEc\u00EF \
\u00AEc \
{}]
test stringObj-11.1 {UpdateStringOfString} {
set x 2345
list [string index $x end] [testobj objtype $x] [incr x] \
[testobj objtype $x]
} {5 string 2346 int}
|
| ︙ | ︙ | |||
383 384 385 386 387 388 389 |
set a "abcdef"
list [string length $a] [string length $a]
} {6 6}
test stringObj-13.4 {Tcl_GetCharLength with mixed width chars} {
string length "®"
} 1
test stringObj-13.5 {Tcl_GetCharLength with mixed width chars} {
| | > > > | > > > | 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 |
set a "abcdef"
list [string length $a] [string length $a]
} {6 6}
test stringObj-13.4 {Tcl_GetCharLength with mixed width chars} {
string length "®"
} 1
test stringObj-13.5 {Tcl_GetCharLength with mixed width chars} {
# string length "○○"
# Use \uXXXX notation below instead of hardcoding the values, otherwise
# the test will fail in multibyte locales.
string length "\u00EF\u00BF\u00AE\u00EF\u00BF\u00AE"
} 6
test stringObj-13.6 {Tcl_GetCharLength with mixed width chars} {
# set a "ïa¿b®cï¿d®"
# Use \uXXXX notation below instead of hardcoding the values, otherwise
# the test will fail in multibyte locales.
set a "\u00EFa\u00BFb\u00AEc\u00EF\u00BFd\u00AE"
list [string length $a] [string length $a]
} {10 10}
testobj freeallvars
# cleanup
::tcltest::cleanupTests
|
| ︙ | ︙ |
Changes to tests/subst.test.
1 2 3 4 5 6 7 8 | # Commands covered: subst # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994 Sun Microsystems, Inc. | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: subst
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1994 The Regents of the University of California.
# Copyright (c) 1994 Sun Microsystems, Inc.
# Copyright (c) 1998-2000 Ajuba Solutions.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: subst.test,v 1.6.2.1 2001/04/03 22:54:38 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
test subst-1.1 {basics} {
|
| ︙ | ︙ | |||
105 106 107 108 109 110 111 |
subst -novariables {abc $x [expr 1+2] \\\x41}
} {abc $x 3 \A}
test subst-7.7 {switches} {
set x 123
subst -nov -nob -noc {abc $x [expr 1+2] \\\x41}
} {abc $x [expr 1+2] \\\x41}
| > > > > > > > > > > > | | > > | | | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
subst -novariables {abc $x [expr 1+2] \\\x41}
} {abc $x 3 \A}
test subst-7.7 {switches} {
set x 123
subst -nov -nob -noc {abc $x [expr 1+2] \\\x41}
} {abc $x [expr 1+2] \\\x41}
test subst-8.1 {return in a subst} {
subst {foo [return {x}; bogus code] bar}
} {foo x bar}
test subst-8.2 {return in a subst} {
subst {foo [return x ; bogus code] bar}
} {foo x bar}
test subst-8.3 {return in a subst} {
subst {foo [if 1 { return {x}; bogus code }] bar}
} {foo x bar}
test subst-8.4 {return in a subst} {
subst {[eval {return hi}] there}
} {hi there}
test subst-8.5 {return in a subst} {
subst {foo [return {]}; bogus code] bar}
} {foo ] bar}
test subst-8.6 {return in a subst} {
subst {foo [return {x}; bogus code bar}
} {foo x}
test subst-8.7 {return in a subst, parse error} {
subst {foo [return {x} ; set a {}" ; stuff] bar}
} {foo xset a {}" ; stuff] bar}
test subst-8.8 {return in a subst, parse error} {
subst {foo [return {x} ; set bar baz ; set a {}" ; stuff] bar}
} {foo xset bar baz ; set a {}" ; stuff] bar}
test subst-9.1 {error in a subst} {
list [catch {subst {[error foo; bogus code]bar}} msg] $msg
} {1 foo}
test subst-9.2 {error in a subst} {
list [catch {subst {[if 1 { error foo; bogus code}]bar}} msg] $msg
} {1 foo}
test subst-10.1 {break in a subst} {
subst {foo [break; bogus code] bar}
} {foo bar}
test subst-10.2 {break in a subst} {
subst {foo [break; return x; bogus code] bar}
} {foo bar}
test subst-10.3 {break in a subst} {
subst {foo [if 1 { break; bogus code}] bar}
} {foo bar}
test subst-10.4 {break in a subst, parse error} {
subst {foo [break ; set a {}{} ; stuff] bar}
} {foo set a {}{} ; stuff] bar}
test subst-10.5 {break in a subst, parse error} {
subst {foo [break ;set bar baz ;set a {}{} ; stuff] bar}
} {foo set bar baz ;set a {}{} ; stuff] bar}
test subst-11.1 {continue in a subst} {
subst {foo [continue; bogus code] bar}
} {foo bar}
test subst-11.2 {continue in a subst} {
subst {foo [continue; return x; bogus code] bar}
} {foo bar}
test subst-11.3 {continue in a subst} {
subst {foo [if 1 { continue; bogus code}] bar}
} {foo bar}
test subst-11.4 {continue in a subst, parse error} {
subst {foo [continue ; set a {}{} ; stuff] bar}
} {foo set a {}{} ; stuff] bar}
test subst-11.5 {continue in a subst, parse error} {
subst {foo [continue ;set bar baz ;set a {}{} ; stuff] bar}
} {foo set bar baz ;set a {}{} ; stuff] bar}
# cleanup
::tcltest::cleanupTests
return
|
Changes to tests/timer.test.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | # # Copyright (c) 1997 by Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | | | 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 |
#
# Copyright (c) 1997 by Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: timer.test,v 1.7.2.1 2001/10/13 01:14:19 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
test timer-1.1 {Tcl_CreateTimerHandler procedure} {
foreach i [after info] {
after cancel $i
}
set x ""
foreach i {100 200 1000 50 150} {
after $i lappend x $i
}
after 210
update
set x
} {50 100 150 200}
test timer-2.1 {Tcl_DeleteTimerHandler procedure} {
foreach i [after info] {
after cancel $i
}
set x ""
foreach i {100 200 300 50 150} {
after $i lappend x $i
}
after cancel lappend x 150
after cancel lappend x 50
after 210
update
set x
} {100 200}
# No tests for Tcl_ServiceTimer or ResetTimer, since it is already tested
# above.
|
| ︙ | ︙ | |||
63 64 65 66 67 68 69 |
test timer-3.2 {TimerHandlerEventProc procedure: multiple timers} {
foreach i [after info] {
after cancel $i
}
foreach i {200 600 1000} {
after $i lappend x $i
}
| | | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
test timer-3.2 {TimerHandlerEventProc procedure: multiple timers} {
foreach i [after info] {
after cancel $i
}
foreach i {200 600 1000} {
after $i lappend x $i
}
after 210
set result ""
set x ""
update
lappend result $x
after 400
update
lappend result $x
|
| ︙ | ︙ | |||
95 96 97 98 99 100 101 |
foreach i [after info] {
after cancel $i
}
set x {}
after 100 lappend x a
after 200 lappend x b
after 300 lappend x c
| | | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
foreach i [after info] {
after cancel $i
}
set x {}
after 100 lappend x a
after 200 lappend x b
after 300 lappend x c
after 310
vwait x
set x
} {a b c}
test timer-3.5 {TimerHandlerEventProc procedure: reentrantly added timers don't fire} {
foreach i [after info] {
after cancel $i
}
|
| ︙ | ︙ |
Changes to tests/trace.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Commands covered: trace # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Commands covered: trace
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: trace.test,v 1.6.2.1 2001/10/16 05:46:04 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
proc traceScalar {name1 name2 op} {
|
| ︙ | ︙ | |||
957 958 959 960 961 962 963 964 965 966 967 968 969 970 |
test trace-17.1 {unset traces on procedure returns} {
proc p1 {x y} {set a 44; p2 14}
proc p2 {z} {trace var z u {traceCheck {lsort [uplevel {info vars}]}}}
set info {}
p1 foo bar
set info
} {0 {a x y}}
# Delete arrays when done, so they can be re-used as scalars
# elsewhere.
catch {unset x}
catch {unset y}
| > > > > > > > > > > > > > > > > | 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 |
test trace-17.1 {unset traces on procedure returns} {
proc p1 {x y} {set a 44; p2 14}
proc p2 {z} {trace var z u {traceCheck {lsort [uplevel {info vars}]}}}
set info {}
p1 foo bar
set info
} {0 {a x y}}
test trace-18.1 {test for Tcl Bug 219393} {
# This test demonstrates the memory corruption error described
# in Tcl Bug 219393. On some platforms it may cause a segfault.
# On others it may apparently succeed, but the memory problems
# should be detectable when evaluating the test suite with a
# tool like Purify.
proc p1 args {
trace vdelete x r p1
trace variable x r p1
error "This causes memory error"
}
set x 123
trace variable x r p1
catch {set x}
} 1
# Delete arrays when done, so they can be re-used as scalars
# elsewhere.
catch {unset x}
catch {unset y}
|
| ︙ | ︙ |
Changes to tests/unixInit.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # The file tests the functions in the tclUnixInit.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1997 by Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | > > | | | 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 |
# The file tests the functions in the tclUnixInit.c file.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1997 by Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: unixInit.test,v 1.13.2.4 2001/10/10 20:05:46 dgp Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
set ::tcltest::testConstraints(notInstalledInTmp) \
[string match /tmp/lib/* [info library]]
if {[info exists env(TCL_LIBRARY)]} {
set oldlibrary $env(TCL_LIBRARY)
unset env(TCL_LIBRARY)
}
catch {set oldlang $env(LANG)}
set env(LANG) C
# Some tests will fail if they are run on a machine that doesn't have
# this Tcl version installed (as opposed to built) on it.
if {[catch {
set f [open "|[list $::tcltest::tcltest]" w+]
exec kill -PIPE [pid $f]
close $f
} msg]} {
set ::tcltest::testConstraints(installedTcl) 0
} else {
set ::tcltest::testConstraints(installedTcl) 1
}
test unixInit-1.1 {TclpInitPlatform: ignore SIGPIPE} {unixOnly installedTcl} {
set x {}
|
| ︙ | ︙ | |||
146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
set x
} [list /tmp/sparkly/lib/tcl[info tclversion] /tmp/lib/tcl[info tclversion]]
test unixInit-2.7 {TclpInitLibraryPath: compiled-in library path} \
{emptyTest unixOnly} {
# would need test command to get defaultLibDir and compare it to
# [lindex $auto_path end]
} {}
test unixInit-3.1 {TclpSetInitialEncodings} {unixOnly installedTcl} {
set env(LANG) C
set f [open "|[list $::tcltest::tcltest]" w+]
fconfigure $f -buffering none
puts $f {puts [encoding system]; exit}
set enc [gets $f]
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
set x
} [list /tmp/sparkly/lib/tcl[info tclversion] /tmp/lib/tcl[info tclversion]]
test unixInit-2.7 {TclpInitLibraryPath: compiled-in library path} \
{emptyTest unixOnly} {
# would need test command to get defaultLibDir and compare it to
# [lindex $auto_path end]
} {}
test unixInit-2.8 {TclpInitLibraryPath: all absolute pathtype} {unixOnly notInstalledInTmp} {
# Checking for Bug 219416
# When a program that embeds the Tcl library, like tcltest, is
# installed near the "root" of the file system, there was a problem
# constructing directories relative to the executable. When a
# relative ".." went past the root, relative path names were created
# rather than absolute pathnames. In some cases, accessing past the
# root caused memory access violations too.
#
# The bug is now fixed, but here we check for it by making sure that
# the directories constructed relative to the executable are all
# absolute pathnames, even when the executable is installed near
# the root of the filesystem.
#
# The only directory near the root we are likely to have write access
# to is /tmp.
file delete -force /tmp/sparkly
file delete -force /tmp/lib/tcl[info tclversion]
file mkdir /tmp/sparkly
file copy $::tcltest::tcltest /tmp/sparkly/tcltest
# Keep any existing /tmp/lib directory
set deletelib 1
if {[file exists /tmp/lib]} {
if {[file isdirectory /tmp/lib]} {
set deletelib 0
} else {
file delete -force /tmp/lib
}
}
# For a successful Tcl_Init, we need a [source]-able init.tcl in
# ../lib/tcl$version relative to the executable.
file mkdir /tmp/lib/tcl[info tclversion]
close [open /tmp/lib/tcl[info tclversion]/init.tcl w]
# Check that all directories in the library path are absolute pathnames
set allAbsolute 1
foreach dir [getlibpath /tmp/sparkly/tcltest] {
set allAbsolute [expr {$allAbsolute \
&& [string equal absolute [file pathtype $dir]]}]
}
# Clean up temporary installation
file delete -force /tmp/sparkly
file delete -force /tmp/lib/tcl[info tclversion]
if {$deletelib} {file delete -force /tmp/lib}
set allAbsolute
} 1
test unixInit-2.9 {TclpInitLibraryPath: paths relative to executable} {
unixOnly} {
# Checking for Bug 438014
file delete -force /tmp/sparkly
file delete -force /tmp/library
file mkdir /tmp/sparkly
file copy $::tcltest::tcltest /tmp/sparkly/tcltest
file mkdir /tmp/library/
close [open /tmp/library/init.tcl w]
set x [lrange [getlibpath /tmp/sparkly/tcltest] 0 4]
file delete -force /tmp/sparkly
file delete -force /tmp/library
set x
} [list /tmp/lib/tcl[info tclversion] /lib/tcl[info tclversion] \
/tmp/library /library [format /tcl%s/library \
[expr {[regexp {[ab]} [info patchlevel]] ?
[info patchleve] : [info tclversion]}]]]
test unixInit-3.1 {TclpSetInitialEncodings} {unixOnly installedTcl} {
set env(LANG) C
set f [open "|[list $::tcltest::tcltest]" w+]
fconfigure $f -buffering none
puts $f {puts [encoding system]; exit}
set enc [gets $f]
|
| ︙ | ︙ | |||
172 173 174 175 176 177 178 |
puts $f {puts [encoding system]; exit}
set enc [gets $f]
close $f
unset env(LANG)
unset env(LC_ALL)
catch {set env(LC_ALL) $oldlc_all}
| > | | > > | | | | > | 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 |
puts $f {puts [encoding system]; exit}
set enc [gets $f]
close $f
unset env(LANG)
unset env(LC_ALL)
catch {set env(LC_ALL) $oldlc_all}
set validEncodings [list euc-jp]
if {[string match HP-UX $tcl_platform(os)]} {
# Some older HP-UX systems need us to accept this as valid
# Bug 453883 reports that newer HP-UX systems report euc-jp
# like everybody else.
lappend validEncodings shiftjis
}
expr {[lsearch -exact $validEncodings $enc] < 0}
} 0
test unixInit-4.1 {TclpSetVariables} {unixOnly} {
# just make sure they exist
set a [list $tcl_library $tcl_pkgPath $tcl_platform(os)]
set a [list $tcl_platform(osVersion) $tcl_platform(machine)]
set tcl_platform(platform)
} "unix"
test unixInit-5.1 {Tcl_Init} {emptyTest unixOnly} {
# test initScript
} {}
test unixInit-6.1 {Tcl_SourceRCFile} {emptyTest unixOnly} {
} {}
# cleanup
if {[info exists oldlibrary]} {
set env(TCL_LIBRARY) $oldlibrary
}
catch {unset env(LANG)}
catch {set env(LANG) $oldlang}
::tcltest::cleanupTests
return
|
Changes to tests/util.test.
1 2 3 4 5 6 7 8 9 | # This file is a Tcl script to test the code in the file tclUtil.c. # This file is organized in the standard fashion for Tcl tests. # # Copyright (c) 1995-1998 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# This file is a Tcl script to test the code in the file tclUtil.c.
# This file is organized in the standard fashion for Tcl tests.
#
# Copyright (c) 1995-1998 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: util.test,v 1.7.2.1 2001/07/16 23:14:13 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
if {[info commands testobj] == {}} {
|
| ︙ | ︙ | |||
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
} {a b\\ c}
test util-4.4 {Tcl_ConcatObj - backslash-space at end of argument} {
concat a {b } c
} {a b c}
test util-4.5 {Tcl_ConcatObj - backslash-space at end of argument} {
concat a { } c
} {a c}
test util-5.1 {Tcl_StringMatch} {
string match ab*c abc
} 1
test util-5.2 {Tcl_StringMatch} {
string match ab**c abc
} 1
| > > > > | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
} {a b\\ c}
test util-4.4 {Tcl_ConcatObj - backslash-space at end of argument} {
concat a {b } c
} {a b c}
test util-4.5 {Tcl_ConcatObj - backslash-space at end of argument} {
concat a { } c
} {a c}
test util-4.6 {Tcl_ConcatObj - utf-8 sequence with "whitespace" char} {
# Check for Bug #227512. If this violates C isspace, then it returns \xc3.
concat \xe0
} \xe0
test util-5.1 {Tcl_StringMatch} {
string match ab*c abc
} 1
test util-5.2 {Tcl_StringMatch} {
string match ab**c abc
} 1
|
| ︙ | ︙ |
Changes to tests/var.test.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | # # Copyright (c) 1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#
# Copyright (c) 1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: var.test,v 1.15.2.1 2001/11/09 23:09:09 dgp Exp $
#
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
|
| ︙ | ︙ | |||
320 321 322 323 324 325 326 327 328 329 330 331 332 333 |
set ::test_ns_var::test_ns_nested:: 24
proc p {} {
global ::test_ns_var::test_ns_nested::
set {}
}
p
} {24}
test var-7.1 {Tcl_VariableObjCmd, create and initialize one new ns variable} {
catch {namespace delete test_ns_var}
namespace eval test_ns_var {
variable one 1
}
list [info vars test_ns_var::*] [set test_ns_var::one]
| > > > > > > > > > > | 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 |
set ::test_ns_var::test_ns_nested:: 24
proc p {} {
global ::test_ns_var::test_ns_nested::
set {}
}
p
} {24}
test var-6.4 {Tcl_GlobalObjCmd, variable name matching :*} {
# Test for Tcl Bug 480176
set :v broken
proc p {} {
global :v
set :v fixed
}
p
set :v
} {fixed}
test var-7.1 {Tcl_VariableObjCmd, create and initialize one new ns variable} {
catch {namespace delete test_ns_var}
namespace eval test_ns_var {
variable one 1
}
list [info vars test_ns_var::*] [set test_ns_var::one]
|
| ︙ | ︙ |
Changes to tests/winFCmd.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # This file tests the tclWinFCmd.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1996-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# This file tests the tclWinFCmd.c file.
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1996-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: winFCmd.test,v 1.9.2.1 2001/10/12 23:43:10 hobbs Exp $
#
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
|
| ︙ | ︙ | |||
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
set x [glob [file join $p tf*] [file join $p td*]]
}
if {$x != ""} {
catch {eval file delete -force -- $x}
}
}
}
set ::tcltest::testConstraints(cdrom) 0
set ::tcltest::testConstraints(exdev) 0
# find a CD-ROM so we can test read-only filesystems.
set cdrom {}
| > > > > > > > > > > > > > > | 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 |
set x [glob [file join $p tf*] [file join $p td*]]
}
if {$x != ""} {
catch {eval file delete -force -- $x}
}
}
}
if {[string equal $tcl_platform(platform) "windows"]} {
if {[string equal $tcl_platform(os) "Windows NT"] \
&& [string equal [string index $tcl_platform(osVersion) 0] "5"]} {
set tcltest::testConstraints(win2000) 1
set tcltest::testConstraints(notWin2000) 0
} else {
set tcltest::testConstraints(win2000) 0
set tcltest::testConstraints(notWin2000) 1
}
} else {
set tcltest::testConstraints(win2000) 0
set tcltest::testConstraints(notWin2000) 0
}
set ::tcltest::testConstraints(cdrom) 0
set ::tcltest::testConstraints(exdev) 0
# find a CD-ROM so we can test read-only filesystems.
set cdrom {}
|
| ︙ | ︙ | |||
184 185 186 187 188 189 190 |
cleanup
createfile tf1
set fd [open tf2 w]
set msg [list [catch {testfile mv tf1 tf2} msg] $msg]
close $fd
set msg
} {1 EACCES}
| | > > > > | 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
cleanup
createfile tf1
set fd [open tf2 w]
set msg [list [catch {testfile mv tf1 tf2} msg] $msg]
close $fd
set msg
} {1 EACCES}
test winFCmd-1.13 {TclpRenameFile: errno: EACCES} {win2000} {
cleanup
list [catch {testfile mv nul tf1} msg] $msg
} {1 EINVAL}
test winFCmd-1.13.1 {TclpRenameFile: errno: EACCES} {notWin2000} {
cleanup
list [catch {testfile mv nul tf1} msg] $msg
} {1 EACCES}
test winFCmd-1.14 {TclpRenameFile: errno: EACCES} {95} {
cleanup
createfile tf1
list [catch {testfile mv tf1 nul} msg] $msg
|
| ︙ | ︙ | |||
212 213 214 215 216 217 218 |
cleanup
list [catch {testfile mv tf1 tf2} msg] $msg
} {1 ENOENT}
test winFCmd-1.18 {TclpRenameFile: srcAttr == -1} {pcOnly} {
cleanup
list [catch {testfile mv tf1 tf2} msg] $msg
} {1 ENOENT}
| | > > > > | 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
cleanup
list [catch {testfile mv tf1 tf2} msg] $msg
} {1 ENOENT}
test winFCmd-1.18 {TclpRenameFile: srcAttr == -1} {pcOnly} {
cleanup
list [catch {testfile mv tf1 tf2} msg] $msg
} {1 ENOENT}
test winFCmd-1.19 {TclpRenameFile: errno == EACCES} {win2000} {
cleanup
list [catch {testfile mv nul tf1} msg] $msg
} {1 EINVAL}
test winFCmd-1.19.1 {TclpRenameFile: errno == EACCES} {notWin2000} {
cleanup
list [catch {testfile mv nul tf1} msg] $msg
} {1 EACCES}
test winFCmd-1.20 {TclpRenameFile: src is dir} {nt} {
# under 95, this would actually succeed and move the current dir out from
# under the current process!
cleanup
|
| ︙ | ︙ | |||
357 358 359 360 361 362 363 |
cleanup
createfile tf1
set fd [open tf2 w]
set msg [list [catch {testfile cp tf1 tf2} msg] $msg]
close $fd
set msg
} {1 EACCES}
| | > > > > | 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 |
cleanup
createfile tf1
set fd [open tf2 w]
set msg [list [catch {testfile cp tf1 tf2} msg] $msg]
close $fd
set msg
} {1 EACCES}
test winFCmd-2.8 {TclpCopyFile: errno: EACCES} {win2000} {
cleanup
list [catch {testfile cp nul tf1} msg] $msg
} {1 EINVAL}
test winFCmd-2.8.1 {TclpCopyFile: errno: EACCES} {nt notWin2000} {
cleanup
list [catch {testfile cp nul tf1} msg] $msg
} {1 EACCES}
test winFCmd-2.9 {TclpCopyFile: errno: ENOENT} {95} {
cleanup
list [catch {testfile cp nul tf1} msg] $msg
} {1 ENOENT}
|
| ︙ | ︙ |
Changes to tests/winPipe.test.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | # # Copyright (c) 1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | < < | 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 |
#
# Copyright (c) 1996 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: winPipe.test,v 1.12.2.1 2001/10/13 01:14:34 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import -force ::tcltest::*
}
set bindir [file join [pwd] [file dirname [info nameofexecutable]]]
set cat32 [file join $bindir cat32.exe]
set ::tcltest::testConstraints(cat32) [file exists $cat32]
if {[catch {puts console1 ""}]} {
set ::tcltest::testConstraints(AllocConsole) 1
} else {
set ::tcltest::testConstraints(.console) 1
}
|
| ︙ | ︙ | |||
152 153 154 155 156 157 158 |
exec $cat32 < little >@$f1 2>@$f2
close $f1
close $f2
list [contents stdout] [contents stderr]
} {little stderr32}
test winpipe-1.20 {32 bit comprehensive tests: write to application} \
{pcOnly stdio cat32} {
| | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | 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 |
exec $cat32 < little >@$f1 2>@$f2
close $f1
close $f2
list [contents stdout] [contents stderr]
} {little stderr32}
test winpipe-1.20 {32 bit comprehensive tests: write to application} \
{pcOnly stdio cat32} {
set f [open |[list $cat32 >stdout] w]
puts -nonewline $f "foo"
catch {close $f} msg
list [contents stdout] $msg
} {foo stderr32}
test winpipe-1.21 {32 bit comprehensive tests: read/write application} \
{pcOnly stdio cat32} {
set f [open "|$cat32" r+]
puts $f $big
puts $f \032
flush $f
set r [read $f 64]
catch {close $f}
set r
} "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
test winpipe-1.22 {Checking command.com for Win95/98 hanging} {95 stdio} {
exec command.com /c dir /b
set result 1
} 1
file delete more
test winpipe-4.1 {Tcl_WaitPid} {nt stdio cat32} {
proc readResults {f} {
global x result
if { [eof $f] } {
close $f
set x 1
} else {
set line [read $f ]
|
| ︙ | ︙ | |||
401 402 403 404 405 406 407 |
unset env(TEMP)
}
# cleanup
file delete big little stdout stderr nothing echoArgs.tcl
::tcltest::cleanupTests
return
| < < < < < < < < < < < | 300 301 302 303 304 305 306 |
unset env(TEMP)
}
# cleanup
file delete big little stdout stderr nothing echoArgs.tcl
::tcltest::cleanupTests
return
|
Added tools/configure.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
--with-tcl=DIR use Tcl 8.3 binaries from DIR"
# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
case "$ac_option" in
-*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case "$ac_option" in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir="$ac_optarg" ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build="$ac_optarg" ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file="$ac_optarg" ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir="$ac_optarg" ;;
-disable-* | --disable-*)
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
eval "enable_${ac_feature}=no" ;;
-enable-* | --enable-*)
ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "enable_${ac_feature}='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix="$ac_optarg" ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he)
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
EOF
cat << EOF
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
EOF
if test -n "$ac_help"; then
echo "--enable and --with options recognized:$ac_help"
fi
exit 0 ;;
-host | --host | --hos | --ho)
ac_prev=host ;;
-host=* | --host=* | --hos=* | --ho=*)
host="$ac_optarg" ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir="$ac_optarg" ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir="$ac_optarg" ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir="$ac_optarg" ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir="$ac_optarg" ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir="$ac_optarg" ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir="$ac_optarg" ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir="$ac_optarg" ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix="$ac_optarg" ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix="$ac_optarg" ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix="$ac_optarg" ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name="$ac_optarg" ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir="$ac_optarg" ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir="$ac_optarg" ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir="$ac_optarg" ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir="$ac_optarg" ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target="$ac_optarg" ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.13"
exit 0 ;;
-with-* | --with-*)
ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "with_${ac_package}='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`echo $ac_option|sed -e 's/-*without-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
eval "with_${ac_package}=no" ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes="$ac_optarg" ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries="$ac_optarg" ;;
-*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
;;
*)
if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
echo "configure: warning: $ac_option: invalid host type" 1>&2
fi
if test "x$nonopt" != xNONE; then
{ echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
fi
nonopt="$ac_option"
;;
esac
done
if test -n "$ac_prev"; then
{ echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
exec 6>/dev/null
else
exec 6>&1
fi
exec 5>./config.log
echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
ac_configure_args="$ac_configure_args '$ac_arg'" ;;
*) ac_configure_args="$ac_configure_args $ac_arg" ;;
esac
done
# NLS nuisances.
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=man2tcl.c
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
{ echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
else
{ echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
echo "loading site script $ac_site_file"
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
echo "loading cache $cache_file"
. $cache_file
else
echo "creating cache $cache_file"
> $cache_file
fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
ac_exeext=
ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
ac_n= ac_c='
' ac_t=' '
else
ac_n=-n ac_c= ac_t=
fi
else
ac_n= ac_c='\c' ac_t=
fi
# RCS: @(#) $Id: configure,v 1.1.2.1 2001/04/03 22:10:13 hobbs Exp $
# Recover information that Tcl computed with its configure script.
#--------------------------------------------------------------------
# See if there was a command-line option for where Tcl is; if
# not, assume that its top-level directory is a sibling of ours.
#--------------------------------------------------------------------
# Check whether --with-tcl or --without-tcl was given.
if test "${with_tcl+set}" = set; then
withval="$with_tcl"
TCL_BIN_DIR=$withval
else
TCL_BIN_DIR=`cd ../../tcl8.3$TCL_PATCH_LEVEL/unix; pwd`
fi
if test ! -d $TCL_BIN_DIR; then
{ echo "configure: error: Tcl directory $TCL_BIN_DIR doesn't exist" 1>&2; exit 1; }
fi
if test ! -f $TCL_BIN_DIR/tclConfig.sh; then
{ echo "configure: error: There's no tclConfig.sh in $TCL_BIN_DIR; perhaps you didn't specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?" 1>&2; exit 1; }
fi
. $TCL_BIN_DIR/tclConfig.sh
TCL_WIN_VERSION=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION
CC=$TCL_CC
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
if test -w $cache_file; then
echo "updating cache $cache_file"
cat confcache > $cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
fi
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.
ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
case "\$ac_option" in
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.13"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
*) echo "\$ac_cs_usage"; exit 1 ;;
esac
done
ac_given_srcdir=$srcdir
trap 'rm -fr `echo "Makefile tcl.hpj" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@FFLAGS@%$FFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@TCL_WIN_VERSION@%$TCL_WIN_VERSION%g
s%@CC@%$CC%g
s%@TCL_VERSION@%$TCL_VERSION%g
s%@TCL_PATCH_LEVEL@%$TCL_PATCH_LEVEL%g
s%@TCL_SRC_DIR@%$TCL_SRC_DIR%g
s%@TCL_BIN_DIR@%$TCL_BIN_DIR%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile tcl.hpj"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
else
ac_dir_suffix= ac_dots=
fi
case "$ac_given_srcdir" in
.) srcdir=.
if test -z "$ac_dots"; then top_srcdir=.
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
*) # Relative path.
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
case "$ac_file" in
*Makefile*) ac_comsub="1i\\
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*
EOF
cat >> $CONFIG_STATUS <<EOF
EOF
cat >> $CONFIG_STATUS <<\EOF
exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
|
Changes to tools/encoding/cp1250.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1250 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1250 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1250 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
139 140 141 142 143 144 145 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE | | | | | | | | | 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 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 #UNDEFINED 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 #UNDEFINED 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x015A #LATIN CAPITAL LETTER S WITH ACUTE 0x8D 0x0164 #LATIN CAPITAL LETTER T WITH CARON 0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x015B #LATIN SMALL LETTER S WITH ACUTE 0x9D 0x0165 #LATIN SMALL LETTER T WITH CARON 0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON 0x9F 0x017A #LATIN SMALL LETTER Z WITH ACUTE 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x02C7 #CARON 0xA2 0x02D8 #BREVE 0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x02DB #OGONEK 0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE |
| ︙ | ︙ | |||
267 268 269 270 271 272 273 | 0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA 0xFF 0x02D9 #DOT ABOVE | < < | 268 269 270 271 272 273 274 | 0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA 0xFF 0x02D9 #DOT ABOVE |
Changes to tools/encoding/cp1251.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1251 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1251 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1251 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
147 148 149 150 151 152 153 | 0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0453 #CYRILLIC SMALL LETTER GJE 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER | | | | 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 | 0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0453 #CYRILLIC SMALL LETTER GJE 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x20AC #EURO SIGN 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0409 #CYRILLIC CAPITAL LETTER LJE 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x040A #CYRILLIC CAPITAL LETTER NJE 0x8D 0x040C #CYRILLIC CAPITAL LETTER KJE 0x8E 0x040B #CYRILLIC CAPITAL LETTER TSHE 0x8F 0x040F #CYRILLIC CAPITAL LETTER DZHE 0x90 0x0452 #CYRILLIC SMALL LETTER DJE 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0459 #CYRILLIC SMALL LETTER LJE 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x045A #CYRILLIC SMALL LETTER NJE 0x9D 0x045C #CYRILLIC SMALL LETTER KJE 0x9E 0x045B #CYRILLIC SMALL LETTER TSHE 0x9F 0x045F #CYRILLIC SMALL LETTER DZHE |
| ︙ | ︙ | |||
267 268 269 270 271 272 273 | 0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA 0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN 0xFB 0x044B #CYRILLIC SMALL LETTER YERU 0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN 0xFD 0x044D #CYRILLIC SMALL LETTER E 0xFE 0x044E #CYRILLIC SMALL LETTER YU 0xFF 0x044F #CYRILLIC SMALL LETTER YA | < < | 268 269 270 271 272 273 274 | 0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA 0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN 0xFB 0x044B #CYRILLIC SMALL LETTER YERU 0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN 0xFD 0x044D #CYRILLIC SMALL LETTER E 0xFE 0x044E #CYRILLIC SMALL LETTER YU 0xFF 0x044F #CYRILLIC SMALL LETTER YA |
Changes to tools/encoding/cp1252.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1252 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1252 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1252 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
139 140 141 142 143 144 145 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE | | | | | | | | | | 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 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D #UNDEFINED 0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D #UNDEFINED 0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON 0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN |
| ︙ | ︙ | |||
209 210 211 212 213 214 215 | 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE | | | 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 #LATIN CAPITAL LETTER AE 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE |
| ︙ | ︙ | |||
241 242 243 244 245 246 247 | 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE | | | 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 #LATIN SMALL LETTER AE 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE |
| ︙ | ︙ | |||
267 268 269 270 271 272 273 | 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE #LATIN SMALL LETTER THORN 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS | < < | 268 269 270 271 272 273 274 | 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE #LATIN SMALL LETTER THORN 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS |
Changes to tools/encoding/cp1253.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1253 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1253 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1253 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
139 140 141 142 143 144 145 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE | | | | | | | | | | | | | | | | | | 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 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 #UNDEFINED 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C #UNDEFINED 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x0385 #GREEK DIALYTIKA TONOS 0xA2 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA #UNDEFINED 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x2015 #HORIZONTAL BAR 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN |
| ︙ | ︙ | |||
221 222 223 224 225 226 227 | 0xCB 0x039B #GREEK CAPITAL LETTER LAMDA 0xCC 0x039C #GREEK CAPITAL LETTER MU 0xCD 0x039D #GREEK CAPITAL LETTER NU 0xCE 0x039E #GREEK CAPITAL LETTER XI 0xCF 0x039F #GREEK CAPITAL LETTER OMICRON 0xD0 0x03A0 #GREEK CAPITAL LETTER PI 0xD1 0x03A1 #GREEK CAPITAL LETTER RHO | | | 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | 0xCB 0x039B #GREEK CAPITAL LETTER LAMDA 0xCC 0x039C #GREEK CAPITAL LETTER MU 0xCD 0x039D #GREEK CAPITAL LETTER NU 0xCE 0x039E #GREEK CAPITAL LETTER XI 0xCF 0x039F #GREEK CAPITAL LETTER OMICRON 0xD0 0x03A0 #GREEK CAPITAL LETTER PI 0xD1 0x03A1 #GREEK CAPITAL LETTER RHO 0xD2 #UNDEFINED 0xD3 0x03A3 #GREEK CAPITAL LETTER SIGMA 0xD4 0x03A4 #GREEK CAPITAL LETTER TAU 0xD5 0x03A5 #GREEK CAPITAL LETTER UPSILON 0xD6 0x03A6 #GREEK CAPITAL LETTER PHI 0xD7 0x03A7 #GREEK CAPITAL LETTER CHI 0xD8 0x03A8 #GREEK CAPITAL LETTER PSI 0xD9 0x03A9 #GREEK CAPITAL LETTER OMEGA |
| ︙ | ︙ | |||
266 267 268 269 270 271 272 | 0xF8 0x03C8 #GREEK SMALL LETTER PSI 0xF9 0x03C9 #GREEK SMALL LETTER OMEGA 0xFA 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0xFB 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0xFC 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS 0xFD 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS 0xFE 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS | | < < | 267 268 269 270 271 272 273 274 | 0xF8 0x03C8 #GREEK SMALL LETTER PSI 0xF9 0x03C9 #GREEK SMALL LETTER OMEGA 0xFA 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA 0xFB 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 0xFC 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS 0xFD 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS 0xFE 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS 0xFF #UNDEFINED |
Changes to tools/encoding/cp1254.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1254 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1254 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1254 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
139 140 141 142 143 144 145 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE | | | | | | | | | | 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 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN |
| ︙ | ︙ | |||
209 210 211 212 213 214 215 | 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE | | | 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 #LATIN CAPITAL LETTER AE 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE |
| ︙ | ︙ | |||
241 242 243 244 245 246 247 | 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE | | | 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 #LATIN SMALL LETTER AE 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE |
| ︙ | ︙ | |||
267 268 269 270 271 272 273 | 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x0131 #LATIN SMALL LETTER DOTLESS I 0xFE 0x015F #LATIN SMALL LETTER S WITH CEDILLA 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS | < < | 268 269 270 271 272 273 274 | 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x0131 #LATIN SMALL LETTER DOTLESS I 0xFE 0x015F #LATIN SMALL LETTER S WITH CEDILLA 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS |
Changes to tools/encoding/cp1255.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1255 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 1/7/2000 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1255 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1255 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
50 51 52 53 54 55 56 | 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND | | | | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX |
| ︙ | ︙ | |||
102 103 104 105 106 107 108 | 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z | | | | | | | | 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G |
| ︙ | ︙ | |||
134 135 136 137 138 139 140 | 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 | 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C #UNDEFINED 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x20AA #NEW SHEQEL SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x00D7 #MULTIPLICATION SIGN 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00AF #MACRON 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x00F7 #DIVISION SIGN 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x05B0 #HEBREW POINT SHEVA 0xC1 0x05B1 #HEBREW POINT HATAF SEGOL 0xC2 0x05B2 #HEBREW POINT HATAF PATAH 0xC3 0x05B3 #HEBREW POINT HATAF QAMATS 0xC4 0x05B4 #HEBREW POINT HIRIQ 0xC5 0x05B5 #HEBREW POINT TSERE 0xC6 0x05B6 #HEBREW POINT SEGOL 0xC7 0x05B7 #HEBREW POINT PATAH 0xC8 0x05B8 #HEBREW POINT QAMATS 0xC9 0x05B9 #HEBREW POINT HOLAM 0xCA #UNDEFINED 0xCB 0x05BB #HEBREW POINT QUBUTS 0xCC 0x05BC #HEBREW POINT DAGESH OR MAPIQ 0xCD 0x05BD #HEBREW POINT METEG 0xCE 0x05BE #HEBREW PUNCTUATION MAQAF 0xCF 0x05BF #HEBREW POINT RAFE 0xD0 0x05C0 #HEBREW PUNCTUATION PASEQ 0xD1 0x05C1 #HEBREW POINT SHIN DOT 0xD2 0x05C2 #HEBREW POINT SIN DOT 0xD3 0x05C3 #HEBREW PUNCTUATION SOF PASUQ 0xD4 0x05F0 #HEBREW LIGATURE YIDDISH DOUBLE VAV 0xD5 0x05F1 #HEBREW LIGATURE YIDDISH VAV YOD 0xD6 0x05F2 #HEBREW LIGATURE YIDDISH DOUBLE YOD 0xD7 0x05F3 #HEBREW PUNCTUATION GERESH 0xD8 0x05F4 #HEBREW PUNCTUATION GERSHAYIM 0xD9 #UNDEFINED 0xDA #UNDEFINED 0xDB #UNDEFINED 0xDC #UNDEFINED 0xDD #UNDEFINED 0xDE #UNDEFINED 0xDF #UNDEFINED 0xE0 0x05D0 #HEBREW LETTER ALEF 0xE1 0x05D1 #HEBREW LETTER BET 0xE2 0x05D2 #HEBREW LETTER GIMEL 0xE3 0x05D3 #HEBREW LETTER DALET 0xE4 0x05D4 #HEBREW LETTER HE 0xE5 0x05D5 #HEBREW LETTER VAV 0xE6 0x05D6 #HEBREW LETTER ZAYIN |
| ︙ | ︙ | |||
262 263 264 265 266 267 268 | 0xF4 0x05E4 #HEBREW LETTER PE 0xF5 0x05E5 #HEBREW LETTER FINAL TSADI 0xF6 0x05E6 #HEBREW LETTER TSADI 0xF7 0x05E7 #HEBREW LETTER QOF 0xF8 0x05E8 #HEBREW LETTER RESH 0xF9 0x05E9 #HEBREW LETTER SHIN 0xFA 0x05EA #HEBREW LETTER TAV | | | | < < | 263 264 265 266 267 268 269 270 271 272 273 274 | 0xF4 0x05E4 #HEBREW LETTER PE 0xF5 0x05E5 #HEBREW LETTER FINAL TSADI 0xF6 0x05E6 #HEBREW LETTER TSADI 0xF7 0x05E7 #HEBREW LETTER QOF 0xF8 0x05E8 #HEBREW LETTER RESH 0xF9 0x05E9 #HEBREW LETTER SHIN 0xFA 0x05EA #HEBREW LETTER TAV 0xFB #UNDEFINED 0xFC #UNDEFINED 0xFD 0x200E #LEFT-TO-RIGHT MARK 0xFE 0x200F #RIGHT-TO-LEFT MARK 0xFF #UNDEFINED |
Changes to tools/encoding/cp1256.txt.
1 | # | | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1256 to Unicode table # Unicode version: 2.1 # Table version: 2.01 # Table format: Format A # Date: 01/5/99 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1256 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1256 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
50 51 52 53 54 55 56 | 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND | | | | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX |
| ︙ | ︙ | |||
102 103 104 105 106 107 108 | 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z | | | | | | | | 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G |
| ︙ | ︙ | |||
134 135 136 137 138 139 140 | 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | < | 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 | 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 0x067E #ARABIC LETTER PEH 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A 0x0679 #ARABIC LETTER TTEH 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D 0x0686 #ARABIC LETTER TCHEH 0x8E 0x0698 #ARABIC LETTER JEH 0x8F 0x0688 #ARABIC LETTER DDAL 0x90 0x06AF #ARABIC LETTER GAF 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x06A9 #ARABIC LETTER KEHEH 0x99 0x2122 #TRADE MARK SIGN 0x9A 0x0691 #ARABIC LETTER RREH 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D 0x200C #ZERO WIDTH NON-JOINER 0x9E 0x200D #ZERO WIDTH JOINER 0x9F 0x06BA #ARABIC LETTER NOON GHUNNA 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x060C #ARABIC COMMA 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00A8 #DIAERESIS 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x06BE #ARABIC LETTER HEH DOACHASHMEE 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00AF #MACRON 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00B8 #CEDILLA 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x061B #ARABIC SEMICOLON 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x061F #ARABIC QUESTION MARK 0xC0 0x06C1 #ARABIC LETTER HEH GOAL 0xC1 0x0621 #ARABIC LETTER HAMZA 0xC2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE 0xC3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE 0xC4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE 0xC5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW 0xC6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE 0xC7 0x0627 #ARABIC LETTER ALEF 0xC8 0x0628 #ARABIC LETTER BEH 0xC9 0x0629 #ARABIC LETTER TEH MARBUTA 0xCA 0x062A #ARABIC LETTER TEH 0xCB 0x062B #ARABIC LETTER THEH 0xCC 0x062C #ARABIC LETTER JEEM 0xCD 0x062D #ARABIC LETTER HAH 0xCE 0x062E #ARABIC LETTER KHAH 0xCF 0x062F #ARABIC LETTER DAL 0xD0 0x0630 #ARABIC LETTER THAL 0xD1 0x0631 #ARABIC LETTER REH 0xD2 0x0632 #ARABIC LETTER ZAIN 0xD3 0x0633 #ARABIC LETTER SEEN 0xD4 0x0634 #ARABIC LETTER SHEEN 0xD5 0x0635 #ARABIC LETTER SAD 0xD6 0x0636 #ARABIC LETTER DAD 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x0637 #ARABIC LETTER TAH 0xD9 0x0638 #ARABIC LETTER ZAH 0xDA 0x0639 #ARABIC LETTER AIN 0xDB 0x063A #ARABIC LETTER GHAIN 0xDC 0x0640 #ARABIC TATWEEL 0xDD 0x0641 #ARABIC LETTER FEH 0xDE 0x0642 #ARABIC LETTER QAF 0xDF 0x0643 #ARABIC LETTER KAF 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x0644 #ARABIC LETTER LAM 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0645 #ARABIC LETTER MEEM 0xE4 0x0646 #ARABIC LETTER NOON 0xE5 0x0647 #ARABIC LETTER HEH 0xE6 0x0648 #ARABIC LETTER WAW 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x0649 #ARABIC LETTER ALEF MAKSURA 0xED 0x064A #ARABIC LETTER YEH 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x064B #ARABIC FATHATAN 0xF1 0x064C #ARABIC DAMMATAN 0xF2 0x064D #ARABIC KASRATAN 0xF3 0x064E #ARABIC FATHA 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x064F #ARABIC DAMMA 0xF6 0x0650 #ARABIC KASRA 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x0651 #ARABIC SHADDA 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x0652 #ARABIC SUKUN 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x200E #LEFT-TO-RIGHT MARK 0xFE 0x200F #RIGHT-TO-LEFT MARK 0xFF 0x06D2 #ARABIC LETTER YEH BARREE |
Changes to tools/encoding/cp1257.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1257 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1257 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1257 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
59 60 61 62 63 64 65 | 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < | 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 | 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 #UNDEFINED 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 #UNDEFINED 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C #UNDEFINED 0x8D 0x00A8 #DIAERESIS 0x8E 0x02C7 #CARON 0x8F 0x00B8 #CEDILLA 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C #UNDEFINED 0x9D 0x00AF #MACRON 0x9E 0x02DB #OGONEK 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 #UNDEFINED 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 #UNDEFINED 0xA6 0x00A6 #BROKEN BAR 0xA7 0x00A7 #SECTION SIGN 0xA8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 0xA9 0x00A9 #COPYRIGHT SIGN 0xAA 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC #NOT SIGN 0xAD 0x00AD #SOFT HYPHEN 0xAE 0x00AE #REGISTERED SIGN 0xAF 0x00C6 #LATIN CAPITAL LETTER AE 0xB0 0x00B0 #DEGREE SIGN 0xB1 0x00B1 #PLUS-MINUS SIGN 0xB2 0x00B2 #SUPERSCRIPT TWO 0xB3 0x00B3 #SUPERSCRIPT THREE 0xB4 0x00B4 #ACUTE ACCENT 0xB5 0x00B5 #MICRO SIGN 0xB6 0x00B6 #PILCROW SIGN 0xB7 0x00B7 #MIDDLE DOT 0xB8 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0xB9 0x00B9 #SUPERSCRIPT ONE 0xBA 0x0157 #LATIN SMALL LETTER R WITH CEDILLA 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 0xBD 0x00BD #VULGAR FRACTION ONE HALF 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 0xBF 0x00E6 #LATIN SMALL LETTER AE 0xC0 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK 0xC1 0x012E #LATIN CAPITAL LETTER I WITH OGONEK 0xC2 0x0100 #LATIN CAPITAL LETTER A WITH MACRON 0xC3 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK 0xC7 0x0112 #LATIN CAPITAL LETTER E WITH MACRON 0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE 0xCB 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE 0xCC 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA 0xCD 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA 0xCE 0x012A #LATIN CAPITAL LETTER I WITH MACRON 0xCF 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA 0xD0 0x0160 #LATIN CAPITAL LETTER S WITH CARON 0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x014C #LATIN CAPITAL LETTER O WITH MACRON 0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 #MULTIPLICATION SIGN 0xD8 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK 0xD9 0x0141 #LATIN CAPITAL LETTER L WITH STROKE 0xDA 0x015A #LATIN CAPITAL LETTER S WITH ACUTE 0xDB 0x016A #LATIN CAPITAL LETTER U WITH MACRON 0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xDE 0x017D #LATIN CAPITAL LETTER Z WITH CARON 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x0105 #LATIN SMALL LETTER A WITH OGONEK 0xE1 0x012F #LATIN SMALL LETTER I WITH OGONEK 0xE2 0x0101 #LATIN SMALL LETTER A WITH MACRON 0xE3 0x0107 #LATIN SMALL LETTER C WITH ACUTE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x0119 #LATIN SMALL LETTER E WITH OGONEK 0xE7 0x0113 #LATIN SMALL LETTER E WITH MACRON 0xE8 0x010D #LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x017A #LATIN SMALL LETTER Z WITH ACUTE 0xEB 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE 0xEC 0x0123 #LATIN SMALL LETTER G WITH CEDILLA 0xED 0x0137 #LATIN SMALL LETTER K WITH CEDILLA 0xEE 0x012B #LATIN SMALL LETTER I WITH MACRON 0xEF 0x013C #LATIN SMALL LETTER L WITH CEDILLA 0xF0 0x0161 #LATIN SMALL LETTER S WITH CARON 0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE 0xF2 0x0146 #LATIN SMALL LETTER N WITH CEDILLA 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xF4 0x014D #LATIN SMALL LETTER O WITH MACRON 0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x0173 #LATIN SMALL LETTER U WITH OGONEK 0xF9 0x0142 #LATIN SMALL LETTER L WITH STROKE 0xFA 0x015B #LATIN SMALL LETTER S WITH ACUTE 0xFB 0x016B #LATIN SMALL LETTER U WITH MACRON 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE 0xFE 0x017E #LATIN SMALL LETTER Z WITH CARON 0xFF 0x02D9 #DOT ABOVE |
Changes to tools/encoding/cp1258.txt.
1 | # | | | | > | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # # Name: cp1258 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 04/15/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp1258 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp1258 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY |
| ︙ | ︙ | |||
139 140 141 142 143 144 145 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE | | | | | | | | | | | | 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 | 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 0x2020 #DAGGER 0x87 0x2021 #DOUBLE DAGGER 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 0x89 0x2030 #PER MILLE SIGN 0x8A #UNDEFINED 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 0x02DC #SMALL TILDE 0x99 0x2122 #TRADE MARK SIGN 0x9A #UNDEFINED 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x9C 0x0153 #LATIN SMALL LIGATURE OE 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 0xA2 0x00A2 #CENT SIGN 0xA3 0x00A3 #POUND SIGN 0xA4 0x00A4 #CURRENCY SIGN 0xA5 0x00A5 #YEN SIGN |
| ︙ | ︙ | |||
209 210 211 212 213 214 215 | 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE | | | | | 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 | 0xBF 0x00BF #INVERTED QUESTION MARK 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 #LATIN CAPITAL LETTER AE 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x0300 #COMBINING GRAVE ACCENT 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE 0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x0309 #COMBINING HOOK ABOVE 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x01A0 #LATIN CAPITAL LETTER O WITH HORN 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 #MULTIPLICATION SIGN |
| ︙ | ︙ | |||
241 242 243 244 245 246 247 | 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE | | | | < < | 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 | 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 #LATIN SMALL LETTER AE 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x0301 #COMBINING ACUTE ACCENT 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE 0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE 0xF2 0x0323 #COMBINING DOT BELOW 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x01A1 #LATIN SMALL LETTER O WITH HORN 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 #DIVISION SIGN 0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x01B0 #LATIN SMALL LETTER U WITH HORN 0xFE 0x20AB #DONG SIGN 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS |
Changes to tools/encoding/cp874.txt.
1 | # | | | | > | < > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < | 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 | # # Name: cp874 to Unicode table # Unicode version: 2.0 # Table version: 2.01 # Table format: Format A # Date: 02/28/98 # # Contact: cpxlate@microsoft.com # # General notes: none # # Format: Three tab-separated columns # Column #1 is the cp874 code (in hex) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # # The entries are in cp874 order # 0x00 0x0000 #NULL 0x01 0x0001 #START OF HEADING 0x02 0x0002 #START OF TEXT 0x03 0x0003 #END OF TEXT 0x04 0x0004 #END OF TRANSMISSION 0x05 0x0005 #ENQUIRY 0x06 0x0006 #ACKNOWLEDGE 0x07 0x0007 #BELL 0x08 0x0008 #BACKSPACE 0x09 0x0009 #HORIZONTAL TABULATION 0x0A 0x000A #LINE FEED 0x0B 0x000B #VERTICAL TABULATION 0x0C 0x000C #FORM FEED 0x0D 0x000D #CARRIAGE RETURN 0x0E 0x000E #SHIFT OUT 0x0F 0x000F #SHIFT IN 0x10 0x0010 #DATA LINK ESCAPE 0x11 0x0011 #DEVICE CONTROL ONE 0x12 0x0012 #DEVICE CONTROL TWO 0x13 0x0013 #DEVICE CONTROL THREE 0x14 0x0014 #DEVICE CONTROL FOUR 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 0x16 0x0016 #SYNCHRONOUS IDLE 0x17 0x0017 #END OF TRANSMISSION BLOCK 0x18 0x0018 #CANCEL 0x19 0x0019 #END OF MEDIUM 0x1A 0x001A #SUBSTITUTE 0x1B 0x001B #ESCAPE 0x1C 0x001C #FILE SEPARATOR 0x1D 0x001D #GROUP SEPARATOR 0x1E 0x001E #RECORD SEPARATOR 0x1F 0x001F #UNIT SEPARATOR 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE 0x80 0x20AC #EURO SIGN 0x81 #UNDEFINED 0x82 #UNDEFINED 0x83 #UNDEFINED 0x84 #UNDEFINED 0x85 0x2026 #HORIZONTAL ELLIPSIS 0x86 #UNDEFINED 0x87 #UNDEFINED 0x88 #UNDEFINED 0x89 #UNDEFINED 0x8A #UNDEFINED 0x8B #UNDEFINED 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 0x95 0x2022 #BULLET 0x96 0x2013 #EN DASH 0x97 0x2014 #EM DASH 0x98 #UNDEFINED 0x99 #UNDEFINED 0x9A #UNDEFINED 0x9B #UNDEFINED 0x9C #UNDEFINED 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F #UNDEFINED 0xA0 0x00A0 #NO-BREAK SPACE 0xA1 0x0E01 #THAI CHARACTER KO KAI 0xA2 0x0E02 #THAI CHARACTER KHO KHAI 0xA3 0x0E03 #THAI CHARACTER KHO KHUAT 0xA4 0x0E04 #THAI CHARACTER KHO KHWAI 0xA5 0x0E05 #THAI CHARACTER KHO KHON 0xA6 0x0E06 #THAI CHARACTER KHO RAKHANG 0xA7 0x0E07 #THAI CHARACTER NGO NGU 0xA8 0x0E08 #THAI CHARACTER CHO CHAN 0xA9 0x0E09 #THAI CHARACTER CHO CHING 0xAA 0x0E0A #THAI CHARACTER CHO CHANG 0xAB 0x0E0B #THAI CHARACTER SO SO 0xAC 0x0E0C #THAI CHARACTER CHO CHOE 0xAD 0x0E0D #THAI CHARACTER YO YING 0xAE 0x0E0E #THAI CHARACTER DO CHADA 0xAF 0x0E0F #THAI CHARACTER TO PATAK 0xB0 0x0E10 #THAI CHARACTER THO THAN 0xB1 0x0E11 #THAI CHARACTER THO NANGMONTHO 0xB2 0x0E12 #THAI CHARACTER THO PHUTHAO 0xB3 0x0E13 #THAI CHARACTER NO NEN 0xB4 0x0E14 #THAI CHARACTER DO DEK 0xB5 0x0E15 #THAI CHARACTER TO TAO 0xB6 0x0E16 #THAI CHARACTER THO THUNG 0xB7 0x0E17 #THAI CHARACTER THO THAHAN 0xB8 0x0E18 #THAI CHARACTER THO THONG 0xB9 0x0E19 #THAI CHARACTER NO NU 0xBA 0x0E1A #THAI CHARACTER BO BAIMAI 0xBB 0x0E1B #THAI CHARACTER PO PLA 0xBC 0x0E1C #THAI CHARACTER PHO PHUNG 0xBD 0x0E1D #THAI CHARACTER FO FA 0xBE 0x0E1E #THAI CHARACTER PHO PHAN 0xBF 0x0E1F #THAI CHARACTER FO FAN 0xC0 0x0E20 #THAI CHARACTER PHO SAMPHAO 0xC1 0x0E21 #THAI CHARACTER MO MA 0xC2 0x0E22 #THAI CHARACTER YO YAK 0xC3 0x0E23 #THAI CHARACTER RO RUA 0xC4 0x0E24 #THAI CHARACTER RU 0xC5 0x0E25 #THAI CHARACTER LO LING 0xC6 0x0E26 #THAI CHARACTER LU 0xC7 0x0E27 #THAI CHARACTER WO WAEN 0xC8 0x0E28 #THAI CHARACTER SO SALA 0xC9 0x0E29 #THAI CHARACTER SO RUSI 0xCA 0x0E2A #THAI CHARACTER SO SUA 0xCB 0x0E2B #THAI CHARACTER HO HIP 0xCC 0x0E2C #THAI CHARACTER LO CHULA 0xCD 0x0E2D #THAI CHARACTER O ANG 0xCE 0x0E2E #THAI CHARACTER HO NOKHUK 0xCF 0x0E2F #THAI CHARACTER PAIYANNOI 0xD0 0x0E30 #THAI CHARACTER SARA A 0xD1 0x0E31 #THAI CHARACTER MAI HAN-AKAT 0xD2 0x0E32 #THAI CHARACTER SARA AA 0xD3 0x0E33 #THAI CHARACTER SARA AM 0xD4 0x0E34 #THAI CHARACTER SARA I 0xD5 0x0E35 #THAI CHARACTER SARA II 0xD6 0x0E36 #THAI CHARACTER SARA UE 0xD7 0x0E37 #THAI CHARACTER SARA UEE 0xD8 0x0E38 #THAI CHARACTER SARA U 0xD9 0x0E39 #THAI CHARACTER SARA UU 0xDA 0x0E3A #THAI CHARACTER PHINTHU 0xDB #UNDEFINED 0xDC #UNDEFINED 0xDD #UNDEFINED 0xDE #UNDEFINED 0xDF 0x0E3F #THAI CURRENCY SYMBOL BAHT 0xE0 0x0E40 #THAI CHARACTER SARA E 0xE1 0x0E41 #THAI CHARACTER SARA AE 0xE2 0x0E42 #THAI CHARACTER SARA O 0xE3 0x0E43 #THAI CHARACTER SARA AI MAIMUAN 0xE4 0x0E44 #THAI CHARACTER SARA AI MAIMALAI 0xE5 0x0E45 #THAI CHARACTER LAKKHANGYAO 0xE6 0x0E46 #THAI CHARACTER MAIYAMOK 0xE7 0x0E47 #THAI CHARACTER MAITAIKHU 0xE8 0x0E48 #THAI CHARACTER MAI EK 0xE9 0x0E49 #THAI CHARACTER MAI THO 0xEA 0x0E4A #THAI CHARACTER MAI TRI 0xEB 0x0E4B #THAI CHARACTER MAI CHATTAWA 0xEC 0x0E4C #THAI CHARACTER THANTHAKHAT 0xED 0x0E4D #THAI CHARACTER NIKHAHIT 0xEE 0x0E4E #THAI CHARACTER YAMAKKAN 0xEF 0x0E4F #THAI CHARACTER FONGMAN 0xF0 0x0E50 #THAI DIGIT ZERO 0xF1 0x0E51 #THAI DIGIT ONE 0xF2 0x0E52 #THAI DIGIT TWO 0xF3 0x0E53 #THAI DIGIT THREE 0xF4 0x0E54 #THAI DIGIT FOUR 0xF5 0x0E55 #THAI DIGIT FIVE 0xF6 0x0E56 #THAI DIGIT SIX 0xF7 0x0E57 #THAI DIGIT SEVEN 0xF8 0x0E58 #THAI DIGIT EIGHT 0xF9 0x0E59 #THAI DIGIT NINE 0xFA 0x0E5A #THAI CHARACTER ANGKHANKHU 0xFB 0x0E5B #THAI CHARACTER KHOMUT 0xFC #UNDEFINED 0xFD #UNDEFINED 0xFE #UNDEFINED 0xFF #UNDEFINED |
Changes to tools/encoding/cp932.txt.
more than 10,000 changes
Changes to tools/encoding/cp936.txt.
more than 10,000 changes
Changes to tools/encoding/cp949.txt.
more than 10,000 changes
Changes to tools/encoding/cp950.txt.
more than 10,000 changes
Added tools/encoding/ebcdic.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: EBCDIC (EDF04) to Unicode # Unicode version: 1.1 # Table version: 0.1 # Table format: Format A # Date: 1 February 2000 # Author: Jan Nijtmans <j.nijtmans@chello.nl> # # Copyright (c) 1999-2000 Jan Nijtmans. All Rights reserved. # # This file is provided as-is. # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. # # Recipient is granted the right to make copies in any form for # redistribution and to freely use the information supplied # in the creation of products. # # General notes: # # Format: Three tab-separated columns # Column #1 is the EBCDIC code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in EBCDIC order # # source: <file:ebcdic.c> from openssl distribution # # Any comments or problems, contact <j.nijtmans@chello.nl> # 0x00 0x0000 # NUL 0x01 0x0001 # SOH 0x02 0x0002 # STX 0x03 0x0003 # ETX 0x04 0x0085 # 0x05 0x0009 # HT 0x06 0x0086 # 0x07 0x007F # DEL 0x08 0x0087 # 0x09 0x008D # 0x0A 0x008E # 0x0B 0x000B # VT 0x0C 0x000C # FF 0x0D 0x000D # CR 0x0E 0x000E # SO 0x0F 0x000F # SI 0x10 0x0010 # DLE 0x11 0x0011 # DC1 0x12 0x0012 # DC2 0x13 0x0013 # DC3 0x14 0x008F # 0x15 0x000A # LF 0x16 0x0008 # BS 0x17 0x0097 # 0x18 0x0018 # CAN 0x19 0x0019 # EM 0x1A 0x009C # 0x1B 0x009D # 0x1C 0x001C # IFS 0x1D 0x001D # IGS 0x1E 0x001E # IRS 0x1F 0x001F # IUS 0x20 0x0080 # 0x21 0x0081 # 0x22 0x0082 # 0x23 0x0083 # 0x24 0x0084 # 0x25 0x0092 # 0x26 0x0017 # ETB 0x27 0x001B # ESC 0x28 0x0088 # 0x29 0x0089 # 0x2A 0x008A # 0x2B 0x008B # 0x2C 0x008C # 0x2D 0x0005 # ENQ 0x2E 0x0006 # ACK 0x2F 0x0007 # BEL 0x30 0x0090 # 0x31 0x0091 # 0x32 0x0016 # SYN 0x33 0x0093 # 0x34 0x0094 # 0x35 0x0095 # 0x36 0x0096 # 0x37 0x0004 # EOT 0x38 0x0098 # 0x39 0x0099 # 0x3A 0x009A # 0x3B 0x009B # 0x3C 0x0014 # DC4 0x3D 0x0015 # NAK 0x3E 0x009E # 0x3F 0x001A # SUB 0x40 0x0020 # SPACE 0x41 0x00A0 # 0x42 0x00E2 # 0x43 0x00E4 # 0x44 0x00E0 # 0x45 0x00E1 # 0x46 0x00E3 # 0x47 0x00E5 # 0x48 0x00E7 # 0x49 0x00F1 # 0x4A 0x0060 # GRAVE ACCENT 0x4B 0x002E # FULL STOP 0x4C 0x003C # LESS-THAN SIGN 0x4D 0x0028 # LEFT PARENTHESIS 0x4E 0x002B # PLUS SIGN 0x4F 0x007C # VERTICAL LINE 0x50 0x0026 # AMPERSAND 0x51 0x00E9 # 0x52 0x00EA # 0x53 0x00EB # 0x54 0x00E8 # 0x55 0x00ED # 0x56 0x00EE # 0x57 0x00EF # 0x58 0x00EC # 0x59 0x00DF # 0x5A 0x0021 # EXCLAMATION MARK 0x5B 0x0024 # DOLLAR SIGN 0x5C 0x002A # ASTERISK 0x5D 0x0029 # RIGHT PARENTHESIS 0x5E 0x003B # SEMICOLON 0x5F 0x009F # 0x60 0x002D # HYPHEN-MINUS 0x61 0x002F # SOLIDUS 0x62 0x00C2 # 0x63 0x00C4 # 0x64 0x00C0 # 0x65 0x00C1 # 0x66 0x00C3 # 0x67 0x00C5 # 0x68 0x00C7 # 0x69 0x00D1 # 0x6A 0x005E # CIRCUMFLEX ACCENT 0x6B 0x002C # COMMA 0x6C 0x0025 # PERCENT SIGN 0x6D 0x005F # LOW LINE 0x6E 0x003E # GREATER-THAN SIGN 0x6F 0x003F # QUESTION MARK 0x70 0x00F8 # 0x71 0x00C9 # 0x72 0x00CA # 0x73 0x00CB # 0x74 0x00C8 # 0x75 0x00CD # 0x76 0x00CE # 0x77 0x00CF # 0x78 0x00CC # 0x79 0x00A8 # 0x7A 0x003A # COLON 0x7B 0x0023 # NUMBER SIGN 0x7C 0x0040 # COMMERCIAL AT 0x7D 0x0027 # APOSTROPHE 0x7E 0x003D # EQUALS SIGN 0x7F 0x0022 # QUOTATION MARK 0x80 0x00D8 # 0x81 0x0061 # LATIN SMALL LETTER A 0x82 0x0062 # LATIN SMALL LETTER B 0x83 0x0063 # LATIN SMALL LETTER C 0x84 0x0064 # LATIN SMALL LETTER D 0x85 0x0065 # LATIN SMALL LETTER E 0x86 0x0066 # LATIN SMALL LETTER F 0x87 0x0067 # LATIN SMALL LETTER G 0x88 0x0068 # LATIN SMALL LETTER H 0x89 0x0069 # LATIN SMALL LETTER I 0x8A 0x00AB # 0x8B 0x00BB # 0x8C 0x00F0 # 0x8D 0x00FD # 0x8E 0x00FE # 0x8F 0x00B1 # 0x90 0x00B0 # 0x91 0x006A # LATIN SMALL LETTER J 0x92 0x006B # LATIN SMALL LETTER K 0x93 0x006C # LATIN SMALL LETTER L 0x94 0x006D # LATIN SMALL LETTER M 0x95 0x006E # LATIN SMALL LETTER N 0x96 0x006F # LATIN SMALL LETTER O 0x97 0x0070 # LATIN SMALL LETTER P 0x98 0x0071 # LATIN SMALL LETTER Q 0x99 0x0072 # LATIN SMALL LETTER R 0x9A 0x00AA # 0x9B 0x00BA # 0x9C 0x00E6 # 0x9D 0x00B8 # 0x9E 0x00C6 # 0x9F 0x00A4 # 0xA0 0x00B5 # 0xA1 0x00AF # 0xA2 0x0073 # LATIN SMALL LETTER S 0xA3 0x0074 # LATIN SMALL LETTER T 0xA4 0x0075 # LATIN SMALL LETTER U 0xA5 0x0076 # LATIN SMALL LETTER V 0xA6 0x0077 # LATIN SMALL LETTER W 0xA7 0x0078 # LATIN SMALL LETTER X 0xA8 0x0079 # LATIN SMALL LETTER Y 0xA9 0x007A # LATIN SMALL LETTER Z 0xAA 0x00A1 # 0xAB 0x00BF # 0xAC 0x00D0 # 0xAD 0x00DD # 0xAE 0x00DE # 0xAF 0x00AE # 0xB0 0x00A2 # 0xB1 0x00A3 # 0xB2 0x00A5 # 0xB3 0x00B7 # 0xB4 0x00A9 # 0xB5 0x00A7 # 0xB6 0x00B6 # 0xB7 0x00BC # 0xB8 0x00BD # 0xB9 0x00BE # 0xBA 0x00AC # 0xBB 0x005B # LEFT SQUARE BRACKET 0xBC 0x005C # REVERSE SOLIDUS 0xBD 0x005D # RIGHT SQUARE BRACKET 0xBE 0x00B4 # 0xBF 0x00D7 # 0xC0 0x00F9 # 0xC1 0x0041 # LATIN CAPITAL LETTER A 0xC2 0x0042 # LATIN CAPITAL LETTER B 0xC3 0x0043 # LATIN CAPITAL LETTER C 0xC4 0x0044 # LATIN CAPITAL LETTER D 0xC5 0x0045 # LATIN CAPITAL LETTER E 0xC6 0x0046 # LATIN CAPITAL LETTER F 0xC7 0x0047 # LATIN CAPITAL LETTER G 0xC8 0x0048 # LATIN CAPITAL LETTER H 0xC9 0x0049 # LATIN CAPITAL LETTER I 0xCA 0x00AD # 0xCB 0x00F4 # 0xCC 0x00F6 # 0xCD 0x00F2 # 0xCE 0x00F3 # 0xCF 0x00F5 # 0xD0 0x00A6 # 0xD1 0x004A # LATIN CAPITAL LETTER J 0xD2 0x004B # LATIN CAPITAL LETTER K 0xD3 0x004C # LATIN CAPITAL LETTER L 0xD4 0x004D # LATIN CAPITAL LETTER M 0xD5 0x004E # LATIN CAPITAL LETTER N 0xD6 0x004F # LATIN CAPITAL LETTER O 0xD7 0x0050 # LATIN CAPITAL LETTER P 0xD8 0x0051 # LATIN CAPITAL LETTER Q 0xD9 0x0052 # LATIN CAPITAL LETTER R 0xDA 0x00B9 # 0xDB 0x00FB # 0xDC 0x00FC # 0xDD 0x00DB # 0xDE 0x00FA # 0xDF 0x00FF # 0xE0 0x00D9 # 0xE1 0x00F7 # 0xE2 0x0053 # LATIN CAPITAL LETTER S 0xE3 0x0054 # LATIN CAPITAL LETTER T 0xE4 0x0055 # LATIN CAPITAL LETTER U 0xE5 0x0056 # LATIN CAPITAL LETTER V 0xE6 0x0057 # LATIN CAPITAL LETTER W 0xE7 0x0058 # LATIN CAPITAL LETTER X 0xE8 0x0059 # LATIN CAPITAL LETTER Y 0xE9 0x005A # LATIN CAPITAL LETTER Z 0xEA 0x00B2 # 0xEB 0x00D4 # 0xEC 0x00D6 # 0xED 0x00D2 # 0xEE 0x00D3 # 0xEF 0x00D5 # 0xF0 0x0030 # DIGIT ZERO 0xF1 0x0031 # DIGIT ONE 0xF2 0x0032 # DIGIT TWO 0xF3 0x0033 # DIGIT THREE 0xF4 0x0034 # DIGIT FOUR 0xF5 0x0035 # DIGIT FIVE 0xF6 0x0036 # DIGIT SIX 0xF7 0x0037 # DIGIT SEVEN 0xF8 0x0038 # DIGIT EIGHT 0xF9 0x0039 # DIGIT NINE 0xFA 0x00B3 # 0xFB 0x007B # LEFT CURLY BRACKET 0xFC 0x00DC # 0xFD 0x007D # RIGHT CURLY BRACKET 0xFE 0x00DA # 0xFF 0x007E # TILDE |
Changes to tools/encoding/iso2022-jp.esc.
1 2 3 4 5 |
name iso2022-jp
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
| | | | 1 2 3 4 5 6 7 8 9 10 |
name iso2022-jp
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
jis0208 \x1b$B
jis0208 \x1b$@
jis0212 \x1b$(D
gb2312 \x1b$A
ksc5601 \x1b$(C
|
Changes to tools/encoding/iso2022.esc.
1 2 3 4 5 6 |
name iso2022
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
gb1988 \x1b(T
| | | < < | 1 2 3 4 5 6 7 8 9 10 11 12 |
name iso2022
init {}
final {}
iso8859-1 \x1b(B
jis0201 \x1b(J
gb1988 \x1b(T
jis0208 \x1b$B
jis0208 \x1b$@
jis0212 \x1b$(D
gb2312 \x1b$A
ksc5601 \x1b$(C
jis0208 \x1b&@\x1b$B
|
Changes to tools/encoding/iso8859-1.txt.
1 | # | | | | | | < | | < | | | > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-1:1998 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-1:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-1 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR |
| ︙ | ︙ |
Added tools/encoding/iso8859-10.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-10:1998 to Unicode # Unicode version: 3.0 # Table version: 1.1 # Table format: Format A # Date: 1999 October 11 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-10:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-10 order. # # Version history # 1.0 version new. # 1.1 corrected mistake in mapping of 0xA4 # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x0112 # LATIN CAPITAL LETTER E WITH MACRON 0xA3 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA 0xA4 0x012A # LATIN CAPITAL LETTER I WITH MACRON 0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE 0xA6 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA 0xA7 0x00A7 # SECTION SIGN 0xA8 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA 0xA9 0x0110 # LATIN CAPITAL LETTER D WITH STROKE 0xAA 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xAB 0x0166 # LATIN CAPITAL LETTER T WITH STROKE 0xAC 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x016A # LATIN CAPITAL LETTER U WITH MACRON 0xAF 0x014A # LATIN CAPITAL LETTER ENG 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xB2 0x0113 # LATIN SMALL LETTER E WITH MACRON 0xB3 0x0123 # LATIN SMALL LETTER G WITH CEDILLA 0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON 0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE 0xB6 0x0137 # LATIN SMALL LETTER K WITH CEDILLA 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x013C # LATIN SMALL LETTER L WITH CEDILLA 0xB9 0x0111 # LATIN SMALL LETTER D WITH STROKE 0xBA 0x0161 # LATIN SMALL LETTER S WITH CARON 0xBB 0x0167 # LATIN SMALL LETTER T WITH STROKE 0xBC 0x017E # LATIN SMALL LETTER Z WITH CARON 0xBD 0x2015 # HORIZONTAL BAR 0xBE 0x016B # LATIN SMALL LETTER U WITH MACRON 0xBF 0x014B # LATIN SMALL LETTER ENG 0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK 0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic) 0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA 0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x0168 # LATIN CAPITAL LETTER U WITH TILDE 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic) 0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) 0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK 0xE8 0x010D # LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic) 0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA 0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x0169 # LATIN SMALL LETTER U WITH TILDE 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic) 0xFF 0x0138 # LATIN SMALL LETTER KRA |
Added tools/encoding/iso8859-13.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-13:1998 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-13:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-13 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-13 order. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x201D # RIGHT DOUBLE QUOTATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00C6 # LATIN CAPITAL LETTER AE 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x201C # LEFT DOUBLE QUOTATION MARK 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xB9 0x00B9 # SUPERSCRIPT ONE 0xBA 0x0157 # LATIN SMALL LETTER R WITH CEDILLA 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x00BC # VULGAR FRACTION ONE QUARTER 0xBD 0x00BD # VULGAR FRACTION ONE HALF 0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS 0xBF 0x00E6 # LATIN SMALL LETTER AE 0xC0 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xC1 0x012E # LATIN CAPITAL LETTER I WITH OGONEK 0xC2 0x0100 # LATIN CAPITAL LETTER A WITH MACRON 0xC3 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xC7 0x0112 # LATIN CAPITAL LETTER E WITH MACRON 0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE 0xCB 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE 0xCC 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA 0xCD 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA 0xCE 0x012A # LATIN CAPITAL LETTER I WITH MACRON 0xCF 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA 0xD0 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x014C # LATIN CAPITAL LETTER O WITH MACRON 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK 0xD9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xDA 0x015A # LATIN CAPITAL LETTER S WITH ACUTE 0xDB 0x016A # LATIN CAPITAL LETTER U WITH MACRON 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xDE 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) 0xE0 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xE1 0x012F # LATIN SMALL LETTER I WITH OGONEK 0xE2 0x0101 # LATIN SMALL LETTER A WITH MACRON 0xE3 0x0107 # LATIN SMALL LETTER C WITH ACUTE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xE7 0x0113 # LATIN SMALL LETTER E WITH MACRON 0xE8 0x010D # LATIN SMALL LETTER C WITH CARON 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x017A # LATIN SMALL LETTER Z WITH ACUTE 0xEB 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE 0xEC 0x0123 # LATIN SMALL LETTER G WITH CEDILLA 0xED 0x0137 # LATIN SMALL LETTER K WITH CEDILLA 0xEE 0x012B # LATIN SMALL LETTER I WITH MACRON 0xEF 0x013C # LATIN SMALL LETTER L WITH CEDILLA 0xF0 0x0161 # LATIN SMALL LETTER S WITH CARON 0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE 0xF2 0x0146 # LATIN SMALL LETTER N WITH CEDILLA 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x014D # LATIN SMALL LETTER O WITH MACRON 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x0173 # LATIN SMALL LETTER U WITH OGONEK 0xF9 0x0142 # LATIN SMALL LETTER L WITH STROKE 0xFA 0x015B # LATIN SMALL LETTER S WITH ACUTE 0xFB 0x016B # LATIN SMALL LETTER U WITH MACRON 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE 0xFE 0x017E # LATIN SMALL LETTER Z WITH CARON 0xFF 0x2019 # RIGHT SINGLE QUOTATION MARK |
Added tools/encoding/iso8859-14.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-14:1998 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Markus Kuhn <mkuhn@acm.org> # Ken Whistler <kenw@sybase.com> # # Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-14:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-14 order. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE 0xA2 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE 0xA3 0x00A3 # POUND SIGN 0xA4 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE 0xA5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE 0xA6 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE 0xA7 0x00A7 # SECTION SIGN 0xA8 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE 0xAB 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE 0xAC 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xB0 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE 0xB1 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE 0xB2 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE 0xB3 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE 0xB4 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE 0xB5 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE 0xB8 0x1E81 # LATIN SMALL LETTER W WITH GRAVE 0xB9 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE 0xBA 0x1E83 # LATIN SMALL LETTER W WITH ACUTE 0xBB 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE 0xBC 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE 0xBD 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS 0xBE 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS 0xBF 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX 0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Added tools/encoding/iso8859-15.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-15:1999 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Markus Kuhn <mkuhn@acm.org> # Ken Whistler <kenw@sybase.com> # # Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-15:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-15 order. # # Version history # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x20AC # EURO SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xA7 0x00A7 # SECTION SIGN 0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x00AA # FEMININE ORDINAL INDICATOR 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00AF # MACRON 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON 0xB9 0x00B9 # SUPERSCRIPT ONE 0xBA 0x00BA # MASCULINE ORDINAL INDICATOR 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x0152 # LATIN CAPITAL LIGATURE OE 0xBD 0x0153 # LATIN SMALL LIGATURE OE 0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xBF 0x00BF # INVERTED QUESTION MARK 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x00D0 # LATIN CAPITAL LETTER ETH 0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x00D7 # MULTIPLICATION SIGN 0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE 0xDE 0x00DE # LATIN CAPITAL LETTER THORN 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x00F0 # LATIN SMALL LETTER ETH 0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x00F7 # DIVISION SIGN 0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xFE 0x00FE # LATIN SMALL LETTER THORN 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Added tools/encoding/iso8859-16.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-16:2001 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 2001 July 26 # Authors: Markus Kuhn <mkuhn@acm.org> # # Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-16:2001 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-16 order. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x0105 # LATIN SMALL LETTER A WITH OGONEK 0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xA4 0x20AC # EURO SIGN 0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK 0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON 0xA7 0x00A7 # SECTION SIGN 0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x017A # LATIN SMALL LETTER Z WITH ACUTE 0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x010C # LATIN CAPITAL LETTER C WITH CARON 0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE 0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON 0xB5 0x201D # RIGHT DOUBLE QUOTATION MARK 0xB6 0x00B6 # PILCROW SIGN 0xB7 0x00B7 # MIDDLE DOT 0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON 0xB9 0x010D # LATIN SMALL LETTER C WITH CARON 0xBA 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xBC 0x0152 # LATIN CAPITAL LIGATURE OE 0xBD 0x0153 # LATIN SMALL LIGATURE OE 0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE 0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE 0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE 0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE 0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS 0xC5 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE 0xC6 0x00C6 # LATIN CAPITAL LETTER AE 0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA 0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE 0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE 0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE 0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE 0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS 0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE 0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE 0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE 0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE 0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS 0xD7 0x015A # LATIN CAPITAL LETTER S WITH ACUTE 0xD8 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE 0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE 0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS 0xDD 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK 0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW 0xDF 0x00DF # LATIN SMALL LETTER SHARP S 0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE 0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE 0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX 0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE 0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS 0xE5 0x0107 # LATIN SMALL LETTER C WITH ACUTE 0xE6 0x00E6 # LATIN SMALL LETTER AE 0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA 0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE 0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE 0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX 0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS 0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE 0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE 0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX 0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS 0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE 0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE 0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE 0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE 0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX 0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS 0xF7 0x015B # LATIN SMALL LETTER S WITH ACUTE 0xF8 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE 0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xFD 0x0119 # LATIN SMALL LETTER E WITH OGONEK 0xFE 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW 0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS |
Changes to tools/encoding/iso8859-2.txt.
1 | # | | | | | | < | | < | | | > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO 8859-2:1999 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-2:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-2 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x02D8 # BREVE 0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON 0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x02D8 # BREVE 0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON 0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE |
| ︙ | ︙ |
Changes to tools/encoding/iso8859-3.txt.
1 | # | | | | | | < | | < | | | > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-3:1999 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-3:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-3 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE 0xA2 0x02D8 # BREVE 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0xA7 0x00A7 # SECTION SIGN | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE 0xA2 0x02D8 # BREVE 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0xA7 0x00A7 # SECTION SIGN |
| ︙ | ︙ |
Changes to tools/encoding/iso8859-4.txt.
1 | # | | | | | | < | | < | | | > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-4:1998 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-4:1998 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-4 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x0138 # LATIN SMALL LETTER KRA 0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE 0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK 0xA2 0x0138 # LATIN SMALL LETTER KRA 0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE 0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA |
| ︙ | ︙ |
Changes to tools/encoding/iso8859-5.txt.
1 | # | | | | | | < | | < | | | > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO 8859-5:1999 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-5:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-5 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO 0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE 0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE 0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE 0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO 0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE 0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE 0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE 0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I |
| ︙ | ︙ |
Changes to tools/encoding/iso8859-6.txt.
1 | # | | | | | | < | | < | | | > | | | | > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | | | | | | | 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 | # # Name: ISO 8859-6:1999 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-6:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-6 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-6 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # 0x30..0x39 remapped to the ASCII digits (U+0030..U+0039) instead # of the Arabic digits (U+0660..U+0669). # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA4 0x00A4 # CURRENCY SIGN 0xAC 0x060C # ARABIC COMMA 0xAD 0x00AD # SOFT HYPHEN 0xBB 0x061B # ARABIC SEMICOLON 0xBF 0x061F # ARABIC QUESTION MARK 0xC1 0x0621 # ARABIC LETTER HAMZA | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA4 0x00A4 # CURRENCY SIGN 0xAC 0x060C # ARABIC COMMA 0xAD 0x00AD # SOFT HYPHEN 0xBB 0x061B # ARABIC SEMICOLON 0xBF 0x061F # ARABIC QUESTION MARK 0xC1 0x0621 # ARABIC LETTER HAMZA |
| ︙ | ︙ |
Changes to tools/encoding/iso8859-7.txt.
1 | # | | | | | | < | | < | | | > | | > > > | > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO 8859-7:1987 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO 8859-7:1987 characters map into Unicode. # # ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928, # and ECMA 118. # # Format: Three tab-separated columns # Column #1 is the ISO 8859-7 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO 8859-7 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7 # Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7 # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x2018 # LEFT SINGLE QUOTATION MARK 0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK 0xA3 0x00A3 # POUND SIGN 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x00A9 # COPYRIGHT SIGN 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN |
| ︙ | ︙ |
Changes to tools/encoding/iso8859-8.txt.
1 | # | | | | | | < | | < | | | > | | | | > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-8:1999 to Unicode # Unicode version: 3.0 # Table version: 1.1 # Table format: Format A # Date: 2000-Jan-03 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-8:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-8 order. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # 1.1 version updates to the published 8859-8:1999, correcting # the mapping of 0xAF and adding mappings for LRM and RLM. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x00D7 # MULTIPLICATION SIGN 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR 0xA7 0x00A7 # SECTION SIGN 0xA8 0x00A8 # DIAERESIS 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x00D7 # MULTIPLICATION SIGN 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0xAC 0x00AC # NOT SIGN 0xAD 0x00AD # SOFT HYPHEN 0xAE 0x00AE # REGISTERED SIGN 0xAF 0x00AF # MACRON 0xB0 0x00B0 # DEGREE SIGN 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x00B2 # SUPERSCRIPT TWO 0xB3 0x00B3 # SUPERSCRIPT THREE 0xB4 0x00B4 # ACUTE ACCENT 0xB5 0x00B5 # MICRO SIGN 0xB6 0x00B6 # PILCROW SIGN |
| ︙ | ︙ | |||
186 187 188 189 190 191 192 | 0xF4 0x05E4 # HEBREW LETTER PE 0xF5 0x05E5 # HEBREW LETTER FINAL TSADI 0xF6 0x05E6 # HEBREW LETTER TSADI 0xF7 0x05E7 # HEBREW LETTER QOF 0xF8 0x05E8 # HEBREW LETTER RESH 0xF9 0x05E9 # HEBREW LETTER SHIN 0xFA 0x05EA # HEBREW LETTER TAV | > > > | 261 262 263 264 265 266 267 268 269 270 | 0xF4 0x05E4 # HEBREW LETTER PE 0xF5 0x05E5 # HEBREW LETTER FINAL TSADI 0xF6 0x05E6 # HEBREW LETTER TSADI 0xF7 0x05E7 # HEBREW LETTER QOF 0xF8 0x05E8 # HEBREW LETTER RESH 0xF9 0x05E9 # HEBREW LETTER SHIN 0xFA 0x05EA # HEBREW LETTER TAV 0xFD 0x200E # LEFT-TO-RIGHT MARK 0xFE 0x200F # RIGHT-TO-LEFT MARK |
Changes to tools/encoding/iso8859-9.txt.
1 | # | | | | | | < | < | | | > | | | | > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # # Name: ISO/IEC 8859-9:1999 to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 1999 July 27 # Authors: Ken Whistler <kenw@sybase.com> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on magnetic media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # ISO/IEC 8859-9:1999 characters map into Unicode. # # Format: Three tab-separated columns # Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in ISO/IEC 8859-9 order. # # ISO/IEC 8859-9 is also equivalent to ISO-IR-148. # # Version history # 1.0 version updates 0.1 version by adding mappings for all # control characters. # # Updated versions of this file may be found in: # <ftp://ftp.unicode.org/Public/MAPPINGS/> # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND |
| ︙ | ︙ | |||
128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x0080 # <control> 0x81 0x0081 # <control> 0x82 0x0082 # <control> 0x83 0x0083 # <control> 0x84 0x0084 # <control> 0x85 0x0085 # <control> 0x86 0x0086 # <control> 0x87 0x0087 # <control> 0x88 0x0088 # <control> 0x89 0x0089 # <control> 0x8A 0x008A # <control> 0x8B 0x008B # <control> 0x8C 0x008C # <control> 0x8D 0x008D # <control> 0x8E 0x008E # <control> 0x8F 0x008F # <control> 0x90 0x0090 # <control> 0x91 0x0091 # <control> 0x92 0x0092 # <control> 0x93 0x0093 # <control> 0x94 0x0094 # <control> 0x95 0x0095 # <control> 0x96 0x0096 # <control> 0x97 0x0097 # <control> 0x98 0x0098 # <control> 0x99 0x0099 # <control> 0x9A 0x009A # <control> 0x9B 0x009B # <control> 0x9C 0x009C # <control> 0x9D 0x009D # <control> 0x9E 0x009E # <control> 0x9F 0x009F # <control> 0xA0 0x00A0 # NO-BREAK SPACE 0xA1 0x00A1 # INVERTED EXCLAMATION MARK 0xA2 0x00A2 # CENT SIGN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A4 # CURRENCY SIGN 0xA5 0x00A5 # YEN SIGN 0xA6 0x00A6 # BROKEN BAR |
| ︙ | ︙ |
Changes to tools/encoding/koi8-r.txt.
|
| > | < > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | | | | | > > | > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 | # # Name: KOI8-R (RFC1489) to Unicode # Unicode version: 3.0 # Table version: 1.0 # Table format: Format A # Date: 18 August 1999 # Authors: Helmut Richter <richter@lrz.de> # # Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on optical media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Unicode, Inc. hereby grants the right to freely use the information # supplied in this file in the creation of products supporting the # Unicode Standard, and to make copies of this file in any form for # internal or external distribution as long as this notice remains # attached. # # General notes: # # This table contains the data the Unicode Consortium has on how # KOI8-R characters map into Unicode. The underlying document is the # mapping described in RFC 1489. No statements are made as to whether # this mapping is the same as the mapping defined as "Code Page 878" # with some vendors. # # Format: Three tab-separated columns # Column #1 is the KOI8-R code (in hex as 0xXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 the Unicode name (follows a comment sign, '#') # # The entries are in KOI8-R order. # # Version history # 1.0 version: created. # # Any comments or problems, contact <errata@unicode.org> # Please note that <errata@unicode.org> is an archival address; # notices will be checked, but do not expect an immediate response. # 0x00 0x0000 # NULL 0x01 0x0001 # START OF HEADING 0x02 0x0002 # START OF TEXT 0x03 0x0003 # END OF TEXT 0x04 0x0004 # END OF TRANSMISSION 0x05 0x0005 # ENQUIRY 0x06 0x0006 # ACKNOWLEDGE 0x07 0x0007 # BELL 0x08 0x0008 # BACKSPACE 0x09 0x0009 # HORIZONTAL TABULATION 0x0A 0x000A # LINE FEED 0x0B 0x000B # VERTICAL TABULATION 0x0C 0x000C # FORM FEED 0x0D 0x000D # CARRIAGE RETURN 0x0E 0x000E # SHIFT OUT 0x0F 0x000F # SHIFT IN 0x10 0x0010 # DATA LINK ESCAPE 0x11 0x0011 # DEVICE CONTROL ONE 0x12 0x0012 # DEVICE CONTROL TWO 0x13 0x0013 # DEVICE CONTROL THREE 0x14 0x0014 # DEVICE CONTROL FOUR 0x15 0x0015 # NEGATIVE ACKNOWLEDGE 0x16 0x0016 # SYNCHRONOUS IDLE 0x17 0x0017 # END OF TRANSMISSION BLOCK 0x18 0x0018 # CANCEL 0x19 0x0019 # END OF MEDIUM 0x1A 0x001A # SUBSTITUTE 0x1B 0x001B # ESCAPE 0x1C 0x001C # FILE SEPARATOR 0x1D 0x001D # GROUP SEPARATOR 0x1E 0x001E # RECORD SEPARATOR 0x1F 0x001F # UNIT SEPARATOR 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN 0x24 0x0024 # DOLLAR SIGN 0x25 0x0025 # PERCENT SIGN 0x26 0x0026 # AMPERSAND 0x27 0x0027 # APOSTROPHE 0x28 0x0028 # LEFT PARENTHESIS 0x29 0x0029 # RIGHT PARENTHESIS 0x2A 0x002A # ASTERISK 0x2B 0x002B # PLUS SIGN 0x2C 0x002C # COMMA 0x2D 0x002D # HYPHEN-MINUS 0x2E 0x002E # FULL STOP 0x2F 0x002F # SOLIDUS 0x30 0x0030 # DIGIT ZERO 0x31 0x0031 # DIGIT ONE 0x32 0x0032 # DIGIT TWO 0x33 0x0033 # DIGIT THREE 0x34 0x0034 # DIGIT FOUR 0x35 0x0035 # DIGIT FIVE 0x36 0x0036 # DIGIT SIX 0x37 0x0037 # DIGIT SEVEN 0x38 0x0038 # DIGIT EIGHT 0x39 0x0039 # DIGIT NINE 0x3A 0x003A # COLON 0x3B 0x003B # SEMICOLON 0x3C 0x003C # LESS-THAN SIGN 0x3D 0x003D # EQUALS SIGN 0x3E 0x003E # GREATER-THAN SIGN 0x3F 0x003F # QUESTION MARK 0x40 0x0040 # COMMERCIAL AT 0x41 0x0041 # LATIN CAPITAL LETTER A 0x42 0x0042 # LATIN CAPITAL LETTER B 0x43 0x0043 # LATIN CAPITAL LETTER C 0x44 0x0044 # LATIN CAPITAL LETTER D 0x45 0x0045 # LATIN CAPITAL LETTER E 0x46 0x0046 # LATIN CAPITAL LETTER F 0x47 0x0047 # LATIN CAPITAL LETTER G 0x48 0x0048 # LATIN CAPITAL LETTER H 0x49 0x0049 # LATIN CAPITAL LETTER I 0x4A 0x004A # LATIN CAPITAL LETTER J 0x4B 0x004B # LATIN CAPITAL LETTER K 0x4C 0x004C # LATIN CAPITAL LETTER L 0x4D 0x004D # LATIN CAPITAL LETTER M 0x4E 0x004E # LATIN CAPITAL LETTER N 0x4F 0x004F # LATIN CAPITAL LETTER O 0x50 0x0050 # LATIN CAPITAL LETTER P 0x51 0x0051 # LATIN CAPITAL LETTER Q 0x52 0x0052 # LATIN CAPITAL LETTER R 0x53 0x0053 # LATIN CAPITAL LETTER S 0x54 0x0054 # LATIN CAPITAL LETTER T 0x55 0x0055 # LATIN CAPITAL LETTER U 0x56 0x0056 # LATIN CAPITAL LETTER V 0x57 0x0057 # LATIN CAPITAL LETTER W 0x58 0x0058 # LATIN CAPITAL LETTER X 0x59 0x0059 # LATIN CAPITAL LETTER Y 0x5A 0x005A # LATIN CAPITAL LETTER Z 0x5B 0x005B # LEFT SQUARE BRACKET 0x5C 0x005C # REVERSE SOLIDUS 0x5D 0x005D # RIGHT SQUARE BRACKET 0x5E 0x005E # CIRCUMFLEX ACCENT 0x5F 0x005F # LOW LINE 0x60 0x0060 # GRAVE ACCENT 0x61 0x0061 # LATIN SMALL LETTER A 0x62 0x0062 # LATIN SMALL LETTER B 0x63 0x0063 # LATIN SMALL LETTER C 0x64 0x0064 # LATIN SMALL LETTER D 0x65 0x0065 # LATIN SMALL LETTER E 0x66 0x0066 # LATIN SMALL LETTER F 0x67 0x0067 # LATIN SMALL LETTER G 0x68 0x0068 # LATIN SMALL LETTER H 0x69 0x0069 # LATIN SMALL LETTER I 0x6A 0x006A # LATIN SMALL LETTER J 0x6B 0x006B # LATIN SMALL LETTER K 0x6C 0x006C # LATIN SMALL LETTER L 0x6D 0x006D # LATIN SMALL LETTER M 0x6E 0x006E # LATIN SMALL LETTER N 0x6F 0x006F # LATIN SMALL LETTER O 0x70 0x0070 # LATIN SMALL LETTER P 0x71 0x0071 # LATIN SMALL LETTER Q 0x72 0x0072 # LATIN SMALL LETTER R 0x73 0x0073 # LATIN SMALL LETTER S 0x74 0x0074 # LATIN SMALL LETTER T 0x75 0x0075 # LATIN SMALL LETTER U 0x76 0x0076 # LATIN SMALL LETTER V 0x77 0x0077 # LATIN SMALL LETTER W 0x78 0x0078 # LATIN SMALL LETTER X 0x79 0x0079 # LATIN SMALL LETTER Y 0x7A 0x007A # LATIN SMALL LETTER Z 0x7B 0x007B # LEFT CURLY BRACKET 0x7C 0x007C # VERTICAL LINE 0x7D 0x007D # RIGHT CURLY BRACKET 0x7E 0x007E # TILDE 0x7F 0x007F # DELETE 0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL 0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL 0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT 0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT 0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT 0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT 0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT 0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT 0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL 0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 0x8B 0x2580 # UPPER HALF BLOCK 0x8C 0x2584 # LOWER HALF BLOCK 0x8D 0x2588 # FULL BLOCK 0x8E 0x258C # LEFT HALF BLOCK 0x8F 0x2590 # RIGHT HALF BLOCK 0x90 0x2591 # LIGHT SHADE 0x91 0x2592 # MEDIUM SHADE 0x92 0x2593 # DARK SHADE 0x93 0x2320 # TOP HALF INTEGRAL 0x94 0x25A0 # BLACK SQUARE 0x95 0x2219 # BULLET OPERATOR 0x96 0x221A # SQUARE ROOT 0x97 0x2248 # ALMOST EQUAL TO 0x98 0x2264 # LESS-THAN OR EQUAL TO 0x99 0x2265 # GREATER-THAN OR EQUAL TO 0x9A 0x00A0 # NO-BREAK SPACE 0x9B 0x2321 # BOTTOM HALF INTEGRAL 0x9C 0x00B0 # DEGREE SIGN 0x9D 0x00B2 # SUPERSCRIPT TWO 0x9E 0x00B7 # MIDDLE DOT 0x9F 0x00F7 # DIVISION SIGN 0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL 0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL 0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 0xA3 0x0451 # CYRILLIC SMALL LETTER IO 0xA4 0x2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT 0xA6 0x2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 0xA7 0x2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT 0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT 0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 0xAD 0x255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT 0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO 0xB4 0x2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT 0xB6 0x2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 0xB7 0x2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL 0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 0xBD 0x256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 0xBF 0x00A9 # COPYRIGHT SIGN 0xC0 0x044E # CYRILLIC SMALL LETTER YU 0xC1 0x0430 # CYRILLIC SMALL LETTER A 0xC2 0x0431 # CYRILLIC SMALL LETTER BE 0xC3 0x0446 # CYRILLIC SMALL LETTER TSE 0xC4 0x0434 # CYRILLIC SMALL LETTER DE 0xC5 0x0435 # CYRILLIC SMALL LETTER IE 0xC6 0x0444 # CYRILLIC SMALL LETTER EF 0xC7 0x0433 # CYRILLIC SMALL LETTER GHE 0xC8 0x0445 # CYRILLIC SMALL LETTER HA 0xC9 0x0438 # CYRILLIC SMALL LETTER I 0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I 0xCB 0x043A # CYRILLIC SMALL LETTER KA 0xCC 0x043B # CYRILLIC SMALL LETTER EL 0xCD 0x043C # CYRILLIC SMALL LETTER EM 0xCE 0x043D # CYRILLIC SMALL LETTER EN 0xCF 0x043E # CYRILLIC SMALL LETTER O 0xD0 0x043F # CYRILLIC SMALL LETTER PE 0xD1 0x044F # CYRILLIC SMALL LETTER YA 0xD2 0x0440 # CYRILLIC SMALL LETTER ER 0xD3 0x0441 # CYRILLIC SMALL LETTER ES 0xD4 0x0442 # CYRILLIC SMALL LETTER TE 0xD5 0x0443 # CYRILLIC SMALL LETTER U 0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE 0xD7 0x0432 # CYRILLIC SMALL LETTER VE 0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN 0xD9 0x044B # CYRILLIC SMALL LETTER YERU 0xDA 0x0437 # CYRILLIC SMALL LETTER ZE 0xDB 0x0448 # CYRILLIC SMALL LETTER SHA 0xDC 0x044D # CYRILLIC SMALL LETTER E 0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA 0xDE 0x0447 # CYRILLIC SMALL LETTER CHE 0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN 0xE0 0x042E # CYRILLIC CAPITAL LETTER YU 0xE1 0x0410 # CYRILLIC CAPITAL LETTER A 0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE 0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE 0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE 0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE 0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF 0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE 0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA 0xE9 0x0418 # CYRILLIC CAPITAL LETTER I 0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I 0xEB 0x041A # CYRILLIC CAPITAL LETTER KA 0xEC 0x041B # CYRILLIC CAPITAL LETTER EL 0xED 0x041C # CYRILLIC CAPITAL LETTER EM 0xEE 0x041D # CYRILLIC CAPITAL LETTER EN 0xEF 0x041E # CYRILLIC CAPITAL LETTER O 0xF0 0x041F # CYRILLIC CAPITAL LETTER PE 0xF1 0x042F # CYRILLIC CAPITAL LETTER YA 0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER 0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES 0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE 0xF5 0x0423 # CYRILLIC CAPITAL LETTER U 0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE 0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE 0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN 0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU 0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE 0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA 0xFC 0x042D # CYRILLIC CAPITAL LETTER E 0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA 0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE 0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN |
Changes to tools/encoding/macCentEuro.txt.
1 | # | > > > > > > | > > > | > > | > > > > | > | < > > | | | > | | < < > > > | | | | | | > > > > > | | | < < < < < < > | < > > | | | | > | | | < < | > | > > > > > > | 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 | #======================================================================= # FTP file name: CENTEURO.TXT # # Contents: Map (external version) from Mac OS Central European # character set to Unicode 2.1 # # Copyright: (c) 1995-1999 by Apple Computer, Inc., all rights # reserved. # # Contact: charsets@apple.com # # Changes: # # b02 1999-Sep-22 Update contact e-mail address. Matches # internal utom<b1>, ufrm<b1>, and Text # Encoding Converter version 1.5. # n05 1998-Feb-05 Update header comments to new format; no # mapping changes. Matches internal utom<n3>, # ufrm<n13>, and Text Encoding Converter # version 1.3. # n03 1995-Apr-15 First version (after fixing some typos). # Matches internal ufrm<n5>. # # Standard header: # ---------------- # # Apple, the Apple logo, and Macintosh are trademarks of Apple # Computer, Inc., registered in the United States and other countries. # Unicode is a trademark of Unicode Inc. For the sake of brevity, # throughout this document, "Macintosh" can be used to refer to # Macintosh computers and "Unicode" can be used to refer to the # Unicode standard. # # Apple makes no warranty or representation, either express or # implied, with respect to these tables, their quality, accuracy, or # fitness for a particular purpose. In no event will Apple be liable # for direct, indirect, special, incidental, or consequential damages # resulting from any defect or inaccuracy in this document or the # accompanying tables. # # These mapping tables and character lists are subject to change. # The latest tables should be available from the following: # # <ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> # <ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/> # # For general information about Mac OS encodings and these mapping # tables, see the file "README.TXT". # # Format: # ------- # # Three tab-separated columns; # '#' begins a comment which continues to the end of the line. # Column #1 is the Mac OS Central European code (in hex as 0xNN) # Column #2 is the corresponding Unicode (in hex as 0xNNNN) # Column #3 is a comment containing the Unicode name # # The entries are in Mac OS Central European code order. # # Control character mappings are not shown in this table, following # the conventions of the standard UTC mapping tables. However, the # Mac OS Central European character set uses the standard control # characters at 0x00-0x1F and 0x7F. # # Notes on Mac OS Central European: # --------------------------------- # # This character set is intended to cover the following languages: # # Polish, Czech, Slovak, Hungarian, Estonian, Latvian, Lithuanian # # These are written in Latin script, but using a different set of # of accented characters than Mac OS Roman. The Mac OS Central # European character set also includes a number of characters # needed for the Mac OS user interface and localization (e.g. # ellipsis, bullet, copyright sign), several typographic # punctuation symbols, math symbols, etc. However, it has a # smaller set of punctuation and symbols than Mac OS Roman. All of # the characters in Mac OS Central European that are also in the # Mac OS Roman character set are at the same code point in both # character sets; this improves application compatibility. # # Note: This does not have the same letter repertoire as ISO # 8859-2 (Latin-2); each has some accented letters that the other # does not have. # # Unicode mapping issues and notes: # --------------------------------- # # Details of mapping changes in each version: # ------------------------------------------- # ################## 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN |
| ︙ | ︙ |
Changes to tools/encoding/macCroatian.txt.
1 | # | > > > > > > | > > > | > > > > | | > > > > > | < > > | | | > | | < < > > > | | | | | | | | > | > > | < | | > > | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | #======================================================================= # FTP file name: CROATIAN.TXT # # Contents: Map (external version) from Mac OS Croatian # character set to Unicode 2.1 # # Copyright: (c) 1995-1999 by Apple Computer, Inc., all rights # reserved. # # Contact: charsets@apple.com # # Changes: # # b02 1999-Sep-22 Encoding changed for Mac OS 8.5; change # mapping of 0xDB from CURRENCY SIGN to EURO # SIGN. Update contact e-mail address. Matches # internal utom<b2>, ufrm<b2>, and Text # Encoding Converter version 1.5. # n07 1998-Feb-05 Minor update to header comments # n05 1997-Dec-14 Update to match internal utom<5>, ufrm<16>: # Change standard mapping for 0xBD from U+2126 # to its canonical decomposition, U+03A9. # n03 1995-Apr-15 First version (after fixing some typos). # Matches internal ufrm<6>. # # Standard header: # ---------------- # # Apple, the Apple logo, and Macintosh are trademarks of Apple # Computer, Inc., registered in the United States and other countries. # Unicode is a trademark of Unicode Inc. For the sake of brevity, # throughout this document, "Macintosh" can be used to refer to # Macintosh computers and "Unicode" can be used to refer to the # Unicode standard. # # Apple makes no warranty or representation, either express or # implied, with respect to these tables, their quality, accuracy, or # fitness for a particular purpose. In no event will Apple be liable # for direct, indirect, special, incidental, or consequential damages # resulting from any defect or inaccuracy in this document or the # accompanying tables. # # These mapping tables and character lists are subject to change. # The latest tables should be available from the following: # # <ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> # <ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/> # # For general information about Mac OS encodings and these mapping # tables, see the file "README.TXT". # # Format: # ------- # # Three tab-separated columns; # '#' begins a comment which continues to the end of the line. # Column #1 is the Mac OS Croatian code (in hex as 0xNN) # Column #2 is the corresponding Unicode (in hex as 0xNNNN) # Column #3 is a comment containing the Unicode name # # The entries are in Mac OS Croatian code order. # # One of these mappings requires the use of a corporate character. # See the file "CORPCHAR.TXT" and notes below. # # Control character mappings are not shown in this table, following # the conventions of the standard UTC mapping tables. However, the # Mac OS Roman character set uses the standard control characters at # 0x00-0x1F and 0x7F. # # Notes on Mac OS Croatian: # ------------------------- # # Mac OS Croatian is used for Croatian and Slovene. # # The Mac OS Croatian encoding shares the script code smRoman # (0) with the standard Mac OS Roman encoding. To determine if # the Croatian encoding is being used, you must check if the # system region code is 68, verCroatia (or 25, verYugoCroatian, # only used in older systems). # # This character set is a variant of standard Mac OS Roman # encoding, adding five accented letter case pairs to handle # Croatian. It has 20 code point differences from standard # Mac OS Roman, but only 10 differences in repertoire. # # Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was # mapped to U+00A4. In Mac OS 8.5 and later versions, code point # 0xDB is changed to EURO SIGN and maps to U+20AC; the standard # Apple fonts are updated for Mac OS 8.5 to reflect this. There is # a "currency sign" variant of the Mac OS Croatian encoding that # still maps 0xDB to U+00A4; this can be used for older fonts. # Note: U+20AC is new with Unicode 2.1; for earlier Unicode # versions, Mac OS Croatian 0xDB may be mapped to private-use # character U+F8A0. # # Unicode mapping issues and notes: # --------------------------------- # # The following corporate zone Unicode character is used in this # mapping: # # 0xF8FF Apple logo # # NOTE: The graphic image associated with the Apple logo character # is not authorized for use without permission of Apple, and # unauthorized use might constitute trademark infringement. # # Details of mapping changes in each version: # ------------------------------------------- # # Changes from version n07 to version b02: # # - Encoding changed for Mac OS 8.5; change mapping of 0xDB from # CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). # # Changes from version n03 to version n05: # # - Change mapping of 0xBD from U+2126 to its canonical # decomposition, U+03A9. # ################## 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN |
| ︙ | ︙ | |||
214 215 216 217 218 219 220 | 0xB6 0x2202 # PARTIAL DIFFERENTIAL 0xB7 0x2211 # N-ARY SUMMATION 0xB8 0x220F # N-ARY PRODUCT 0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON 0xBA 0x222B # INTEGRAL 0xBB 0x00AA # FEMININE ORDINAL INDICATOR 0xBC 0x00BA # MASCULINE ORDINAL INDICATOR | | | 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | 0xB6 0x2202 # PARTIAL DIFFERENTIAL 0xB7 0x2211 # N-ARY SUMMATION 0xB8 0x220F # N-ARY PRODUCT 0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON 0xBA 0x222B # INTEGRAL 0xBB 0x00AA # FEMININE ORDINAL INDICATOR 0xBC 0x00BA # MASCULINE ORDINAL INDICATOR 0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA 0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON 0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xC0 0x00BF # INVERTED QUESTION MARK 0xC1 0x00A1 # INVERTED EXCLAMATION MARK 0xC2 0x00AC # NOT SIGN 0xC3 0x221A # SQUARE ROOT 0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK |
| ︙ | ︙ | |||
244 245 246 247 248 249 250 | 0xD4 0x2018 # LEFT SINGLE QUOTATION MARK 0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK 0xD6 0x00F7 # DIVISION SIGN 0xD7 0x25CA # LOZENGE 0xD8 0xF8FF # Apple logo 0xD9 0x00A9 # COPYRIGHT SIGN 0xDA 0x2044 # FRACTION SLASH | | | | 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | 0xD4 0x2018 # LEFT SINGLE QUOTATION MARK 0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK 0xD6 0x00F7 # DIVISION SIGN 0xD7 0x25CA # LOZENGE 0xD8 0xF8FF # Apple logo 0xD9 0x00A9 # COPYRIGHT SIGN 0xDA 0x2044 # FRACTION SLASH 0xDB 0x20AC # EURO SIGN 0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0xDE 0x00C6 # LATIN CAPITAL LETTER AE 0xDF 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0xE0 0x2013 # EN DASH 0xE1 0x00B7 # MIDDLE DOT 0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK 0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK 0xE4 0x2030 # PER MILLE SIGN 0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX |
| ︙ | ︙ | |||
279 280 281 282 283 284 285 | 0xF7 0x02DC # SMALL TILDE 0xF8 0x00AF # MACRON 0xF9 0x03C0 # GREEK SMALL LETTER PI 0xFA 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xFB 0x02DA # RING ABOVE 0xFC 0x00B8 # CEDILLA 0xFD 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | | | 339 340 341 342 343 344 345 346 347 | 0xF7 0x02DC # SMALL TILDE 0xF8 0x00AF # MACRON 0xF9 0x03C0 # GREEK SMALL LETTER PI 0xFA 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS 0xFB 0x02DA # RING ABOVE 0xFC 0x00B8 # CEDILLA 0xFD 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0xFE 0x00E6 # LATIN SMALL LETTER AE 0xFF 0x02C7 # CARON |
Changes to tools/encoding/macCyrillic.txt.
1 | # | > > > > > > | > > > | > > > > > | | > > | | > > < > > | | | > | | < < > > > | | | | | | > > > > > | | > > > | < > | > > > > > > > > > > | > > > > > > > | | < | | | > > > | < | > > > > > > > > > > | 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 | #======================================================================= # FTP file name: CYRILLIC.TXT # # Contents: Map (external version) from Mac OS Cyrillic # character set to Unicode 2.1 # # Copyright: (c) 1995-1999 by Apple Computer, Inc., all rights # reserved. # # Contact: charsets@apple.com # # Changes: # # b02 1999-Sep-22 Encoding changed for Mac OS 9.0 to merge # with Mac OS Ukrainian and support EURO SIGN; # Change mappings for 0xA2, 0xB6, and 0xFF. # Update contact e-mail address. Matches # internal utom<b2>, ufrm<b2>, and Text # Encoding Converter version 1.5. # n05 1998-Feb-05 Update header comments to new format; no # mapping changes. Matches internal utom<n3>, # ufrm<n13>, and Text Encoding Converter # version 1.3. # n03 1995-Apr-15 First version (after fixing some typos). # Matches internal ufrm<n5>. # # Standard header: # ---------------- # # Apple, the Apple logo, and Macintosh are trademarks of Apple # Computer, Inc., registered in the United States and other countries. # Unicode is a trademark of Unicode Inc. For the sake of brevity, # throughout this document, "Macintosh" can be used to refer to # Macintosh computers and "Unicode" can be used to refer to the # Unicode standard. # # Apple makes no warranty or representation, either express or # implied, with respect to these tables, their quality, accuracy, or # fitness for a particular purpose. In no event will Apple be liable # for direct, indirect, special, incidental, or consequential damages # resulting from any defect or inaccuracy in this document or the # accompanying tables. # # These mapping tables and character lists are subject to change. # The latest tables should be available from the following: # # <ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> # <ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/> # # For general information about Mac OS encodings and these mapping # tables, see the file "README.TXT". # # Format: # ------- # # Three tab-separated columns; # '#' begins a comment which continues to the end of the line. # Column #1 is the Mac OS Cyrillic code (in hex as 0xNN) # Column #2 is the corresponding Unicode (in hex as 0xNNNN) # Column #3 is a comment containing the Unicode name # # The entries are in Mac OS Cyrillic code order. # # Control character mappings are not shown in this table, following # the conventions of the standard UTC mapping tables. However, the # Mac OS Cyrillic character set uses the standard control characters # at 0x00-0x1F and 0x7F. # # Notes on Mac OS Cyrillic: # ------------------------- # # For Mac OS 9.0 and later, this Mac Cyrillic encoding is used for # all Slavic Cyrillic localized system software and for the Cyrillic # Language Kit. Before Mac OS 9.0, there were two separate Slavic # Cyrillic encodings: # # 1. The Cyrillic currency sign variant (used for localized Russian # and Bulgarian systems), which had the following: # 0xA2 U+00A2 CENT SIGN # 0xB6 U+2202 PARTIAL DIFFERENTIAL # 0xFF U+00A4 CURRENCY SIGN # # 2. The Ukrainian currency sign variant (used for localized Ukrainian # systems and the pre-9.0 Cyrillic Language Kit), which had the # following: # 0xA2 U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN # 0xB6 U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN # 0xFF U+00A4 CURRENCY SIGN # # This new Cyrillic Euro sign version is based on the old Ukrainian # currency sign variant, with 0xFF changed to be EURO SIGN. # # The Mac OS Cyrillic encoding includes the Cyrillic letter repertoire # of ISO 8859-5 (although not at the same code points). This covers # most of the Slavic languages written in Cyrillic script. # # The Mac OS Cyrillic encoding also includes a number of characters # needed for the Mac OS user interface and localization (e.g. # ellipsis, bullet, copyright sign). All of the characters in Mac OS # Cyrillic that are also in the Mac OS Roman encoding are at the # same code point in both; this improves application compatibility. # # Note: There is a common Ukrainian glyph variation in which the glyph # for CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I may or may not # have a dot above. # # Unicode mapping issues and notes: # --------------------------------- # # Details of mapping changes in each version: # ------------------------------------------- # # Changes from version n05 to version b02: # # - Encoding changed for Mac OS 9.0 to merge with Mac OS Ukrainian and # support EURO SIGN. 0xA2 changed from U+00A2 to U+0490; 0xB6 changed # from U+2202 to U+0491; 0xFF changed from U+00A4 to U+20AC. # ################## 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN |
| ︙ | ︙ | |||
187 188 189 190 191 192 193 | 0x9B 0x042B # CYRILLIC CAPITAL LETTER YERU 0x9C 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN 0x9D 0x042D # CYRILLIC CAPITAL LETTER E 0x9E 0x042E # CYRILLIC CAPITAL LETTER YU 0x9F 0x042F # CYRILLIC CAPITAL LETTER YA 0xA0 0x2020 # DAGGER 0xA1 0x00B0 # DEGREE SIGN | | | | 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 | 0x9B 0x042B # CYRILLIC CAPITAL LETTER YERU 0x9C 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN 0x9D 0x042D # CYRILLIC CAPITAL LETTER E 0x9E 0x042E # CYRILLIC CAPITAL LETTER YU 0x9F 0x042F # CYRILLIC CAPITAL LETTER YA 0xA0 0x2020 # DAGGER 0xA1 0x00B0 # DEGREE SIGN 0xA2 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0xA3 0x00A3 # POUND SIGN 0xA4 0x00A7 # SECTION SIGN 0xA5 0x2022 # BULLET 0xA6 0x00B6 # PILCROW SIGN 0xA7 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x2122 # TRADE MARK SIGN 0xAB 0x0402 # CYRILLIC CAPITAL LETTER DJE 0xAC 0x0452 # CYRILLIC SMALL LETTER DJE 0xAD 0x2260 # NOT EQUAL TO 0xAE 0x0403 # CYRILLIC CAPITAL LETTER GJE 0xAF 0x0453 # CYRILLIC SMALL LETTER GJE 0xB0 0x221E # INFINITY 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x2264 # LESS-THAN OR EQUAL TO 0xB3 0x2265 # GREATER-THAN OR EQUAL TO 0xB4 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0xB5 0x00B5 # MICRO SIGN 0xB6 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN 0xB7 0x0408 # CYRILLIC CAPITAL LETTER JE 0xB8 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0xB9 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE 0xBA 0x0407 # CYRILLIC CAPITAL LETTER YI 0xBB 0x0457 # CYRILLIC SMALL LETTER YI 0xBC 0x0409 # CYRILLIC CAPITAL LETTER LJE 0xBD 0x0459 # CYRILLIC SMALL LETTER LJE |
| ︙ | ︙ | |||
280 281 282 283 284 285 286 | 0xF8 0x0448 # CYRILLIC SMALL LETTER SHA 0xF9 0x0449 # CYRILLIC SMALL LETTER SHCHA 0xFA 0x044A # CYRILLIC SMALL LETTER HARD SIGN 0xFB 0x044B # CYRILLIC SMALL LETTER YERU 0xFC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN 0xFD 0x044D # CYRILLIC SMALL LETTER E 0xFE 0x044E # CYRILLIC SMALL LETTER YU | | | 337 338 339 340 341 342 343 344 | 0xF8 0x0448 # CYRILLIC SMALL LETTER SHA 0xF9 0x0449 # CYRILLIC SMALL LETTER SHCHA 0xFA 0x044A # CYRILLIC SMALL LETTER HARD SIGN 0xFB 0x044B # CYRILLIC SMALL LETTER YERU 0xFC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN 0xFD 0x044D # CYRILLIC SMALL LETTER E 0xFE 0x044E # CYRILLIC SMALL LETTER YU 0xFF 0x20AC # EURO SIGN |
Changes to tools/encoding/macGreek.txt.
1 | # | > > > > > > | > > > | > > | | > > > > > > | < > > | | | > | | < < > > > | | | | | | | | > > > > > | | | | | | > > > > > | | > > > > > > > > > > > > > > > > > > | 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 | #======================================================================= # FTP file name: GREEK.TXT # # Contents: Map (external version) from Mac OS Greek # character set to Unicode 2.1 # # Copyright: (c) 1995-1999 by Apple Computer, Inc., all rights # reserved. # # Contact: charsets@apple.com # # Changes: # # b02 1999-Sep-22 Update contact e-mail address. Matches # internal utom<b1>, ufrm<b1>, and Text # Encoding Converter version 1.5. # n06 1998-Feb-05 Update to match internal utom<n4>, ufrm<n17>, # and Text Encoding Converter versions 1.3: # Change mapping for 0xAF from U+0387 to its # canonical decomposition, U+00B7. Also # update header comments to new format. # n04 1995-Apr-15 First version (after fixing some typos). # Matches internal ufrm<n7>. # # Standard header: # ---------------- # # Apple, the Apple logo, and Macintosh are trademarks of Apple # Computer, Inc., registered in the United States and other countries. # Unicode is a trademark of Unicode Inc. For the sake of brevity, # throughout this document, "Macintosh" can be used to refer to # Macintosh computers and "Unicode" can be used to refer to the # Unicode standard. # # Apple makes no warranty or representation, either express or # implied, with respect to these tables, their quality, accuracy, or # fitness for a particular purpose. In no event will Apple be liable # for direct, indirect, special, incidental, or consequential damages # resulting from any defect or inaccuracy in this document or the # accompanying tables. # # These mapping tables and character lists are subject to change. # The latest tables should be available from the following: # # <ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> # <ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/> # # For general information about Mac OS encodings and these mapping # tables, see the file "README.TXT". # # Format: # ------- # # Three tab-separated columns; # '#' begins a comment which continues to the end of the line. # Column #1 is the Mac OS Greek code (in hex as 0xNN) # Column #2 is the corresponding Unicode (in hex as 0xNNNN) # Column #3 is a comment containing the Unicode name # # The entries are in Mac OS Greek code order. # # One of these mappings requires the use of a corporate character. # See the file "CORPCHAR.TXT" and notes below. # # Control character mappings are not shown in this table, following # the conventions of the standard UTC mapping tables. However, the # Mac OS Greek character set uses the standard control characters at # 0x00-0x1F and 0x7F. # # Notes on Mac OS Greek: # ---------------------- # # Although a Mac OS script code is defined for Greek (smGreek = 6), # the Greek localized system does not currently use it (the font # family IDs are in the Mac OS Roman range). To determine if the # Greek encoding is being used when the script code is smRoman (0), # you must check if the system region code is 20, verGreece. # # The Mac OS Greek encoding is a superset of the repertoire of # ISO 8859-7 (although characters are not at the same code points), # except that LEFT & RIGHT SINGLE QUOTATION MARK replace the # MODIFIER LETTER REVERSED COMMA & APOSTROPHE (spacing versions of # Greek rough & smooth breathing marks) that are in ISO 8859-7. # The added characters in Mac OS Greek include more punctuation and # symbols and several accented Latin letters. # # This character set was used by all Mac OS Greek systems 6.x and # 7.x except for system 6.0.7, which used a variant character set # but was quickly replaced with Greek system 6.0.7.1 using the # standard character set documented here. Greek system 4.1 used a # variant Greek set that had ISO 8859-7 in 0xA0-0xFF (with some # holes filled in with DTP characters), and Mac OS Roman accented # Roman letters in 0x80-0x9F. # # Unicode mapping issues and notes: # --------------------------------- # # The following corporate zone Unicode character is used in this # mapping: # # 0xF8A0 undefined1, used to map the single undefined code point # in Mac OS Greek and Turkish (to obtain roundtrip # fidelity for all code points). # # Details of mapping changes in each version: # ------------------------------------------- # # Changes from version n04 to version n06: # # - Change mapping of 0xAF from U+0387 to its canonical # decomposition, U+00B7. # ################## 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN |
| ︙ | ︙ | |||
192 193 194 195 196 197 198 | 0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xA0 0x2020 # DAGGER 0xA1 0x0393 # GREEK CAPITAL LETTER GAMMA 0xA2 0x0394 # GREEK CAPITAL LETTER DELTA 0xA3 0x0398 # GREEK CAPITAL LETTER THETA | | | | 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 | 0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE 0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX 0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS 0xA0 0x2020 # DAGGER 0xA1 0x0393 # GREEK CAPITAL LETTER GAMMA 0xA2 0x0394 # GREEK CAPITAL LETTER DELTA 0xA3 0x0398 # GREEK CAPITAL LETTER THETA 0xA4 0x039B # GREEK CAPITAL LETTER LAMDA 0xA5 0x039E # GREEK CAPITAL LETTER XI 0xA6 0x03A0 # GREEK CAPITAL LETTER PI 0xA7 0x00DF # LATIN SMALL LETTER SHARP S 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x03A3 # GREEK CAPITAL LETTER SIGMA 0xAB 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0xAC 0x00A7 # SECTION SIGN 0xAD 0x2260 # NOT EQUAL TO 0xAE 0x00B0 # DEGREE SIGN 0xAF 0x00B7 # MIDDLE DOT 0xB0 0x0391 # GREEK CAPITAL LETTER ALPHA 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x2264 # LESS-THAN OR EQUAL TO 0xB3 0x2265 # GREATER-THAN OR EQUAL TO 0xB4 0x00A5 # YEN SIGN 0xB5 0x0392 # GREEK CAPITAL LETTER BETA 0xB6 0x0395 # GREEK CAPITAL LETTER EPSILON |
| ︙ | ︙ | |||
264 265 266 267 268 269 270 | 0xE5 0x03B5 # GREEK SMALL LETTER EPSILON 0xE6 0x03C6 # GREEK SMALL LETTER PHI 0xE7 0x03B3 # GREEK SMALL LETTER GAMMA 0xE8 0x03B7 # GREEK SMALL LETTER ETA 0xE9 0x03B9 # GREEK SMALL LETTER IOTA 0xEA 0x03BE # GREEK SMALL LETTER XI 0xEB 0x03BA # GREEK SMALL LETTER KAPPA | | | 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 | 0xE5 0x03B5 # GREEK SMALL LETTER EPSILON 0xE6 0x03C6 # GREEK SMALL LETTER PHI 0xE7 0x03B3 # GREEK SMALL LETTER GAMMA 0xE8 0x03B7 # GREEK SMALL LETTER ETA 0xE9 0x03B9 # GREEK SMALL LETTER IOTA 0xEA 0x03BE # GREEK SMALL LETTER XI 0xEB 0x03BA # GREEK SMALL LETTER KAPPA 0xEC 0x03BB # GREEK SMALL LETTER LAMDA 0xED 0x03BC # GREEK SMALL LETTER MU 0xEE 0x03BD # GREEK SMALL LETTER NU 0xEF 0x03BF # GREEK SMALL LETTER OMICRON 0xF0 0x03C0 # GREEK SMALL LETTER PI 0xF1 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS 0xF2 0x03C1 # GREEK SMALL LETTER RHO 0xF3 0x03C3 # GREEK SMALL LETTER SIGMA |
| ︙ | ︙ |
Changes to tools/encoding/macIceland.txt.
1 | # | > > > > > > | > > > | > > > > | > > | > > > > | < > > | | | > | | < < > > > | | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | < > | | | < > > | | 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 | #======================================================================= # FTP file name: ICELAND.TXT # # Contents: Map (external version) from Mac OS Icelandic # character set to Unicode 2.1 # # Copyright: (c) 1995-1999 by Apple Computer, Inc., all rights # reserved. # # Contact: charsets@apple.com # # Changes: # # b02 1999-Sep-22 Encoding changed for Mac OS 8.5; change # mapping of 0xDB from CURRENCY SIGN to EURO # SIGN. Update contact e-mail address. Matches # internal utom<b2>, ufrm<b2>, and Text # Encoding Converter version 1.5. # n06 1998-Feb-05 Minor update to header comments, add # information on font variants # n03 1997-Dec-14 Update to match internal utom<n4>, ufrm<n16>: # Change standard mapping for 0xBD from U+2126 # to its canonical decomposition, U+03A9. # n02 1995-Apr-15 First version (after fixing some typos). # Matches internal ufrm<n5>. # # Standard header: # ---------------- # # Apple, the Apple logo, and Macintosh are trademarks of Apple # Computer, Inc., registered in the United States and other countries. # Unicode is a trademark of Unicode Inc. For the sake of brevity, # throughout this document, "Macintosh" can be used to refer to # Macintosh computers and "Unicode" can be used to refer to the # Unicode standard. # # Apple makes no warranty or representation, either express or # implied, with respect to these tables, their quality, accuracy, or # fitness for a particular purpose. In no event will Apple be liable # for direct, indirect, special, incidental, or consequential damages # resulting from any defect or inaccuracy in this document or the # accompanying tables. # # These mapping tables and character lists are subject to change. # The latest tables should be available from the following: # # <ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> # <ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/> # # For general information about Mac OS encodings and these mapping # tables, see the file "README.TXT". # # Format: # ------- # # Three tab-separated columns; # '#' begins a comment which continues to the end of the line. # Column #1 is the Mac OS Icelandic code (in hex as 0xNN) # Column #2 is the corresponding Unicode (in hex as 0xNNNN) # Column #3 is a comment containing the Unicode name # # The entries are in Mac OS Icelandic code order. # # One of these mappings requires the use of a corporate character. # See the file "CORPCHAR.TXT" and notes below. # # Control character mappings are not shown in this table, following # the conventions of the standard UTC mapping tables. However, the # Mac OS Roman character set uses the standard control characters at # 0x00-0x1F and 0x7F. # # Notes on Mac OS Icelandic: # -------------------------- # # 1. General # # Mac OS Icelandic is used for Icelandic and Faroese. # # The Mac OS Icelandic encoding shares the script code smRoman # (0) with the standard Mac OS Roman encoding. To determine if # the Icelandic encoding is being used, you must also check if # the system region code is 21, verIceland. # # This character set is a variant of standard Mac OS Roman, # adding upper and lower eth, thorn, and Y acute. It has 6 code # point differences from standard Mac OS Roman. # # Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was # mapped to U+00A4. In Mac OS 8.5 and later versions, code point # 0xDB is changed to EURO SIGN and maps to U+20AC; the standard # Apple fonts are updated for Mac OS 8.5 to reflect this. There are # "currency sign" variants of the Mac OS Icelandic encoding that # still map 0xDB to U+00A4; these can be used for older fonts. # Note: U+20AC is new with Unicode 2.1; for earlier Unicode # versions, Mac OS Icelandic 0xDB may be mapped to private-use # character U+F8A0. # # 2. Font variants # # The table in this file gives the Unicode mappings for the standard # Mac OS Icelandic encoding. This encoding is supported by the # Icelandic versions of the fonts Chicago, Geneva, Monaco, and New # York, and is the encoding supported by the text processing # utilities. However, other TrueType fonts implement a slightly # different encoding; the difference is only in two code points. # For the standard variant, these are: # 0xBB -> 0x00AA FEMININE ORDINAL INDICATOR # 0xBC -> 0x00BA MASCULINE ORDINAL INDICATOR # # For the TrueType variant (used by the Icelandic versions of the # fonts Courier, Helvetica, Palatino, and Times), these are: # 0xBB -> 0xFB01 LATIN SMALL LIGATURE FI # 0xBC -> 0xFB02 LATIN SMALL LIGATURE FL # # Unicode mapping issues and notes: # --------------------------------- # # The following corporate zone Unicode character is used in this # mapping: # # 0xF8FF Apple logo # # NOTE: The graphic image associated with the Apple logo character # is not authorized for use without permission of Apple, and # unauthorized use might constitute trademark infringement. # # Details of mapping changes in each version: # ------------------------------------------- # # Changes from version n06 to version b02: # # - Encoding changed for Mac OS 8.5; change mapping of 0xDB from # CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). # # Changes from version n02 to version n03: # # - Change mapping of 0xBD from U+2126 to its canonical # decomposition, U+03A9. # ################## 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN |
| ︙ | ︙ | |||
197 198 199 200 201 202 203 | 0xA7 0x00DF # LATIN SMALL LETTER SHARP S 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x2122 # TRADE MARK SIGN 0xAB 0x00B4 # ACUTE ACCENT 0xAC 0x00A8 # DIAERESIS 0xAD 0x2260 # NOT EQUAL TO | | | | | 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 | 0xA7 0x00DF # LATIN SMALL LETTER SHARP S 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x2122 # TRADE MARK SIGN 0xAB 0x00B4 # ACUTE ACCENT 0xAC 0x00A8 # DIAERESIS 0xAD 0x2260 # NOT EQUAL TO 0xAE 0x00C6 # LATIN CAPITAL LETTER AE 0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xB0 0x221E # INFINITY 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x2264 # LESS-THAN OR EQUAL TO 0xB3 0x2265 # GREATER-THAN OR EQUAL TO 0xB4 0x00A5 # YEN SIGN 0xB5 0x00B5 # MICRO SIGN 0xB6 0x2202 # PARTIAL DIFFERENTIAL 0xB7 0x2211 # N-ARY SUMMATION 0xB8 0x220F # N-ARY PRODUCT 0xB9 0x03C0 # GREEK SMALL LETTER PI 0xBA 0x222B # INTEGRAL 0xBB 0x00AA # FEMININE ORDINAL INDICATOR 0xBC 0x00BA # MASCULINE ORDINAL INDICATOR 0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA 0xBE 0x00E6 # LATIN SMALL LETTER AE 0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xC0 0x00BF # INVERTED QUESTION MARK 0xC1 0x00A1 # INVERTED EXCLAMATION MARK 0xC2 0x00AC # NOT SIGN 0xC3 0x221A # SQUARE ROOT 0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK 0xC5 0x2248 # ALMOST EQUAL TO |
| ︙ | ︙ | |||
242 243 244 245 246 247 248 | 0xD4 0x2018 # LEFT SINGLE QUOTATION MARK 0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK 0xD6 0x00F7 # DIVISION SIGN 0xD7 0x25CA # LOZENGE 0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS 0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xDA 0x2044 # FRACTION SLASH | | | 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 | 0xD4 0x2018 # LEFT SINGLE QUOTATION MARK 0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK 0xD6 0x00F7 # DIVISION SIGN 0xD7 0x25CA # LOZENGE 0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS 0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xDA 0x2044 # FRACTION SLASH 0xDB 0x20AC # EURO SIGN 0xDC 0x00D0 # LATIN CAPITAL LETTER ETH 0xDD 0x00F0 # LATIN SMALL LETTER ETH 0xDE 0x00DE # LATIN CAPITAL LETTER THORN 0xDF 0x00FE # LATIN SMALL LETTER THORN 0xE0 0x00FD # LATIN SMALL LETTER Y WITH ACUTE 0xE1 0x00B7 # MIDDLE DOT 0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK |
| ︙ | ︙ |
Changes to tools/encoding/macRoman.txt.
1 | # | > > > > > > | > > > | > > | > > > > | > > > | > > > > > < > > | | | > | | < < > > > | | | | | | | | > | > > | < | | | | | | > > > > > > > > > > | | | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | #======================================================================= # FTP file name: ROMAN.TXT # # Contents: Map (external version) from Mac OS Roman # character set to Unicode 2.1 # # Copyright: (c) 1994-1999 by Apple Computer, Inc., all rights # reserved. # # Contact: charsets@apple.com # # Changes: # # b03 1999-Sep-22 Update contact e-mail address. Matches # internal utom<b4>, ufrm<b3>, and Text # Encoding Converter version 1.5. # b02 1998-Aug-18 Encoding changed for Mac OS 8.5; change # mapping of 0xDB from CURRENCY SIGN to # EURO SIGN. Matches internal utom<b3>, # ufrm<b3>. # n08 1998-Feb-05 Minor update to header comments # n06 1997-Dec-14 Add warning about future changes to 0xDB # from CURRENCY SIGN to EURO SIGN. Clarify # some header information # n04 1997-Dec-01 Update to match internal utom<n3>, ufrm<n22>: # Change standard mapping for 0xBD from U+2126 # to its canonical decomposition, U+03A9. # n03 1995-Apr-15 First version (after fixing some typos). # Matches internal ufrm<n9>. # # Standard header: # ---------------- # # Apple, the Apple logo, and Macintosh are trademarks of Apple # Computer, Inc., registered in the United States and other countries. # Unicode is a trademark of Unicode Inc. For the sake of brevity, # throughout this document, "Macintosh" can be used to refer to # Macintosh computers and "Unicode" can be used to refer to the # Unicode standard. # # Apple makes no warranty or representation, either express or # implied, with respect to these tables, their quality, accuracy, or # fitness for a particular purpose. In no event will Apple be liable # for direct, indirect, special, incidental, or consequential damages # resulting from any defect or inaccuracy in this document or the # accompanying tables. # # These mapping tables and character lists are subject to change. # The latest tables should be available from the following: # # <ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> # <ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/> # # For general information about Mac OS encodings and these mapping # tables, see the file "README.TXT". # # Format: # ------- # # Three tab-separated columns; # '#' begins a comment which continues to the end of the line. # Column #1 is the Mac OS Roman code (in hex as 0xNN) # Column #2 is the corresponding Unicode (in hex as 0xNNNN) # Column #3 is a comment containing the Unicode name # # The entries are in Mac OS Roman code order. # # One of these mappings requires the use of a corporate character. # See the file "CORPCHAR.TXT" and notes below. # # Control character mappings are not shown in this table, following # the conventions of the standard UTC mapping tables. However, the # Mac OS Roman character set uses the standard control characters at # 0x00-0x1F and 0x7F. # # Notes on Mac OS Roman: # ---------------------- # # This character set is used for at least the following Mac OS # localizations: U.S., British, Canadian French, French, Swiss # French, German, Swiss German, Italian, Swiss Italian, Dutch, # Swedish, Norwegian, Danish, Finnish, Spanish, Catalan, # Portuguese, Brazilian, and the default International system. # # Variants of Mac OS Roman are used for Croatian, Icelandic, # Turkish, Romanian, and other encodings. Separate mapping tables # are available for these encodings. # # Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was # mapped to U+00A4. In Mac OS 8.5 and later versions, code point # 0xDB is changed to EURO SIGN and maps to U+20AC; the standard # Apple fonts are updated for Mac OS 8.5 to reflect this. There is # a "currency sign" variant of the Mac OS Roman encoding that still # maps 0xDB to U+00A4; this can be used for older fonts. # Note: U+20AC is new with Unicode 2.1; for earlier Unicode # versions, Mac OS Roman 0xDB may be mapped to private-use character # U+F8A0. # # Before Mac OS 8.5, the ROM bitmap versions of the fonts Chicago, # New York, Geneva, and Monaco did not implement the full Mac OS # Roman character set; they only supported character codes up to # 0xD8. The TrueType versions of these fonts have always implemented # the full character set, as with the bitmap and TrueType versions # of the other standard Roman fonts. # # In all Mac OS encodings, fonts such as Chicago which are used # as "system" fonts (for menus, dialogs, etc.) have four glyphs # at code points 0x11-0x14 for transient use by the Menu Manager. # These glyphs are not intended as characters for use in normal # text, and the associated code points are not generally # interpreted as associated with these glyphs; they are usually # interpreted (if at all) as the control codes DC1-DC4. # # Unicode mapping issues and notes: # --------------------------------- # # The following corporate zone Unicode character is used in this # mapping: # # 0xF8FF Apple logo # # NOTE: The graphic image associated with the Apple logo character # is not authorized for use without permission of Apple, and # unauthorized use might constitute trademark infringement. # # Details of mapping changes in each version: # ------------------------------------------- # # Changes from version n08 to version b02: # # - Encoding changed for Mac OS 8.5; change mapping of 0xDB from # CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). # # Changes from version n03 to version n04: # # - Change mapping of 0xBD from U+2126 to its canonical # decomposition, U+03A9. # ################## 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN |
| ︙ | ︙ | |||
213 214 215 216 217 218 219 | 0xA7 0x00DF # LATIN SMALL LETTER SHARP S 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x2122 # TRADE MARK SIGN 0xAB 0x00B4 # ACUTE ACCENT 0xAC 0x00A8 # DIAERESIS 0xAD 0x2260 # NOT EQUAL TO | | | | | 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 | 0xA7 0x00DF # LATIN SMALL LETTER SHARP S 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x2122 # TRADE MARK SIGN 0xAB 0x00B4 # ACUTE ACCENT 0xAC 0x00A8 # DIAERESIS 0xAD 0x2260 # NOT EQUAL TO 0xAE 0x00C6 # LATIN CAPITAL LETTER AE 0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xB0 0x221E # INFINITY 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x2264 # LESS-THAN OR EQUAL TO 0xB3 0x2265 # GREATER-THAN OR EQUAL TO 0xB4 0x00A5 # YEN SIGN 0xB5 0x00B5 # MICRO SIGN 0xB6 0x2202 # PARTIAL DIFFERENTIAL 0xB7 0x2211 # N-ARY SUMMATION 0xB8 0x220F # N-ARY PRODUCT 0xB9 0x03C0 # GREEK SMALL LETTER PI 0xBA 0x222B # INTEGRAL 0xBB 0x00AA # FEMININE ORDINAL INDICATOR 0xBC 0x00BA # MASCULINE ORDINAL INDICATOR 0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA 0xBE 0x00E6 # LATIN SMALL LETTER AE 0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xC0 0x00BF # INVERTED QUESTION MARK 0xC1 0x00A1 # INVERTED EXCLAMATION MARK 0xC2 0x00AC # NOT SIGN 0xC3 0x221A # SQUARE ROOT 0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK 0xC5 0x2248 # ALMOST EQUAL TO |
| ︙ | ︙ | |||
258 259 260 261 262 263 264 | 0xD4 0x2018 # LEFT SINGLE QUOTATION MARK 0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK 0xD6 0x00F7 # DIVISION SIGN 0xD7 0x25CA # LOZENGE 0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS 0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xDA 0x2044 # FRACTION SLASH | | | 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 | 0xD4 0x2018 # LEFT SINGLE QUOTATION MARK 0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK 0xD6 0x00F7 # DIVISION SIGN 0xD7 0x25CA # LOZENGE 0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS 0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS 0xDA 0x2044 # FRACTION SLASH 0xDB 0x20AC # EURO SIGN 0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0xDE 0xFB01 # LATIN SMALL LIGATURE FI 0xDF 0xFB02 # LATIN SMALL LIGATURE FL 0xE0 0x2021 # DOUBLE DAGGER 0xE1 0x00B7 # MIDDLE DOT 0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK |
| ︙ | ︙ |
Changes to tools/encoding/macTurkish.txt.
1 | # | > > > > > > | > > > | > > | | > > > > > | < > > | | | > | | < < > > > | | | | | | | < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | < < < | < < < > | < < | 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 | #======================================================================= # FTP file name: TURKISH.TXT # # Contents: Map (external version) from Mac OS Turkish # character set to Unicode 2.1 # # Copyright: (c) 1995-1999 by Apple Computer, Inc., all rights # reserved. # # Contact: charsets@apple.com # # Changes: # # b02 1999-Sep-22 Update contact e-mail address. Matches # internal utom<b1>, ufrm<b1>, and Text # Encoding Converter version 1.5. # n05 1998-Feb-05 Minor update to header comments # n03 1997-Dec-14 Update to match internal utom<n5>, ufrm<n15>: # Change standard mapping for 0xBD from U+2126 # to its canonical decomposition, U+03A9. # n02 1995-Apr-15 First version (after fixing some typos). # Matches internal ufrm<n4>. # # Standard header: # ---------------- # # Apple, the Apple logo, and Macintosh are trademarks of Apple # Computer, Inc., registered in the United States and other countries. # Unicode is a trademark of Unicode Inc. For the sake of brevity, # throughout this document, "Macintosh" can be used to refer to # Macintosh computers and "Unicode" can be used to refer to the # Unicode standard. # # Apple makes no warranty or representation, either express or # implied, with respect to these tables, their quality, accuracy, or # fitness for a particular purpose. In no event will Apple be liable # for direct, indirect, special, incidental, or consequential damages # resulting from any defect or inaccuracy in this document or the # accompanying tables. # # These mapping tables and character lists are subject to change. # The latest tables should be available from the following: # # <ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> # <ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/> # # For general information about Mac OS encodings and these mapping # tables, see the file "README.TXT". # # Format: # ------- # # Three tab-separated columns; # '#' begins a comment which continues to the end of the line. # Column #1 is the Mac OS Turkish code (in hex as 0xNN) # Column #2 is the corresponding Unicode (in hex as 0xNNNN) # Column #3 is a comment containing the Unicode name # # The entries are in Mac OS Turkish code order. # # Two of these mappings requires the use of a corporate character. # See the file "CORPCHAR.TXT" and notes below. # # Control character mappings are not shown in this table, following # the conventions of the standard UTC mapping tables. However, the # Mac OS Roman character set uses the standard control characters at # 0x00-0x1F and 0x7F. # # Notes on Mac OS Turkish: # ------------------------ # # Mac OS Turkish is used for Turkish. # # The Mac OS Turkish encoding shares the script code smRoman # (0) with the Mac OS Roman encoding. To determine if the Turkish # encoding is being used, you must also check if the system region # code is 24, verTurkey. # # This character set is a variant of standard Mac OS Roman. It adds # upper & lower G with breve, upper & lower S with cedilla, upper I # with dot, and moves the dotless lower i from its position at 0xF5 # in standard Mac OS Roman to a position at 0xDD here (leaving the # 0xF5 code point undefined in Mac OS Turkish). This gives a total # of 7 code point differences from standard Mac OS Roman. # # Unicode mapping issues and notes: # --------------------------------- # # The following corporate zone Unicode characters are used in this # mapping: # # 0xF8A0 undefined1, used to map the single undefined code point # in Mac OS Turkish and Greek (to obtain roundtrip # fidelity for all code points). # 0xF8FF Apple logo # # NOTE: The graphic image associated with the Apple logo character # is not authorized for use without permission of Apple, and # unauthorized use might constitute trademark infringement. # # Details of mapping changes in each version: # ------------------------------------------- # # Changes from version n02 to version n03: # # - Change mapping of 0xBD from U+2126 to its canonical # decomposition, U+03A9. # ################## 0x20 0x0020 # SPACE 0x21 0x0021 # EXCLAMATION MARK 0x22 0x0022 # QUOTATION MARK 0x23 0x0023 # NUMBER SIGN |
| ︙ | ︙ | |||
201 202 203 204 205 206 207 | 0xA7 0x00DF # LATIN SMALL LETTER SHARP S 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x2122 # TRADE MARK SIGN 0xAB 0x00B4 # ACUTE ACCENT 0xAC 0x00A8 # DIAERESIS 0xAD 0x2260 # NOT EQUAL TO | | | | | 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 | 0xA7 0x00DF # LATIN SMALL LETTER SHARP S 0xA8 0x00AE # REGISTERED SIGN 0xA9 0x00A9 # COPYRIGHT SIGN 0xAA 0x2122 # TRADE MARK SIGN 0xAB 0x00B4 # ACUTE ACCENT 0xAC 0x00A8 # DIAERESIS 0xAD 0x2260 # NOT EQUAL TO 0xAE 0x00C6 # LATIN CAPITAL LETTER AE 0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE 0xB0 0x221E # INFINITY 0xB1 0x00B1 # PLUS-MINUS SIGN 0xB2 0x2264 # LESS-THAN OR EQUAL TO 0xB3 0x2265 # GREATER-THAN OR EQUAL TO 0xB4 0x00A5 # YEN SIGN 0xB5 0x00B5 # MICRO SIGN 0xB6 0x2202 # PARTIAL DIFFERENTIAL 0xB7 0x2211 # N-ARY SUMMATION 0xB8 0x220F # N-ARY PRODUCT 0xB9 0x03C0 # GREEK SMALL LETTER PI 0xBA 0x222B # INTEGRAL 0xBB 0x00AA # FEMININE ORDINAL INDICATOR 0xBC 0x00BA # MASCULINE ORDINAL INDICATOR 0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA 0xBE 0x00E6 # LATIN SMALL LETTER AE 0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE 0xC0 0x00BF # INVERTED QUESTION MARK 0xC1 0x00A1 # INVERTED EXCLAMATION MARK 0xC2 0x00AC # NOT SIGN 0xC3 0x221A # SQUARE ROOT 0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK 0xC5 0x2248 # ALMOST EQUAL TO |
| ︙ | ︙ |
Added tools/encoding/tis-620.txt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # version: 1.0 # repertoiremap: mnemonic,th # sources: Thai Industrial Standards Institute, ECMA registry, IANA # alias TIS620 # alias TIS620-0 # alias TIS620.2529-1 # alias TIS620.2533-0 # alias ISO-IR-1660x00 0x0000 #NULL (NUL) 0x01 0x0001 #START OF HEADING (SOH) 0x02 0x0002 #START OF TEXT (STX) 0x03 0x0003 #END OF TEXT (ETX) 0x04 0x0004 #END OF TRANSMISSION (EOT) 0x05 0x0005 #ENQUIRY (ENQ) 0x06 0x0006 #ACKNOWLEDGE (ACK) 0x07 0x0007 #BELL (BEL) 0x08 0x0008 #BACKSPACE (BS) 0x09 0x0009 #CHARACTER TABULATION (HT) 0x0A 0x000A #LINE FEED (LF) 0x0B 0x000B #LINE TABULATION (VT) 0x0C 0x000C #FORM FEED (FF) 0x0D 0x000D #CARRIAGE RETURN (CR) 0x0E 0x000E #SHIFT OUT (SO) 0x0F 0x000F #SHIFT IN (SI) 0x10 0x0010 #DATALINK ESCAPE (DLE) 0x11 0x0011 #DEVICE CONTROL ONE (DC1) 0x12 0x0012 #DEVICE CONTROL TWO (DC2) 0x13 0x0013 #DEVICE CONTROL THREE (DC3) 0x14 0x0014 #DEVICE CONTROL FOUR (DC4) 0x15 0x0015 #NEGATIVE ACKNOWLEDGE (NAK) 0x16 0x0016 #SYNCHRONOUS IDLE (SYN) 0x17 0x0017 #END OF TRANSMISSION BLOCK (ETB) 0x18 0x0018 #CANCEL (CAN) 0x19 0x0019 #END OF MEDIUM (EM) 0x1A 0x001A #SUBSTITUTE (SUB) 0x1B 0x001B #ESCAPE (ESC) 0x1C 0x001C #FILE SEPARATOR (IS4) 0x1D 0x001D #GROUP SEPARATOR (IS3) 0x1E 0x001E #RECORD SEPARATOR (IS2) 0x1F 0x001F #UNIT SEPARATOR (IS1) 0x20 0x0020 #SPACE 0x21 0x0021 #EXCLAMATION MARK 0x22 0x0022 #QUOTATION MARK 0x23 0x0023 #NUMBER SIGN 0x24 0x0024 #DOLLAR SIGN 0x25 0x0025 #PERCENT SIGN 0x26 0x0026 #AMPERSAND 0x27 0x0027 #APOSTROPHE 0x28 0x0028 #LEFT PARENTHESIS 0x29 0x0029 #RIGHT PARENTHESIS 0x2A 0x002A #ASTERISK 0x2B 0x002B #PLUS SIGN 0x2C 0x002C #COMMA 0x2D 0x002D #HYPHEN-MINUS 0x2E 0x002E #FULL STOP 0x2F 0x002F #SOLIDUS 0x30 0x0030 #DIGIT ZERO 0x31 0x0031 #DIGIT ONE 0x32 0x0032 #DIGIT TWO 0x33 0x0033 #DIGIT THREE 0x34 0x0034 #DIGIT FOUR 0x35 0x0035 #DIGIT FIVE 0x36 0x0036 #DIGIT SIX 0x37 0x0037 #DIGIT SEVEN 0x38 0x0038 #DIGIT EIGHT 0x39 0x0039 #DIGIT NINE 0x3A 0x003A #COLON 0x3B 0x003B #SEMICOLON 0x3C 0x003C #LESS-THAN SIGN 0x3D 0x003D #EQUALS SIGN 0x3E 0x003E #GREATER-THAN SIGN 0x3F 0x003F #QUESTION MARK 0x40 0x0040 #COMMERCIAL AT 0x41 0x0041 #LATIN CAPITAL LETTER A 0x42 0x0042 #LATIN CAPITAL LETTER B 0x43 0x0043 #LATIN CAPITAL LETTER C 0x44 0x0044 #LATIN CAPITAL LETTER D 0x45 0x0045 #LATIN CAPITAL LETTER E 0x46 0x0046 #LATIN CAPITAL LETTER F 0x47 0x0047 #LATIN CAPITAL LETTER G 0x48 0x0048 #LATIN CAPITAL LETTER H 0x49 0x0049 #LATIN CAPITAL LETTER I 0x4A 0x004A #LATIN CAPITAL LETTER J 0x4B 0x004B #LATIN CAPITAL LETTER K 0x4C 0x004C #LATIN CAPITAL LETTER L 0x4D 0x004D #LATIN CAPITAL LETTER M 0x4E 0x004E #LATIN CAPITAL LETTER N 0x4F 0x004F #LATIN CAPITAL LETTER O 0x50 0x0050 #LATIN CAPITAL LETTER P 0x51 0x0051 #LATIN CAPITAL LETTER Q 0x52 0x0052 #LATIN CAPITAL LETTER R 0x53 0x0053 #LATIN CAPITAL LETTER S 0x54 0x0054 #LATIN CAPITAL LETTER T 0x55 0x0055 #LATIN CAPITAL LETTER U 0x56 0x0056 #LATIN CAPITAL LETTER V 0x57 0x0057 #LATIN CAPITAL LETTER W 0x58 0x0058 #LATIN CAPITAL LETTER X 0x59 0x0059 #LATIN CAPITAL LETTER Y 0x5A 0x005A #LATIN CAPITAL LETTER Z 0x5B 0x005B #LEFT SQUARE BRACKET 0x5C 0x005C #REVERSE SOLIDUS 0x5D 0x005D #RIGHT SQUARE BRACKET 0x5E 0x005E #CIRCUMFLEX ACCENT 0x5F 0x005F #LOW LINE 0x60 0x0060 #GRAVE ACCENT 0x61 0x0061 #LATIN SMALL LETTER A 0x62 0x0062 #LATIN SMALL LETTER B 0x63 0x0063 #LATIN SMALL LETTER C 0x64 0x0064 #LATIN SMALL LETTER D 0x65 0x0065 #LATIN SMALL LETTER E 0x66 0x0066 #LATIN SMALL LETTER F 0x67 0x0067 #LATIN SMALL LETTER G 0x68 0x0068 #LATIN SMALL LETTER H 0x69 0x0069 #LATIN SMALL LETTER I 0x6A 0x006A #LATIN SMALL LETTER J 0x6B 0x006B #LATIN SMALL LETTER K 0x6C 0x006C #LATIN SMALL LETTER L 0x6D 0x006D #LATIN SMALL LETTER M 0x6E 0x006E #LATIN SMALL LETTER N 0x6F 0x006F #LATIN SMALL LETTER O 0x70 0x0070 #LATIN SMALL LETTER P 0x71 0x0071 #LATIN SMALL LETTER Q 0x72 0x0072 #LATIN SMALL LETTER R 0x73 0x0073 #LATIN SMALL LETTER S 0x74 0x0074 #LATIN SMALL LETTER T 0x75 0x0075 #LATIN SMALL LETTER U 0x76 0x0076 #LATIN SMALL LETTER V 0x77 0x0077 #LATIN SMALL LETTER W 0x78 0x0078 #LATIN SMALL LETTER X 0x79 0x0079 #LATIN SMALL LETTER Y 0x7A 0x007A #LATIN SMALL LETTER Z 0x7B 0x007B #LEFT CURLY BRACKET 0x7C 0x007C #VERTICAL LINE 0x7D 0x007D #RIGHT CURLY BRACKET 0x7E 0x007E #TILDE 0x7F 0x007F #DELETE (DEL) 0x80 #UNDEFINED 0x81 #UNDEFINED 0x82 #UNDEFINED 0x83 #UNDEFINED 0x84 #UNDEFINED 0x85 #UNDEFINED 0x86 #UNDEFINED 0x87 #UNDEFINED 0x88 #UNDEFINED 0x89 #UNDEFINED 0x8A #UNDEFINED 0x8B #UNDEFINED 0x8C #UNDEFINED 0x8D #UNDEFINED 0x8E #UNDEFINED 0x8F #UNDEFINED 0x90 #UNDEFINED 0x91 #UNDEFINED 0x92 #UNDEFINED 0x93 #UNDEFINED 0x94 #UNDEFINED 0x95 #UNDEFINED 0x96 #UNDEFINED 0x97 #UNDEFINED 0x98 #UNDEFINED 0x99 #UNDEFINED 0x9A #UNDEFINED 0x9B #UNDEFINED 0x9C #UNDEFINED 0x9D #UNDEFINED 0x9E #UNDEFINED 0x9F #UNDEFINED 0xA0 #UNDEFINED 0xA1 0x0E01 #THAI CHARACTER KO KAI 0xA2 0x0E02 #THAI CHARACTER KHO KHAI 0xA3 0x0E03 #THAI CHARACTER KHO KHUAT 0xA4 0x0E04 #THAI CHARACTER KHO KHWAI 0xA5 0x0E05 #THAI CHARACTER KHO KHON 0xA6 0x0E06 #THAI CHARACTER KHO RAKHANG 0xA7 0x0E07 #THAI CHARACTER NGO NGU 0xA8 0x0E08 #THAI CHARACTER CHO CHAN 0xA9 0x0E09 #THAI CHARACTER CHO CHING 0xAA 0x0E0A #THAI CHARACTER CHO CHANG 0xAB 0x0E0B #THAI CHARACTER SO SO 0xAC 0x0E0C #THAI CHARACTER CHO CHOE 0xAD 0x0E0D #THAI CHARACTER YO YING 0xAE 0x0E0E #THAI CHARACTER DO CHADA 0xAF 0x0E0F #THAI CHARACTER TO PATAK 0xB0 0x0E10 #THAI CHARACTER THO THAN 0xB1 0x0E11 #THAI CHARACTER THO NANGMONTHO 0xB2 0x0E12 #THAI CHARACTER THO PHUTHAO 0xB3 0x0E13 #THAI CHARACTER NO NEN 0xB4 0x0E14 #THAI CHARACTER DO DEK 0xB5 0x0E15 #THAI CHARACTER TO TAO 0xB6 0x0E16 #THAI CHARACTER THO THUNG 0xB7 0x0E17 #THAI CHARACTER THO THAHAN 0xB8 0x0E18 #THAI CHARACTER THO THONG 0xB9 0x0E19 #THAI CHARACTER NO NU 0xBA 0x0E1A #THAI CHARACTER BO BAIMAI 0xBB 0x0E1B #THAI CHARACTER PO PLA 0xBC 0x0E1C #THAI CHARACTER PHO PHUNG 0xBD 0x0E1D #THAI CHARACTER FO FA 0xBE 0x0E1E #THAI CHARACTER PHO PHAN 0xBF 0x0E1F #THAI CHARACTER FO FAN 0xC0 0x0E20 #THAI CHARACTER PHO SAMPHAO 0xC1 0x0E21 #THAI CHARACTER MO MA 0xC2 0x0E22 #THAI CHARACTER YO YAK 0xC3 0x0E23 #THAI CHARACTER RO RUA 0xC4 0x0E24 #THAI CHARACTER RU 0xC5 0x0E25 #THAI CHARACTER LO LING 0xC6 0x0E26 #THAI CHARACTER LU 0xC7 0x0E27 #THAI CHARACTER WO WAEN 0xC8 0x0E28 #THAI CHARACTER SO SALA 0xC9 0x0E29 #THAI CHARACTER SO RUSI 0xCA 0x0E2A #THAI CHARACTER SO SUA 0xCB 0x0E2B #THAI CHARACTER HO HIP 0xCC 0x0E2C #THAI CHARACTER LO CHULA 0xCD 0x0E2D #THAI CHARACTER O ANG 0xCE 0x0E2E #THAI CHARACTER HO NOKHUK 0xCF 0x0E2F #THAI CHARACTER PAIYANNOI 0xD0 0x0E30 #THAI CHARACTER SARA A 0xD1 0x0E31 #THAI CHARACTER MAI HAN-AKAT 0xD2 0x0E32 #THAI CHARACTER SARA AA 0xD3 0x0E33 #THAI CHARACTER SARA AM 0xD4 0x0E34 #THAI CHARACTER SARA I 0xD5 0x0E35 #THAI CHARACTER SARA II 0xD6 0x0E36 #THAI CHARACTER SARA UE 0xD7 0x0E37 #THAI CHARACTER SARA UEE 0xD8 0x0E38 #THAI CHARACTER SARA U 0xD9 0x0E39 #THAI CHARACTER SARA UU 0xDA 0x0E3A #THAI CHARACTER PHINTHU 0xDB #UNDEFINED 0xDC #UNDEFINED 0xDD #UNDEFINED 0xDE #UNDEFINED 0xDF 0x0E3F #THAI CHARACTER SYMBOL BAHT 0xE0 0x0E40 #THAI CHARACTER SARA E 0xE1 0x0E41 #THAI CHARACTER SARA AE 0xE2 0x0E42 #THAI CHARACTER SARA O 0xE3 0x0E43 #THAI CHARACTER SARA AI MAIMUAN 0xE4 0x0E44 #THAI CHARACTER SARA AI MAIMALAI 0xE5 0x0E45 #THAI CHARACTER LAKKHANGYAO 0xE6 0x0E46 #THAI CHARACTER MAIYAMOK 0xE7 0x0E47 #THAI CHARACTER MAITAIKHU 0xE8 0x0E48 #THAI CHARACTER MAI EK 0xE9 0x0E49 #THAI CHARACTER MAI THO 0xEA 0x0E4A #THAI CHARACTER MAI TRI 0xEB 0x0E4B #THAI CHARACTER MAI CHATTAWA 0xEC 0x0E4C #THAI CHARACTER THANTHAKHAT 0xED 0x0E4D #THAI CHARACTER NIKHAHIT 0xEE 0x0E4E #THAI CHARACTER YAMAKKAN 0xEF 0x0E4F #THAI CHARACTER FONGMAN 0xF0 0x0E50 #THAI DIGIT ZERO 0xF1 0x0E51 #THAI DIGIT ONE 0xF2 0x0E52 #THAI DIGIT TWO 0xF3 0x0E53 #THAI DIGIT THREE 0xF4 0x0E54 #THAI DIGIT FOUR 0xF5 0x0E55 #THAI DIGIT FIVE 0xF6 0x0E56 #THAI DIGIT SIX 0xF7 0x0E57 #THAI DIGIT SEVEN 0xF8 0x0E58 #THAI DIGIT EIGHT 0xF9 0x0E59 #THAI DIGIT NINE 0xFA 0x0E5A #THAI CHARACTER ANGKHANKHU 0xFB 0x0E5B #THAI CHARACTER KHOMUT 0xFC #UNDEFINED 0xFD #UNDEFINED 0xFE #UNDEFINED 0xFF #UNDEFINED |
Changes to tools/genStubs.tcl.
1 2 3 4 5 6 7 8 9 10 | # genStubs.tcl -- # # This script generates a set of stub files for a given # interface. # # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# genStubs.tcl --
#
# This script generates a set of stub files for a given
# interface.
#
#
# Copyright (c) 1998-1999 by Scriptics Corporation.
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: genStubs.tcl,v 1.7.10.1 2001/08/24 16:19:10 dgp Exp $
package require Tcl 8
namespace eval genStubs {
# libraryName --
#
# The name of the entire library. This value is used to compute
# the USE_*_STUB_PROCS macro and the name of the init file.
|
| ︙ | ︙ |
Changes to tools/man2help.tcl.
1 2 3 4 5 6 7 8 | # man2help.tcl -- # # This file defines procedures that work in conjunction with the # man2tcl program to generate a Windows help file from Tcl manual # entries. # # Copyright (c) 1996 by Sun Microsystems, Inc. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# man2help.tcl --
#
# This file defines procedures that work in conjunction with the
# man2tcl program to generate a Windows help file from Tcl manual
# entries.
#
# Copyright (c) 1996 by Sun Microsystems, Inc.
#
# RCS: @(#) $Id: man2help.tcl,v 1.6.2.1 2001/04/03 22:54:38 hobbs Exp $
#
#
# PASS 1
#
proc generateContents {basename version files} {
|
| ︙ | ︙ | |||
94 95 96 97 98 99 100 |
# that directory.
#
# Arguments:
# dir - Name of the directory.
proc doDir dir {
puts "Generating man pages for $dir..."
| | | | 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 |
# that directory.
#
# Arguments:
# dir - Name of the directory.
proc doDir dir {
puts "Generating man pages for $dir..."
foreach f [lsort [glob -directory $dir "*.\[13n\]"]] {
do $f
}
}
# process command line arguments
if {$argc < 3} {
puts stderr "usage: $argv0 projectName version manFiles..."
exit 1
}
set baseName [lindex $argv 0]
set version [lindex $argv 1]
set files {}
foreach i [lrange $argv 2 end] {
set i [file join $i]
if {[file isdir $i]} {
foreach f [lsort [glob -directory $i "*.\[13n\]"]] {
lappend files $f
}
} elseif {[file exists $i]} {
lappend files $i
}
}
source [file join [file dir $argv0] index.tcl]
generateContents $baseName $version $files
source [file join [file dir $argv0] man2help2.tcl]
generateHelp $baseName $files
|
Changes to tools/man2html.tcl.
| ︙ | ︙ | |||
71 72 73 74 75 76 77 |
# Given a directory as argument, translate all the man pages in
# that directory.
#
# Arguments:
# dir - Name of the directory.
proc doDir dir {
| | | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# Given a directory as argument, translate all the man pages in
# that directory.
#
# Arguments:
# dir - Name of the directory.
proc doDir dir {
foreach f [lsort [glob -directory $dir "*.\[13n\]"]] {
do $f ;# defined in man2html1.tcl & man2html2.tcl
}
}
if {$argc < 2} {
puts stderr "usage: $argv0 html_dir tcl_dir packages..."
|
| ︙ | ︙ |
Changes to tools/tcl.hpj.in.
1 2 3 4 5 6 7 8 | ; This file is maintained by HCW. Do not modify this file directly. [OPTIONS] HCW=0 LCID=0x409 0x0 0x0 ;English (United States) REPORT=Yes TITLE=Tcl/Tk Reference Manual CNT=tcl83.cnt | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ; This file is maintained by HCW. Do not modify this file directly. [OPTIONS] HCW=0 LCID=0x409 0x0 0x0 ;English (United States) REPORT=Yes TITLE=Tcl/Tk Reference Manual CNT=tcl83.cnt COPYRIGHT=Copyright © 2001 ActiveState Corporation HLP=tcl83.hlp [FILES] tcl.rtf [WINDOWS] main="Tcl/Tk Reference Manual",,0 |
| ︙ | ︙ |
Changes to tools/tcl.wse.in.
| ︙ | ︙ | |||
8 9 10 11 12 13 14 | Japanese Font Size=10 Start Gradient=0 0 255 End Gradient=0 0 0 Windows Flags=00000000000000010010110000001000 Log Pathname=%MAINDIR%\INSTALL.LOG Message Font=MS Sans Serif Font Size=8 | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Japanese Font Size=10 Start Gradient=0 0 255 End Gradient=0 0 0 Windows Flags=00000000000000010010110000001000 Log Pathname=%MAINDIR%\INSTALL.LOG Message Font=MS Sans Serif Font Size=8 Disk Label=tcl8.3.4 Disk Filename=setup Patch Flags=0000000000000001 Patch Threshold=85 Patch Memory=4000 Variable Name1=_SYS_ Variable Default1=C:\WINDOWS\SYSTEM Variable Flags1=00001000 |
| ︙ | ︙ | |||
50 51 52 53 54 55 56 | end item: Set Variable Variable=APPTITLE Value=Tcl/Tk %PATCHLEVEL% for Windows end item: Set Variable Variable=URL | | | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | end item: Set Variable Variable=APPTITLE Value=Tcl/Tk %PATCHLEVEL% for Windows end item: Set Variable Variable=URL Value=http://www.tcl-tk.net/ end item: Set Variable Variable=GROUP Value=Tcl end item: Set Variable Variable=DISABLED |
| ︙ | ︙ | |||
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 |
Flags=0000000000000010
end
item: Install File
Source=${__TKBASEDIR__}\generic\tkDecls.h
Destination=%MAINDIR%\include\tkDecls.h
Flags=0000000000000010
end
item: Install File
Source=${__TKBASEDIR__}\generic\tkIntXlibDecls.h
Destination=%MAINDIR%\include\tkIntXlibDecls.h
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\generic\tcl.h
Destination=%MAINDIR%\include\tcl.h
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\generic\tclDecls.h
Destination=%MAINDIR%\include\tclDecls.h
Flags=0000000000000010
end
item: End Block
end
item: If/While Statement
Variable=COMPONENTS
Value=A
Flags=00001010
end
item: Install File
| > > > > > > > > > > | | | | | 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 |
Flags=0000000000000010
end
item: Install File
Source=${__TKBASEDIR__}\generic\tkDecls.h
Destination=%MAINDIR%\include\tkDecls.h
Flags=0000000000000010
end
item: Install File
Source=${__TKBASEDIR__}\generic\tkPlatDecls.h
Destination=%MAINDIR%\include\tkPlatDecls.h
Flags=0000000000000010
end
item: Install File
Source=${__TKBASEDIR__}\generic\tkIntXlibDecls.h
Destination=%MAINDIR%\include\tkIntXlibDecls.h
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\generic\tcl.h
Destination=%MAINDIR%\include\tcl.h
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\generic\tclDecls.h
Destination=%MAINDIR%\include\tclDecls.h
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\generic\tclPlatDecls.h
Destination=%MAINDIR%\include\tclPlatDecls.h
Flags=0000000000000010
end
item: End Block
end
item: If/While Statement
Variable=COMPONENTS
Value=A
Flags=00001010
end
item: Install File
Source=${__TCLBASEDIR__}\library\msgcat\pkgIndex.tcl
Destination=%MAINDIR%\lib\tcl%VER%\msgcat1.1\pkgIndex.tcl
Flags=0000000010000010
end
item: Install File
Source=${__TCLBASEDIR__}\library\msgcat\msgcat.tcl
Destination=%MAINDIR%\lib\tcl%VER%\msgcat1.1\msgcat.tcl
Flags=0000000010000010
end
item: Install File
Source=${__TCLBASEDIR__}\library\tcltest1.0\pkgIndex.tcl
Destination=%MAINDIR%\lib\tcl%VER%\tcltest1.0\pkgIndex.tcl
Flags=0000000000000010
end
|
| ︙ | ︙ | |||
1413 1414 1415 1416 1417 1418 1419 |
end
item: Install File
Source=${__TCLBASEDIR__}\library\encoding\big5.enc
Destination=%MAINDIR%\lib\tcl%VER%\encoding\big5.enc
Flags=0000000000000010
end
item: Install File
| | | | | | | | 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 |
end
item: Install File
Source=${__TCLBASEDIR__}\library\encoding\big5.enc
Destination=%MAINDIR%\lib\tcl%VER%\encoding\big5.enc
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\library\opt\pkgIndex.tcl
Destination=%MAINDIR%\lib\tcl%VER%\opt0.4\pkgIndex.tcl
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\library\opt\optparse.tcl
Destination=%MAINDIR%\lib\tcl%VER%\opt0.4\optparse.tcl
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\library\http\pkgIndex.tcl
Destination=%MAINDIR%\lib\tcl%VER%\http2.4\pkgIndex.tcl
Flags=0000000000000010
end
item: Install File
Source=${__TCLBASEDIR__}\library\http\http.tcl
Destination=%MAINDIR%\lib\tcl%VER%\http2.4\http.tcl
Flags=0000000000000010
end
item: Install File
Source=${__TKBASEDIR__}\library\msgbox.tcl
Destination=%MAINDIR%\lib\tk%VER%\msgbox.tcl
Flags=0000000000000010
end
|
| ︙ | ︙ | |||
2024 2025 2026 2027 2028 2029 2030 | end item: Set Variable Variable=MAINDIR Value=%MAINDIR% Flags=00010100 end item: Include Script | | | 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 | end item: Set Variable Variable=MAINDIR Value=%MAINDIR% Flags=00010100 end item: Include Script Pathname=D:\win32-ix86\wise\INCLUDE\uninstal.wse end item: Check Configuration Flags=10111011 end item: Get Registry Key Value Variable=GROUPDIR Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders |
| ︙ | ︙ | |||
2206 2207 2208 2209 2210 2211 2212 | end item: Add Directory to Path Directory=%MAINDIR%\bin end item: Check Configuration Flags=10111011 end | < < < < < < < < < | 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 | end item: Add Directory to Path Directory=%MAINDIR%\bin end item: Check Configuration Flags=10111011 end item: End Block end item: Wizard Block Direction Variable=DIRECTION Display Variable=DISPLAY Bitmap Pathname=%_WISE_%\DIALOGS\TEMPLATE\WIZARD.BMP X Position=9 |
| ︙ | ︙ | |||
2313 2314 2315 2316 2317 2318 2319 |
Text Spanish=%APPTITLE% se ha instalado con éxito.
Text Spanish=
Text Spanish=Presione el botón Terminar para salir de esta instalación.
Text Italian=L'installazione %APPTITLE% è stata portata a termine con successo.
Text Italian=
Text Italian=Premere il pulsante Fine per uscire dall'installazione.
end
| < < < < < < < < < < < < < < < < < < < < < < < < | 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 |
Text Spanish=%APPTITLE% se ha instalado con éxito.
Text Spanish=
Text Spanish=Presione el botón Terminar para salir de esta instalación.
Text Italian=L'installazione %APPTITLE% è stata portata a termine con successo.
Text Italian=
Text Italian=Premere il pulsante Fine per uscire dall'installazione.
end
end
end
item: End Block
end
item: Check Configuration
Flags=10111011
end
item: Execute Program
Pathname=explorer
Command Line=%GROUP%
end
item: End Block
end
|
Changes to tools/tclSplash.bmp.
cannot compute difference between binary files
Changes to tools/tclmin.wse.
| ︙ | ︙ | |||
32 33 34 35 36 37 38 | end item: Install File Source=n:\dist\tcl8.0\library\opt0.4\optparse.tcl Destination=%MAINDIR%\lib\tcl%VER%\opt0.4\optparse.tcl Flags=0000000000000010 end item: Install File | | | | | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | end item: Install File Source=n:\dist\tcl8.0\library\opt0.4\optparse.tcl Destination=%MAINDIR%\lib\tcl%VER%\opt0.4\optparse.tcl Flags=0000000000000010 end item: Install File Source=n:\dist\tcl8.0\library\http\pkgIndex.tcl Destination=%MAINDIR%\lib\tcl%VER%\http2.4\pkgIndex.tcl Flags=0000000000000010 end item: Install File Source=n:\dist\tcl8.0\library\http\http.tcl Destination=%MAINDIR%\lib\tcl%VER%\http2.4\http.tcl Flags=0000000000000010 end item: Install File Source=n:\dist\tcl8.0\library\safe.tcl Destination=%MAINDIR%\lib\tcl%VER%\safe.tcl Flags=0000000000000010 end |
| ︙ | ︙ |
Changes to unix/Makefile.in.
1 2 3 4 5 6 7 | # # This file is a Makefile for Tcl. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # # This file is a Makefile for Tcl. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # # RCS: @(#) $Id: Makefile.in,v 1.63.2.9 2001/10/16 23:53:21 dgp Exp $ VERSION = @TCL_VERSION@ #---------------------------------------------------------------- # Things you can change to personalize the Makefile for your own # site (you can make these changes in either Makefile.in or # Makefile, but changes to Makefile will get lost if you re-run |
| ︙ | ︙ | |||
83 84 85 86 87 88 89 | CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@ # To change the compiler switches, for example to change from optimization to # debugging symbols, change the following line: #CFLAGS = $(CFLAGS_DEBUG) #CFLAGS = $(CFLAGS_OPTIMIZE) #CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE) | | > > > > > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@ # To change the compiler switches, for example to change from optimization to # debugging symbols, change the following line: #CFLAGS = $(CFLAGS_DEBUG) #CFLAGS = $(CFLAGS_OPTIMIZE) #CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE) CFLAGS = @CFLAGS@ @CFLAGS_DEFAULT@ # Flags to pass to the linker LDFLAGS_DEBUG = @LDFLAGS_DEBUG@ LDFLAGS_OPTIMIZE = @LDFLAGS_OPTIMIZE@ LDFLAGS = @LDFLAGS@ @LDFLAGS_DEFAULT@ # To disable ANSI-C procedure prototypes reverse the comment characters # on the following lines: PROTO_FLAGS = #PROTO_FLAGS = -DNO_PROTOTYPE # Mathematical functions like sin and atan2 are enabled for expressions |
| ︙ | ︙ | |||
129 130 131 132 133 134 135 | # lines. Warning: if you enable memory debugging, you must do it # *everywhere*, including all the code that calls Tcl, and you must use # ckalloc and ckfree everywhere instead of malloc and free. MEM_DEBUG_FLAGS = #MEM_DEBUG_FLAGS = -DTCL_MEM_DEBUG # To enable support for stubs in Tcl. | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | # lines. Warning: if you enable memory debugging, you must do it # *everywhere*, including all the code that calls Tcl, and you must use # ckalloc and ckfree everywhere instead of malloc and free. MEM_DEBUG_FLAGS = #MEM_DEBUG_FLAGS = -DTCL_MEM_DEBUG # To enable support for stubs in Tcl. STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ #TCL_STUB_LIB_FILE = libtclstub.a TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@ #TCL_STUB_LIB_FLAG = -ltclstub |
| ︙ | ︙ | |||
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
SHELL = /bin/sh
# Tcl used to let the configure script choose which program to use
# for installing, but there are just too many different versions of
# "install" around; better to use the install-sh script that comes
# with the distribution, which is slower but guaranteed to work.
INSTALL = @srcdir@/install-sh -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
# The following specifies which Tcl executable to use for make targets
# below. This can generally be 'tclsh', meaning all targets will work
# once we have created the initial executable, but in some cases you
# may want to use a target without having made tclsh on these sources
# (like for make genstubs)
| > > > > | 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
SHELL = /bin/sh
# Tcl used to let the configure script choose which program to use
# for installing, but there are just too many different versions of
# "install" around; better to use the install-sh script that comes
# with the distribution, which is slower but guaranteed to work.
INSTALL_STRIP_PROGRAM = -s
INSTALL_STRIP_LIBRARY = -S -S
INSTALL = @srcdir@/install-sh -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_LIBRARY = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
# The following specifies which Tcl executable to use for make targets
# below. This can generally be 'tclsh', meaning all targets will work
# once we have created the initial executable, but in some cases you
# may want to use a target without having made tclsh on these sources
# (like for make genstubs)
|
| ︙ | ︙ | |||
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | # Makefile is generated from Makefile.in. You shouldn't normally # modify any of this stuff by hand. #---------------------------------------------------------------- COMPAT_OBJS = @LIBOBJS@ AC_FLAGS = @EXTRA_CFLAGS@ @DEFS@ RANLIB = @RANLIB@ SRC_DIR = @srcdir@ TOP_DIR = @srcdir@/.. GENERIC_DIR = $(TOP_DIR)/generic COMPAT_DIR = $(TOP_DIR)/compat TOOL_DIR = $(TOP_DIR)/tools UNIX_DIR = $(TOP_DIR)/unix # Must be absolute because of the cd dltest $(DLTEST_DIR)/configure below. DLTEST_DIR = @TCL_SRC_DIR@/unix/dltest # Must be absolute to so the corresponding tcltest's tcl_library is absolute. TCL_BUILDTIME_LIBRARY = @TCL_SRC_DIR@/library | > < > | | | | 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 |
# Makefile is generated from Makefile.in. You shouldn't normally
# modify any of this stuff by hand.
#----------------------------------------------------------------
COMPAT_OBJS = @LIBOBJS@
AC_FLAGS = @EXTRA_CFLAGS@ @DEFS@
AR = @AR@
RANLIB = @RANLIB@
SRC_DIR = @srcdir@
TOP_DIR = @srcdir@/..
GENERIC_DIR = $(TOP_DIR)/generic
COMPAT_DIR = $(TOP_DIR)/compat
TOOL_DIR = $(TOP_DIR)/tools
UNIX_DIR = $(TOP_DIR)/unix
# Must be absolute because of the cd dltest $(DLTEST_DIR)/configure below.
DLTEST_DIR = @TCL_SRC_DIR@/unix/dltest
# Must be absolute to so the corresponding tcltest's tcl_library is absolute.
TCL_BUILDTIME_LIBRARY = @TCL_SRC_DIR@/library
CC = @CC@
#CC = purify -best-effort @CC@ -DPURIFY
#----------------------------------------------------------------
# The information below should be usable as is. The configure
# script won't modify it and you shouldn't need to modify it
# either.
#----------------------------------------------------------------
CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${SHLIB_CFLAGS} \
-I${GENERIC_DIR} -I${SRC_DIR} \
${AC_FLAGS} ${MATH_FLAGS} ${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
${COMPILE_DEBUG_FLAGS} ${NO_DEPRECATED_FLAGS} ${ENV_FLAGS} \
-DTCL_SHLIB_EXT=\"${SHLIB_SUFFIX}\"
STUB_CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${SHLIB_CFLAGS} \
-I${GENERIC_DIR} -I${SRC_DIR} \
${AC_FLAGS} ${MATH_FLAGS} ${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
${COMPILE_DEBUG_FLAGS} ${ENV_FLAGS} -DTCL_SHLIB_EXT=\"${SHLIB_SUFFIX}\"
LIBS = @DL_LIBS@ @LIBS@ $(MATH_LIBS)
DEPEND_SWITCHES = ${CFLAGS} -I${GENERIC_DIR} -I${SRC_DIR} \
${AC_FLAGS} ${MATH_FLAGS} \
${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
-DTCL_SHLIB_EXT=\"${SHLIB_SUFFIX}\"
TCLSH_OBJS = tclAppInit.o
TCLTEST_OBJS = tclTestInit.o tclTest.o tclTestObj.o tclTestProcBodyObj.o \
tclThreadTest.o tclUnixTest.o
XTTEST_OBJS = xtTestInit.o tclTest.o tclTestObj.o tclTestProcBodyObj.o \
tclThreadTest.o tclUnixTest.o tclXtNotify.o tclXtTest.o
GENERIC_OBJS = regcomp.o regexec.o regfree.o regerror.o tclAlloc.o \
tclAsync.o tclBasic.o tclBinary.o \
tclCkalloc.o tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o \
tclCompCmds.o tclCompExpr.o tclCompile.o tclDate.o tclEncoding.o \
tclEnv.o tclEvent.o tclExecute.o tclFCmd.o tclFileName.o tclGet.o \
tclHash.o tclHistory.o tclIndexObj.o tclInterp.o tclIO.o tclIOCmd.o \
tclIOGT.o tclIOSock.o tclIOUtil.o tclLink.o tclListObj.o \
tclLiteral.o tclLoad.o tclMain.o tclNamesp.o tclNotify.o \
tclObj.o tclPanic.o tclParse.o tclParseExpr.o tclPipe.o \
tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o tclRegexp.o \
tclResolve.o tclResult.o tclScan.o tclStringObj.o tclThread.o \
tclStubInit.o tclStubLib.o tclTimer.o tclUtf.o tclUtil.o tclVar.o
STUB_LIB_OBJS = tclStubLib.o ${COMPAT_OBJS}
|
| ︙ | ︙ | |||
320 321 322 323 324 325 326 327 328 329 330 331 332 333 | $(GENERIC_DIR)/tclGet.c \ $(GENERIC_DIR)/tclHash.c \ $(GENERIC_DIR)/tclHistory.c \ $(GENERIC_DIR)/tclIndexObj.c \ $(GENERIC_DIR)/tclInterp.c \ $(GENERIC_DIR)/tclIO.c \ $(GENERIC_DIR)/tclIOCmd.c \ $(GENERIC_DIR)/tclIOSock.c \ $(GENERIC_DIR)/tclIOUtil.c \ $(GENERIC_DIR)/tclLink.c \ $(GENERIC_DIR)/tclListObj.c \ $(GENERIC_DIR)/tclLiteral.c \ $(GENERIC_DIR)/tclLoad.c \ $(GENERIC_DIR)/tclMain.c \ | > | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | $(GENERIC_DIR)/tclGet.c \ $(GENERIC_DIR)/tclHash.c \ $(GENERIC_DIR)/tclHistory.c \ $(GENERIC_DIR)/tclIndexObj.c \ $(GENERIC_DIR)/tclInterp.c \ $(GENERIC_DIR)/tclIO.c \ $(GENERIC_DIR)/tclIOCmd.c \ $(GENERIC_DIR)/tclIOGT.c \ $(GENERIC_DIR)/tclIOSock.c \ $(GENERIC_DIR)/tclIOUtil.c \ $(GENERIC_DIR)/tclLink.c \ $(GENERIC_DIR)/tclListObj.c \ $(GENERIC_DIR)/tclLiteral.c \ $(GENERIC_DIR)/tclLoad.c \ $(GENERIC_DIR)/tclMain.c \ |
| ︙ | ︙ | |||
403 404 405 406 407 408 409 |
doc:
# The following target is configured by autoconf to generate either
# a shared library or non-shared library for Tcl.
${TCL_LIB_FILE}: ${OBJS} ${STUB_LIB_FILE}
rm -f ${TCL_LIB_FILE}
@MAKE_LIB@
| > | > | | < > > > | | 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 |
doc:
# The following target is configured by autoconf to generate either
# a shared library or non-shared library for Tcl.
${TCL_LIB_FILE}: ${OBJS} ${STUB_LIB_FILE}
rm -f ${TCL_LIB_FILE}
@MAKE_LIB@
if test "x@DL_OBJS@" = "xtclLoadAout.o"; then \
$(RANLIB) ${TCL_LIB_FILE}; \
fi
${STUB_LIB_FILE}: ${STUB_LIB_OBJS}
rm -f ${STUB_LIB_FILE}
@MAKE_STUB_LIB@
$(RANLIB) ${STUB_LIB_FILE}
# Make target which outputs the list of the .o contained in the Tcl lib
# usefull to build a single big shared library containing Tcl and other
# extensions. used for the Tcl Plugin. -- dl
# The dependency on OBJS is not there because we just want the list
# of objects here, not actually building them
tclLibObjs:
@echo ${OBJS}
# This targets actually build the objects needed for the lib in the above
# case
objs: ${OBJS}
tclsh: ${TCLSH_OBJS} ${TCL_LIB_FILE}
${CC} ${LDFLAGS} ${TCLSH_OBJS} @TCL_BUILD_LIB_SPEC@ ${LIBS} \
@TCL_LD_SEARCH_FLAGS@ -o tclsh
tcltest: ${TCLTEST_OBJS} ${TCL_LIB_FILE} ${BUILD_DLTEST}
${CC} ${LDFLAGS} ${TCLTEST_OBJS} @TCL_BUILD_LIB_SPEC@ ${LIBS} \
@TCL_LD_SEARCH_FLAGS@ -o tcltest
# Note, in the target below TCL_LIBRARY needs to be set or else
# "make test" won't work in the case where the compilation directory
# isn't the same as the source directory.
# Specifying TESTFLAGS on the command line is the standard way to pass
# args to tcltest, ie:
# % make test TESTFLAGS="-verbose bps -file fileName.test"
test: tcltest
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
LIBPATH=`pwd`:${LIBPATH}; export LIBPATH; \
SHLIB_PATH=`pwd`:${SHLIB_PATH}; export SHLIB_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
./tcltest $(TOP_DIR)/tests/all.tcl $(TESTFLAGS) $(TCLTESTARGS)
# Useful target to launch a built tcltest with the proper path,...
runtest: tcltest
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
LIBPATH=`pwd`:${LIBPATH}; export LIBPATH; \
SHLIB_PATH=`pwd`:${SHLIB_PATH}; export SHLIB_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
|
| ︙ | ︙ | |||
469 470 471 472 473 474 475 | # only run by hand as yacc is not available in all environments. # The name of the .c file is different than the name of the .y file # so that make doesn't try to automatically regenerate the .c file. gendate: yacc -l $(GENERIC_DIR)/tclGetDate.y sed -e 's/yy/TclDate/g' -e '/^#include <values.h>/d' \ | | | 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 | # only run by hand as yacc is not available in all environments. # The name of the .c file is different than the name of the .y file # so that make doesn't try to automatically regenerate the .c file. gendate: yacc -l $(GENERIC_DIR)/tclGetDate.y sed -e 's/yy/TclDate/g' -e '/^#include <values.h>/d' \ -e 's?SCCSID?RCS: @(#) $$Id: Makefile.in,v 1.63.2.9 2001/10/16 23:53:21 dgp Exp $$?' \ -e '/#ifdef __STDC__/,/#endif/d' -e '/TclDateerrlab:/d' \ -e '/TclDatenewstate:/d' -e '/#pragma/d' \ -e '/#include <inttypes.h>/d' -e 's/const /CONST /g' \ <y.tab.c >$(GENERIC_DIR)/tclDate.c rm y.tab.c # The following targets generate the shared libraries in dltest that |
| ︙ | ︙ | |||
497 498 499 500 501 502 503 | if test ! -d dltest; then mkdir dltest; else true; fi cd dltest; if test -f configure; then ./configure; else \ $(DLTEST_DIR)/configure; fi install: install-binaries install-libraries install-doc install-strip: | | > > | > | > | | | > > | > > | > > > > > | | | | > > > > > > > > > | 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 |
if test ! -d dltest; then mkdir dltest; else true; fi
cd dltest; if test -f configure; then ./configure; else \
$(DLTEST_DIR)/configure; fi
install: install-binaries install-libraries install-doc
install-strip:
$(MAKE) install \
INSTALL_PROGRAM="$(INSTALL_PROGRAM) ${INSTALL_STRIP_PROGRAM}" \
INSTALL_LIBRARY="$(INSTALL_LIBRARY) ${INSTALL_STRIP_LIBRARY}"
# Note: before running ranlib below, must cd to target directory because
# some ranlibs write to current directory, and this might not always be
# possible (e.g. if installing as root).
install-binaries: binaries
@for i in $(LIB_INSTALL_DIR) $(BIN_INSTALL_DIR) ; \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir -p $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@if test ! -x $(SRC_DIR)/install-sh; then \
chmod +x $(SRC_DIR)/install-sh; \
fi
@echo "Installing $(TCL_LIB_FILE) to $(LIB_INSTALL_DIR)/"
@$(INSTALL_LIBRARY) $(TCL_LIB_FILE) $(LIB_INSTALL_DIR)/$(TCL_LIB_FILE)
@if test "x@DL_OBJS@" = "xtclLoadAout.o"; then \
(cd $(LIB_INSTALL_DIR); $(RANLIB) $(TCL_LIB_FILE)); \
fi
@chmod 555 $(LIB_INSTALL_DIR)/$(TCL_LIB_FILE)
@if test "$(TCL_BUILD_EXP_FILE)" != ""; then \
echo "Installing $(TCL_EXP_FILE) to $(LIB_INSTALL_DIR)/"; \
$(INSTALL_DATA) $(TCL_BUILD_EXP_FILE) \
$(LIB_INSTALL_DIR)/$(TCL_EXP_FILE); \
fi
@echo "Installing tclsh as $(BIN_INSTALL_DIR)/tclsh$(VERSION)"
@$(INSTALL_PROGRAM) tclsh $(BIN_INSTALL_DIR)/tclsh$(VERSION)
@echo "Installing tclConfig.sh to $(LIB_INSTALL_DIR)/"
@$(INSTALL_DATA) tclConfig.sh $(LIB_INSTALL_DIR)/tclConfig.sh
@if test "$(TCL_STUB_LIB_FILE)" != "" ; then \
echo "Installing $(TCL_STUB_LIB_FILE) to $(LIB_INSTALL_DIR)/"; \
$(INSTALL_LIBRARY) $(STUB_LIB_FILE) \
$(LIB_INSTALL_DIR)/$(TCL_STUB_LIB_FILE); \
fi
install-libraries: libraries
@for i in $(INCLUDE_INSTALL_DIR) $(SCRIPT_INSTALL_DIR); \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir -p $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@for i in http2.4 http1.0 opt0.4 encoding msgcat1.1 tcltest1.0; \
do \
if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \
echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \
mkdir -p $(SCRIPT_INSTALL_DIR)/$$i; \
chmod 755 $(SCRIPT_INSTALL_DIR)/$$i; \
else true; \
fi; \
done;
@if test ! -x $(SRC_DIR)/install-sh; then \
chmod +x $(SRC_DIR)/install-sh; \
fi
@echo "Installing header files";
@for i in $(GENERIC_DIR)/tcl.h $(GENERIC_DIR)/tclDecls.h \
$(GENERIC_DIR)/tclPlatDecls.h ; \
do \
$(INSTALL_DATA) $$i $(INCLUDE_INSTALL_DIR); \
done;
@echo "Installing library files to $(SCRIPT_INSTALL_DIR)";
@for i in $(TOP_DIR)/library/*.tcl $(TOP_DIR)/library/tclIndex $(UNIX_DIR)/tclAppInit.c $(UNIX_DIR)/ldAix; \
do \
$(INSTALL_DATA) $$i $(SCRIPT_INSTALL_DIR); \
done;
@echo "Installing library http1.0 directory";
@for j in $(TOP_DIR)/library/http1.0/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/http1.0; \
done;
@echo "Installing library http2.4 directory";
@for j in $(TOP_DIR)/library/http/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/http2.4; \
done;
@echo "Installing library opt0.4 directory";
@for j in $(TOP_DIR)/library/opt/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/opt0.4; \
done;
@echo "Installing library msgcat1.1 directory";
@for j in $(TOP_DIR)/library/msgcat/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/msgcat1.1; \
done;
@echo "Installing library tcltest1.0 directory";
@for j in $(TOP_DIR)/library/tcltest1.0/*.tcl ; \
do \
$(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/tcltest1.0; \
done;
@echo "Installing library encoding directory";
@for i in $(TOP_DIR)/library/encoding/*.enc ; do \
$(INSTALL_DATA) $$i $(SCRIPT_INSTALL_DIR)/encoding; \
done;
install-doc: doc
|
| ︙ | ︙ | |||
640 641 642 643 644 645 646 | rm -rf Makefile config.status config.cache config.log tclConfig.sh \ $(PACKAGE).* prototype if test -f dltest/Makefile; then cd dltest; $(MAKE) distclean; fi depend: makedepend -- $(DEPEND_SWITCHES) -- $(SRCS) | < < < | 677 678 679 680 681 682 683 684 685 686 687 688 689 690 | rm -rf Makefile config.status config.cache config.log tclConfig.sh \ $(PACKAGE).* prototype if test -f dltest/Makefile; then cd dltest; $(MAKE) distclean; fi depend: makedepend -- $(DEPEND_SWITCHES) -- $(SRCS) # Test binaries. The rules for tclTestInit.o and xtTestInit.o are # complicated because they are compiled from tclAppInit.c. Can't use # the "-o" option because this doesn't work on some strange compilers # (e.g. UnixWare). tclTestInit.o: $(UNIX_DIR)/tclAppInit.c @if test -f tclAppInit.o ; then \ |
| ︙ | ︙ | |||
778 779 780 781 782 783 784 785 786 787 788 789 790 791 | tclIO.o: $(GENERIC_DIR)/tclIO.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIO.c tclIOCmd.o: $(GENERIC_DIR)/tclIOCmd.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOCmd.c tclIOSock.o: $(GENERIC_DIR)/tclIOSock.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOSock.c tclIOUtil.o: $(GENERIC_DIR)/tclIOUtil.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOUtil.c tclLink.o: $(GENERIC_DIR)/tclLink.c | > > > | 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 | tclIO.o: $(GENERIC_DIR)/tclIO.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIO.c tclIOCmd.o: $(GENERIC_DIR)/tclIOCmd.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOCmd.c tclIOGT.o: $(GENERIC_DIR)/tclIOGT.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOGT.c tclIOSock.o: $(GENERIC_DIR)/tclIOSock.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOSock.c tclIOUtil.o: $(GENERIC_DIR)/tclIOUtil.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOUtil.c tclLink.o: $(GENERIC_DIR)/tclLink.c |
| ︙ | ︙ | |||
883 884 885 886 887 888 889 | tclStubInit.o: $(GENERIC_DIR)/tclStubInit.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclStubInit.c tclUtil.o: $(GENERIC_DIR)/tclUtil.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclUtil.c | | | 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 | tclStubInit.o: $(GENERIC_DIR)/tclStubInit.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclStubInit.c tclUtil.o: $(GENERIC_DIR)/tclUtil.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclUtil.c tclUtf.o: $(GENERIC_DIR)/tclUtf.c $(GENERIC_DIR)/tclUniData.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclUtf.c tclVar.o: $(GENERIC_DIR)/tclVar.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclVar.c tclTest.o: $(GENERIC_DIR)/tclTest.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclTest.c |
| ︙ | ︙ | |||
968 969 970 971 972 973 974 | # even though they may be placed in a static executable or library. Since # they are included in both the tcl library and the stub library, they # need to be relocatable. fixstrtod.o: $(COMPAT_DIR)/fixstrtod.c $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/fixstrtod.c | < < < | 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 | # even though they may be placed in a static executable or library. Since # they are included in both the tcl library and the stub library, they # need to be relocatable. fixstrtod.o: $(COMPAT_DIR)/fixstrtod.c $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/fixstrtod.c opendir.o: $(COMPAT_DIR)/opendir.c $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/opendir.c memcmp.o: $(COMPAT_DIR)/memcmp.c $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/memcmp.c strncasecmp.o: $(COMPAT_DIR)/strncasecmp.c |
| ︙ | ︙ | |||
1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 | echo "%define _rpmdir `pwd`/RPMS" >> THIS.TCL.SPEC cat tcl.spec >> THIS.TCL.SPEC mkdir -p RPMS/i386 rpm -bb THIS.TCL.SPEC mv RPMS/i386/*.rpm . rm -rf RPMS THIS.TCL.SPEC # # Target to create a proper Tcl distribution from information in the # master source directory. DISTDIR must be defined to indicate where # to put the distribution. # DISTROOT = /tmp/dist DISTNAME = tcl@TCL_VERSION@@TCL_PATCH_LEVEL@ ZIPNAME = tcl@TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@@TCL_PATCH_LEVEL@.zip DISTDIR = $(DISTROOT)/$(DISTNAME) $(UNIX_DIR)/configure: $(UNIX_DIR)/configure.in autoconf $(UNIX_DIR)/configure.in > $(UNIX_DIR)/configure | > > > > > > | < | < | > < < < < | | 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 | echo "%define _rpmdir `pwd`/RPMS" >> THIS.TCL.SPEC cat tcl.spec >> THIS.TCL.SPEC mkdir -p RPMS/i386 rpm -bb THIS.TCL.SPEC mv RPMS/i386/*.rpm . rm -rf RPMS THIS.TCL.SPEC mklinks: $(TCL_EXE) $(UNIX_DIR)/mkLinks.tcl \ $(UNIX_DIR)/../doc/*.[13n] > $(UNIX_DIR)/mkLinks chmod +x $(UNIX_DIR)/mkLinks # # Target to create a proper Tcl distribution from information in the # master source directory. DISTDIR must be defined to indicate where # to put the distribution. # DISTROOT = /tmp/dist DISTNAME = tcl@TCL_VERSION@@TCL_PATCH_LEVEL@ ZIPNAME = tcl@TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@@TCL_PATCH_LEVEL@.zip DISTDIR = $(DISTROOT)/$(DISTNAME) $(UNIX_DIR)/configure: $(UNIX_DIR)/configure.in autoconf $(UNIX_DIR)/configure.in > $(UNIX_DIR)/configure dist: $(UNIX_DIR)/configure mklinks rm -rf $(DISTDIR) mkdir -p $(DISTDIR)/unix cp -p $(UNIX_DIR)/*.c $(UNIX_DIR)/*.h $(DISTDIR)/unix cp $(UNIX_DIR)/Makefile.in $(DISTDIR)/unix chmod 664 $(DISTDIR)/unix/Makefile.in cp $(UNIX_DIR)/configure $(UNIX_DIR)/configure.in \ $(UNIX_DIR)/tcl.m4 $(UNIX_DIR)/aclocal.m4 \ $(UNIX_DIR)/tclConfig.sh.in $(UNIX_DIR)/install-sh \ $(UNIX_DIR)/README $(UNIX_DIR)/ldAix $(UNIX_DIR)/tcl.spec \ $(UNIX_DIR)/mkLinks \ $(DISTDIR)/unix chmod 775 $(DISTDIR)/unix/configure $(DISTDIR)/unix/configure.in chmod 775 $(DISTDIR)/unix/ldAix chmod +x $(DISTDIR)/unix/install-sh mkdir $(DISTDIR)/generic cp -p $(GENERIC_DIR)/*.c $(GENERIC_DIR)/*.h $(DISTDIR)/generic cp -p $(GENERIC_DIR)/*.decls $(DISTDIR)/generic cp -p $(GENERIC_DIR)/README $(DISTDIR)/generic cp -p $(GENERIC_DIR)/tclGetDate.y $(DISTDIR)/generic cp -p $(TOP_DIR)/changes $(TOP_DIR)/ChangeLog $(TOP_DIR)/README* \ $(TOP_DIR)/license.terms $(DISTDIR) mkdir $(DISTDIR)/library cp -p $(TOP_DIR)/license.terms $(TOP_DIR)/library/*.tcl \ $(TOP_DIR)/library/tclIndex $(DISTDIR)/library for i in http http1.0 opt msgcat reg1.0 dde1.1 tcltest1.0; \ do \ mkdir $(DISTDIR)/library/$$i ;\ cp -p $(TOP_DIR)/library/$$i/*.tcl $(DISTDIR)/library/$$i; \ done; mkdir $(DISTDIR)/library/encoding cp -p $(TOP_DIR)/library/encoding/*.enc $(DISTDIR)/library/encoding mkdir $(DISTDIR)/doc |
| ︙ | ︙ | |||
1134 1135 1136 1137 1138 1139 1140 | $(TOP_DIR)/tests/httpd $(TOP_DIR)/tests/*.tcl \ $(DISTDIR)/tests mkdir $(DISTDIR)/tests/pkg cp -p $(TOP_DIR)/license.terms $(DISTDIR)/tests/pkg cp -p $(TOP_DIR)/tests/pkg/*.tcl $(DISTDIR)/tests/pkg mkdir $(DISTDIR)/win cp $(TOP_DIR)/win/Makefile.in $(DISTDIR)/win | | < | > > | | | | < | < | | < | < | | 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 | $(TOP_DIR)/tests/httpd $(TOP_DIR)/tests/*.tcl \ $(DISTDIR)/tests mkdir $(DISTDIR)/tests/pkg cp -p $(TOP_DIR)/license.terms $(DISTDIR)/tests/pkg cp -p $(TOP_DIR)/tests/pkg/*.tcl $(DISTDIR)/tests/pkg mkdir $(DISTDIR)/win cp $(TOP_DIR)/win/Makefile.in $(DISTDIR)/win cp $(TOP_DIR)/win/configure.in $(TOP_DIR)/win/configure \ $(TOP_DIR)/win/tclConfig.sh.in \ $(TOP_DIR)/win/tcl.m4 $(TOP_DIR)/win/aclocal.m4 \ $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.c $(TOP_DIR)/win/*.h \ $(TOP_DIR)/win/*.ico $(TOP_DIR)/win/*.rc \ $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win cp -p $(TOP_DIR)/win/tcl.hpj.in $(DISTDIR)/win cp -p $(TOP_DIR)/win/README $(DISTDIR)/win cp -p $(TOP_DIR)/license.terms $(DISTDIR)/win mkdir $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/tclMacProjects.sea.hqx \ $(TOP_DIR)/mac/*.c $(TOP_DIR)/mac/*.h $(TOP_DIR)/mac/*.r \ $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/porting.notes $(TOP_DIR)/mac/README $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/*.pch $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/*.doc $(TOP_DIR)/mac/*.html $(DISTDIR)/mac cp -p $(TOP_DIR)/license.terms $(DISTDIR)/mac mkdir $(DISTDIR)/unix/dltest cp -p $(UNIX_DIR)/dltest/*.c $(UNIX_DIR)/dltest/Makefile.in \ $(DISTDIR)/unix/dltest cp -p $(UNIX_DIR)/dltest/configure.in $(UNIX_DIR)/dltest/configure \ $(UNIX_DIR)/dltest/README $(DISTDIR)/unix/dltest mkdir $(DISTDIR)/tools cp -p $(TOP_DIR)/tools/Makefile.in $(TOP_DIR)/tools/README \ $(TOP_DIR)/tools/configure $(TOP_DIR)/tools/configure.in \ $(TOP_DIR)/tools/*.tcl $(TOP_DIR)/tools/man2tcl.c \ $(TOP_DIR)/tools/tcl.wse.in $(TOP_DIR)/tools/*.bmp \ $(TOP_DIR)/tools/tcl.hpj.in \ $(DISTDIR)/tools # # The following target can only be used for non-patch releases. Use # the "allpatch" target below for patch releases. # |
| ︙ | ︙ |
Changes to unix/README.
1 2 3 4 5 6 7 8 9 10 | Tcl UNIX README --------------- This is the directory where you configure, compile, test, and install UNIX versions of Tcl. This directory also contains source files for Tcl that are specific to UNIX. Some of the files in this directory are used on the PC or Mac platform too, but they all depend on UNIX (POSIX/ANSI C) interfaces and some of them only make sense under UNIX. Updated forms of the information found in this file is available at: | > | > | | | 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 | Tcl UNIX README --------------- This is the directory where you configure, compile, test, and install UNIX versions of Tcl. This directory also contains source files for Tcl that are specific to UNIX. Some of the files in this directory are used on the PC or Mac platform too, but they all depend on UNIX (POSIX/ANSI C) interfaces and some of them only make sense under UNIX. Updated forms of the information found in this file is available at: http://www.tcl-tk.net/doc/howto/compile.html#unix For information on platforms where Tcl is known to compile, along with any porting notes for getting it to work on those platforms, see: http://www.tcl-tk.net/software/tcltk/platforms.html The rest of this file contains instructions on how to do this. The release should compile and run either "out of the box" or with trivial changes on any UNIX-like system that approximates POSIX, BSD, or System V. We know that it runs on workstations from Sun, H-P, DEC, IBM, and SGI, as well as PCs running Linux, BSDI, and SCO UNIX. To compile for a PC running Windows, see the README file in the directory ../win. To compile for a Macintosh, see the README file in the directory ../mac. RCS: @(#) $Id: README,v 1.11.2.2 2001/10/03 20:26:09 hobbs Exp $ How To Compile And Install Tcl: ------------------------------- (a) Check for patches as described in ../README. (b) If you have already compiled Tcl once in this directory and are now |
| ︙ | ︙ | |||
119 120 121 122 123 124 125 | directory. You should then see a printout of the test files processed. If any errors occur, you'll see a much more substantial printout for each error. See the README file in the "tests" directory for more information on the test suite. Note: don't run the tests as superuser: this will cause several of them to fail. If a test is failing consistently, please send us a bug report with as much detail as you can manage. Please use the online database at | | > | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | directory. You should then see a printout of the test files processed. If any errors occur, you'll see a much more substantial printout for each error. See the README file in the "tests" directory for more information on the test suite. Note: don't run the tests as superuser: this will cause several of them to fail. If a test is failing consistently, please send us a bug report with as much detail as you can manage. Please use the online database at http://tcl.sourceforge.net/ The Tcl test suite is very sensitive to proper implementation of ANSI C library procedures such as sprintf and sscanf. If the test suite generates errors, most likely they are due to non-conformance of your system's ANSI C library; such problems are unlikely to affect any real applications so it's probably safe to ignore them. |
Added unix/configure.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 |
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
--enable-gcc allow use of gcc if available [--disable-gcc]"
ac_help="$ac_help
--enable-threads build with threads"
ac_help="$ac_help
--enable-64bit enable 64bit support (where applicable)"
ac_help="$ac_help
--enable-64bit-vis enable 64bit Sparc VIS support"
ac_help="$ac_help
--disable-load disallow dynamic loading and "load" command"
ac_help="$ac_help
--enable-symbols build with debugging symbols [--disable-symbols]"
ac_help="$ac_help
--enable-shared build and link with shared libraries [--enable-shared]"
# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
case "$ac_option" in
-*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case "$ac_option" in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir="$ac_optarg" ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build="$ac_optarg" ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file="$ac_optarg" ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir="$ac_optarg" ;;
-disable-* | --disable-*)
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
eval "enable_${ac_feature}=no" ;;
-enable-* | --enable-*)
ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "enable_${ac_feature}='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix="$ac_optarg" ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he)
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
EOF
cat << EOF
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
EOF
if test -n "$ac_help"; then
echo "--enable and --with options recognized:$ac_help"
fi
exit 0 ;;
-host | --host | --hos | --ho)
ac_prev=host ;;
-host=* | --host=* | --hos=* | --ho=*)
host="$ac_optarg" ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir="$ac_optarg" ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir="$ac_optarg" ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir="$ac_optarg" ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir="$ac_optarg" ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir="$ac_optarg" ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir="$ac_optarg" ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir="$ac_optarg" ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix="$ac_optarg" ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix="$ac_optarg" ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix="$ac_optarg" ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name="$ac_optarg" ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir="$ac_optarg" ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir="$ac_optarg" ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir="$ac_optarg" ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir="$ac_optarg" ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target="$ac_optarg" ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.13"
exit 0 ;;
-with-* | --with-*)
ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "with_${ac_package}='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`echo $ac_option|sed -e 's/-*without-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
eval "with_${ac_package}=no" ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes="$ac_optarg" ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries="$ac_optarg" ;;
-*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
;;
*)
if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
echo "configure: warning: $ac_option: invalid host type" 1>&2
fi
if test "x$nonopt" != xNONE; then
{ echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
fi
nonopt="$ac_option"
;;
esac
done
if test -n "$ac_prev"; then
{ echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
exec 6>/dev/null
else
exec 6>&1
fi
exec 5>./config.log
echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
ac_configure_args="$ac_configure_args '$ac_arg'" ;;
*) ac_configure_args="$ac_configure_args $ac_arg" ;;
esac
done
# NLS nuisances.
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=../generic/tcl.h
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
{ echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
else
{ echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
echo "loading site script $ac_site_file"
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
echo "loading cache $cache_file"
. $cache_file
else
echo "creating cache $cache_file"
> $cache_file
fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
ac_exeext=
ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
ac_n= ac_c='
' ac_t=' '
else
ac_n=-n ac_c= ac_t=
fi
else
ac_n= ac_c='\c' ac_t=
fi
TCL_VERSION=8.3
TCL_MAJOR_VERSION=8
TCL_MINOR_VERSION=3
TCL_PATCH_LEVEL=".4"
VERSION=${TCL_VERSION}
#------------------------------------------------------------------------
# Handle the --prefix=... option
#------------------------------------------------------------------------
if test "${prefix}" = "NONE"; then
prefix=/usr/local
fi
if test "${exec_prefix}" = "NONE"; then
exec_prefix=$prefix
fi
TCL_SRC_DIR=`cd $srcdir/..; pwd`
#------------------------------------------------------------------------
# Standard compiler checks
#------------------------------------------------------------------------
# If the user did not set CFLAGS, set it now to keep
# the AC_PROG_CC macro from adding "-g -O2".
if test "${CFLAGS+set}" != "set" ; then
CFLAGS=""
fi
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:571: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="ranlib"
break
fi
done
IFS="$ac_save_ifs"
test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
fi
fi
RANLIB="$ac_cv_prog_RANLIB"
if test -n "$RANLIB"; then
echo "$ac_t""$RANLIB" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# Check whether --enable-gcc or --disable-gcc was given.
if test "${enable_gcc+set}" = set; then
enableval="$enable_gcc"
ok=$enableval
else
ok=no
fi
if test "$ok" = "yes"; then
CC=gcc
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:612: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="gcc"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:642: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
break
fi
done
IFS="$ac_save_ifs"
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
set dummy $ac_cv_prog_CC
shift
if test $# -gt 0; then
# We chose a different compiler from the bogus one.
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
set dummy "$ac_dir/$ac_word" "$@"
shift
ac_cv_prog_CC="$@"
fi
fi
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test -z "$CC"; then
case "`uname -s`" in
*win32* | *WIN32*)
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:693: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="cl"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
;;
esac
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:725: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
#line 736 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
ac_cv_prog_cc_cross=no
else
ac_cv_prog_cc_cross=yes
fi
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_cv_prog_cc_works=no
fi
rm -fr conftest*
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:767: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:772: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:781: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
fi
fi
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
if test $ac_cv_prog_gcc = yes; then
GCC=yes
else
GCC=
fi
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:800: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
ac_cv_prog_cc_g=yes
else
ac_cv_prog_cc_g=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-g"
fi
else
if test "$GCC" = yes; then
CFLAGS="-O2"
else
CFLAGS=
fi
fi
else
CC=${CC-cc}
fi
# Extra check to ensure that we double-check if we are running
# gcc, even though it may not be clear.
if test "$GCC" != "yes" -a `$CC -v 2>&1 | grep -c gcc` != "0" ; then
GCC=yes
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:841: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# This must be in double quotes, not single quotes, because CPP may get
# substituted into the Makefile and "${CC-cc}" will confuse make.
CPP="${CC-cc} -E"
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
#line 856 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
#line 873 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
#line 890 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP=/lib/cpp
fi
rm -f conftest*
fi
rm -f conftest*
fi
rm -f conftest*
ac_cv_prog_CPP="$CPP"
fi
CPP="$ac_cv_prog_CPP"
else
ac_cv_prog_CPP="$CPP"
fi
echo "$ac_t""$CPP" 1>&6
for ac_hdr in unistd.h limits.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:924: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 929 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:934: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
#------------------------------------------------------------------------
# Threads support
#------------------------------------------------------------------------
echo $ac_n "checking for building with threads""... $ac_c" 1>&6
echo "configure:967: checking for building with threads" >&5
# Check whether --enable-threads or --disable-threads was given.
if test "${enable_threads+set}" = set; then
enableval="$enable_threads"
tcl_ok=$enableval
else
tcl_ok=no
fi
if test "$tcl_ok" = "yes"; then
echo "$ac_t""yes" 1>&6
TCL_THREADS=1
cat >> confdefs.h <<\EOF
#define TCL_THREADS 1
EOF
cat >> confdefs.h <<\EOF
#define _REENTRANT 1
EOF
cat >> confdefs.h <<\EOF
#define _THREAD_SAFE 1
EOF
echo $ac_n "checking for pthread_mutex_init in -lpthread""... $ac_c" 1>&6
echo "configure:993: checking for pthread_mutex_init in -lpthread" >&5
ac_lib_var=`echo pthread'_'pthread_mutex_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lpthread $LIBS"
cat > conftest.$ac_ext <<EOF
#line 1001 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char pthread_mutex_init();
int main() {
pthread_mutex_init()
; return 0; }
EOF
if { (eval echo configure:1012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=yes
else
echo "$ac_t""no" 1>&6
tcl_ok=no
fi
if test "$tcl_ok" = "no"; then
# Check a little harder for __pthread_mutex_init in the same
# library, as some systems hide it there until pthread.h is
# defined. We could alternatively do an AC_TRY_COMPILE with
# pthread.h, but that will work with libpthread really doesn't
# exist, like AIX 4.2. [Bug: 4359]
echo $ac_n "checking for __pthread_mutex_init in -lpthread""... $ac_c" 1>&6
echo "configure:1040: checking for __pthread_mutex_init in -lpthread" >&5
ac_lib_var=`echo pthread'_'__pthread_mutex_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lpthread $LIBS"
cat > conftest.$ac_ext <<EOF
#line 1048 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char __pthread_mutex_init();
int main() {
__pthread_mutex_init()
; return 0; }
EOF
if { (eval echo configure:1059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=yes
else
echo "$ac_t""no" 1>&6
tcl_ok=no
fi
fi
if test "$tcl_ok" = "yes"; then
# The space is needed
THREADS_LIBS=" -lpthread"
else
echo $ac_n "checking for pthread_mutex_init in -lpthreads""... $ac_c" 1>&6
echo "configure:1087: checking for pthread_mutex_init in -lpthreads" >&5
ac_lib_var=`echo pthreads'_'pthread_mutex_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lpthreads $LIBS"
cat > conftest.$ac_ext <<EOF
#line 1095 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char pthread_mutex_init();
int main() {
pthread_mutex_init()
; return 0; }
EOF
if { (eval echo configure:1106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=yes
else
echo "$ac_t""no" 1>&6
tcl_ok=no
fi
if test "$tcl_ok" = "yes"; then
# The space is needed
THREADS_LIBS=" -lpthreads"
else
echo $ac_n "checking for pthread_mutex_init in -lc""... $ac_c" 1>&6
echo "configure:1132: checking for pthread_mutex_init in -lc" >&5
ac_lib_var=`echo c'_'pthread_mutex_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lc $LIBS"
cat > conftest.$ac_ext <<EOF
#line 1140 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char pthread_mutex_init();
int main() {
pthread_mutex_init()
; return 0; }
EOF
if { (eval echo configure:1151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=yes
else
echo "$ac_t""no" 1>&6
tcl_ok=no
fi
if test "$tcl_ok" = "no"; then
TCL_THREADS=0
echo "configure: warning: "Don t know how to find pthread lib on your system - you must disable thread support or edit the LIBS in the Makefile..."" 1>&2
fi
fi
fi
# Does the pthread-implementation provide
# 'pthread_attr_setstacksize' ?
for ac_func in pthread_attr_setstacksize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1185: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1190 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
else
TCL_THREADS=0
echo "$ac_t""no (default)" 1>&6
fi
#------------------------------------------------------------------------
# If we're using GCC, see if the compiler understands -pipe. If so, use it.
# It makes compiling go faster. (This is only a performance feature.)
#------------------------------------------------------------------------
if test -z "$no_pipe"; then
if test -n "$GCC"; then
echo $ac_n "checking if the compiler understands -pipe""... $ac_c" 1>&6
echo "configure:1252: checking if the compiler understands -pipe" >&5
OLDCC="$CC"
CC="$CC -pipe"
cat > conftest.$ac_ext <<EOF
#line 1256 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
if { (eval echo configure:1263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CC="$OLDCC"
echo "$ac_t""no" 1>&6
fi
rm -f conftest*
fi
fi
#--------------------------------------------------------------------
# Supply substitutes for missing POSIX library procedures, or
# set flags so Tcl uses alternate procedures.
#--------------------------------------------------------------------
# Check if Posix compliant getcwd exists, if not we'll use getwd.
for ac_func in getcwd
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1286: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1291 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define USEGETWD 1
EOF
fi
done
# Nb: if getcwd uses popen and pwd(1) (like SunOS 4) we should really
# define USEGETWD even if the posix getcwd exists. Add a test ?
for ac_func in opendir strstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1348: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1353 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"
fi
done
for ac_func in strtol tmpnam waitpid
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1406: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1411 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"
fi
done
echo $ac_n "checking for strerror""... $ac_c" 1>&6
echo "configure:1461: checking for strerror" >&5
if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1466 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char strerror(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char strerror();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_strerror) || defined (__stub___strerror)
choke me
#else
strerror();
#endif
; return 0; }
EOF
if { (eval echo configure:1489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_strerror=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_strerror=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'strerror`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_STRERROR 1
EOF
fi
echo $ac_n "checking for getwd""... $ac_c" 1>&6
echo "configure:1513: checking for getwd" >&5
if eval "test \"`echo '$''{'ac_cv_func_getwd'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1518 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char getwd(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char getwd();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_getwd) || defined (__stub___getwd)
choke me
#else
getwd();
#endif
; return 0; }
EOF
if { (eval echo configure:1541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_getwd=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_getwd=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'getwd`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_GETWD 1
EOF
fi
echo $ac_n "checking for wait3""... $ac_c" 1>&6
echo "configure:1565: checking for wait3" >&5
if eval "test \"`echo '$''{'ac_cv_func_wait3'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1570 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char wait3(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char wait3();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_wait3) || defined (__stub___wait3)
choke me
#else
wait3();
#endif
; return 0; }
EOF
if { (eval echo configure:1593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_wait3=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_wait3=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'wait3`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_WAIT3 1
EOF
fi
echo $ac_n "checking for uname""... $ac_c" 1>&6
echo "configure:1617: checking for uname" >&5
if eval "test \"`echo '$''{'ac_cv_func_uname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1622 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char uname(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char uname();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_uname) || defined (__stub___uname)
choke me
#else
uname();
#endif
; return 0; }
EOF
if { (eval echo configure:1645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_uname=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_uname=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'uname`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_UNAME 1
EOF
fi
echo $ac_n "checking for realpath""... $ac_c" 1>&6
echo "configure:1669: checking for realpath" >&5
if eval "test \"`echo '$''{'ac_cv_func_realpath'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1674 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char realpath(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char realpath();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_realpath) || defined (__stub___realpath)
choke me
#else
realpath();
#endif
; return 0; }
EOF
if { (eval echo configure:1697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_realpath=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_realpath=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'realpath`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_REALPATH 1
EOF
fi
#--------------------------------------------------------------------
# Supply substitutes for missing POSIX header files. Special
# notes:
# - stdlib.h doesn't define strtol, strtoul, or
# strtod insome versions of SunOS
# - some versions of string.h don't declare procedures such
# as strstr
#--------------------------------------------------------------------
echo $ac_n "checking dirent.h""... $ac_c" 1>&6
echo "configure:1733: checking dirent.h" >&5
cat > conftest.$ac_ext <<EOF
#line 1735 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <dirent.h>
int main() {
#ifndef _POSIX_SOURCE
# ifdef __Lynx__
/*
* Generate compilation error to make the test fail: Lynx headers
* are only valid if really in the POSIX environment.
*/
missing_procedure();
# endif
#endif
DIR *d;
struct dirent *entryPtr;
char *p;
d = opendir("foobar");
entryPtr = readdir(d);
p = entryPtr->d_name;
closedir(d);
; return 0; }
EOF
if { (eval echo configure:1761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
tcl_ok=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tcl_ok=no
fi
rm -f conftest*
if test $tcl_ok = no; then
cat >> confdefs.h <<\EOF
#define NO_DIRENT_H 1
EOF
fi
echo "$ac_t""$tcl_ok" 1>&6
ac_safe=`echo "errno.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for errno.h""... $ac_c" 1>&6
echo "configure:1782: checking for errno.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1787 "configure"
#include "confdefs.h"
#include <errno.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_ERRNO_H 1
EOF
fi
ac_safe=`echo "float.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for float.h""... $ac_c" 1>&6
echo "configure:1819: checking for float.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1824 "configure"
#include "confdefs.h"
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1829: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_FLOAT_H 1
EOF
fi
ac_safe=`echo "values.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for values.h""... $ac_c" 1>&6
echo "configure:1856: checking for values.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1861 "configure"
#include "confdefs.h"
#include <values.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_VALUES_H 1
EOF
fi
ac_safe=`echo "limits.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for limits.h""... $ac_c" 1>&6
echo "configure:1893: checking for limits.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1898 "configure"
#include "confdefs.h"
#include <limits.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1903: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_LIMITS_H 1
EOF
fi
ac_safe=`echo "stdlib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for stdlib.h""... $ac_c" 1>&6
echo "configure:1930: checking for stdlib.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1935 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1940: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=1
else
echo "$ac_t""no" 1>&6
tcl_ok=0
fi
cat > conftest.$ac_ext <<EOF
#line 1963 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "strtol" >/dev/null 2>&1; then
:
else
rm -rf conftest*
tcl_ok=0
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
#line 1977 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "strtoul" >/dev/null 2>&1; then
:
else
rm -rf conftest*
tcl_ok=0
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
#line 1991 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "strtod" >/dev/null 2>&1; then
:
else
rm -rf conftest*
tcl_ok=0
fi
rm -f conftest*
if test $tcl_ok = 0; then
cat >> confdefs.h <<\EOF
#define NO_STDLIB_H 1
EOF
fi
ac_safe=`echo "string.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for string.h""... $ac_c" 1>&6
echo "configure:2012: checking for string.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2017 "configure"
#include "confdefs.h"
#include <string.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=1
else
echo "$ac_t""no" 1>&6
tcl_ok=0
fi
cat > conftest.$ac_ext <<EOF
#line 2045 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "strstr" >/dev/null 2>&1; then
:
else
rm -rf conftest*
tcl_ok=0
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
#line 2059 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "strerror" >/dev/null 2>&1; then
:
else
rm -rf conftest*
tcl_ok=0
fi
rm -f conftest*
# See also memmove check below for a place where NO_STRING_H can be
# set and why.
if test $tcl_ok = 0; then
cat >> confdefs.h <<\EOF
#define NO_STRING_H 1
EOF
fi
ac_safe=`echo "sys/wait.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/wait.h""... $ac_c" 1>&6
echo "configure:2085: checking for sys/wait.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2090 "configure"
#include "confdefs.h"
#include <sys/wait.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_SYS_WAIT_H 1
EOF
fi
ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
echo "configure:2122: checking for dlfcn.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2127 "configure"
#include "confdefs.h"
#include <dlfcn.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2132: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_DLFCN_H 1
EOF
fi
# OS/390 lacks sys/param.h (and doesn't need it, by chance).
for ac_hdr in unistd.h sys/param.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2164: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2169 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
#---------------------------------------------------------------------------
# Determine which interface to use to talk to the serial port.
# Note that #include lines must begin in leftmost column for
# some compilers to recognize them as preprocessor directives.
#---------------------------------------------------------------------------
echo $ac_n "checking termios vs. termio vs. sgtty""... $ac_c" 1>&6
echo "configure:2211: checking termios vs. termio vs. sgtty" >&5
if test "$cross_compiling" = yes; then
tk_ok=no
else
cat > conftest.$ac_ext <<EOF
#line 2217 "configure"
#include "confdefs.h"
#include <termios.h>
main()
{
struct termios t;
if (tcgetattr(0, &t) == 0) {
cfsetospeed(&t, 0);
t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
return 0;
}
return 1;
}
EOF
if { (eval echo configure:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tk_ok=termios
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tk_ok=no
fi
rm -fr conftest*
fi
if test $tk_ok = termios; then
cat >> confdefs.h <<\EOF
#define USE_TERMIOS 1
EOF
else
if test "$cross_compiling" = yes; then
tk_ok=no
else
cat > conftest.$ac_ext <<EOF
#line 2256 "configure"
#include "confdefs.h"
#include <termio.h>
main()
{
struct termio t;
if (ioctl(0, TCGETA, &t) == 0) {
t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
return 0;
}
return 1;
}
EOF
if { (eval echo configure:2271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tk_ok=termio
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tk_ok=no
fi
rm -fr conftest*
fi
if test $tk_ok = termio; then
cat >> confdefs.h <<\EOF
#define USE_TERMIO 1
EOF
else
if test "$cross_compiling" = yes; then
tk_ok=none
else
cat > conftest.$ac_ext <<EOF
#line 2294 "configure"
#include "confdefs.h"
#include <sgtty.h>
main()
{
struct sgttyb t;
if (ioctl(0, TIOCGETP, &t) == 0) {
t.sg_ospeed = 0;
t.sg_flags |= ODDP | EVENP | RAW;
return 0;
}
return 1;
}
EOF
if { (eval echo configure:2310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tk_ok=sgtty
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tk_ok=none
fi
rm -fr conftest*
fi
if test $tk_ok = sgtty; then
cat >> confdefs.h <<\EOF
#define USE_SGTTY 1
EOF
else
if test "$cross_compiling" = yes; then
tk_ok=no
else
cat > conftest.$ac_ext <<EOF
#line 2333 "configure"
#include "confdefs.h"
#include <termios.h>
#include <errno.h>
main()
{
struct termios t;
if (tcgetattr(0, &t) == 0
|| errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
cfsetospeed(&t, 0);
t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
return 0;
}
return 1;
}
EOF
if { (eval echo configure:2351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tk_ok=termios
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tk_ok=no
fi
rm -fr conftest*
fi
if test $tk_ok = termios; then
cat >> confdefs.h <<\EOF
#define USE_TERMIOS 1
EOF
else
if test "$cross_compiling" = yes; then
tk_ok=no
else
cat > conftest.$ac_ext <<EOF
#line 2374 "configure"
#include "confdefs.h"
#include <termio.h>
#include <errno.h>
main()
{
struct termio t;
if (ioctl(0, TCGETA, &t) == 0
|| errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
return 0;
}
return 1;
}
EOF
if { (eval echo configure:2391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tk_ok=termio
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tk_ok=no
fi
rm -fr conftest*
fi
if test $tk_ok = termio; then
cat >> confdefs.h <<\EOF
#define USE_TERMIO 1
EOF
else
if test "$cross_compiling" = yes; then
tk_ok=none
else
cat > conftest.$ac_ext <<EOF
#line 2414 "configure"
#include "confdefs.h"
#include <sgtty.h>
#include <errno.h>
main()
{
struct sgttyb t;
if (ioctl(0, TIOCGETP, &t) == 0
|| errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
t.sg_ospeed = 0;
t.sg_flags |= ODDP | EVENP | RAW;
return 0;
}
return 1;
}
EOF
if { (eval echo configure:2432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tk_ok=sgtty
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tk_ok=none
fi
rm -fr conftest*
fi
if test $tk_ok = sgtty; then
cat >> confdefs.h <<\EOF
#define USE_SGTTY 1
EOF
fi
fi
fi
fi
fi
fi
echo "$ac_t""$tk_ok" 1>&6
#--------------------------------------------------------------------
# Include sys/select.h if it exists and if it supplies things
# that appear to be useful and aren't already in sys/types.h.
# This appears to be true only on the RS/6000 under AIX. Some
# systems like OSF/1 have a sys/select.h that's of no use, and
# other systems like SCO UNIX have a sys/select.h that's
# pernicious. If "fd_set" isn't defined anywhere then set a
# special flag.
#--------------------------------------------------------------------
echo $ac_n "checking fd_set and sys/select""... $ac_c" 1>&6
echo "configure:2470: checking fd_set and sys/select" >&5
cat > conftest.$ac_ext <<EOF
#line 2472 "configure"
#include "confdefs.h"
#include <sys/types.h>
int main() {
fd_set readMask, writeMask;
; return 0; }
EOF
if { (eval echo configure:2479: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
tk_ok=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tk_ok=no
fi
rm -f conftest*
if test $tk_ok = no; then
cat > conftest.$ac_ext <<EOF
#line 2491 "configure"
#include "confdefs.h"
#include <sys/select.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "fd_mask" >/dev/null 2>&1; then
rm -rf conftest*
tk_ok=yes
fi
rm -f conftest*
if test $tk_ok = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_SYS_SELECT_H 1
EOF
fi
fi
echo "$ac_t""$tk_ok" 1>&6
if test $tk_ok = no; then
cat >> confdefs.h <<\EOF
#define NO_FD_SET 1
EOF
fi
#------------------------------------------------------------------------------
# Find out all about time handling differences.
#------------------------------------------------------------------------------
echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
echo "configure:2522: checking whether struct tm is in sys/time.h or time.h" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2527 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <time.h>
int main() {
struct tm *tp; tp->tm_sec;
; return 0; }
EOF
if { (eval echo configure:2535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm=time.h
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_struct_tm=sys/time.h
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_struct_tm" 1>&6
if test $ac_cv_struct_tm = sys/time.h; then
cat >> confdefs.h <<\EOF
#define TM_IN_SYS_TIME 1
EOF
fi
for ac_hdr in sys/time.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2560: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2565 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2570: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
echo "configure:2597: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2602 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
int main() {
struct tm *tp;
; return 0; }
EOF
if { (eval echo configure:2611: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_header_time=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_header_time" 1>&6
if test $ac_cv_header_time = yes; then
cat >> confdefs.h <<\EOF
#define TIME_WITH_SYS_TIME 1
EOF
fi
echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
echo "configure:2632: checking for tm_zone in struct tm" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2637 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_cv_struct_tm>
int main() {
struct tm tm; tm.tm_zone;
; return 0; }
EOF
if { (eval echo configure:2645: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm_zone=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_struct_tm_zone=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_struct_tm_zone" 1>&6
if test "$ac_cv_struct_tm_zone" = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_TM_ZONE 1
EOF
else
echo $ac_n "checking for tzname""... $ac_c" 1>&6
echo "configure:2665: checking for tzname" >&5
if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2670 "configure"
#include "confdefs.h"
#include <time.h>
#ifndef tzname /* For SGI. */
extern char *tzname[]; /* RS6000 and others reject char **tzname. */
#endif
int main() {
atoi(*tzname);
; return 0; }
EOF
if { (eval echo configure:2680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_var_tzname=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_var_tzname=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_var_tzname" 1>&6
if test $ac_cv_var_tzname = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_TZNAME 1
EOF
fi
fi
for ac_func in gmtime_r localtime_r
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:2705: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2710 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:2733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
echo $ac_n "checking tm_tzadj in struct tm""... $ac_c" 1>&6
echo "configure:2759: checking tm_tzadj in struct tm" >&5
cat > conftest.$ac_ext <<EOF
#line 2761 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
struct tm tm; tm.tm_tzadj;
; return 0; }
EOF
if { (eval echo configure:2768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_TM_TZADJ 1
EOF
echo "$ac_t""yes" 1>&6
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
echo "$ac_t""no" 1>&6
fi
rm -f conftest*
echo $ac_n "checking tm_gmtoff in struct tm""... $ac_c" 1>&6
echo "configure:2784: checking tm_gmtoff in struct tm" >&5
cat > conftest.$ac_ext <<EOF
#line 2786 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
struct tm tm; tm.tm_gmtoff;
; return 0; }
EOF
if { (eval echo configure:2793: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_TM_GMTOFF 1
EOF
echo "$ac_t""yes" 1>&6
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
echo "$ac_t""no" 1>&6
fi
rm -f conftest*
#
# Its important to include time.h in this check, as some systems
# (like convex) have timezone functions, etc.
#
have_timezone=no
echo $ac_n "checking long timezone variable""... $ac_c" 1>&6
echo "configure:2814: checking long timezone variable" >&5
cat > conftest.$ac_ext <<EOF
#line 2816 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
extern long timezone;
timezone += 1;
exit (0);
; return 0; }
EOF
if { (eval echo configure:2825: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_timezone=yes
cat >> confdefs.h <<\EOF
#define HAVE_TIMEZONE_VAR 1
EOF
echo "$ac_t""yes" 1>&6
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
echo "$ac_t""no" 1>&6
fi
rm -f conftest*
#
# On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
#
if test "$have_timezone" = no; then
echo $ac_n "checking time_t timezone variable""... $ac_c" 1>&6
echo "configure:2846: checking time_t timezone variable" >&5
cat > conftest.$ac_ext <<EOF
#line 2848 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
extern time_t timezone;
timezone += 1;
exit (0);
; return 0; }
EOF
if { (eval echo configure:2857: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_TIMEZONE_VAR 1
EOF
echo "$ac_t""yes" 1>&6
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
echo "$ac_t""no" 1>&6
fi
rm -f conftest*
fi
#--------------------------------------------------------------------
# Some systems (e.g., IRIX 4.0.5) lack the st_blksize field
# in struct stat. But we might be able to use fstatfs instead.
#--------------------------------------------------------------------
echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
echo "configure:2880: checking for st_blksize in struct stat" >&5
if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2885 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
int main() {
struct stat s; s.st_blksize;
; return 0; }
EOF
if { (eval echo configure:2893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_st_blksize=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_struct_st_blksize=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6
if test $ac_cv_struct_st_blksize = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_ST_BLKSIZE 1
EOF
fi
echo $ac_n "checking for fstatfs""... $ac_c" 1>&6
echo "configure:2914: checking for fstatfs" >&5
if eval "test \"`echo '$''{'ac_cv_func_fstatfs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2919 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char fstatfs(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char fstatfs();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_fstatfs) || defined (__stub___fstatfs)
choke me
#else
fstatfs();
#endif
; return 0; }
EOF
if { (eval echo configure:2942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_fstatfs=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_fstatfs=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'fstatfs`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_FSTATFS 1
EOF
fi
#--------------------------------------------------------------------
# Some system have no memcmp or it does not work with 8 bit
# data, this checks it and add memcmp.o to LIBOBJS if needed
#--------------------------------------------------------------------
echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
echo "configure:2971: checking for 8-bit clean memcmp" >&5
if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
ac_cv_func_memcmp_clean=no
else
cat > conftest.$ac_ext <<EOF
#line 2979 "configure"
#include "confdefs.h"
main()
{
char c0 = 0x40, c1 = 0x80, c2 = 0x81;
exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1);
}
EOF
if { (eval echo configure:2989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_memcmp_clean=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
ac_cv_func_memcmp_clean=no
fi
rm -fr conftest*
fi
fi
echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
#--------------------------------------------------------------------
# Some system like SunOS 4 and other BSD like systems
# have no memmove (we assume they have bcopy instead).
# {The replacement define is in compat/string.h}
#--------------------------------------------------------------------
echo $ac_n "checking for memmove""... $ac_c" 1>&6
echo "configure:3013: checking for memmove" >&5
if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3018 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char memmove(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char memmove();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_memmove) || defined (__stub___memmove)
choke me
#else
memmove();
#endif
; return 0; }
EOF
if { (eval echo configure:3041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_memmove=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_memmove=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_MEMMOVE 1
EOF
cat >> confdefs.h <<\EOF
#define NO_STRING_H 1
EOF
fi
#--------------------------------------------------------------------
# On some systems strstr is broken: it returns a pointer even
# even if the original string is empty.
#--------------------------------------------------------------------
echo $ac_n "checking proper strstr implementation""... $ac_c" 1>&6
echo "configure:3074: checking proper strstr implementation" >&5
if test "$cross_compiling" = yes; then
tcl_ok=no
else
cat > conftest.$ac_ext <<EOF
#line 3079 "configure"
#include "confdefs.h"
extern int strstr();
int main()
{
exit(strstr("\0test", "test") ? 1 : 0);
}
EOF
if { (eval echo configure:3089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tcl_ok=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tcl_ok=no
fi
rm -fr conftest*
fi
if test $tcl_ok = yes; then
echo "$ac_t""yes" 1>&6
else
echo "$ac_t""broken, using substitute" 1>&6
LIBOBJS="$LIBOBJS strstr.o"
fi
#--------------------------------------------------------------------
# Check for strtoul function. This is tricky because under some
# versions of AIX strtoul returns an incorrect terminator
# pointer for the string "0".
#--------------------------------------------------------------------
echo $ac_n "checking for strtoul""... $ac_c" 1>&6
echo "configure:3115: checking for strtoul" >&5
if eval "test \"`echo '$''{'ac_cv_func_strtoul'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3120 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char strtoul(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char strtoul();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_strtoul) || defined (__stub___strtoul)
choke me
#else
strtoul();
#endif
; return 0; }
EOF
if { (eval echo configure:3143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_strtoul=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_strtoul=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'strtoul`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=1
else
echo "$ac_t""no" 1>&6
tcl_ok=0
fi
if test "$cross_compiling" = yes; then
tcl_ok=0
else
cat > conftest.$ac_ext <<EOF
#line 3167 "configure"
#include "confdefs.h"
extern int strtoul();
int main()
{
char *string = "0";
char *term;
int value;
value = strtoul(string, &term, 0);
if ((value != 0) || (term != (string+1))) {
exit(1);
}
exit(0);
}
EOF
if { (eval echo configure:3183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tcl_ok=0
fi
rm -fr conftest*
fi
if test "$tcl_ok" = 0; then
test -n "$verbose" && echo " Adding strtoul.o."
LIBOBJS="$LIBOBJS strtoul.o"
fi
#--------------------------------------------------------------------
# Check for the strtod function. This is tricky because in some
# versions of Linux strtod mis-parses strings starting with "+".
#--------------------------------------------------------------------
echo $ac_n "checking for strtod""... $ac_c" 1>&6
echo "configure:3206: checking for strtod" >&5
if eval "test \"`echo '$''{'ac_cv_func_strtod'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3211 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char strtod(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char strtod();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_strtod) || defined (__stub___strtod)
choke me
#else
strtod();
#endif
; return 0; }
EOF
if { (eval echo configure:3234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_strtod=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_strtod=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'strtod`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=1
else
echo "$ac_t""no" 1>&6
tcl_ok=0
fi
if test "$cross_compiling" = yes; then
tcl_ok=0
else
cat > conftest.$ac_ext <<EOF
#line 3258 "configure"
#include "confdefs.h"
extern double strtod();
int main()
{
char *string = " +69";
char *term;
double value;
value = strtod(string, &term);
if ((value != 69) || (term != (string+4))) {
exit(1);
}
exit(0);
}
EOF
if { (eval echo configure:3274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tcl_ok=0
fi
rm -fr conftest*
fi
if test "$tcl_ok" = 0; then
test -n "$verbose" && echo " Adding strtod.o."
LIBOBJS="$LIBOBJS strtod.o"
fi
#--------------------------------------------------------------------
# Under Solaris 2.4, strtod returns the wrong value for the
# terminating character under some conditions. Check for this
# and if the problem exists use a substitute procedure
# "fixstrtod" that corrects the error.
#--------------------------------------------------------------------
echo $ac_n "checking for strtod""... $ac_c" 1>&6
echo "configure:3300: checking for strtod" >&5
if eval "test \"`echo '$''{'ac_cv_func_strtod'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3305 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char strtod(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char strtod();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_strtod) || defined (__stub___strtod)
choke me
#else
strtod();
#endif
; return 0; }
EOF
if { (eval echo configure:3328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_strtod=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_strtod=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'strtod`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_strtod=1
else
echo "$ac_t""no" 1>&6
tcl_strtod=0
fi
if test "$tcl_strtod" = 1; then
echo $ac_n "checking for Solaris2.4/Tru64 strtod bugs""... $ac_c" 1>&6
echo "configure:3350: checking for Solaris2.4/Tru64 strtod bugs" >&5
if test "$cross_compiling" = yes; then
tcl_ok=0
else
cat > conftest.$ac_ext <<EOF
#line 3355 "configure"
#include "confdefs.h"
extern double strtod();
int main()
{
char *string = "NaN", *spaceString = " ";
char *term;
double value;
value = strtod(string, &term);
if ((term != string) && (term[-1] == 0)) {
exit(1);
}
value = strtod(spaceString, &term);
if (term == (spaceString+1)) {
exit(1);
}
exit(0);
}
EOF
if { (eval echo configure:3375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
tcl_ok=1
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
tcl_ok=0
fi
rm -fr conftest*
fi
if test "$tcl_ok" = 1; then
echo "$ac_t""ok" 1>&6
else
echo "$ac_t""buggy" 1>&6
LIBOBJS="$LIBOBJS fixstrtod.o"
cat >> confdefs.h <<\EOF
#define strtod fixstrtod
EOF
fi
fi
#--------------------------------------------------------------------
# Check for various typedefs and provide substitutes if
# they don't exist.
#--------------------------------------------------------------------
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:3406: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3411 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3419: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_cv_header_stdc=yes
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 3436 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "memchr" >/dev/null 2>&1; then
:
else
rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 3454 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "free" >/dev/null 2>&1; then
:
else
rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
fi
if test $ac_cv_header_stdc = yes; then
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
#line 3475 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
int main () { int i; for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
if { (eval echo configure:3486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
ac_cv_header_stdc=no
fi
rm -fr conftest*
fi
fi
fi
echo "$ac_t""$ac_cv_header_stdc" 1>&6
if test $ac_cv_header_stdc = yes; then
cat >> confdefs.h <<\EOF
#define STDC_HEADERS 1
EOF
fi
echo $ac_n "checking for mode_t""... $ac_c" 1>&6
echo "configure:3510: checking for mode_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3515 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "(^|[^a-zA-Z_0-9])mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_type_mode_t=yes
else
rm -rf conftest*
ac_cv_type_mode_t=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_type_mode_t" 1>&6
if test $ac_cv_type_mode_t = no; then
cat >> confdefs.h <<\EOF
#define mode_t int
EOF
fi
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
echo "configure:3543: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3548 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_type_pid_t=yes
else
rm -rf conftest*
ac_cv_type_pid_t=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_type_pid_t" 1>&6
if test $ac_cv_type_pid_t = no; then
cat >> confdefs.h <<\EOF
#define pid_t int
EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
echo "configure:3576: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3581 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_type_size_t=yes
else
rm -rf conftest*
ac_cv_type_size_t=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_type_size_t" 1>&6
if test $ac_cv_type_size_t = no; then
cat >> confdefs.h <<\EOF
#define size_t unsigned
EOF
fi
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
echo "configure:3609: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3614 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "uid_t" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_type_uid_t=yes
else
rm -rf conftest*
ac_cv_type_uid_t=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_type_uid_t" 1>&6
if test $ac_cv_type_uid_t = no; then
cat >> confdefs.h <<\EOF
#define uid_t int
EOF
cat >> confdefs.h <<\EOF
#define gid_t int
EOF
fi
#--------------------------------------------------------------------
# If a system doesn't have an opendir function (man, that's old!)
# then we have to supply a different version of dirent.h which
# is compatible with the substitute version of opendir that's
# provided. This version only works with V7-style directories.
#--------------------------------------------------------------------
echo $ac_n "checking for opendir""... $ac_c" 1>&6
echo "configure:3651: checking for opendir" >&5
if eval "test \"`echo '$''{'ac_cv_func_opendir'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3656 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char opendir(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char opendir();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_opendir) || defined (__stub___opendir)
choke me
#else
opendir();
#endif
; return 0; }
EOF
if { (eval echo configure:3679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_opendir=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_opendir=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'opendir`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define USE_DIRENT2_H 1
EOF
fi
#--------------------------------------------------------------------
# The check below checks whether <sys/wait.h> defines the type
# "union wait" correctly. It's needed because of weirdness in
# HP-UX where "union wait" is defined in both the BSD and SYS-V
# environments. Checking the usability of WIFEXITED seems to do
# the trick.
#--------------------------------------------------------------------
echo $ac_n "checking union wait""... $ac_c" 1>&6
echo "configure:3712: checking union wait" >&5
cat > conftest.$ac_ext <<EOF
#line 3714 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
int main() {
union wait x;
WIFEXITED(x); /* Generates compiler error if WIFEXITED
* uses an int. */
; return 0; }
EOF
if { (eval echo configure:3726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
tcl_ok=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tcl_ok=no
fi
rm -f conftest*
echo "$ac_t""$tcl_ok" 1>&6
if test $tcl_ok = no; then
cat >> confdefs.h <<\EOF
#define NO_UNION_WAIT 1
EOF
fi
#--------------------------------------------------------------------
# Check to see whether the system supports the matherr function
# and its associated type "struct exception".
#--------------------------------------------------------------------
echo $ac_n "checking matherr support""... $ac_c" 1>&6
echo "configure:3750: checking matherr support" >&5
cat > conftest.$ac_ext <<EOF
#line 3752 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
struct exception x;
x.type = DOMAIN;
x.type = SING;
; return 0; }
EOF
if { (eval echo configure:3763: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
tcl_ok=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tcl_ok=no
fi
rm -f conftest*
echo "$ac_t""$tcl_ok" 1>&6
if test $tcl_ok = yes; then
cat >> confdefs.h <<\EOF
#define NEED_MATHERR 1
EOF
fi
#--------------------------------------------------------------------
# Check whether there is an strncasecmp function on this system.
# This is a bit tricky because under SCO it's in -lsocket and
# under Sequent Dynix it's in -linet.
#--------------------------------------------------------------------
echo $ac_n "checking for strncasecmp""... $ac_c" 1>&6
echo "configure:3788: checking for strncasecmp" >&5
if eval "test \"`echo '$''{'ac_cv_func_strncasecmp'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3793 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char strncasecmp(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char strncasecmp();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_strncasecmp) || defined (__stub___strncasecmp)
choke me
#else
strncasecmp();
#endif
; return 0; }
EOF
if { (eval echo configure:3816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_strncasecmp=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_strncasecmp=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'strncasecmp`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=1
else
echo "$ac_t""no" 1>&6
tcl_ok=0
fi
if test "$tcl_ok" = 0; then
echo $ac_n "checking for strncasecmp in -lsocket""... $ac_c" 1>&6
echo "configure:3838: checking for strncasecmp in -lsocket" >&5
ac_lib_var=`echo socket'_'strncasecmp | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $LIBS"
cat > conftest.$ac_ext <<EOF
#line 3846 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char strncasecmp();
int main() {
strncasecmp()
; return 0; }
EOF
if { (eval echo configure:3857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=1
else
echo "$ac_t""no" 1>&6
tcl_ok=0
fi
fi
if test "$tcl_ok" = 0; then
echo $ac_n "checking for strncasecmp in -linet""... $ac_c" 1>&6
echo "configure:3881: checking for strncasecmp in -linet" >&5
ac_lib_var=`echo inet'_'strncasecmp | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-linet $LIBS"
cat > conftest.$ac_ext <<EOF
#line 3889 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char strncasecmp();
int main() {
strncasecmp()
; return 0; }
EOF
if { (eval echo configure:3900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=1
else
echo "$ac_t""no" 1>&6
tcl_ok=0
fi
fi
if test "$tcl_ok" = 0; then
LIBOBJS="$LIBOBJS strncasecmp.o"
fi
#--------------------------------------------------------------------
# The code below deals with several issues related to gettimeofday:
# 1. Some systems don't provide a gettimeofday function at all
# (set NO_GETTOD if this is the case).
# 2. SGI systems don't use the BSD form of the gettimeofday function,
# but they have a BSDgettimeofday function that can be used instead.
# 3. See if gettimeofday is declared in the <sys/time.h> header file.
# if not, set the GETTOD_NOT_DECLARED flag so that tclPort.h can
# declare it.
#--------------------------------------------------------------------
echo $ac_n "checking for BSDgettimeofday""... $ac_c" 1>&6
echo "configure:3938: checking for BSDgettimeofday" >&5
if eval "test \"`echo '$''{'ac_cv_func_BSDgettimeofday'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3943 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char BSDgettimeofday(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char BSDgettimeofday();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_BSDgettimeofday) || defined (__stub___BSDgettimeofday)
choke me
#else
BSDgettimeofday();
#endif
; return 0; }
EOF
if { (eval echo configure:3966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_BSDgettimeofday=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_BSDgettimeofday=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'BSDgettimeofday`\" = yes"; then
echo "$ac_t""yes" 1>&6
cat >> confdefs.h <<\EOF
#define HAVE_BSDGETTIMEOFDAY 1
EOF
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for gettimeofday""... $ac_c" 1>&6
echo "configure:3988: checking for gettimeofday" >&5
if eval "test \"`echo '$''{'ac_cv_func_gettimeofday'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3993 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gettimeofday(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char gettimeofday();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday)
choke me
#else
gettimeofday();
#endif
; return 0; }
EOF
if { (eval echo configure:4016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gettimeofday=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_gettimeofday=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'gettimeofday`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
cat >> confdefs.h <<\EOF
#define NO_GETTOD 1
EOF
fi
fi
echo $ac_n "checking for gettimeofday declaration""... $ac_c" 1>&6
echo "configure:4043: checking for gettimeofday declaration" >&5
cat > conftest.$ac_ext <<EOF
#line 4045 "configure"
#include "confdefs.h"
#include <sys/time.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "gettimeofday" >/dev/null 2>&1; then
rm -rf conftest*
echo "$ac_t""present" 1>&6
else
rm -rf conftest*
echo "$ac_t""missing" 1>&6
cat >> confdefs.h <<\EOF
#define GETTOD_NOT_DECLARED 1
EOF
fi
rm -f conftest*
#--------------------------------------------------------------------
# The following code checks to see whether it is possible to get
# signed chars on this platform. This is needed in order to
# properly generate sign-extended ints from character values.
#--------------------------------------------------------------------
echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6
echo "configure:4073: checking whether char is unsigned" >&5
if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$GCC" = yes; then
# GCC predefines this symbol on systems where it applies.
cat > conftest.$ac_ext <<EOF
#line 4080 "configure"
#include "confdefs.h"
#ifdef __CHAR_UNSIGNED__
yes
#endif
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "yes" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_c_char_unsigned=yes
else
rm -rf conftest*
ac_cv_c_char_unsigned=no
fi
rm -f conftest*
else
if test "$cross_compiling" = yes; then
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
#line 4102 "configure"
#include "confdefs.h"
/* volatile prevents gcc2 from optimizing the test away on sparcs. */
#if !defined(__STDC__) || __STDC__ != 1
#define volatile
#endif
main() {
volatile char c = 255; exit(c < 0);
}
EOF
if { (eval echo configure:4112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_char_unsigned=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
ac_cv_c_char_unsigned=no
fi
rm -fr conftest*
fi
fi
fi
echo "$ac_t""$ac_cv_c_char_unsigned" 1>&6
if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
cat >> confdefs.h <<\EOF
#define __CHAR_UNSIGNED__ 1
EOF
fi
echo $ac_n "checking signed char declarations""... $ac_c" 1>&6
echo "configure:4136: checking signed char declarations" >&5
cat > conftest.$ac_ext <<EOF
#line 4138 "configure"
#include "confdefs.h"
int main() {
signed char *p;
p = 0;
; return 0; }
EOF
if { (eval echo configure:4148: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
tcl_ok=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tcl_ok=no
fi
rm -f conftest*
echo "$ac_t""$tcl_ok" 1>&6
if test $tcl_ok = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_SIGNED_CHAR 1
EOF
fi
#--------------------------------------------------------------------
# Look for libraries that we will need when compiling the Tcl shell
#--------------------------------------------------------------------
#--------------------------------------------------------------------
# On a few very rare systems, all of the libm.a stuff is
# already in libc.a. Set compiler flags accordingly.
# Also, Linux requires the "ieee" library for math to work
# right (and it must appear before "-lm").
#--------------------------------------------------------------------
echo $ac_n "checking for sin""... $ac_c" 1>&6
echo "configure:4179: checking for sin" >&5
if eval "test \"`echo '$''{'ac_cv_func_sin'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4184 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char sin(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char sin();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_sin) || defined (__stub___sin)
choke me
#else
sin();
#endif
; return 0; }
EOF
if { (eval echo configure:4207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_sin=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_sin=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'sin`\" = yes"; then
echo "$ac_t""yes" 1>&6
MATH_LIBS=""
else
echo "$ac_t""no" 1>&6
MATH_LIBS="-lm"
fi
echo $ac_n "checking for main in -lieee""... $ac_c" 1>&6
echo "configure:4228: checking for main in -lieee" >&5
ac_lib_var=`echo ieee'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lieee $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4236 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
if { (eval echo configure:4243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
MATH_LIBS="-lieee $MATH_LIBS"
else
echo "$ac_t""no" 1>&6
fi
#--------------------------------------------------------------------
# Interactive UNIX requires -linet instead of -lsocket, plus it
# needs net/errno.h to define the socket-related error codes.
#--------------------------------------------------------------------
echo $ac_n "checking for main in -linet""... $ac_c" 1>&6
echo "configure:4270: checking for main in -linet" >&5
ac_lib_var=`echo inet'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-linet $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4278 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
if { (eval echo configure:4285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
LIBS="$LIBS -linet"
else
echo "$ac_t""no" 1>&6
fi
ac_safe=`echo "net/errno.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for net/errno.h""... $ac_c" 1>&6
echo "configure:4307: checking for net/errno.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4312 "configure"
#include "confdefs.h"
#include <net/errno.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:4317: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
cat >> confdefs.h <<\EOF
#define HAVE_NET_ERRNO_H 1
EOF
else
echo "$ac_t""no" 1>&6
fi
#--------------------------------------------------------------------
# Check for the existence of the -lsocket and -lnsl libraries.
# The order here is important, so that they end up in the right
# order in the command line generated by make. Here are some
# special considerations:
# 1. Use "connect" and "accept" to check for -lsocket, and
# "gethostbyname" to check for -lnsl.
# 2. Use each function name only once: can't redo a check because
# autoconf caches the results of the last check and won't redo it.
# 3. Use -lnsl and -lsocket only if they supply procedures that
# aren't already present in the normal libraries. This is because
# IRIX 5.2 has libraries, but they aren't needed and they're
# bogus: they goof up name resolution if used.
# 4. On some SVR4 systems, can't use -lsocket without -lnsl too.
# To get around this problem, check for both libraries together
# if -lsocket doesn't work by itself.
#--------------------------------------------------------------------
tcl_checkBoth=0
echo $ac_n "checking for connect""... $ac_c" 1>&6
echo "configure:4362: checking for connect" >&5
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4367 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char connect(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char connect();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_connect) || defined (__stub___connect)
choke me
#else
connect();
#endif
; return 0; }
EOF
if { (eval echo configure:4390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_connect=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_connect=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_checkSocket=0
else
echo "$ac_t""no" 1>&6
tcl_checkSocket=1
fi
if test "$tcl_checkSocket" = 1; then
echo $ac_n "checking for setsockopt""... $ac_c" 1>&6
echo "configure:4412: checking for setsockopt" >&5
if eval "test \"`echo '$''{'ac_cv_func_setsockopt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4417 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char setsockopt(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char setsockopt();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_setsockopt) || defined (__stub___setsockopt)
choke me
#else
setsockopt();
#endif
; return 0; }
EOF
if { (eval echo configure:4440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_setsockopt=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_setsockopt=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'setsockopt`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for setsockopt in -lsocket""... $ac_c" 1>&6
echo "configure:4458: checking for setsockopt in -lsocket" >&5
ac_lib_var=`echo socket'_'setsockopt | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4466 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char setsockopt();
int main() {
setsockopt()
; return 0; }
EOF
if { (eval echo configure:4477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
LIBS="$LIBS -lsocket"
else
echo "$ac_t""no" 1>&6
tcl_checkBoth=1
fi
fi
fi
if test "$tcl_checkBoth" = 1; then
tk_oldLibs=$LIBS
LIBS="$LIBS -lsocket -lnsl"
echo $ac_n "checking for accept""... $ac_c" 1>&6
echo "configure:4505: checking for accept" >&5
if eval "test \"`echo '$''{'ac_cv_func_accept'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4510 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char accept(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char accept();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_accept) || defined (__stub___accept)
choke me
#else
accept();
#endif
; return 0; }
EOF
if { (eval echo configure:4533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_accept=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_accept=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'accept`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_checkNsl=0
else
echo "$ac_t""no" 1>&6
LIBS=$tk_oldLibs
fi
fi
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
echo "configure:4555: checking for gethostbyname" >&5
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4560 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gethostbyname(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char gethostbyname();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
choke me
#else
gethostbyname();
#endif
; return 0; }
EOF
if { (eval echo configure:4583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gethostbyname=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_gethostbyname=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
echo "configure:4601: checking for gethostbyname in -lnsl" >&5
ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4609 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char gethostbyname();
int main() {
gethostbyname()
; return 0; }
EOF
if { (eval echo configure:4620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
LIBS="$LIBS -lnsl"
else
echo "$ac_t""no" 1>&6
fi
fi
# Don't perform the eval of the libraries here because DL_LIBS
# won't be set until we call SC_CONFIG_CFLAGS
TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
# Add the threads support libraries
LIBS="$LIBS$THREADS_LIBS"
#--------------------------------------------------------------------
# The statements below define a collection of compile flags. This
# macro depends on the value of SHARED_BUILD, and should be called
# after SC_ENABLE_SHARED checks the configure switches.
#--------------------------------------------------------------------
# Step 0.a: Enable 64 bit support?
echo $ac_n "checking if 64bit support is requested""... $ac_c" 1>&6
echo "configure:4666: checking if 64bit support is requested" >&5
# Check whether --enable-64bit or --disable-64bit was given.
if test "${enable_64bit+set}" = set; then
enableval="$enable_64bit"
:
else
enableval="no"
fi
if test "$enableval" = "yes"; then
do64bit=yes
else
do64bit=no
fi
echo "$ac_t""$do64bit" 1>&6
# Step 0.b: Enable Solaris 64 bit VIS support?
echo $ac_n "checking if 64bit Sparc VIS support is requested""... $ac_c" 1>&6
echo "configure:4686: checking if 64bit Sparc VIS support is requested" >&5
# Check whether --enable-64bit-vis or --disable-64bit-vis was given.
if test "${enable_64bit_vis+set}" = set; then
enableval="$enable_64bit_vis"
:
else
enableval="no"
fi
if test "$enableval" = "yes"; then
# Force 64bit on with VIS
do64bit=yes
do64bitVIS=yes
else
do64bitVIS=no
fi
echo "$ac_t""$do64bitVIS" 1>&6
# Step 1: set the variable "system" to hold the name and version number
# for the system. This can usually be done via the "uname" command, but
# there are a few systems, like Next, where this doesn't work.
echo $ac_n "checking system version (for dynamic loading)""... $ac_c" 1>&6
echo "configure:4710: checking system version (for dynamic loading)" >&5
if test -f /usr/lib/NextStep/software_version; then
system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
else
system=`uname -s`-`uname -r`
if test "$?" -ne 0 ; then
echo "$ac_t""unknown (can't find uname command)" 1>&6
system=unknown
else
# Special check for weird MP-RAS system (uname returns weird
# results, and the version is kept in special file).
if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
system=MP-RAS-`awk '{print }' /etc/.relid'`
fi
if test "`uname -s`" = "AIX" ; then
system=AIX-`uname -v`.`uname -r`
fi
echo "$ac_t""$system" 1>&6
fi
fi
# Step 2: check for existence of -ldl library. This is needed because
# Linux can use either -ldl or -ldld for dynamic loading.
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
echo "configure:4736: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4744 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char dlopen();
int main() {
dlopen()
; return 0; }
EOF
if { (eval echo configure:4755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
have_dl=yes
else
echo "$ac_t""no" 1>&6
have_dl=no
fi
# Step 3: set configuration options based on system name and version.
do64bit_ok=no
EXTRA_CFLAGS=""
TCL_EXPORT_FILE_SUFFIX=""
UNSHARED_LIB_SUFFIX=""
TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`'
ECHO_VERSION='`echo ${VERSION}`'
TCL_LIB_VERSIONS_OK=ok
CFLAGS_DEBUG=-g
CFLAGS_OPTIMIZE=-O
if test "$GCC" = "yes" ; then
CFLAGS_WARNING="-Wall -Wconversion -Wno-implicit-int"
else
CFLAGS_WARNING=""
fi
TCL_NEEDS_EXP_FILE=0
TCL_BUILD_EXP_FILE=""
TCL_EXP_FILE=""
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:4799: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_AR="ar"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
AR="$ac_cv_prog_AR"
if test -n "$AR"; then
echo "$ac_t""$AR" 1>&6
else
echo "$ac_t""no" 1>&6
fi
STLIB_LD='${AR} cr'
case $system in
AIX-5.*)
if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then
# AIX requires the _r compiler when gcc isn't being used
if test "${CC}" != "cc_r" ; then
CC=${CC}_r
fi
echo "$ac_t""Using $CC for compiling with threads" 1>&6
fi
LIBS="$LIBS -lc"
# AIX-5 uses ELF style dynamic libraries
SHLIB_CFLAGS=""
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
# Note: need the LIBS below, otherwise Tk won't find Tcl's
# symbols when dynamically loaded into tclsh.
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
# AIX-5 has dl* in libc.so
DL_LIBS=""
LDFLAGS=""
if test "$GCC" = "yes" ; then
LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
else
LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
fi
if test "$do64bit" = "yes" ; then
if test "$GCC" = "yes" ; then
echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2
else
do64bit_ok=yes
EXTRA_CFLAGS="-q64"
LDFLAGS="-q64"
fi
fi
;;
AIX-*)
if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then
# AIX requires the _r compiler when gcc isn't being used
if test "${CC}" != "cc_r" ; then
CC=${CC}_r
fi
echo "$ac_t""Using $CC for compiling with threads" 1>&6
fi
LIBS="$LIBS -lc"
SHLIB_CFLAGS=""
SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
TCL_NEEDS_EXP_FILE=1
TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp'
# AIX v<=4.1 has some different flags than 4.2+
if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then
LIBOBJS="$LIBOBJS tclLoadAix.o"
DL_LIBS="-lld"
fi
# On AIX <=v4 systems, libbsd.a has to be linked in to support
# non-blocking file IO. This library has to be linked in after
# the MATH_LIBS or it breaks the pow() function. The way to
# insure proper sequencing, is to add it to the tail of MATH_LIBS.
# This library also supplies gettimeofday.
#
# AIX does not have a timezone field in struct tm. When the AIX
# bsd library is used, the timezone global and the gettimeofday
# methods are to be avoided for timezone deduction instead, we
# deduce the timezone by comparing the localtime result on a
# known GMT value.
echo $ac_n "checking for gettimeofday in -lbsd""... $ac_c" 1>&6
echo "configure:4904: checking for gettimeofday in -lbsd" >&5
ac_lib_var=`echo bsd'_'gettimeofday | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lbsd $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4912 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char gettimeofday();
int main() {
gettimeofday()
; return 0; }
EOF
if { (eval echo configure:4923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
libbsd=yes
else
echo "$ac_t""no" 1>&6
libbsd=no
fi
if test $libbsd = yes; then
MATH_LIBS="$MATH_LIBS -lbsd"
cat >> confdefs.h <<\EOF
#define USE_DELTA_FOR_TZ 1
EOF
fi
;;
BSD/OS-2.1*|BSD/OS-3*)
SHLIB_CFLAGS=""
SHLIB_LD="shlicc -r"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
BSD/OS-4.*)
SHLIB_CFLAGS="-export-dynamic -fPIC"
SHLIB_LD="cc -shared"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS="-export-dynamic"
LD_SEARCH_FLAGS=""
;;
dgux*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD="cc -G"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
HP-UX-*.11.*)
SHLIB_SUFFIX=".sl"
echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
echo "configure:4985: checking for shl_load in -ldld" >&5
ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-ldld $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4993 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char shl_load();
int main() {
shl_load()
; return 0; }
EOF
if { (eval echo configure:5004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=yes
else
echo "$ac_t""no" 1>&6
tcl_ok=no
fi
if test "$tcl_ok" = yes; then
SHLIB_CFLAGS="+z"
SHLIB_LD="ld -b"
SHLIB_LD_LIBS=""
DL_OBJS="tclLoadShl.o"
DL_LIBS="-ldld"
LDFLAGS="-Wl,-E"
LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
fi
if test "$do64bit" = "yes" ; then
if test "$GCC" = "yes" ; then
echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2
else
do64bit_ok=yes
EXTRA_CFLAGS="+DA2.0W"
LDFLAGS="+DA2.0W $LDFLAGS"
fi
fi
;;
HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*)
SHLIB_SUFFIX=".sl"
echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
echo "configure:5047: checking for shl_load in -ldld" >&5
ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-ldld $LIBS"
cat > conftest.$ac_ext <<EOF
#line 5055 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char shl_load();
int main() {
shl_load()
; return 0; }
EOF
if { (eval echo configure:5066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
tcl_ok=yes
else
echo "$ac_t""no" 1>&6
tcl_ok=no
fi
if test "$tcl_ok" = yes; then
SHLIB_CFLAGS="+z"
SHLIB_LD="ld -b"
SHLIB_LD_LIBS=""
DL_OBJS="tclLoadShl.o"
DL_LIBS="-ldld"
LDFLAGS="-Wl,-E"
LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
fi
;;
IRIX-4.*)
SHLIB_CFLAGS="-G 0"
SHLIB_SUFFIX=".a"
SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
SHLIB_LD_LIBS='${LIBS}'
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
;;
IRIX-5.*)
SHLIB_CFLAGS=""
SHLIB_LD="ld -shared -rdata_shared"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
EXTRA_CFLAGS=""
LDFLAGS=""
;;
IRIX-6.*|IRIX64-6.5*)
SHLIB_CFLAGS=""
SHLIB_LD="ld -n32 -shared -rdata_shared"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
if test "$GCC" = "yes" ; then
EXTRA_CFLAGS="-mabi=n32"
LDFLAGS="-mabi=n32"
else
case $system in
IRIX-6.3)
# Use to build 6.2 compatible binaries on 6.3.
EXTRA_CFLAGS="-n32 -D_OLD_TERMIOS"
;;
*)
EXTRA_CFLAGS="-n32"
;;
esac
LDFLAGS="-n32"
fi
;;
IRIX64-6.*)
SHLIB_CFLAGS=""
SHLIB_LD="ld -32 -shared -rdata_shared"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
;;
Linux*)
SHLIB_CFLAGS="-fPIC"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
# egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings
# when you inline the string and math operations. Turn this off to
# get rid of the warnings.
CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
if test "$have_dl" = yes; then
SHLIB_LD="${CC} -shared"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS="-rdynamic"
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
else
ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for dld.h""... $ac_c" 1>&6
echo "configure:5173: checking for dld.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5178 "configure"
#include "confdefs.h"
#include <dld.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5183: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
SHLIB_LD="ld -shared"
DL_OBJS="tclLoadDld.o"
DL_LIBS="-ldld"
LDFLAGS=""
LD_SEARCH_FLAGS=""
else
echo "$ac_t""no" 1>&6
fi
fi
if test "`uname -m`" = "alpha" ; then
EXTRA_CFLAGS="-mieee"
fi
# The combo of gcc + glibc has a bug related
# to inlining of functions like strtod(). The
# -fno-builtin flag should address this problem
# but it does not work. The -fno-inline flag
# is kind of overkill but it works.
# Disable inlining only when one of the
# files in compat/*.c is being linked in.
if test x"${LIBOBJS}" != x ; then
EXTRA_CFLAGS="${EXTRA_CFLAGS} -fno-inline"
fi
;;
GNU*)
SHLIB_CFLAGS="-fPIC"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
if test "$have_dl" = yes; then
SHLIB_LD="${CC} -shared"
DL_OBJS=""
DL_LIBS="-ldl"
LDFLAGS="-rdynamic"
LD_SEARCH_FLAGS=""
else
ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for dld.h""... $ac_c" 1>&6
echo "configure:5240: checking for dld.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5245 "configure"
#include "confdefs.h"
#include <dld.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5250: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
SHLIB_LD="ld -shared"
DL_OBJS=""
DL_LIBS="-ldld"
LDFLAGS=""
LD_SEARCH_FLAGS=""
else
echo "$ac_t""no" 1>&6
fi
fi
if test "`uname -m`" = "alpha" ; then
EXTRA_CFLAGS="-mieee"
fi
;;
MP-RAS-02*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD="cc -G"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
MP-RAS-*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD="cc -G"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS="-Wl,-Bexport"
LD_SEARCH_FLAGS=""
;;
NetBSD-*|FreeBSD-[1-2].*|OpenBSD-*)
# Not available on all versions: check for include file.
ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
echo "configure:5305: checking for dlfcn.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5310 "configure"
#include "confdefs.h"
#include <dlfcn.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
# NetBSD/SPARC needs -fPIC, -fpic will not do.
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld -Bshareable -x"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
echo $ac_n "checking for ELF""... $ac_c" 1>&6
echo "configure:5342: checking for ELF" >&5
cat > conftest.$ac_ext <<EOF
#line 5344 "configure"
#include "confdefs.h"
#ifdef __ELF__
yes
#endif
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "yes" >/dev/null 2>&1; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so'
else
rm -rf conftest*
echo "$ac_t""no" 1>&6
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
fi
rm -f conftest*
else
echo "$ac_t""no" 1>&6
SHLIB_CFLAGS=""
SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".a"
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
fi
# FreeBSD doesn't handle version numbers with dots.
UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
TCL_LIB_VERSIONS_OK=nodots
;;
FreeBSD-*)
# FreeBSD 3.* and greater have ELF.
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld -Bshareable -x"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS="-export-dynamic"
LD_SEARCH_FLAGS=""
# FreeBSD doesn't handle version numbers with dots.
UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so'
TCL_LIB_VERSIONS_OK=nodots
;;
Rhapsody-*|Darwin-*)
SHLIB_CFLAGS="-fno-common"
SHLIB_LD="cc -dynamiclib \${LDFLAGS}"
TCL_SHLIB_LD_EXTRAS="-compatibility_version ${TCL_MAJOR_VERSION} -current_version \${VERSION} -install_name \${LIB_RUNTIME_DIR}/\${TCL_LIB_FILE} -prebind -seg1addr a000000"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".dylib"
DL_OBJS="tclLoadDyld.o"
DL_LIBS=""
LDFLAGS="-prebind"
LD_SEARCH_FLAGS=""
CFLAGS_OPTIMIZE="-O3"
EXTRA_CFLAGS="-arch ppc -pipe"
;;
NEXTSTEP-*)
SHLIB_CFLAGS=""
SHLIB_LD="cc -nostdlib -r"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadNext.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
OS/390-*)
CFLAGS_OPTIMIZE="" # Optimizer is buggy
cat >> confdefs.h <<\EOF
#define _OE_SOCKETS 1
EOF
# needed in sys/socket.h
;;
OSF1-1.0|OSF1-1.1|OSF1-1.2)
# OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1
SHLIB_CFLAGS=""
# Hack: make package name same as library name
SHLIB_LD='ld -R -export :'
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadOSF.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
OSF1-1.*)
# OSF/1 1.3 from OSF using ELF, and derivatives, including AD2
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld -shared"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
OSF1-V*)
# Digital OSF/1
SHLIB_CFLAGS=""
SHLIB_LD='ld -shared -expect_unresolved "*"'
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
if test "$GCC" != "yes" ; then
EXTRA_CFLAGS="-DHAVE_TZSET -std1"
fi
# see pthread_intro(3) for pthread support on osf1, k.furukawa
if test "${TCL_THREADS}" = "1" ; then
EXTRA_CFLAGS="${EXTRA_CFLAGS} -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
if test "$GCC" = "yes" ; then
LIBS=`echo $LIBS | sed s/-lpthreads//`
LIBS="$LIBS -lpthread -lmach -lexc"
else
EXTRA_CFLAGS="${EXTRA_CFLAGS} -pthread"
LDFLAGS="-pthread"
fi
fi
;;
QNX-6*)
# QNX RTP
# This may work for all QNX, but it was only reported for v6.
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld -Bshareable -x"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
# dlopen is in -lc on QNX
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
RISCos-*)
SHLIB_CFLAGS="-G 0"
SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".a"
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
;;
SCO_SV-3.2*)
# Note, dlopen is available only on SCO 3.2.5 and greater. However,
# this test works, since "uname -s" was non-standard in 3.2.4 and
# below.
if test "$GCC" = "yes" ; then
SHLIB_CFLAGS="-fPIC -melf"
LDFLAGS="-melf -Wl,-Bexport"
else
SHLIB_CFLAGS="-Kpic -belf"
LDFLAGS="-belf -Wl,-Bexport"
fi
SHLIB_LD="ld -G"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LD_SEARCH_FLAGS=""
;;
SINIX*5.4*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD="cc -G"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
SunOS-4*)
SHLIB_CFLAGS="-PIC"
SHLIB_LD="ld"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
# SunOS can't handle version numbers with dots in them in library
# specs, like -ltcl7.5, so use -ltcl75 instead. Also, it
# requires an extra version number at the end of .so file names.
# So, the library has to have a name like libtcl75.so.1.0
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
TCL_LIB_VERSIONS_OK=nodots
;;
SunOS-5.[0-6]*)
# Note: If _REENTRANT isn't defined, then Solaris
# won't define thread-safe library routines.
cat >> confdefs.h <<\EOF
#define _REENTRANT 1
EOF
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
# Note: need the LIBS below, otherwise Tk won't find Tcl's
# symbols when dynamically loaded into tclsh.
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
;;
SunOS-5*)
# Note: If _REENTRANT isn't defined, then Solaris
# won't define thread-safe library routines.
cat >> confdefs.h <<\EOF
#define _REENTRANT 1
EOF
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
LDFLAGS=""
if test "$do64bit" = "yes" ; then
arch=`isainfo`
if test "$arch" = "sparcv9 sparc" ; then
if test "$GCC" = "yes" ; then
echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2
else
do64bit_ok=yes
if test "$do64bitVIS" = "yes" ; then
EXTRA_CFLAGS="-xarch=v9a"
LDFLAGS="-xarch=v9a"
else
EXTRA_CFLAGS="-xarch=v9"
LDFLAGS="-xarch=v9"
fi
fi
else
echo "configure: warning: "64bit mode only supported sparcv9 system"" 1>&2
fi
fi
# Note: need the LIBS below, otherwise Tk won't find Tcl's
# symbols when dynamically loaded into tclsh.
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
if test "$GCC" = "yes" ; then
LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
else
LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
fi
;;
ULTRIX-4.*)
SHLIB_CFLAGS="-G 0"
SHLIB_SUFFIX=".a"
SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
SHLIB_LD_LIBS='${LIBS}'
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
if test "$GCC" != "yes" ; then
EXTRA_CFLAGS="-DHAVE_TZSET -std1"
fi
;;
UNIX_SV* | UnixWare-5*)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="cc -G"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
# Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
# that don't grok the -Bexport option. Test that it does.
hold_ldflags=$LDFLAGS
echo $ac_n "checking for ld accepts -Bexport flag""... $ac_c" 1>&6
echo "configure:5645: checking for ld accepts -Bexport flag" >&5
LDFLAGS="${LDFLAGS} -Wl,-Bexport"
cat > conftest.$ac_ext <<EOF
#line 5648 "configure"
#include "confdefs.h"
int main() {
int i;
; return 0; }
EOF
if { (eval echo configure:5655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
found=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
found=no
fi
rm -f conftest*
LDFLAGS=$hold_ldflags
echo "$ac_t""$found" 1>&6
if test $found = yes; then
LDFLAGS="-Wl,-Bexport"
else
LDFLAGS=""
fi
LD_SEARCH_FLAGS=""
;;
esac
if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then
echo "configure: warning: "64bit support being disabled -- don\'t know magic for this platform"" 1>&2
fi
# Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic
# Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop,
# New Orleans, LA, Computerized Processes Unlimited, 1994), then we need
# to determine which of several header files defines the a.out file
# format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we
# support only a file format that is more or less version-7-compatible.
# In particular,
# - a.out files must begin with `struct exec'.
# - the N_TXTOFF on the `struct exec' must compute the seek address
# of the text segment
# - The `struct exec' must contain a_magic, a_text, a_data, a_bss
# and a_entry fields.
# The following compilation should succeed if and only if either sys/exec.h
# or a.out.h is usable for the purpose.
#
# Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the
# `struct exec' includes a second header that contains information that
# duplicates the v7 fields that are needed.
if test "x$DL_OBJS" = "xtclLoadAout.o" ; then
echo $ac_n "checking sys/exec.h""... $ac_c" 1>&6
echo "configure:5701: checking sys/exec.h" >&5
cat > conftest.$ac_ext <<EOF
#line 5703 "configure"
#include "confdefs.h"
#include <sys/exec.h>
int main() {
struct exec foo;
unsigned long seek;
int flag;
#if defined(__mips) || defined(mips)
seek = N_TXTOFF (foo.ex_f, foo.ex_o);
#else
seek = N_TXTOFF (foo);
#endif
flag = (foo.a_magic == OMAGIC);
return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
; return 0; }
EOF
if { (eval echo configure:5721: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
tcl_ok=usable
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tcl_ok=unusable
fi
rm -f conftest*
echo "$ac_t""$tcl_ok" 1>&6
if test $tcl_ok = usable; then
cat >> confdefs.h <<\EOF
#define USE_SYS_EXEC_H 1
EOF
else
echo $ac_n "checking a.out.h""... $ac_c" 1>&6
echo "configure:5739: checking a.out.h" >&5
cat > conftest.$ac_ext <<EOF
#line 5741 "configure"
#include "confdefs.h"
#include <a.out.h>
int main() {
struct exec foo;
unsigned long seek;
int flag;
#if defined(__mips) || defined(mips)
seek = N_TXTOFF (foo.ex_f, foo.ex_o);
#else
seek = N_TXTOFF (foo);
#endif
flag = (foo.a_magic == OMAGIC);
return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
; return 0; }
EOF
if { (eval echo configure:5759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
tcl_ok=usable
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tcl_ok=unusable
fi
rm -f conftest*
echo "$ac_t""$tcl_ok" 1>&6
if test $tcl_ok = usable; then
cat >> confdefs.h <<\EOF
#define USE_A_OUT_H 1
EOF
else
echo $ac_n "checking sys/exec_aout.h""... $ac_c" 1>&6
echo "configure:5777: checking sys/exec_aout.h" >&5
cat > conftest.$ac_ext <<EOF
#line 5779 "configure"
#include "confdefs.h"
#include <sys/exec_aout.h>
int main() {
struct exec foo;
unsigned long seek;
int flag;
#if defined(__mips) || defined(mips)
seek = N_TXTOFF (foo.ex_f, foo.ex_o);
#else
seek = N_TXTOFF (foo);
#endif
flag = (foo.a_midmag == OMAGIC);
return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
; return 0; }
EOF
if { (eval echo configure:5797: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
tcl_ok=usable
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
tcl_ok=unusable
fi
rm -f conftest*
echo "$ac_t""$tcl_ok" 1>&6
if test $tcl_ok = usable; then
cat >> confdefs.h <<\EOF
#define USE_SYS_EXEC_AOUT_H 1
EOF
else
DL_OBJS=""
fi
fi
fi
fi
# Step 5: disable dynamic loading if requested via a command-line switch.
# Check whether --enable-load or --disable-load was given.
if test "${enable_load+set}" = set; then
enableval="$enable_load"
tcl_ok=$enableval
else
tcl_ok=yes
fi
if test "$tcl_ok" = "no"; then
DL_OBJS=""
fi
if test "x$DL_OBJS" != "x" ; then
BUILD_DLTEST="\$(DLTEST_TARGETS)"
else
echo "Can't figure out how to do dynamic loading or shared libraries"
echo "on this system."
SHLIB_CFLAGS=""
SHLIB_LD=""
SHLIB_SUFFIX=""
DL_OBJS="tclLoadNone.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS=""
BUILD_DLTEST=""
fi
# If we're running gcc, then change the C flags for compiling shared
# libraries to the right flags for gcc, instead of those for the
# standard manufacturer compiler.
if test "$DL_OBJS" != "tclLoadNone.o" ; then
if test "$GCC" = "yes" ; then
case $system in
AIX-*)
;;
BSD/OS*)
;;
IRIX*)
;;
NetBSD-*|FreeBSD-*|OpenBSD-*)
;;
Rhapsody-*|Darwin-*)
;;
RISCos-*)
;;
SCO_SV-3.2*)
;;
ULTRIX-4.*)
;;
*)
SHLIB_CFLAGS="-fPIC"
;;
esac
fi
fi
if test "$SHARED_LIB_SUFFIX" = "" ; then
SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}${SHLIB_SUFFIX}'
fi
if test "$UNSHARED_LIB_SUFFIX" = "" ; then
UNSHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
fi
echo $ac_n "checking for build with symbols""... $ac_c" 1>&6
echo "configure:5894: checking for build with symbols" >&5
# Check whether --enable-symbols or --disable-symbols was given.
if test "${enable_symbols+set}" = set; then
enableval="$enable_symbols"
tcl_ok=$enableval
else
tcl_ok=no
fi
# FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT.
if test "$tcl_ok" = "yes"; then
CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
DBGX=g
echo "$ac_t""yes" 1>&6
else
CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
DBGX=""
echo "$ac_t""no" 1>&6
fi
TCL_DBGX=${DBGX}
#--------------------------------------------------------------------
# The statements below check for systems where POSIX-style
# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
# On these systems (mostly older ones), use the old BSD-style
# FIONBIO approach instead.
#--------------------------------------------------------------------
for ac_hdr in sys/ioctl.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:5931: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5936 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5941: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_hdr in sys/filio.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:5971: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5976 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5981: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
echo $ac_n "checking FIONBIO vs. O_NONBLOCK for nonblocking I/O""... $ac_c" 1>&6
echo "configure:6008: checking FIONBIO vs. O_NONBLOCK for nonblocking I/O" >&5
if test -f /usr/lib/NextStep/software_version; then
system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
else
system=`uname -s`-`uname -r`
if test "$?" -ne 0 ; then
system=unknown
else
# Special check for weird MP-RAS system (uname returns weird
# results, and the version is kept in special file).
if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
system=MP-RAS-`awk '{print }' /etc/.relid'`
fi
if test "`uname -s`" = "AIX" ; then
system=AIX-`uname -v`.`uname -r`
fi
fi
fi
case $system in
# There used to be code here to use FIONBIO under AIX. However, it
# was reported that FIONBIO doesn't work under AIX 3.2.5. Since
# using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO
# code (JO, 5/31/97).
OSF*)
cat >> confdefs.h <<\EOF
#define USE_FIONBIO 1
EOF
echo "$ac_t""FIONBIO" 1>&6
;;
SunOS-4*)
cat >> confdefs.h <<\EOF
#define USE_FIONBIO 1
EOF
echo "$ac_t""FIONBIO" 1>&6
;;
ULTRIX-4.*)
cat >> confdefs.h <<\EOF
#define USE_FIONBIO 1
EOF
echo "$ac_t""FIONBIO" 1>&6
;;
*)
echo "$ac_t""O_NONBLOCK" 1>&6
;;
esac
#--------------------------------------------------------------------
# The statements below define a collection of symbols related to
# building libtcl as a shared library instead of a static library.
#--------------------------------------------------------------------
TCL_UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}
TCL_SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}
echo $ac_n "checking how to build libraries""... $ac_c" 1>&6
echo "configure:6070: checking how to build libraries" >&5
# Check whether --enable-shared or --disable-shared was given.
if test "${enable_shared+set}" = set; then
enableval="$enable_shared"
tcl_ok=$enableval
else
tcl_ok=yes
fi
if test "${enable_shared+set}" = set; then
enableval="$enable_shared"
tcl_ok=$enableval
else
tcl_ok=yes
fi
if test "$tcl_ok" = "yes" ; then
echo "$ac_t""shared" 1>&6
SHARED_BUILD=1
else
echo "$ac_t""static" 1>&6
SHARED_BUILD=0
cat >> confdefs.h <<\EOF
#define STATIC_BUILD 1
EOF
fi
TCL_LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS}"
if test "${SHARED_BUILD}" = "1" -a "${SHLIB_SUFFIX}" != "" ; then
TCL_SHLIB_CFLAGS="${SHLIB_CFLAGS}"
eval "TCL_LIB_FILE=libtcl${TCL_SHARED_LIB_SUFFIX}"
if test "x$DL_OBJS" = "xtclLoadAout.o"; then
MAKE_LIB="\${STLIB_LD} \$@ \${OBJS}"
else
MAKE_LIB="\${SHLIB_LD} ${TCL_SHLIB_LD_EXTRAS} -o \$@ \${OBJS} ${SHLIB_LD_LIBS}"
fi
else
case $system in
BSD/OS*)
;;
AIX-[1-4].*)
;;
*)
SHLIB_LD_LIBS=""
;;
esac
TCL_SHLIB_CFLAGS=""
eval "TCL_LIB_FILE=libtcl${TCL_UNSHARED_LIB_SUFFIX}"
MAKE_LIB="\${STLIB_LD} \$@ \${OBJS}"
fi
# tclConfig.sh needs a version of the _LIB_SUFFIX that has been eval'ed
# so that the backslashes quoting the DBX braces are dropped.
# Trick to replace DBGX with TCL_DBGX
DBGX='${TCL_DBGX}'
eval "TCL_LIB_FILE=${TCL_LIB_FILE}"
# Note: in the following variable, it's important to use the absolute
# path name of the Tcl directory rather than "..": this is because
# AIX remembers this path and will attempt to use it at run-time to look
# up the Tcl library.
if test "$SHARED_BUILD" = "0" -o $TCL_NEEDS_EXP_FILE = 0; then
if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
TCL_LIB_FLAG="-ltcl${TCL_VERSION}\${TCL_DBGX}"
else
TCL_LIB_FLAG="-ltcl`echo ${TCL_VERSION} | tr -d .`\${TCL_DBGX}"
fi
TCL_BUILD_LIB_SPEC="-L`pwd` ${TCL_LIB_FLAG}"
TCL_LIB_SPEC="-L${exec_prefix}/lib ${TCL_LIB_FLAG}"
else
TCL_BUILD_EXP_FILE="lib.exp"
eval "TCL_EXP_FILE=libtcl${TCL_EXPORT_FILE_SUFFIX}"
# Replace DBGX with TCL_DBGX
eval "TCL_EXP_FILE=\"${TCL_EXP_FILE}\""
if test "$GCC" = "yes" ; then
TCL_BUILD_LIB_SPEC="-Wl,-bI:`pwd`/${TCL_BUILD_EXP_FILE} -L`pwd`"
TCL_LIB_SPEC="-Wl,-bI:${exec_prefix}/lib/${TCL_EXP_FILE} -L`pwd`"
else
TCL_BUILD_LIB_SPEC="-bI:`pwd`/${TCL_BUILD_EXP_FILE}"
TCL_LIB_SPEC="-bI:${exec_prefix}/lib/${TCL_EXP_FILE}"
fi
fi
VERSION='${VERSION}'
eval "CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}"
eval "CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}"
eval "CFG_TCL_EXPORT_FILE_SUFFIX=${TCL_EXPORT_FILE_SUFFIX}"
VERSION=${TCL_VERSION}
#--------------------------------------------------------------------
# The statements below define the symbol TCL_PACKAGE_PATH, which
# gives a list of directories that may contain packages. The list
# consists of one directory for machine-dependent binaries and
# another for platform-independent scripts.
#--------------------------------------------------------------------
if test "$prefix" != "$exec_prefix"; then
TCL_PACKAGE_PATH="${exec_prefix}/lib ${prefix}/lib"
else
TCL_PACKAGE_PATH="${prefix}/lib"
fi
#--------------------------------------------------------------------
# The statements below define various symbols relating to Tcl
# stub support.
#--------------------------------------------------------------------
# Replace ${VERSION} with contents of ${TCL_VERSION}
eval "TCL_STUB_LIB_FILE=libtclstub${TCL_UNSHARED_LIB_SUFFIX}"
# Replace DBGX with TCL_DBGX
eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
MAKE_STUB_LIB="\${STLIB_LD} \$@ \${STUB_LIB_OBJS}"
if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
TCL_STUB_LIB_FLAG="-ltclstub${TCL_VERSION}\${TCL_DBGX}"
else
TCL_STUB_LIB_FLAG="-ltclstub`echo ${TCL_VERSION} | tr -d .`\${TCL_DBGX}"
fi
TCL_BUILD_STUB_LIB_SPEC="-L`pwd` ${TCL_STUB_LIB_FLAG}"
TCL_STUB_LIB_SPEC="-L${exec_prefix}/lib ${TCL_STUB_LIB_FLAG}"
TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}"
TCL_STUB_LIB_PATH="${exec_prefix}/lib/${TCL_STUB_LIB_FILE}"
#------------------------------------------------------------------------
# tclConfig.sh refers to this by a different name
#------------------------------------------------------------------------
TCL_SHARED_BUILD=${SHARED_BUILD}
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
if test -w $cache_file; then
echo "updating cache $cache_file"
cat confcache > $cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
fi
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.
ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
case "\$ac_option" in
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.13"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
*) echo "\$ac_cs_usage"; exit 1 ;;
esac
done
ac_given_srcdir=$srcdir
trap 'rm -fr `echo "Makefile tclConfig.sh" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@FFLAGS@%$FFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@RANLIB@%$RANLIB%g
s%@CC@%$CC%g
s%@CPP@%$CPP%g
s%@TCL_THREADS@%$TCL_THREADS%g
s%@LIBOBJS@%$LIBOBJS%g
s%@TCL_LIBS@%$TCL_LIBS%g
s%@MATH_LIBS@%$MATH_LIBS%g
s%@AR@%$AR%g
s%@DL_LIBS@%$DL_LIBS%g
s%@CFLAGS_DEBUG@%$CFLAGS_DEBUG%g
s%@CFLAGS_OPTIMIZE@%$CFLAGS_OPTIMIZE%g
s%@CFLAGS_WARNING@%$CFLAGS_WARNING%g
s%@TCL_VERSION@%$TCL_VERSION%g
s%@TCL_MAJOR_VERSION@%$TCL_MAJOR_VERSION%g
s%@TCL_MINOR_VERSION@%$TCL_MINOR_VERSION%g
s%@TCL_PATCH_LEVEL@%$TCL_PATCH_LEVEL%g
s%@TCL_LIB_FILE@%$TCL_LIB_FILE%g
s%@TCL_LIB_FLAG@%$TCL_LIB_FLAG%g
s%@TCL_LIB_SPEC@%$TCL_LIB_SPEC%g
s%@TCL_STUB_LIB_FILE@%$TCL_STUB_LIB_FILE%g
s%@TCL_STUB_LIB_FLAG@%$TCL_STUB_LIB_FLAG%g
s%@TCL_STUB_LIB_SPEC@%$TCL_STUB_LIB_SPEC%g
s%@TCL_STUB_LIB_PATH@%$TCL_STUB_LIB_PATH%g
s%@TCL_BUILD_STUB_LIB_SPEC@%$TCL_BUILD_STUB_LIB_SPEC%g
s%@TCL_BUILD_STUB_LIB_PATH@%$TCL_BUILD_STUB_LIB_PATH%g
s%@TCL_SRC_DIR@%$TCL_SRC_DIR%g
s%@TCL_BIN_DIR@%$TCL_BIN_DIR%g
s%@TCL_DBGX@%$TCL_DBGX%g
s%@CFG_TCL_SHARED_LIB_SUFFIX@%$CFG_TCL_SHARED_LIB_SUFFIX%g
s%@CFG_TCL_UNSHARED_LIB_SUFFIX@%$CFG_TCL_UNSHARED_LIB_SUFFIX%g
s%@CFG_TCL_EXPORT_FILE_SUFFIX@%$CFG_TCL_EXPORT_FILE_SUFFIX%g
s%@CFLAGS_DEFAULT@%$CFLAGS_DEFAULT%g
s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g
s%@DL_OBJS@%$DL_OBJS%g
s%@LDFLAGS_DEFAULT@%$LDFLAGS_DEFAULT%g
s%@LDFLAGS_DEBUG@%$LDFLAGS_DEBUG%g
s%@LDFLAGS_OPTIMIZE@%$LDFLAGS_OPTIMIZE%g
s%@STLIB_LD@%$STLIB_LD%g
s%@SHLIB_LD@%$SHLIB_LD%g
s%@SHLIB_LD_LIBS@%$SHLIB_LD_LIBS%g
s%@SHLIB_CFLAGS@%$SHLIB_CFLAGS%g
s%@SHLIB_SUFFIX@%$SHLIB_SUFFIX%g
s%@TCL_SHARED_BUILD@%$TCL_SHARED_BUILD%g
s%@TCL_BUILD_LIB_SPEC@%$TCL_BUILD_LIB_SPEC%g
s%@TCL_LD_SEARCH_FLAGS@%$TCL_LD_SEARCH_FLAGS%g
s%@TCL_NEEDS_EXP_FILE@%$TCL_NEEDS_EXP_FILE%g
s%@TCL_BUILD_EXP_FILE@%$TCL_BUILD_EXP_FILE%g
s%@TCL_EXP_FILE@%$TCL_EXP_FILE%g
s%@TCL_LIB_VERSIONS_OK@%$TCL_LIB_VERSIONS_OK%g
s%@TCL_SHARED_LIB_SUFFIX@%$TCL_SHARED_LIB_SUFFIX%g
s%@TCL_SHLIB_CFLAGS@%$TCL_SHLIB_CFLAGS%g
s%@TCL_UNSHARED_LIB_SUFFIX@%$TCL_UNSHARED_LIB_SUFFIX%g
s%@MAKE_LIB@%$MAKE_LIB%g
s%@MAKE_STUB_LIB@%$MAKE_STUB_LIB%g
s%@BUILD_DLTEST@%$BUILD_DLTEST%g
s%@TCL_PACKAGE_PATH@%$TCL_PACKAGE_PATH%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile tclConfig.sh"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
else
ac_dir_suffix= ac_dots=
fi
case "$ac_given_srcdir" in
.) srcdir=.
if test -z "$ac_dots"; then top_srcdir=.
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
*) # Relative path.
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
case "$ac_file" in
*Makefile*) ac_comsub="1i\\
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*
EOF
cat >> $CONFIG_STATUS <<EOF
EOF
cat >> $CONFIG_STATUS <<\EOF
exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
|
Changes to unix/configure.in.
1 2 3 4 5 | #! /bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. AC_INIT(../generic/tcl.h) | > > > < | > > > > > > | 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 |
#! /bin/bash -norc
dnl This file is an input file used by the GNU "autoconf" program to
dnl generate the file "configure", which is run during Tcl installation
dnl to configure the system for the local environment.
#
# RCS: @(#) $Id: configure.in,v 1.57.2.9 2002/02/05 02:46:24 hobbs Exp $
AC_INIT(../generic/tcl.h)
TCL_VERSION=8.3
TCL_MAJOR_VERSION=8
TCL_MINOR_VERSION=3
TCL_PATCH_LEVEL=".4"
VERSION=${TCL_VERSION}
#------------------------------------------------------------------------
# Handle the --prefix=... option
#------------------------------------------------------------------------
if test "${prefix}" = "NONE"; then
prefix=/usr/local
fi
if test "${exec_prefix}" = "NONE"; then
exec_prefix=$prefix
fi
TCL_SRC_DIR=`cd $srcdir/..; pwd`
#------------------------------------------------------------------------
# Standard compiler checks
#------------------------------------------------------------------------
# If the user did not set CFLAGS, set it now to keep
# the AC_PROG_CC macro from adding "-g -O2".
if test "${CFLAGS+set}" != "set" ; then
CFLAGS=""
fi
AC_PROG_RANLIB
SC_ENABLE_GCC
AC_HAVE_HEADERS(unistd.h limits.h)
#------------------------------------------------------------------------
# Threads support
|
| ︙ | ︙ | |||
56 57 58 59 60 61 62 | #-------------------------------------------------------------------- # Supply substitutes for missing POSIX library procedures, or # set flags so Tcl uses alternate procedures. #-------------------------------------------------------------------- # Check if Posix compliant getcwd exists, if not we'll use getwd. | | | | | | | < < < < < < < < < < < < < < < < < < < < < < < < < | 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 | #-------------------------------------------------------------------- # Supply substitutes for missing POSIX library procedures, or # set flags so Tcl uses alternate procedures. #-------------------------------------------------------------------- # Check if Posix compliant getcwd exists, if not we'll use getwd. AC_CHECK_FUNCS(getcwd, , [AC_DEFINE(USEGETWD)]) # Nb: if getcwd uses popen and pwd(1) (like SunOS 4) we should really # define USEGETWD even if the posix getcwd exists. Add a test ? AC_REPLACE_FUNCS(opendir strstr) AC_REPLACE_FUNCS(strtol tmpnam waitpid) AC_CHECK_FUNC(strerror, , [AC_DEFINE(NO_STRERROR)]) AC_CHECK_FUNC(getwd, , [AC_DEFINE(NO_GETWD)]) AC_CHECK_FUNC(wait3, , [AC_DEFINE(NO_WAIT3)]) AC_CHECK_FUNC(uname, , [AC_DEFINE(NO_UNAME)]) AC_CHECK_FUNC(realpath, , [AC_DEFINE(NO_REALPATH)]) #-------------------------------------------------------------------- # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod insome versions of SunOS # - some versions of string.h don't declare procedures such |
| ︙ | ︙ | |||
148 149 150 151 152 153 154 | SC_TIME_HANDLER #-------------------------------------------------------------------- # Some systems (e.g., IRIX 4.0.5) lack the st_blksize field # in struct stat. But we might be able to use fstatfs instead. #-------------------------------------------------------------------- AC_STRUCT_ST_BLKSIZE | | | | 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 |
SC_TIME_HANDLER
#--------------------------------------------------------------------
# Some systems (e.g., IRIX 4.0.5) lack the st_blksize field
# in struct stat. But we might be able to use fstatfs instead.
#--------------------------------------------------------------------
AC_STRUCT_ST_BLKSIZE
AC_CHECK_FUNC(fstatfs, , [AC_DEFINE(NO_FSTATFS)])
#--------------------------------------------------------------------
# Some system have no memcmp or it does not work with 8 bit
# data, this checks it and add memcmp.o to LIBOBJS if needed
#--------------------------------------------------------------------
AC_FUNC_MEMCMP
#--------------------------------------------------------------------
# Some system like SunOS 4 and other BSD like systems
# have no memmove (we assume they have bcopy instead).
# {The replacement define is in compat/string.h}
#--------------------------------------------------------------------
AC_CHECK_FUNC(memmove, , [AC_DEFINE(NO_MEMMOVE) AC_DEFINE(NO_STRING_H)])
#--------------------------------------------------------------------
# On some systems strstr is broken: it returns a pointer even
# even if the original string is empty.
#--------------------------------------------------------------------
AC_MSG_CHECKING([proper strstr implementation])
|
| ︙ | ︙ | |||
258 259 260 261 262 263 264 | #-------------------------------------------------------------------- # If a system doesn't have an opendir function (man, that's old!) # then we have to supply a different version of dirent.h which # is compatible with the substitute version of opendir that's # provided. This version only works with V7-style directories. #-------------------------------------------------------------------- | | | 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | #-------------------------------------------------------------------- # If a system doesn't have an opendir function (man, that's old!) # then we have to supply a different version of dirent.h which # is compatible with the substitute version of opendir that's # provided. This version only works with V7-style directories. #-------------------------------------------------------------------- AC_CHECK_FUNC(opendir, , [AC_DEFINE(USE_DIRENT2_H)]) #-------------------------------------------------------------------- # The check below checks whether <sys/wait.h> defines the type # "union wait" correctly. It's needed because of weirdness in # HP-UX where "union wait" is defined in both the BSD and SYS-V # environments. Checking the usability of WIFEXITED seems to do # the trick. |
| ︙ | ︙ | |||
324 325 326 327 328 329 330 | # 2. SGI systems don't use the BSD form of the gettimeofday function, # but they have a BSDgettimeofday function that can be used instead. # 3. See if gettimeofday is declared in the <sys/time.h> header file. # if not, set the GETTOD_NOT_DECLARED flag so that tclPort.h can # declare it. #-------------------------------------------------------------------- | | > | > < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 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 |
# 2. SGI systems don't use the BSD form of the gettimeofday function,
# but they have a BSDgettimeofday function that can be used instead.
# 3. See if gettimeofday is declared in the <sys/time.h> header file.
# if not, set the GETTOD_NOT_DECLARED flag so that tclPort.h can
# declare it.
#--------------------------------------------------------------------
AC_CHECK_FUNC(BSDgettimeofday,
[AC_DEFINE(HAVE_BSDGETTIMEOFDAY)], [
AC_CHECK_FUNC(gettimeofday, , [AC_DEFINE(NO_GETTOD)])
])
AC_MSG_CHECKING([for gettimeofday declaration])
AC_EGREP_HEADER(gettimeofday, sys/time.h, AC_MSG_RESULT(present), [
AC_MSG_RESULT(missing)
AC_DEFINE(GETTOD_NOT_DECLARED)
])
#--------------------------------------------------------------------
# The following code checks to see whether it is possible to get
# signed chars on this platform. This is needed in order to
# properly generate sign-extended ints from character values.
#--------------------------------------------------------------------
AC_C_CHAR_UNSIGNED
AC_MSG_CHECKING([signed char declarations])
AC_TRY_COMPILE(, [
signed char *p;
p = 0;
], tcl_ok=yes, tcl_ok=no)
AC_MSG_RESULT($tcl_ok)
if test $tcl_ok = yes; then
AC_DEFINE(HAVE_SIGNED_CHAR)
fi
#--------------------------------------------------------------------
# Look for libraries that we will need when compiling the Tcl shell
#--------------------------------------------------------------------
SC_TCL_LINK_LIBS
# Add the threads support libraries
|
| ︙ | ︙ | |||
408 409 410 411 412 413 414 |
#--------------------------------------------------------------------
SC_CONFIG_CFLAGS
SC_ENABLE_SYMBOLS
TCL_DBGX=${DBGX}
| < > < | | < | < | | 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 |
#--------------------------------------------------------------------
SC_CONFIG_CFLAGS
SC_ENABLE_SYMBOLS
TCL_DBGX=${DBGX}
#--------------------------------------------------------------------
# The statements below check for systems where POSIX-style
# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
# On these systems (mostly older ones), use the old BSD-style
# FIONBIO approach instead.
#--------------------------------------------------------------------
SC_BLOCKING_STYLE
#--------------------------------------------------------------------
# The statements below define a collection of symbols related to
# building libtcl as a shared library instead of a static library.
#--------------------------------------------------------------------
TCL_UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}
TCL_SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}
SC_ENABLE_SHARED
TCL_LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS}"
if test "${SHARED_BUILD}" = "1" -a "${SHLIB_SUFFIX}" != "" ; then
TCL_SHLIB_CFLAGS="${SHLIB_CFLAGS}"
eval "TCL_LIB_FILE=libtcl${TCL_SHARED_LIB_SUFFIX}"
if test "x$DL_OBJS" = "xtclLoadAout.o"; then
MAKE_LIB="\${STLIB_LD} \[$]@ \${OBJS}"
else
MAKE_LIB="\${SHLIB_LD} ${TCL_SHLIB_LD_EXTRAS} -o \[$]@ \${OBJS} ${SHLIB_LD_LIBS}"
fi
else
case $system in
BSD/OS*)
;;
AIX-[[1-4]].*)
;;
*)
SHLIB_LD_LIBS=""
;;
esac
TCL_SHLIB_CFLAGS=""
eval "TCL_LIB_FILE=libtcl${TCL_UNSHARED_LIB_SUFFIX}"
MAKE_LIB="\${STLIB_LD} \[$]@ \${OBJS}"
fi
# tclConfig.sh needs a version of the _LIB_SUFFIX that has been eval'ed
# so that the backslashes quoting the DBX braces are dropped.
# Trick to replace DBGX with TCL_DBGX
DBGX='${TCL_DBGX}'
|
| ︙ | ︙ | |||
484 485 486 487 488 489 490 |
else
TCL_BUILD_EXP_FILE="lib.exp"
eval "TCL_EXP_FILE=libtcl${TCL_EXPORT_FILE_SUFFIX}"
# Replace DBGX with TCL_DBGX
eval "TCL_EXP_FILE=\"${TCL_EXP_FILE}\""
| | | | | 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 |
else
TCL_BUILD_EXP_FILE="lib.exp"
eval "TCL_EXP_FILE=libtcl${TCL_EXPORT_FILE_SUFFIX}"
# Replace DBGX with TCL_DBGX
eval "TCL_EXP_FILE=\"${TCL_EXP_FILE}\""
if test "$GCC" = "yes" ; then
TCL_BUILD_LIB_SPEC="-Wl,-bI:`pwd`/${TCL_BUILD_EXP_FILE} -L`pwd`"
TCL_LIB_SPEC="-Wl,-bI:${exec_prefix}/lib/${TCL_EXP_FILE} -L`pwd`"
else
TCL_BUILD_LIB_SPEC="-bI:`pwd`/${TCL_BUILD_EXP_FILE}"
TCL_LIB_SPEC="-bI:${exec_prefix}/lib/${TCL_EXP_FILE}"
fi
fi
VERSION='${VERSION}'
eval "CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}"
eval "CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}"
eval "CFG_TCL_EXPORT_FILE_SUFFIX=${TCL_EXPORT_FILE_SUFFIX}"
VERSION=${TCL_VERSION}
|
| ︙ | ︙ | |||
517 518 519 520 521 522 523 |
#--------------------------------------------------------------------
# The statements below define various symbols relating to Tcl
# stub support.
#--------------------------------------------------------------------
# Replace ${VERSION} with contents of ${TCL_VERSION}
| | | < | < | > > > | | | | | > | > | > | > | | > > > > > | | > | | | < < | | | | | < < < < | > | > | | | 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 |
#--------------------------------------------------------------------
# The statements below define various symbols relating to Tcl
# stub support.
#--------------------------------------------------------------------
# Replace ${VERSION} with contents of ${TCL_VERSION}
eval "TCL_STUB_LIB_FILE=libtclstub${TCL_UNSHARED_LIB_SUFFIX}"
# Replace DBGX with TCL_DBGX
eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \${STUB_LIB_OBJS}"
if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
TCL_STUB_LIB_FLAG="-ltclstub${TCL_VERSION}\${TCL_DBGX}"
else
TCL_STUB_LIB_FLAG="-ltclstub`echo ${TCL_VERSION} | tr -d .`\${TCL_DBGX}"
fi
TCL_BUILD_STUB_LIB_SPEC="-L`pwd` ${TCL_STUB_LIB_FLAG}"
TCL_STUB_LIB_SPEC="-L${exec_prefix}/lib ${TCL_STUB_LIB_FLAG}"
TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}"
TCL_STUB_LIB_PATH="${exec_prefix}/lib/${TCL_STUB_LIB_FILE}"
#------------------------------------------------------------------------
# tclConfig.sh refers to this by a different name
#------------------------------------------------------------------------
TCL_SHARED_BUILD=${SHARED_BUILD}
AC_SUBST(TCL_VERSION)
AC_SUBST(TCL_MAJOR_VERSION)
AC_SUBST(TCL_MINOR_VERSION)
AC_SUBST(TCL_PATCH_LEVEL)
AC_SUBST(TCL_LIB_FILE)
AC_SUBST(TCL_LIB_FLAG)
AC_SUBST(TCL_LIB_SPEC)
AC_SUBST(TCL_STUB_LIB_FILE)
AC_SUBST(TCL_STUB_LIB_FLAG)
AC_SUBST(TCL_STUB_LIB_SPEC)
AC_SUBST(TCL_STUB_LIB_PATH)
AC_SUBST(TCL_BUILD_STUB_LIB_SPEC)
AC_SUBST(TCL_BUILD_STUB_LIB_PATH)
AC_SUBST(TCL_SRC_DIR)
AC_SUBST(TCL_BIN_DIR)
AC_SUBST(TCL_DBGX)
AC_SUBST(CFG_TCL_SHARED_LIB_SUFFIX)
AC_SUBST(CFG_TCL_UNSHARED_LIB_SUFFIX)
AC_SUBST(CFG_TCL_EXPORT_FILE_SUFFIX)
AC_SUBST(CFLAGS)
AC_SUBST(CFLAGS_DEFAULT)
AC_SUBST(EXTRA_CFLAGS)
AC_SUBST(DL_OBJS)
AC_SUBST(LDFLAGS)
AC_SUBST(LDFLAGS_DEFAULT)
AC_SUBST(LDFLAGS_DEBUG)
AC_SUBST(LDFLAGS_OPTIMIZE)
AC_SUBST(AR)
AC_SUBST(RANLIB)
AC_SUBST(STLIB_LD)
AC_SUBST(SHLIB_LD)
AC_SUBST(SHLIB_LD_LIBS)
AC_SUBST(SHLIB_CFLAGS)
AC_SUBST(SHLIB_SUFFIX)
AC_SUBST(TCL_SHARED_BUILD)
AC_SUBST(TCL_BUILD_LIB_SPEC)
AC_SUBST(TCL_LD_SEARCH_FLAGS)
AC_SUBST(TCL_NEEDS_EXP_FILE)
AC_SUBST(TCL_BUILD_EXP_FILE)
AC_SUBST(TCL_EXP_FILE)
AC_SUBST(TCL_LIB_VERSIONS_OK)
AC_SUBST(TCL_SHARED_LIB_SUFFIX)
AC_SUBST(TCL_SHLIB_CFLAGS)
AC_SUBST(TCL_UNSHARED_LIB_SUFFIX)
AC_SUBST(MAKE_LIB)
AC_SUBST(MAKE_STUB_LIB)
AC_SUBST(BUILD_DLTEST)
AC_SUBST(TCL_PACKAGE_PATH)
AC_OUTPUT(Makefile tclConfig.sh)
|
Added unix/dltest/configure.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
case "$ac_option" in
-*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case "$ac_option" in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir="$ac_optarg" ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build="$ac_optarg" ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file="$ac_optarg" ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir="$ac_optarg" ;;
-disable-* | --disable-*)
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
eval "enable_${ac_feature}=no" ;;
-enable-* | --enable-*)
ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "enable_${ac_feature}='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix="$ac_optarg" ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he)
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
EOF
cat << EOF
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
EOF
if test -n "$ac_help"; then
echo "--enable and --with options recognized:$ac_help"
fi
exit 0 ;;
-host | --host | --hos | --ho)
ac_prev=host ;;
-host=* | --host=* | --hos=* | --ho=*)
host="$ac_optarg" ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir="$ac_optarg" ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir="$ac_optarg" ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir="$ac_optarg" ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir="$ac_optarg" ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir="$ac_optarg" ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir="$ac_optarg" ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir="$ac_optarg" ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix="$ac_optarg" ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix="$ac_optarg" ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix="$ac_optarg" ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name="$ac_optarg" ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir="$ac_optarg" ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir="$ac_optarg" ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir="$ac_optarg" ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir="$ac_optarg" ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target="$ac_optarg" ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.13"
exit 0 ;;
-with-* | --with-*)
ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "with_${ac_package}='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`echo $ac_option|sed -e 's/-*without-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
eval "with_${ac_package}=no" ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes="$ac_optarg" ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries="$ac_optarg" ;;
-*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
;;
*)
if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
echo "configure: warning: $ac_option: invalid host type" 1>&2
fi
if test "x$nonopt" != xNONE; then
{ echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
fi
nonopt="$ac_option"
;;
esac
done
if test -n "$ac_prev"; then
{ echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
exec 6>/dev/null
else
exec 6>&1
fi
exec 5>./config.log
echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
ac_configure_args="$ac_configure_args '$ac_arg'" ;;
*) ac_configure_args="$ac_configure_args $ac_arg" ;;
esac
done
# NLS nuisances.
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=pkga.c
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
{ echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
else
{ echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
echo "loading site script $ac_site_file"
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
echo "loading cache $cache_file"
. $cache_file
else
echo "creating cache $cache_file"
> $cache_file
fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
ac_exeext=
ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
ac_n= ac_c='
' ac_t=' '
else
ac_n=-n ac_c= ac_t=
fi
else
ac_n= ac_c='\c' ac_t=
fi
# RCS: @(#) $Id: configure,v 1.1.2.1 2001/04/03 22:10:14 hobbs Exp $
# Recover information that Tcl computed with its configure script.
. ../tclConfig.sh
CC=$TCL_CC
SHLIB_CFLAGS=$TCL_SHLIB_CFLAGS
EXTRA_CFLAGS=$TCL_EXTRA_CFLAGS
SHLIB_LD=$TCL_SHLIB_LD
SHLIB_LD_LIBS=$TCL_SHLIB_LD_LIBS
SHLIB_SUFFIX=$TCL_SHLIB_SUFFIX
SHLIB_VERSION=$TCL_SHLIB_VERSION
TCL_LIBS=$TCL_LIBS
TCL_VERSION=$TCL_VERSION
TCL_DBGX=$TCL_DBGX
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
if test -w $cache_file; then
echo "updating cache $cache_file"
cat confcache > $cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
fi
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.
ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
case "\$ac_option" in
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.13"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
*) echo "\$ac_cs_usage"; exit 1 ;;
esac
done
ac_given_srcdir=$srcdir
trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@FFLAGS@%$FFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@CC@%$CC%g
s%@SHLIB_CFLAGS@%$SHLIB_CFLAGS%g
s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g
s%@SHLIB_LD@%$SHLIB_LD%g
s%@SHLIB_LD_LIBS@%$SHLIB_LD_LIBS%g
s%@SHLIB_SUFFIX@%$SHLIB_SUFFIX%g
s%@SHLIB_VERSION@%$SHLIB_VERSION%g
s%@TCL_BUILD_STUB_LIB_SPEC@%$TCL_BUILD_STUB_LIB_SPEC%g
s%@TCL_LIBS@%$TCL_LIBS%g
s%@TCL_VERSION@%$TCL_VERSION%g
s%@TCL_DBGX@%$TCL_DBGX%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
else
ac_dir_suffix= ac_dots=
fi
case "$ac_given_srcdir" in
.) srcdir=.
if test -z "$ac_dots"; then top_srcdir=.
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
*) # Relative path.
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
case "$ac_file" in
*Makefile*) ac_comsub="1i\\
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*
EOF
cat >> $CONFIG_STATUS <<EOF
EOF
cat >> $CONFIG_STATUS <<\EOF
exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
|
Changes to unix/install-sh.
| ︙ | ︙ | |||
55 56 57 58 59 60 61 62 63 64 65 66 67 68 | -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; *) if [ x"$src" = x ] then src=$1 else | > > > > > | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -S) stripcmd="$stripprog $2" shift shift continue;; *) if [ x"$src" = x ] then src=$1 else |
| ︙ | ︙ |
Changes to unix/mkLinks.
| ︙ | ︙ | |||
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 |
echo "Usage: mkLinks dir"
exit 1
fi
cd $1
echo foo > xyzzyTestingAVeryLongFileName.foo
x=`echo xyzzyTe*`
rm xyzzyTe*
if test "$x" != "xyzzyTestingAVeryLongFileName.foo"; then
exit
fi
if test -r Access.3; then
rm -f Tcl_Access.3
rm -f Tcl_Stat.3
ln Access.3 Tcl_Access.3
ln Access.3 Tcl_Stat.3
fi
if test -r AddErrInfo.3; then
rm -f Tcl_AddObjErrorInfo.3
rm -f Tcl_AddErrorInfo.3
rm -f Tcl_SetErrorCode.3
rm -f Tcl_SetErrorCodeVA.3
rm -f Tcl_PosixError.3
rm -f Tcl_LogCommandInfo.3
ln AddErrInfo.3 Tcl_AddObjErrorInfo.3
ln AddErrInfo.3 Tcl_AddErrorInfo.3
ln AddErrInfo.3 Tcl_SetErrorCode.3
ln AddErrInfo.3 Tcl_SetErrorCodeVA.3
ln AddErrInfo.3 Tcl_PosixError.3
ln AddErrInfo.3 Tcl_LogCommandInfo.3
fi
if test -r Alloc.3; then
rm -f Tcl_Alloc.3
| > > > > > > > | 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 |
echo "Usage: mkLinks dir"
exit 1
fi
cd $1
echo foo > xyzzyTestingAVeryLongFileName.foo
x=`echo xyzzyTe*`
echo foo > xyzzyTestingaverylongfilename.foo
y=`echo xyzzyTestingav*`
rm xyzzyTe*
if test "$x" != "xyzzyTestingAVeryLongFileName.foo"; then
exit
fi
if test "$y" != "xyzzyTestingaverylongfilename.foo"; then
CASEINSENSITIVEFS=1
fi
if test -r Access.3; then
rm -f Tcl_Access.3
rm -f Tcl_Stat.3
ln Access.3 Tcl_Access.3
ln Access.3 Tcl_Stat.3
fi
if test -r AddErrInfo.3; then
rm -f Tcl_AddObjErrorInfo.3
rm -f Tcl_AddErrorInfo.3
rm -f Tcl_SetObjErrorCode.3
rm -f Tcl_SetErrorCode.3
rm -f Tcl_SetErrorCodeVA.3
rm -f Tcl_PosixError.3
rm -f Tcl_LogCommandInfo.3
ln AddErrInfo.3 Tcl_AddObjErrorInfo.3
ln AddErrInfo.3 Tcl_AddErrorInfo.3
ln AddErrInfo.3 Tcl_SetObjErrorCode.3
ln AddErrInfo.3 Tcl_SetErrorCode.3
ln AddErrInfo.3 Tcl_SetErrorCodeVA.3
ln AddErrInfo.3 Tcl_PosixError.3
ln AddErrInfo.3 Tcl_LogCommandInfo.3
fi
if test -r Alloc.3; then
rm -f Tcl_Alloc.3
|
| ︙ | ︙ | |||
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 |
rm -f Tcl_DontCallWhenDeleted.3
ln CallDel.3 Tcl_CallWhenDeleted.3
ln CallDel.3 Tcl_DontCallWhenDeleted.3
fi
if test -r ChnlStack.3; then
rm -f Tcl_StackChannel.3
rm -f Tcl_UnstackChannel.3
ln ChnlStack.3 Tcl_StackChannel.3
ln ChnlStack.3 Tcl_UnstackChannel.3
fi
if test -r CmdCmplt.3; then
rm -f Tcl_CommandComplete.3
ln CmdCmplt.3 Tcl_CommandComplete.3
fi
if test -r Concat.3; then
rm -f Tcl_Concat.3
ln Concat.3 Tcl_Concat.3
fi
if test -r CrtChannel.3; then
rm -f Tcl_CreateChannel.3
rm -f Tcl_GetChannelInstanceData.3
rm -f Tcl_GetChannelType.3
rm -f Tcl_GetChannelName.3
rm -f Tcl_GetChannelHandle.3
rm -f Tcl_GetChannelMode.3
rm -f Tcl_GetChannelBufferSize.3
rm -f Tcl_SetChannelBufferSize.3
rm -f Tcl_NotifyChannel.3
rm -f Tcl_BadChannelOption.3
ln CrtChannel.3 Tcl_CreateChannel.3
ln CrtChannel.3 Tcl_GetChannelInstanceData.3
ln CrtChannel.3 Tcl_GetChannelType.3
ln CrtChannel.3 Tcl_GetChannelName.3
ln CrtChannel.3 Tcl_GetChannelHandle.3
ln CrtChannel.3 Tcl_GetChannelMode.3
ln CrtChannel.3 Tcl_GetChannelBufferSize.3
ln CrtChannel.3 Tcl_SetChannelBufferSize.3
ln CrtChannel.3 Tcl_NotifyChannel.3
ln CrtChannel.3 Tcl_BadChannelOption.3
fi
if test -r CrtChnlHdlr.3; then
rm -f Tcl_CreateChannelHandler.3
rm -f Tcl_DeleteChannelHandler.3
ln CrtChnlHdlr.3 Tcl_CreateChannelHandler.3
ln CrtChnlHdlr.3 Tcl_DeleteChannelHandler.3
fi
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
rm -f Tcl_DontCallWhenDeleted.3
ln CallDel.3 Tcl_CallWhenDeleted.3
ln CallDel.3 Tcl_DontCallWhenDeleted.3
fi
if test -r ChnlStack.3; then
rm -f Tcl_StackChannel.3
rm -f Tcl_UnstackChannel.3
rm -f Tcl_GetStackedChannel.3
ln ChnlStack.3 Tcl_StackChannel.3
ln ChnlStack.3 Tcl_UnstackChannel.3
ln ChnlStack.3 Tcl_GetStackedChannel.3
fi
if test -r CmdCmplt.3; then
rm -f Tcl_CommandComplete.3
ln CmdCmplt.3 Tcl_CommandComplete.3
fi
if test -r Concat.3; then
rm -f Tcl_Concat.3
ln Concat.3 Tcl_Concat.3
fi
if test -r CrtChannel.3; then
rm -f Tcl_CreateChannel.3
rm -f Tcl_GetChannelInstanceData.3
rm -f Tcl_GetChannelType.3
rm -f Tcl_GetChannelName.3
rm -f Tcl_GetChannelHandle.3
rm -f Tcl_GetChannelMode.3
rm -f Tcl_GetChannelBufferSize.3
rm -f Tcl_SetChannelBufferSize.3
rm -f Tcl_NotifyChannel.3
rm -f Tcl_BadChannelOption.3
rm -f Tcl_ChannelName.3
rm -f Tcl_ChannelVersion.3
rm -f Tcl_ChannelBlockModeProc.3
rm -f Tcl_ChannelCloseProc.3
rm -f Tcl_ChannelClose2Proc.3
rm -f Tcl_ChannelInputProc.3
rm -f Tcl_ChannelOutputProc.3
rm -f Tcl_ChannelSeekProc.3
rm -f Tcl_ChannelSetOptionProc.3
rm -f Tcl_ChannelGetOptionProc.3
rm -f Tcl_ChannelWatchProc.3
rm -f Tcl_ChannelGetHandleProc.3
rm -f Tcl_ChannelFlushProc.3
rm -f Tcl_ChannelHandlerProc.3
ln CrtChannel.3 Tcl_CreateChannel.3
ln CrtChannel.3 Tcl_GetChannelInstanceData.3
ln CrtChannel.3 Tcl_GetChannelType.3
ln CrtChannel.3 Tcl_GetChannelName.3
ln CrtChannel.3 Tcl_GetChannelHandle.3
ln CrtChannel.3 Tcl_GetChannelMode.3
ln CrtChannel.3 Tcl_GetChannelBufferSize.3
ln CrtChannel.3 Tcl_SetChannelBufferSize.3
ln CrtChannel.3 Tcl_NotifyChannel.3
ln CrtChannel.3 Tcl_BadChannelOption.3
ln CrtChannel.3 Tcl_ChannelName.3
ln CrtChannel.3 Tcl_ChannelVersion.3
ln CrtChannel.3 Tcl_ChannelBlockModeProc.3
ln CrtChannel.3 Tcl_ChannelCloseProc.3
ln CrtChannel.3 Tcl_ChannelClose2Proc.3
ln CrtChannel.3 Tcl_ChannelInputProc.3
ln CrtChannel.3 Tcl_ChannelOutputProc.3
ln CrtChannel.3 Tcl_ChannelSeekProc.3
ln CrtChannel.3 Tcl_ChannelSetOptionProc.3
ln CrtChannel.3 Tcl_ChannelGetOptionProc.3
ln CrtChannel.3 Tcl_ChannelWatchProc.3
ln CrtChannel.3 Tcl_ChannelGetHandleProc.3
ln CrtChannel.3 Tcl_ChannelFlushProc.3
ln CrtChannel.3 Tcl_ChannelHandlerProc.3
fi
if test -r CrtChnlHdlr.3; then
rm -f Tcl_CreateChannelHandler.3
rm -f Tcl_DeleteChannelHandler.3
ln CrtChnlHdlr.3 Tcl_CreateChannelHandler.3
ln CrtChnlHdlr.3 Tcl_DeleteChannelHandler.3
fi
|
| ︙ | ︙ | |||
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 |
rm -f Tcl_DStringAppend.3
rm -f Tcl_DStringAppendElement.3
rm -f Tcl_DStringStartSublist.3
rm -f Tcl_DStringEndSublist.3
rm -f Tcl_DStringLength.3
rm -f Tcl_DStringValue.3
rm -f Tcl_DStringSetLength.3
rm -f Tcl_DStringFree.3
rm -f Tcl_DStringResult.3
rm -f Tcl_DStringGetResult.3
ln DString.3 Tcl_DStringInit.3
ln DString.3 Tcl_DStringAppend.3
ln DString.3 Tcl_DStringAppendElement.3
ln DString.3 Tcl_DStringStartSublist.3
ln DString.3 Tcl_DStringEndSublist.3
ln DString.3 Tcl_DStringLength.3
ln DString.3 Tcl_DStringValue.3
ln DString.3 Tcl_DStringSetLength.3
ln DString.3 Tcl_DStringFree.3
ln DString.3 Tcl_DStringResult.3
ln DString.3 Tcl_DStringGetResult.3
fi
if test -r DetachPids.3; then
rm -f Tcl_DetachPids.3
rm -f Tcl_ReapDetachedProcs.3
ln DetachPids.3 Tcl_DetachPids.3
ln DetachPids.3 Tcl_ReapDetachedProcs.3
fi
if test -r DoOneEvent.3; then
rm -f Tcl_DoOneEvent.3
ln DoOneEvent.3 Tcl_DoOneEvent.3
fi
if test -r DoWhenIdle.3; then
rm -f Tcl_DoWhenIdle.3
| > > > > | 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 |
rm -f Tcl_DStringAppend.3
rm -f Tcl_DStringAppendElement.3
rm -f Tcl_DStringStartSublist.3
rm -f Tcl_DStringEndSublist.3
rm -f Tcl_DStringLength.3
rm -f Tcl_DStringValue.3
rm -f Tcl_DStringSetLength.3
rm -f Tcl_DStringTrunc.3
rm -f Tcl_DStringFree.3
rm -f Tcl_DStringResult.3
rm -f Tcl_DStringGetResult.3
ln DString.3 Tcl_DStringInit.3
ln DString.3 Tcl_DStringAppend.3
ln DString.3 Tcl_DStringAppendElement.3
ln DString.3 Tcl_DStringStartSublist.3
ln DString.3 Tcl_DStringEndSublist.3
ln DString.3 Tcl_DStringLength.3
ln DString.3 Tcl_DStringValue.3
ln DString.3 Tcl_DStringSetLength.3
ln DString.3 Tcl_DStringTrunc.3
ln DString.3 Tcl_DStringFree.3
ln DString.3 Tcl_DStringResult.3
ln DString.3 Tcl_DStringGetResult.3
fi
if test -r DetachPids.3; then
rm -f Tcl_DetachPids.3
rm -f Tcl_ReapDetachedProcs.3
rm -f Tcl_WaitPid.3
ln DetachPids.3 Tcl_DetachPids.3
ln DetachPids.3 Tcl_ReapDetachedProcs.3
ln DetachPids.3 Tcl_WaitPid.3
fi
if test -r DoOneEvent.3; then
rm -f Tcl_DoOneEvent.3
ln DoOneEvent.3 Tcl_DoOneEvent.3
fi
if test -r DoWhenIdle.3; then
rm -f Tcl_DoWhenIdle.3
|
| ︙ | ︙ | |||
343 344 345 346 347 348 349 |
ln Eval.3 Tcl_GlobalEvalObj.3
ln Eval.3 Tcl_VarEval.3
ln Eval.3 Tcl_VarEvalVA.3
fi
if test -r Exit.3; then
rm -f Tcl_Exit.3
rm -f Tcl_Finalize.3
| < > > < > > | 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 |
ln Eval.3 Tcl_GlobalEvalObj.3
ln Eval.3 Tcl_VarEval.3
ln Eval.3 Tcl_VarEvalVA.3
fi
if test -r Exit.3; then
rm -f Tcl_Exit.3
rm -f Tcl_Finalize.3
rm -f Tcl_CreateExitHandler.3
rm -f Tcl_DeleteExitHandler.3
rm -f Tcl_ExitThread.3
rm -f Tcl_FinalizeThread.3
rm -f Tcl_CreateThreadExitHandler.3
rm -f Tcl_DeleteThreadExitHandler.3
ln Exit.3 Tcl_Exit.3
ln Exit.3 Tcl_Finalize.3
ln Exit.3 Tcl_CreateExitHandler.3
ln Exit.3 Tcl_DeleteExitHandler.3
ln Exit.3 Tcl_ExitThread.3
ln Exit.3 Tcl_FinalizeThread.3
ln Exit.3 Tcl_CreateThreadExitHandler.3
ln Exit.3 Tcl_DeleteThreadExitHandler.3
fi
if test -r ExprLong.3; then
rm -f Tcl_ExprLong.3
rm -f Tcl_ExprDouble.3
rm -f Tcl_ExprBoolean.3
|
| ︙ | ︙ | |||
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 |
fi
if test -r GetHostName.3; then
rm -f Tcl_GetHostName.3
ln GetHostName.3 Tcl_GetHostName.3
fi
if test -r GetIndex.3; then
rm -f Tcl_GetIndexFromObj.3
ln GetIndex.3 Tcl_GetIndexFromObj.3
fi
if test -r GetInt.3; then
rm -f Tcl_GetInt.3
rm -f Tcl_GetDouble.3
rm -f Tcl_GetBoolean.3
ln GetInt.3 Tcl_GetInt.3
ln GetInt.3 Tcl_GetDouble.3
| > > | 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
fi
if test -r GetHostName.3; then
rm -f Tcl_GetHostName.3
ln GetHostName.3 Tcl_GetHostName.3
fi
if test -r GetIndex.3; then
rm -f Tcl_GetIndexFromObj.3
rm -f Tcl_GetIndexFromObjStruct.3
ln GetIndex.3 Tcl_GetIndexFromObj.3
ln GetIndex.3 Tcl_GetIndexFromObjStruct.3
fi
if test -r GetInt.3; then
rm -f Tcl_GetInt.3
rm -f Tcl_GetDouble.3
rm -f Tcl_GetBoolean.3
ln GetInt.3 Tcl_GetInt.3
ln GetInt.3 Tcl_GetDouble.3
|
| ︙ | ︙ | |||
536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 |
fi
if test -r Object.3; then
rm -f Tcl_NewObj.3
rm -f Tcl_DuplicateObj.3
rm -f Tcl_IncrRefCount.3
rm -f Tcl_DecrRefCount.3
rm -f Tcl_IsShared.3
ln Object.3 Tcl_NewObj.3
ln Object.3 Tcl_DuplicateObj.3
ln Object.3 Tcl_IncrRefCount.3
ln Object.3 Tcl_DecrRefCount.3
ln Object.3 Tcl_IsShared.3
fi
if test -r ObjectType.3; then
rm -f Tcl_RegisterObjType.3
rm -f Tcl_GetObjType.3
rm -f Tcl_AppendAllObjTypes.3
rm -f Tcl_ConvertToType.3
ln ObjectType.3 Tcl_RegisterObjType.3
| > > | 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 |
fi
if test -r Object.3; then
rm -f Tcl_NewObj.3
rm -f Tcl_DuplicateObj.3
rm -f Tcl_IncrRefCount.3
rm -f Tcl_DecrRefCount.3
rm -f Tcl_IsShared.3
rm -f Tcl_InvalidateStringRep.3
ln Object.3 Tcl_NewObj.3
ln Object.3 Tcl_DuplicateObj.3
ln Object.3 Tcl_IncrRefCount.3
ln Object.3 Tcl_DecrRefCount.3
ln Object.3 Tcl_IsShared.3
ln Object.3 Tcl_InvalidateStringRep.3
fi
if test -r ObjectType.3; then
rm -f Tcl_RegisterObjType.3
rm -f Tcl_GetObjType.3
rm -f Tcl_AppendAllObjTypes.3
rm -f Tcl_ConvertToType.3
ln ObjectType.3 Tcl_RegisterObjType.3
|
| ︙ | ︙ | |||
671 672 673 674 675 676 677 |
if test -r RegExp.3; then
rm -f Tcl_RegExpMatch.3
rm -f Tcl_RegExpCompile.3
rm -f Tcl_RegExpExec.3
rm -f Tcl_RegExpRange.3
rm -f Tcl_GetRegExpFromObj.3
rm -f Tcl_RegExpMatchObj.3
| | > | > | 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 |
if test -r RegExp.3; then
rm -f Tcl_RegExpMatch.3
rm -f Tcl_RegExpCompile.3
rm -f Tcl_RegExpExec.3
rm -f Tcl_RegExpRange.3
rm -f Tcl_GetRegExpFromObj.3
rm -f Tcl_RegExpMatchObj.3
rm -f Tcl_RegExpExecObj.3
rm -f Tcl_RegExpGetInfo.3
ln RegExp.3 Tcl_RegExpMatch.3
ln RegExp.3 Tcl_RegExpCompile.3
ln RegExp.3 Tcl_RegExpExec.3
ln RegExp.3 Tcl_RegExpRange.3
ln RegExp.3 Tcl_GetRegExpFromObj.3
ln RegExp.3 Tcl_RegExpMatchObj.3
ln RegExp.3 Tcl_RegExpExecObj.3
ln RegExp.3 Tcl_RegExpGetInfo.3
fi
if test -r SaveResult.3; then
rm -f Tcl_SaveResult.3
rm -f Tcl_RestoreResult.3
rm -f Tcl_DiscardResult.3
ln SaveResult.3 Tcl_SaveResult.3
ln SaveResult.3 Tcl_RestoreResult.3
|
| ︙ | ︙ | |||
711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 |
rm -f Tcl_GetObjResult.3
rm -f Tcl_SetResult.3
rm -f Tcl_GetStringResult.3
rm -f Tcl_AppendResult.3
rm -f Tcl_AppendResultVA.3
rm -f Tcl_AppendElement.3
rm -f Tcl_ResetResult.3
ln SetResult.3 Tcl_SetObjResult.3
ln SetResult.3 Tcl_GetObjResult.3
ln SetResult.3 Tcl_SetResult.3
ln SetResult.3 Tcl_GetStringResult.3
ln SetResult.3 Tcl_AppendResult.3
ln SetResult.3 Tcl_AppendResultVA.3
ln SetResult.3 Tcl_AppendElement.3
ln SetResult.3 Tcl_ResetResult.3
fi
if test -r SetVar.3; then
rm -f Tcl_SetVar2Ex.3
rm -f Tcl_SetVar.3
rm -f Tcl_SetVar2.3
rm -f Tcl_ObjSetVar2.3
rm -f Tcl_GetVar2Ex.3
| > > | 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 |
rm -f Tcl_GetObjResult.3
rm -f Tcl_SetResult.3
rm -f Tcl_GetStringResult.3
rm -f Tcl_AppendResult.3
rm -f Tcl_AppendResultVA.3
rm -f Tcl_AppendElement.3
rm -f Tcl_ResetResult.3
rm -f Tcl_FreeResult.3
ln SetResult.3 Tcl_SetObjResult.3
ln SetResult.3 Tcl_GetObjResult.3
ln SetResult.3 Tcl_SetResult.3
ln SetResult.3 Tcl_GetStringResult.3
ln SetResult.3 Tcl_AppendResult.3
ln SetResult.3 Tcl_AppendResultVA.3
ln SetResult.3 Tcl_AppendElement.3
ln SetResult.3 Tcl_ResetResult.3
ln SetResult.3 Tcl_FreeResult.3
fi
if test -r SetVar.3; then
rm -f Tcl_SetVar2Ex.3
rm -f Tcl_SetVar.3
rm -f Tcl_SetVar2.3
rm -f Tcl_ObjSetVar2.3
rm -f Tcl_GetVar2Ex.3
|
| ︙ | ︙ | |||
755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 |
ln SourceRCFile.3 Tcl_SourceRCFile.3
fi
if test -r SplitList.3; then
rm -f Tcl_SplitList.3
rm -f Tcl_Merge.3
rm -f Tcl_ScanElement.3
rm -f Tcl_ConvertElement.3
ln SplitList.3 Tcl_SplitList.3
ln SplitList.3 Tcl_Merge.3
ln SplitList.3 Tcl_ScanElement.3
ln SplitList.3 Tcl_ConvertElement.3
fi
if test -r SplitPath.3; then
rm -f Tcl_SplitPath.3
rm -f Tcl_JoinPath.3
rm -f Tcl_GetPathType.3
ln SplitPath.3 Tcl_SplitPath.3
ln SplitPath.3 Tcl_JoinPath.3
| > > > > | 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 |
ln SourceRCFile.3 Tcl_SourceRCFile.3
fi
if test -r SplitList.3; then
rm -f Tcl_SplitList.3
rm -f Tcl_Merge.3
rm -f Tcl_ScanElement.3
rm -f Tcl_ConvertElement.3
rm -f Tcl_ScanCountedElement.3
rm -f Tcl_ConvertCountedElement.3
ln SplitList.3 Tcl_SplitList.3
ln SplitList.3 Tcl_Merge.3
ln SplitList.3 Tcl_ScanElement.3
ln SplitList.3 Tcl_ConvertElement.3
ln SplitList.3 Tcl_ScanCountedElement.3
ln SplitList.3 Tcl_ConvertCountedElement.3
fi
if test -r SplitPath.3; then
rm -f Tcl_SplitPath.3
rm -f Tcl_JoinPath.3
rm -f Tcl_GetPathType.3
ln SplitPath.3 Tcl_SplitPath.3
ln SplitPath.3 Tcl_JoinPath.3
|
| ︙ | ︙ | |||
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 |
ln StringObj.3 Tcl_AppendUnicodeToObj.3
ln StringObj.3 Tcl_AppendStringsToObj.3
ln StringObj.3 Tcl_AppendStringsToObjVA.3
ln StringObj.3 Tcl_AppendObjToObj.3
ln StringObj.3 Tcl_SetObjLength.3
ln StringObj.3 Tcl_ConcatObj.3
fi
if test -r Thread.3; then
rm -f Tcl_ConditionNotify.3
rm -f Tcl_ConditionWait.3
rm -f Tcl_ConditionFinalize.3
rm -f Tcl_GetThreadData.3
rm -f Tcl_MutexLock.3
rm -f Tcl_MutexUnlock.3
rm -f Tcl_MutexFinalize.3
ln Thread.3 Tcl_ConditionNotify.3
ln Thread.3 Tcl_ConditionWait.3
ln Thread.3 Tcl_ConditionFinalize.3
ln Thread.3 Tcl_GetThreadData.3
ln Thread.3 Tcl_MutexLock.3
ln Thread.3 Tcl_MutexUnlock.3
ln Thread.3 Tcl_MutexFinalize.3
fi
if test -r ToUpper.3; then
rm -f Tcl_UniCharToUpper.3
rm -f Tcl_UniCharToLower.3
rm -f Tcl_UniCharToTitle.3
rm -f Tcl_UtfToUpper.3
rm -f Tcl_UtfToLower.3
| > > > > > > | 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 |
ln StringObj.3 Tcl_AppendUnicodeToObj.3
ln StringObj.3 Tcl_AppendStringsToObj.3
ln StringObj.3 Tcl_AppendStringsToObjVA.3
ln StringObj.3 Tcl_AppendObjToObj.3
ln StringObj.3 Tcl_SetObjLength.3
ln StringObj.3 Tcl_ConcatObj.3
fi
if test -r Tcl_Main.3; then
rm -f Tcl_SetMainLoop.3
ln Tcl_Main.3 Tcl_SetMainLoop.3
fi
if test -r Thread.3; then
rm -f Tcl_ConditionNotify.3
rm -f Tcl_ConditionWait.3
rm -f Tcl_ConditionFinalize.3
rm -f Tcl_GetThreadData.3
rm -f Tcl_MutexLock.3
rm -f Tcl_MutexUnlock.3
rm -f Tcl_MutexFinalize.3
rm -f Tcl_CreateThread.3
ln Thread.3 Tcl_ConditionNotify.3
ln Thread.3 Tcl_ConditionWait.3
ln Thread.3 Tcl_ConditionFinalize.3
ln Thread.3 Tcl_GetThreadData.3
ln Thread.3 Tcl_MutexLock.3
ln Thread.3 Tcl_MutexUnlock.3
ln Thread.3 Tcl_MutexFinalize.3
ln Thread.3 Tcl_CreateThread.3
fi
if test -r ToUpper.3; then
rm -f Tcl_UniCharToUpper.3
rm -f Tcl_UniCharToLower.3
rm -f Tcl_UniCharToTitle.3
rm -f Tcl_UtfToUpper.3
rm -f Tcl_UtfToLower.3
|
| ︙ | ︙ | |||
907 908 909 910 911 912 913 |
ln Utf.3 Tcl_UtfBackslash.3
fi
if test -r WrongNumArgs.3; then
rm -f Tcl_WrongNumArgs.3
ln WrongNumArgs.3 Tcl_WrongNumArgs.3
fi
if test -r http.n; then
| | | | 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 |
ln Utf.3 Tcl_UtfBackslash.3
fi
if test -r WrongNumArgs.3; then
rm -f Tcl_WrongNumArgs.3
ln WrongNumArgs.3 Tcl_WrongNumArgs.3
fi
if test -r http.n; then
if test "${CASEINSENSITIVEFS:-}" != "1"; then rm -f Http.n; fi
if test "${CASEINSENSITIVEFS:-}" != "1"; then ln http.n Http.n; fi
fi
if test -r library.n; then
rm -f auto_execok.n
rm -f auto_import.n
rm -f auto_load.n
rm -f auto_mkindex.n
rm -f auto_mkindex_old.n
|
| ︙ | ︙ | |||
953 954 955 956 957 958 959 |
ln pkgMkIndex.n pkg_mkIndex.n
fi
if test -r safe.n; then
rm -f SafeBase.n
ln safe.n SafeBase.n
fi
if test -r tcltest.n; then
| | | | 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 |
ln pkgMkIndex.n pkg_mkIndex.n
fi
if test -r safe.n; then
rm -f SafeBase.n
ln safe.n SafeBase.n
fi
if test -r tcltest.n; then
if test "${CASEINSENSITIVEFS:-}" != "1"; then rm -f Tcltest.n; fi
if test "${CASEINSENSITIVEFS:-}" != "1"; then ln tcltest.n Tcltest.n; fi
fi
exit 0
|
Changes to unix/mkLinks.tcl.
| ︙ | ︙ | |||
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
echo "Usage: mkLinks dir"
exit 1
fi
cd $1
echo foo > xyzzyTestingAVeryLongFileName.foo
x=`echo xyzzyTe*`
rm xyzzyTe*
if test "$x" != "xyzzyTestingAVeryLongFileName.foo"; then
exit
fi
}
foreach file $argv {
set in [open $file]
set tail [file tail $file]
set ext [file extension $file]
set state begin
while {[gets $in line] >= 0} {
| > > > > > > > > | 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 |
echo "Usage: mkLinks dir"
exit 1
fi
cd $1
echo foo > xyzzyTestingAVeryLongFileName.foo
x=`echo xyzzyTe*`
echo foo > xyzzyTestingaverylongfilename.foo
y=`echo xyzzyTestingav*`
rm xyzzyTe*
if test "$x" != "xyzzyTestingAVeryLongFileName.foo"; then
exit
fi
if test "$y" != "xyzzyTestingaverylongfilename.foo"; then
CASEINSENSITIVEFS=1
fi
}
set case_insensitive_test { if test "${CASEINSENSITIVEFS:-}" != "1"; then}
set case_insensitive_test_fi {; fi}
foreach file $argv {
set in [open $file]
set tail [file tail $file]
set ext [file extension $file]
set state begin
while {[gets $in line] >= 0} {
|
| ︙ | ︙ | |||
52 53 54 55 56 57 58 59 |
regsub {\\-.*} $line {} line
set rmOutput ""
set lnOutput ""
set namelist {}
foreach name [split $line ,] {
regsub -all {(\\)? } $name "" name
if {![string match $name*$ext $tail]} {
lappend namelist $name$ext
| > > > > > > > | | | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
regsub {\\-.*} $line {} line
set rmOutput ""
set lnOutput ""
set namelist {}
foreach name [split $line ,] {
regsub -all {(\\)? } $name "" name
if {![string match $name*$ext $tail]} {
if {[string match -nocase $name*$ext $tail]} {
set tst $case_insensitive_test
set tstfi $case_insensitive_test_fi
} else {
set tst ""
set tstfi ""
}
lappend namelist $name$ext
append rmOutput " $tst rm -f $name$ext$tstfi\n"
append lnOutput " $tst ln $tail $name$ext$tstfi\n"
}
}
if { [llength $namelist] } {
puts "if test -r $tail; then"
puts -nonewline $rmOutput
puts -nonewline $lnOutput
puts "fi"
|
| ︙ | ︙ |
Changes to unix/tcl.m4.
| ︙ | ︙ | |||
27 28 29 30 31 32 33 |
if test x"${no_tcl}" = x ; then
# we reset no_tcl in case something fails here
no_tcl=true
AC_ARG_WITH(tcl, [ --with-tcl directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval})
AC_MSG_CHECKING([for Tcl configuration])
AC_CACHE_VAL(ac_cv_c_tclconfig,[
| | | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
if test x"${no_tcl}" = x ; then
# we reset no_tcl in case something fails here
no_tcl=true
AC_ARG_WITH(tcl, [ --with-tcl directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval})
AC_MSG_CHECKING([for Tcl configuration])
AC_CACHE_VAL(ac_cv_c_tclconfig,[
# First check to see if --with-tcl was specified.
if test x"${with_tclconfig}" != x ; then
if test -f "${with_tclconfig}/tclConfig.sh" ; then
ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
else
AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
fi
fi
|
| ︙ | ︙ | |||
55 56 57 58 59 60 61 |
fi
done
fi
# check in a few common install locations
if test x"${ac_cv_c_tclconfig}" = x ; then
for i in `ls -d ${prefix}/lib 2>/dev/null` \
| | > > > | | 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 |
fi
done
fi
# check in a few common install locations
if test x"${ac_cv_c_tclconfig}" = x ; then
for i in `ls -d ${prefix}/lib 2>/dev/null` \
`ls -d /usr/local/lib 2>/dev/null` \
`ls -d /usr/contrib/lib 2>/dev/null` \
`ls -d /usr/lib 2>/dev/null` \
; do
if test -f "$i/tclConfig.sh" ; then
ac_cv_c_tclconfig=`(cd $i; pwd)`
break
fi
done
fi
# check in a few other private locations
if test x"${ac_cv_c_tclconfig}" = x ; then
for i in \
${srcdir}/../tcl \
`ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
if test -f "$i/unix/tclConfig.sh" ; then
ac_cv_c_tclconfig=`(cd $i/unix; pwd)`
break
fi
|
| ︙ | ︙ | |||
147 148 149 150 151 152 153 |
break
fi
done
fi
# check in a few common install locations
if test x"${ac_cv_c_tkconfig}" = x ; then
for i in `ls -d ${prefix}/lib 2>/dev/null` \
| | > > > | 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
break
fi
done
fi
# check in a few common install locations
if test x"${ac_cv_c_tkconfig}" = x ; then
for i in `ls -d ${prefix}/lib 2>/dev/null` \
`ls -d /usr/local/lib 2>/dev/null` \
`ls -d /usr/contrib/lib 2>/dev/null` \
`ls -d /usr/lib 2>/dev/null` \
; do
if test -f "$i/tkConfig.sh" ; then
ac_cv_c_tkconfig=`(cd $i; pwd)`
break
fi
done
fi
# check in a few other private locations
|
| ︙ | ︙ | |||
238 239 240 241 242 243 244 | # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN(SC_LOAD_TKCONFIG, [ | | | | 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
# Results:
#
# Sets the following vars that should be in tkConfig.sh:
# TK_BIN_DIR
#------------------------------------------------------------------------
AC_DEFUN(SC_LOAD_TKCONFIG, [
AC_MSG_CHECKING([for existence of $TK_BIN_DIR/tkConfig.sh])
if test -f "$TK_BIN_DIR/tkConfig.sh" ; then
AC_MSG_RESULT([loading])
. $TK_BIN_DIR/tkConfig.sh
else
AC_MSG_RESULT([could not find $TK_BIN_DIR/tkConfig.sh])
fi
AC_SUBST(TK_BIN_DIR)
AC_SUBST(TK_SRC_DIR)
|
| ︙ | ︙ | |||
277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
AC_ARG_ENABLE(gcc, [ --enable-gcc allow use of gcc if available [--disable-gcc]],
[ok=$enableval], [ok=no])
if test "$ok" = "yes"; then
CC=gcc
AC_PROG_CC
else
CC=${CC-cc}
fi
])
#------------------------------------------------------------------------
# SC_ENABLE_SHARED --
#
# Allows the building of shared libraries
| > > > > > | 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
AC_ARG_ENABLE(gcc, [ --enable-gcc allow use of gcc if available [--disable-gcc]],
[ok=$enableval], [ok=no])
if test "$ok" = "yes"; then
CC=gcc
AC_PROG_CC
else
CC=${CC-cc}
fi
# Extra check to ensure that we double-check if we are running
# gcc, even though it may not be clear.
if test "$GCC" != "yes" -a `$CC -v 2>&1 | grep -c gcc` != "0" ; then
GCC=yes
fi
])
#------------------------------------------------------------------------
# SC_ENABLE_SHARED --
#
# Allows the building of shared libraries
|
| ︙ | ︙ | |||
343 344 345 346 347 348 349 350 351 352 353 354 355 356 |
#
# Sets the following vars:
# THREADS_LIBS Thread library(s)
#
# Defines the following vars:
# TCL_THREADS
# _REENTRANT
#
#------------------------------------------------------------------------
AC_DEFUN(SC_ENABLE_THREADS, [
AC_MSG_CHECKING(for building with threads)
AC_ARG_ENABLE(threads, [ --enable-threads build with threads],
[tcl_ok=$enableval], [tcl_ok=no])
| > | 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 |
#
# Sets the following vars:
# THREADS_LIBS Thread library(s)
#
# Defines the following vars:
# TCL_THREADS
# _REENTRANT
# _THREAD_SAFE
#
#------------------------------------------------------------------------
AC_DEFUN(SC_ENABLE_THREADS, [
AC_MSG_CHECKING(for building with threads)
AC_ARG_ENABLE(threads, [ --enable-threads build with threads],
[tcl_ok=$enableval], [tcl_ok=no])
|
| ︙ | ︙ | |||
390 391 392 393 394 395 396 |
# Does the pthread-implementation provide
# 'pthread_attr_setstacksize' ?
AC_CHECK_FUNCS(pthread_attr_setstacksize)
else
TCL_THREADS=0
| | > | | | | | > | | | | | 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 |
# Does the pthread-implementation provide
# 'pthread_attr_setstacksize' ?
AC_CHECK_FUNCS(pthread_attr_setstacksize)
else
TCL_THREADS=0
AC_MSG_RESULT([no (default)])
fi
AC_SUBST(TCL_THREADS)
])
#------------------------------------------------------------------------
# SC_ENABLE_SYMBOLS --
#
# Specify if debugging symbols should be used
#
# Arguments:
# none
#
# Requires the following vars to be set in the Makefile:
# CFLAGS_DEBUG
# CFLAGS_OPTIMIZE
# LDFLAGS_DEBUG
# LDFLAGS_OPTIMIZE
#
# Results:
#
# Adds the following arguments to configure:
# --enable-symbols
#
# Defines the following vars:
# CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true
# Sets to $(CFLAGS_OPTIMIZE) if false
# LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
# Sets to $(LDFLAGS_OPTIMIZE) if false
# DBGX Debug library extension
#
#------------------------------------------------------------------------
AC_DEFUN(SC_ENABLE_SYMBOLS, [
AC_MSG_CHECKING([for build with symbols])
AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols [--disable-symbols]], [tcl_ok=$enableval], [tcl_ok=no])
# FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT.
if test "$tcl_ok" = "yes"; then
CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
DBGX=g
AC_MSG_RESULT([yes])
else
CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
DBGX=""
AC_MSG_RESULT([no])
fi
])
#--------------------------------------------------------------------
# SC_CONFIG_CFLAGS
|
| ︙ | ︙ | |||
465 466 467 468 469 470 471 472 473 474 475 476 477 478 | # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically | > > | 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 | # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # STLIB_LD - Base command to use for combining object files # into a static library. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically |
| ︙ | ︙ | |||
510 511 512 513 514 515 516 | # The name of the built export / import file which # should be used to link to the Tcl shared library. # Empty if Tcl is unshared. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode | < | 526 527 528 529 530 531 532 533 534 535 536 537 538 539 | # The name of the built export / import file which # should be used to link to the Tcl shared library. # Empty if Tcl is unshared. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # EXTRA_CFLAGS # # Subst's the following vars: # DL_LIBS # CFLAGS_DEBUG # CFLAGS_OPTIMIZE #-------------------------------------------------------------------- |
| ︙ | ︙ | |||
573 574 575 576 577 578 579 |
if test "`uname -s`" = "AIX" ; then
system=AIX-`uname -v`.`uname -r`
fi
AC_MSG_RESULT($system)
fi
fi
| < < < < < < < < < < | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > | | < < | | < < < < < < < < < | | > | > > > > > > > > > > | | | > > > > | 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 |
if test "`uname -s`" = "AIX" ; then
system=AIX-`uname -v`.`uname -r`
fi
AC_MSG_RESULT($system)
fi
fi
# Step 2: check for existence of -ldl library. This is needed because
# Linux can use either -ldl or -ldld for dynamic loading.
AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
# Step 3: set configuration options based on system name and version.
do64bit_ok=no
EXTRA_CFLAGS=""
TCL_EXPORT_FILE_SUFFIX=""
UNSHARED_LIB_SUFFIX=""
TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`'
ECHO_VERSION='`echo ${VERSION}`'
TCL_LIB_VERSIONS_OK=ok
CFLAGS_DEBUG=-g
CFLAGS_OPTIMIZE=-O
if test "$GCC" = "yes" ; then
CFLAGS_WARNING="-Wall -Wconversion -Wno-implicit-int"
else
CFLAGS_WARNING=""
fi
TCL_NEEDS_EXP_FILE=0
TCL_BUILD_EXP_FILE=""
TCL_EXP_FILE=""
dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed.
dnl AC_CHECK_TOOL(AR, ar, :)
AC_CHECK_PROG(AR, ar, ar)
STLIB_LD='${AR} cr'
case $system in
AIX-5.*)
if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then
# AIX requires the _r compiler when gcc isn't being used
if test "${CC}" != "cc_r" ; then
CC=${CC}_r
fi
AC_MSG_RESULT(Using $CC for compiling with threads)
fi
LIBS="$LIBS -lc"
# AIX-5 uses ELF style dynamic libraries
SHLIB_CFLAGS=""
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
# Note: need the LIBS below, otherwise Tk won't find Tcl's
# symbols when dynamically loaded into tclsh.
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
# AIX-5 has dl* in libc.so
DL_LIBS=""
LDFLAGS=""
if test "$GCC" = "yes" ; then
LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
else
LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
fi
if test "$do64bit" = "yes" ; then
if test "$GCC" = "yes" ; then
AC_MSG_WARN("64bit mode not supported with GCC on $system")
else
do64bit_ok=yes
EXTRA_CFLAGS="-q64"
LDFLAGS="-q64"
fi
fi
;;
AIX-*)
if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then
# AIX requires the _r compiler when gcc isn't being used
if test "${CC}" != "cc_r" ; then
CC=${CC}_r
fi
AC_MSG_RESULT(Using $CC for compiling with threads)
fi
LIBS="$LIBS -lc"
SHLIB_CFLAGS=""
SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
TCL_NEEDS_EXP_FILE=1
TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp'
# AIX v<=4.1 has some different flags than 4.2+
if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then
LIBOBJS="$LIBOBJS tclLoadAix.o"
DL_LIBS="-lld"
fi
# On AIX <=v4 systems, libbsd.a has to be linked in to support
# non-blocking file IO. This library has to be linked in after
# the MATH_LIBS or it breaks the pow() function. The way to
# insure proper sequencing, is to add it to the tail of MATH_LIBS.
# This library also supplies gettimeofday.
#
# AIX does not have a timezone field in struct tm. When the AIX
# bsd library is used, the timezone global and the gettimeofday
# methods are to be avoided for timezone deduction instead, we
# deduce the timezone by comparing the localtime result on a
# known GMT value.
AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no)
if test $libbsd = yes; then
MATH_LIBS="$MATH_LIBS -lbsd"
AC_DEFINE(USE_DELTA_FOR_TZ)
fi
;;
BSD/OS-2.1*|BSD/OS-3*)
SHLIB_CFLAGS=""
SHLIB_LD="shlicc -r"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
|
| ︙ | ︙ | |||
678 679 680 681 682 683 684 | SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="" LD_SEARCH_FLAGS="" ;; | > > > > > > > > > > > > > > > > > > > > > > | | 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 |
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
HP-UX-*.11.*)
SHLIB_SUFFIX=".sl"
AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
if test "$tcl_ok" = yes; then
SHLIB_CFLAGS="+z"
SHLIB_LD="ld -b"
SHLIB_LD_LIBS=""
DL_OBJS="tclLoadShl.o"
DL_LIBS="-ldld"
LDFLAGS="-Wl,-E"
LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
fi
if test "$do64bit" = "yes" ; then
if test "$GCC" = "yes" ; then
AC_MSG_WARN("64bit mode not supported with GCC on $system")
else
do64bit_ok=yes
EXTRA_CFLAGS="+DA2.0W"
LDFLAGS="+DA2.0W $LDFLAGS"
fi
fi
;;
HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*)
SHLIB_SUFFIX=".sl"
AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
if test "$tcl_ok" = yes; then
SHLIB_CFLAGS="+z"
SHLIB_LD="ld -b"
SHLIB_LD_LIBS=""
DL_OBJS="tclLoadShl.o"
|
| ︙ | ︙ | |||
702 703 704 705 706 707 708 |
SHLIB_LD_LIBS='${LIBS}'
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
;;
| > > > > > > > > > > > | | | 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 |
SHLIB_LD_LIBS='${LIBS}'
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
;;
IRIX-5.*)
SHLIB_CFLAGS=""
SHLIB_LD="ld -shared -rdata_shared"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
EXTRA_CFLAGS=""
LDFLAGS=""
;;
IRIX-6.*|IRIX64-6.5*)
SHLIB_CFLAGS=""
SHLIB_LD="ld -n32 -shared -rdata_shared"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
if test "$GCC" = "yes" ; then
EXTRA_CFLAGS="-mabi=n32"
LDFLAGS="-mabi=n32"
else
case $system in
IRIX-6.3)
# Use to build 6.2 compatible binaries on 6.3.
EXTRA_CFLAGS="-n32 -D_OLD_TERMIOS"
|
| ︙ | ︙ | |||
757 758 759 760 761 762 763 764 765 766 767 768 769 770 |
DL_LIBS="-ldl"
LDFLAGS="-rdynamic"
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
else
AC_CHECK_HEADER(dld.h, [
SHLIB_LD="ld -shared"
DL_OBJS="tclLoadDld.o"
DL_LIBS="-ldld"
LDFLAGS=""
LD_SEARCH_FLAGS=""])
fi
if test "`uname -m`" = "alpha" ; then
EXTRA_CFLAGS="-mieee"
fi
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
DL_LIBS="-ldl"
LDFLAGS="-rdynamic"
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
else
AC_CHECK_HEADER(dld.h, [
SHLIB_LD="ld -shared"
DL_OBJS="tclLoadDld.o"
DL_LIBS="-ldld"
LDFLAGS=""
LD_SEARCH_FLAGS=""])
fi
if test "`uname -m`" = "alpha" ; then
EXTRA_CFLAGS="-mieee"
fi
# The combo of gcc + glibc has a bug related
# to inlining of functions like strtod(). The
# -fno-builtin flag should address this problem
# but it does not work. The -fno-inline flag
# is kind of overkill but it works.
# Disable inlining only when one of the
# files in compat/*.c is being linked in.
if test x"${LIBOBJS}" != x ; then
EXTRA_CFLAGS="${EXTRA_CFLAGS} -fno-inline"
fi
;;
GNU*)
SHLIB_CFLAGS="-fPIC"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
if test "$have_dl" = yes; then
SHLIB_LD="${CC} -shared"
DL_OBJS=""
DL_LIBS="-ldl"
LDFLAGS="-rdynamic"
LD_SEARCH_FLAGS=""
else
AC_CHECK_HEADER(dld.h, [
SHLIB_LD="ld -shared"
DL_OBJS=""
DL_LIBS="-ldld"
LDFLAGS=""
LD_SEARCH_FLAGS=""])
fi
if test "`uname -m`" = "alpha" ; then
EXTRA_CFLAGS="-mieee"
fi
|
| ︙ | ︙ | |||
835 836 837 838 839 840 841 842 843 844 845 846 847 848 | SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="-export-dynamic" LD_SEARCH_FLAGS="" ;; NEXTSTEP-*) SHLIB_CFLAGS="" SHLIB_LD="cc -nostdlib -r" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadNext.o" | > > > > > > > > > > > > > > > > > | 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 |
SHLIB_LD="ld -Bshareable -x"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS="-export-dynamic"
LD_SEARCH_FLAGS=""
# FreeBSD doesn't handle version numbers with dots.
UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so'
TCL_LIB_VERSIONS_OK=nodots
;;
Rhapsody-*|Darwin-*)
SHLIB_CFLAGS="-fno-common"
SHLIB_LD="cc -dynamiclib \${LDFLAGS}"
TCL_SHLIB_LD_EXTRAS="-compatibility_version ${TCL_MAJOR_VERSION} -current_version \${VERSION} -install_name \${LIB_RUNTIME_DIR}/\${TCL_LIB_FILE} -prebind -seg1addr a000000"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".dylib"
DL_OBJS="tclLoadDyld.o"
DL_LIBS=""
LDFLAGS="-prebind"
LD_SEARCH_FLAGS=""
CFLAGS_OPTIMIZE="-O3"
EXTRA_CFLAGS="-arch ppc -pipe"
;;
NEXTSTEP-*)
SHLIB_CFLAGS=""
SHLIB_LD="cc -nostdlib -r"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadNext.o"
|
| ︙ | ︙ | |||
883 884 885 886 887 888 889 |
SHLIB_LD='ld -shared -expect_unresolved "*"'
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
| | | < < < > > > > > > > > > > > > > > > > | | 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 |
SHLIB_LD='ld -shared -expect_unresolved "*"'
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
if test "$GCC" != "yes" ; then
EXTRA_CFLAGS="-DHAVE_TZSET -std1"
fi
# see pthread_intro(3) for pthread support on osf1, k.furukawa
if test "${TCL_THREADS}" = "1" ; then
EXTRA_CFLAGS="${EXTRA_CFLAGS} -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
if test "$GCC" = "yes" ; then
LIBS=`echo $LIBS | sed s/-lpthreads//`
LIBS="$LIBS -lpthread -lmach -lexc"
else
EXTRA_CFLAGS="${EXTRA_CFLAGS} -pthread"
LDFLAGS="-pthread"
fi
fi
;;
QNX-6*)
# QNX RTP
# This may work for all QNX, but it was only reported for v6.
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld -Bshareable -x"
SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
# dlopen is in -lc on QNX
DL_LIBS=""
LDFLAGS=""
LD_SEARCH_FLAGS=""
;;
RISCos-*)
SHLIB_CFLAGS="-G 0"
SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".a"
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
;;
SCO_SV-3.2*)
# Note, dlopen is available only on SCO 3.2.5 and greater. However,
# this test works, since "uname -s" was non-standard in 3.2.4 and
# below.
if test "$GCC" = "yes" ; then
SHLIB_CFLAGS="-fPIC -melf"
LDFLAGS="-melf -Wl,-Bexport"
else
SHLIB_CFLAGS="-Kpic -belf"
LDFLAGS="-belf -Wl,-Bexport"
fi
SHLIB_LD="ld -G"
|
| ︙ | ︙ | |||
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 |
# So, the library has to have a name like libtcl75.so.1.0
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
TCL_LIB_VERSIONS_OK=nodots
;;
SunOS-5.[[0-6]]*)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
# Note: need the LIBS below, otherwise Tk won't find Tcl's
# symbols when dynamically loaded into tclsh.
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
;;
SunOS-5*)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
LDFLAGS=""
| > > > > > > > > > > > > < | > > < < | | | 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 |
# So, the library has to have a name like libtcl75.so.1.0
SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
TCL_LIB_VERSIONS_OK=nodots
;;
SunOS-5.[[0-6]]*)
# Note: If _REENTRANT isn't defined, then Solaris
# won't define thread-safe library routines.
AC_DEFINE(_REENTRANT)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
# Note: need the LIBS below, otherwise Tk won't find Tcl's
# symbols when dynamically loaded into tclsh.
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
LDFLAGS=""
LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
;;
SunOS-5*)
# Note: If _REENTRANT isn't defined, then Solaris
# won't define thread-safe library routines.
AC_DEFINE(_REENTRANT)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="/usr/ccs/bin/ld -G -z text"
LDFLAGS=""
if test "$do64bit" = "yes" ; then
arch=`isainfo`
if test "$arch" = "sparcv9 sparc" ; then
if test "$GCC" = "yes" ; then
AC_MSG_WARN("64bit mode not supported with GCC on $system")
else
do64bit_ok=yes
if test "$do64bitVIS" = "yes" ; then
EXTRA_CFLAGS="-xarch=v9a"
LDFLAGS="-xarch=v9a"
else
EXTRA_CFLAGS="-xarch=v9"
LDFLAGS="-xarch=v9"
fi
fi
else
AC_MSG_WARN("64bit mode only supported sparcv9 system")
fi
fi
# Note: need the LIBS below, otherwise Tk won't find Tcl's
# symbols when dynamically loaded into tclsh.
SHLIB_LD_LIBS='${LIBS}'
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
if test "$GCC" = "yes" ; then
LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
else
LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
fi
;;
ULTRIX-4.*)
SHLIB_CFLAGS="-G 0"
SHLIB_SUFFIX=".a"
SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
SHLIB_LD_LIBS='${LIBS}'
DL_OBJS="tclLoadAout.o"
DL_LIBS=""
LDFLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
if test "$GCC" != "yes" ; then
EXTRA_CFLAGS="-DHAVE_TZSET -std1"
fi
;;
UNIX_SV* | UnixWare-5*)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="cc -G"
SHLIB_LD_LIBS=""
|
| ︙ | ︙ | |||
1155 1156 1157 1158 1159 1160 1161 |
fi
# If we're running gcc, then change the C flags for compiling shared
# libraries to the right flags for gcc, instead of those for the
# standard manufacturer compiler.
if test "$DL_OBJS" != "tclLoadNone.o" ; then
| | > > | 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 |
fi
# If we're running gcc, then change the C flags for compiling shared
# libraries to the right flags for gcc, instead of those for the
# standard manufacturer compiler.
if test "$DL_OBJS" != "tclLoadNone.o" ; then
if test "$GCC" = "yes" ; then
case $system in
AIX-*)
;;
BSD/OS*)
;;
IRIX*)
;;
NetBSD-*|FreeBSD-*|OpenBSD-*)
;;
Rhapsody-*|Darwin-*)
;;
RISCos-*)
;;
SCO_SV-3.2*)
;;
ULTRIX-4.*)
;;
|
| ︙ | ︙ | |||
1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 |
if (ioctl(0, TIOCGETP, &t) == 0) {
t.sg_ospeed = 0;
t.sg_flags |= ODDP | EVENP | RAW;
return 0;
}
return 1;
}], tk_ok=sgtty, tk_ok=none, tk_ok=none)
if test $tk_ok = sgtty; then
AC_DEFINE(USE_SGTTY)
fi
fi
fi
AC_MSG_RESULT($tk_ok)
])
#--------------------------------------------------------------------
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
if (ioctl(0, TIOCGETP, &t) == 0) {
t.sg_ospeed = 0;
t.sg_flags |= ODDP | EVENP | RAW;
return 0;
}
return 1;
}], tk_ok=sgtty, tk_ok=none, tk_ok=none)
if test $tk_ok = sgtty; then
AC_DEFINE(USE_SGTTY)
else
AC_TRY_RUN([
#include <termios.h>
#include <errno.h>
main()
{
struct termios t;
if (tcgetattr(0, &t) == 0
|| errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
cfsetospeed(&t, 0);
t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
return 0;
}
return 1;
}], tk_ok=termios, tk_ok=no, tk_ok=no)
if test $tk_ok = termios; then
AC_DEFINE(USE_TERMIOS)
else
AC_TRY_RUN([
#include <termio.h>
#include <errno.h>
main()
{
struct termio t;
if (ioctl(0, TCGETA, &t) == 0
|| errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
return 0;
}
return 1;
}], tk_ok=termio, tk_ok=no, tk_ok=no)
if test $tk_ok = termio; then
AC_DEFINE(USE_TERMIO)
else
AC_TRY_RUN([
#include <sgtty.h>
#include <errno.h>
main()
{
struct sgttyb t;
if (ioctl(0, TIOCGETP, &t) == 0
|| errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
t.sg_ospeed = 0;
t.sg_flags |= ODDP | EVENP | RAW;
return 0;
}
return 1;
}], tk_ok=sgtty, tk_ok=none, tk_ok=none)
if test $tk_ok = sgtty; then
AC_DEFINE(USE_SGTTY)
fi
fi
fi
fi
fi
fi
AC_MSG_RESULT($tk_ok)
])
#--------------------------------------------------------------------
|
| ︙ | ︙ | |||
1327 1328 1329 1330 1331 1332 1333 |
], tcl_ok=yes, tcl_ok=no)
if test $tcl_ok = no; then
AC_DEFINE(NO_DIRENT_H)
fi
AC_MSG_RESULT($tcl_ok)
| | | | | | | | 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 |
], tcl_ok=yes, tcl_ok=no)
if test $tcl_ok = no; then
AC_DEFINE(NO_DIRENT_H)
fi
AC_MSG_RESULT($tcl_ok)
AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H)])
AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H)])
AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H)])
AC_CHECK_HEADER(limits.h, , [AC_DEFINE(NO_LIMITS_H)])
AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
if test $tcl_ok = 0; then
AC_DEFINE(NO_STDLIB_H)
fi
AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
# See also memmove check below for a place where NO_STRING_H can be
# set and why.
if test $tcl_ok = 0; then
AC_DEFINE(NO_STRING_H)
fi
AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H)])
AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H)])
# OS/390 lacks sys/param.h (and doesn't need it, by chance).
AC_HAVE_HEADERS(unistd.h sys/param.h)
])
|
| ︙ | ︙ | |||
1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 |
#
#--------------------------------------------------------------------
AC_DEFUN(SC_TIME_HANDLER, [
AC_CHECK_HEADERS(sys/time.h)
AC_HEADER_TIME
AC_STRUCT_TIMEZONE
AC_MSG_CHECKING([tm_tzadj in struct tm])
AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
[AC_DEFINE(HAVE_TM_TZADJ)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
| > > | 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 |
#
#--------------------------------------------------------------------
AC_DEFUN(SC_TIME_HANDLER, [
AC_CHECK_HEADERS(sys/time.h)
AC_HEADER_TIME
AC_STRUCT_TIMEZONE
AC_CHECK_FUNCS(gmtime_r localtime_r)
AC_MSG_CHECKING([tm_tzadj in struct tm])
AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
[AC_DEFINE(HAVE_TM_TZADJ)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
|
| ︙ | ︙ | |||
1576 1577 1578 1579 1580 1581 1582 |
timezone += 1;
exit (0);],
[AC_DEFINE(HAVE_TIMEZONE_VAR)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
fi
| < < < < < < < < < < < < < | 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 |
timezone += 1;
exit (0);],
[AC_DEFINE(HAVE_TIMEZONE_VAR)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
fi
])
#--------------------------------------------------------------------
# SC_BUGGY_STRTOD
#
# Under Solaris 2.4, strtod returns the wrong value for the
# terminating character under some conditions. Check for this
|
| ︙ | ︙ | |||
1679 1680 1681 1682 1683 1684 1685 |
# already in libc.a. Set compiler flags accordingly.
# Also, Linux requires the "ieee" library for math to work
# right (and it must appear before "-lm").
#--------------------------------------------------------------------
AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
| < < < < < < < < < < < < < < < < < | | 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 |
# already in libc.a. Set compiler flags accordingly.
# Also, Linux requires the "ieee" library for math to work
# right (and it must appear before "-lm").
#--------------------------------------------------------------------
AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
#--------------------------------------------------------------------
# Interactive UNIX requires -linet instead of -lsocket, plus it
# needs net/errno.h to define the socket-related error codes.
#--------------------------------------------------------------------
AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
AC_CHECK_HEADER(net/errno.h, [AC_DEFINE(HAVE_NET_ERRNO_H)])
#--------------------------------------------------------------------
# Check for the existence of the -lsocket and -lnsl libraries.
# The order here is important, so that they end up in the right
# order in the command line generated by make. Here are some
# special considerations:
# 1. Use "connect" and "accept" to check for -lsocket, and
|
| ︙ | ︙ | |||
1726 1727 1728 1729 1730 1731 1732 |
# To get around this problem, check for both libraries together
# if -lsocket doesn't work by itself.
#--------------------------------------------------------------------
tcl_checkBoth=0
AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
if test "$tcl_checkSocket" = 1; then
| | | | | | 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 |
# To get around this problem, check for both libraries together
# if -lsocket doesn't work by itself.
#--------------------------------------------------------------------
tcl_checkBoth=0
AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
if test "$tcl_checkSocket" = 1; then
AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
fi
if test "$tcl_checkBoth" = 1; then
tk_oldLibs=$LIBS
LIBS="$LIBS -lsocket -lnsl"
AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
fi
AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
[LIBS="$LIBS -lnsl"])])
# Don't perform the eval of the libraries here because DL_LIBS
# won't be set until we call SC_CONFIG_CFLAGS
TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
AC_SUBST(TCL_LIBS)
AC_SUBST(MATH_LIBS)
])
|
Changes to unix/tcl.spec.
|
| | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# $Id: tcl.spec,v 1.4.2.4 2001/10/03 20:26:10 hobbs Exp $
# This file is the basis for a binary Tcl RPM for Linux.
%define version 8.3.4
%define directory /usr/local
Summary: Tcl scripting language development environment
Name: tcl
Version: %{version}
Release: 1
Copyright: BSD
Group: Development/Languages
Source: ftp://ftp.scriptics.com/pub/tcl/tcl8_3/tcl%{version}.tar.gz
URL: http://www.tcl-tk.net/
Packager: ActiveState Corporation
Buildroot: /var/tmp/%{name}%{version}
%description
The Tcl (Tool Command Language) provides a powerful platform for
creating integration applications that tie together diverse
applications, protocols, devices, and frameworks. When paired with
the Tk toolkit, Tcl provides the fastest and most powerful way to
|
| ︙ | ︙ |
Changes to unix/tclConfig.sh.in.
1 2 3 4 5 6 7 8 9 10 11 | # tclConfig.sh -- # # This shell script (for sh) is generated automatically by Tcl's # configure script. It will create shell variables for most of # the configuration options discovered by the configure script. # This script is intended to be included by the configure scripts # for Tcl extensions so that they don't have to figure this all # out for themselves. # # The information in this file is specific to a single platform. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # tclConfig.sh -- # # This shell script (for sh) is generated automatically by Tcl's # configure script. It will create shell variables for most of # the configuration options discovered by the configure script. # This script is intended to be included by the configure scripts # for Tcl extensions so that they don't have to figure this all # out for themselves. # # The information in this file is specific to a single platform. # # RCS: @(#) $Id: tclConfig.sh.in,v 1.13.10.1 2001/04/03 22:54:39 hobbs Exp $ # Tcl's version number. TCL_VERSION='@TCL_VERSION@' TCL_MAJOR_VERSION='@TCL_MAJOR_VERSION@' TCL_MINOR_VERSION='@TCL_MINOR_VERSION@' TCL_PATCH_LEVEL='@TCL_PATCH_LEVEL@' |
| ︙ | ︙ | |||
69 70 71 72 73 74 75 | # Extra flags to pass to cc: TCL_EXTRA_CFLAGS='@EXTRA_CFLAGS@' # Base command to use for combining object files into a shared library: TCL_SHLIB_LD='@SHLIB_LD@' | | | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | # Extra flags to pass to cc: TCL_EXTRA_CFLAGS='@EXTRA_CFLAGS@' # Base command to use for combining object files into a shared library: TCL_SHLIB_LD='@SHLIB_LD@' # Base command to use for combining object files into a static library: TCL_STLIB_LD='@STLIB_LD@' # Either '$LIBS' (if dependent libraries should be included when linking # shared libraries) or an empty string. See Tcl's configure.in for more # explanation. TCL_SHLIB_LD_LIBS='@SHLIB_LD_LIBS@' |
| ︙ | ︙ |
Changes to unix/tclLoadAout.c.
| ︙ | ︙ | |||
10 11 12 13 14 15 16 | * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This work was supported in part by the ARPA Manufacturing Automation * and Design Engineering (MADE) Initiative through ARPA contract * F33615-94-C-4400. * | | > > > > > | 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 | * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This work was supported in part by the ARPA Manufacturing Automation * and Design Engineering (MADE) Initiative through ARPA contract * F33615-94-C-4400. * * RCS: @(#) $Id: tclLoadAout.c,v 1.4.2.1 2001/10/16 21:13:36 hobbs Exp $ */ #include "tclInt.h" #include <fcntl.h> #ifdef HAVE_EXEC_AOUT_H # include <sys/exec_aout.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #else # include "../compat/unistd.h" #endif /* * Some systems describe the a.out header in sys/exec.h, and some in * a.out.h. */ #ifdef USE_SYS_EXEC_H |
| ︙ | ︙ | |||
327 328 329 330 331 332 333 |
static int
FindLibraries (interp, fileName, buf)
Tcl_Interp * interp; /* Used for error reporting */
char * fileName; /* Name of the load module */
Tcl_DString * buf; /* Buffer where the -l an -L flags */
{
FILE * f; /* The load module */
| | | 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 |
static int
FindLibraries (interp, fileName, buf)
Tcl_Interp * interp; /* Used for error reporting */
char * fileName; /* Name of the load module */
Tcl_DString * buf; /* Buffer where the -l an -L flags */
{
FILE * f; /* The load module */
int c = 0; /* Byte from the load module */
char * p;
Tcl_DString ds;
CONST char *native;
/* Open the load module */
native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
|
| ︙ | ︙ | |||
466 467 468 469 470 471 472 |
TclGuessPackageName(fileName, bufPtr)
char *fileName; /* Name of file containing package (already
* translated to local form if needed). */
Tcl_DString *bufPtr; /* Initialized empty dstring. Append
* package name to this if possible. */
{
char *p, *q, *r;
| < | | 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 |
TclGuessPackageName(fileName, bufPtr)
char *fileName; /* Name of file containing package (already
* translated to local form if needed). */
Tcl_DString *bufPtr; /* Initialized empty dstring. Append
* package name to this if possible. */
{
char *p, *q, *r;
if ((q = strrchr(fileName,'/'))) {
q++;
} else {
q = fileName;
}
if (!strncmp(q,"lib",3)) {
q+=3;
}
|
| ︙ | ︙ |
Changes to unix/tclLoadDyld.c.
1 2 3 4 | /* * tclLoadDyld.c -- * * This procedure provides a version of the TclLoadFile that | | | < | > | 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 | /* * tclLoadDyld.c -- * * This procedure provides a version of the TclLoadFile that * works with Apple's dyld dynamic loading. This file * provided by Wilfredo Sanchez (wsanchez@apple.com). * This works on Mac OS X. * * Copyright (c) 1995 Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclLoadDyld.c,v 1.2.2.3 2002/02/25 15:20:36 das Exp $ */ #include "tclInt.h" #include "tclPort.h" #include <mach-o/dyld.h> /* *---------------------------------------------------------------------- * * TclpLoadFile -- * |
| ︙ | ︙ | |||
49 50 51 52 53 54 55 |
Tcl_PackageInitProc **proc1Ptr, **proc2Ptr;
/* Where to return the addresses corresponding
* to sym1 and sym2. */
ClientData *clientDataPtr; /* Filled with token for dynamically loaded
* file which will be passed back to
* TclpUnloadFile() to unload the file. */
{
| < < < | > > | > | | | | | | | | | < < | < < < < | < < < < < < < | | > > > | > > > > | > > > > | | | < < > | < < < | < > | | > | < > > > | > > | < > > | | 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 |
Tcl_PackageInitProc **proc1Ptr, **proc2Ptr;
/* Where to return the addresses corresponding
* to sym1 and sym2. */
ClientData *clientDataPtr; /* Filled with token for dynamically loaded
* file which will be passed back to
* TclpUnloadFile() to unload the file. */
{
NSSymbol symbol;
const struct mach_header *dyld_lib;
Tcl_DString newName, ds;
char *native;
native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
dyld_lib = NSAddImage(native,
NSADDIMAGE_OPTION_WITH_SEARCHING |
NSADDIMAGE_OPTION_RETURN_ON_ERROR);
Tcl_DStringFree(&ds);
if (!dyld_lib) {
NSLinkEditErrors editError;
char *name, *msg;
NSLinkEditError(&editError, &errno, &name, &msg);
Tcl_AppendResult(interp, msg, (char *) NULL);
return TCL_ERROR;
}
/*
* dyld adds an underscore to the beginning of symbol names.
*/
native = Tcl_UtfToExternalDString(NULL, sym1, -1, &ds);
Tcl_DStringInit(&newName);
Tcl_DStringAppend(&newName, "_", 1);
native = Tcl_DStringAppend(&newName, native, -1);
symbol = NSLookupSymbolInImage(dyld_lib, native,
NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW |
NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
if(symbol) {
*proc1Ptr = NSAddressOfSymbol(symbol);
*clientDataPtr = NSModuleForSymbol(symbol);
} else {
*proc1Ptr=NULL;
*clientDataPtr=NULL;
}
Tcl_DStringFree(&newName);
Tcl_DStringFree(&ds);
native = Tcl_UtfToExternalDString(NULL, sym2, -1, &ds);
Tcl_DStringInit(&newName);
Tcl_DStringAppend(&newName, "_", 1);
native = Tcl_DStringAppend(&newName, native, -1);
symbol = NSLookupSymbolInImage(dyld_lib, native,
NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW |
NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
if(symbol) {
*proc2Ptr = NSAddressOfSymbol(symbol);
} else {
*proc2Ptr=NULL;
}
Tcl_DStringFree(&newName);
Tcl_DStringFree(&ds);
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* TclpUnloadFile --
|
| ︙ | ︙ |
Changes to unix/tclLoadShl.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclLoadShl.c -- * * This procedure provides a version of the TclLoadFile that works * with the "shl_load" and "shl_findsym" library procedures for * dynamic loading (e.g. for HP machines). * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | | 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 | /* * tclLoadShl.c -- * * This procedure provides a version of the TclLoadFile that works * with the "shl_load" and "shl_findsym" library procedures for * dynamic loading (e.g. for HP machines). * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclLoadShl.c,v 1.3.12.1 2001/09/12 21:26:36 dgp Exp $ */ #include <dl.h> /* * On some HP machines, dl.h defines EXTERN; remove that definition. */ #ifdef EXTERN # undef EXTERN #endif #include "tclInt.h" /* *---------------------------------------------------------------------- * * TclpLoadFile -- * * Dynamically loads a binary code file into memory and returns |
| ︙ | ︙ |
Changes to unix/tclMtherr.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclMatherr.c -- * * This function provides a default implementation of the * "matherr" function, for SYS-V systems where it's needed. * * Copyright (c) 1993-1994 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclMatherr.c -- * * This function provides a default implementation of the * "matherr" function, for SYS-V systems where it's needed. * * Copyright (c) 1993-1994 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMtherr.c,v 1.3.12.1 2001/04/06 18:42:39 hobbs Exp $ */ #include "tclInt.h" #include <math.h> #ifndef TCL_GENERIC_ONLY #include "tclPort.h" |
| ︙ | ︙ | |||
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
*
* Side effects:
* Sets errno based on what's in xPtr.
*
*----------------------------------------------------------------------
*/
int
matherr(xPtr)
struct exception *xPtr; /* Describes error that occurred. */
{
if (TclMathInProgress()) {
return 0;
}
| > > > | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
*
* Side effects:
* Sets errno based on what's in xPtr.
*
*----------------------------------------------------------------------
*/
#ifdef __APPLE_CC__
__private_extern__
#endif
int
matherr(xPtr)
struct exception *xPtr; /* Describes error that occurred. */
{
if (TclMathInProgress()) {
return 0;
}
|
| ︙ | ︙ |
Changes to unix/tclUnixChan.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclUnixChan.c * * Common channel driver for Unix channels based on files, command * pipes and TCP sockets. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclUnixChan.c * * Common channel driver for Unix channels based on files, command * pipes and TCP sockets. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclUnixChan.c,v 1.17.2.3 2002/02/27 18:51:40 andreas_kupries Exp $ */ #include "tclInt.h" /* Internal definitions for Tcl. */ #include "tclPort.h" /* Portability features for Tcl. */ /* * sys/ioctl.h has already been included by tclPort.h. Including termios.h |
| ︙ | ︙ | |||
227 228 229 230 231 232 233 |
int *errorCodePtr));
/*
* This structure describes the channel type structure for file based IO:
*/
static Tcl_ChannelType fileChannelType = {
| | | | | | | | | | | > > > > | | | | | | | | | | > > > > | | | | | | | | | | > > > > | 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 |
int *errorCodePtr));
/*
* This structure describes the channel type structure for file based IO:
*/
static Tcl_ChannelType fileChannelType = {
"file", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
FileCloseProc, /* Close proc. */
FileInputProc, /* Input proc. */
FileOutputProc, /* Output proc. */
FileSeekProc, /* Seek proc. */
NULL, /* Set option proc. */
NULL, /* Get option proc. */
FileWatchProc, /* Initialize notifier. */
FileGetHandleProc, /* Get OS handles out of channel. */
NULL, /* close2proc. */
FileBlockModeProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
#ifdef SUPPORTS_TTY
/*
* This structure describes the channel type structure for serial IO.
* Note that this type is a subclass of the "file" type.
*/
static Tcl_ChannelType ttyChannelType = {
"tty", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
TtyCloseProc, /* Close proc. */
FileInputProc, /* Input proc. */
FileOutputProc, /* Output proc. */
NULL, /* Seek proc. */
TtySetOptionProc, /* Set option proc. */
TtyGetOptionProc, /* Get option proc. */
FileWatchProc, /* Initialize notifier. */
FileGetHandleProc, /* Get OS handles out of channel. */
NULL, /* close2proc. */
FileBlockModeProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
#endif /* SUPPORTS_TTY */
/*
* This structure describes the channel type structure for TCP socket
* based IO:
*/
static Tcl_ChannelType tcpChannelType = {
"tcp", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
TcpCloseProc, /* Close proc. */
TcpInputProc, /* Input proc. */
TcpOutputProc, /* Output proc. */
NULL, /* Seek proc. */
NULL, /* Set option proc. */
TcpGetOptionProc, /* Get option proc. */
TcpWatchProc, /* Initialize notifier. */
TcpGetHandleProc, /* Get OS handles out of channel. */
NULL, /* close2proc. */
TcpBlockModeProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
/*
*----------------------------------------------------------------------
*
* FileBlockModeProc --
|
| ︙ | ︙ | |||
407 408 409 410 411 412 413 414 415 416 417 418 419 420 |
int toWrite; /* How many bytes to write? */
int *errorCodePtr; /* Where to store error code. */
{
FileState *fsPtr = (FileState *) instanceData;
int written;
*errorCodePtr = 0;
written = write(fsPtr->fd, buf, (size_t) toWrite);
if (written > -1) {
return written;
}
*errorCodePtr = errno;
return -1;
}
| > > > > > > > > > | 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
int toWrite; /* How many bytes to write? */
int *errorCodePtr; /* Where to store error code. */
{
FileState *fsPtr = (FileState *) instanceData;
int written;
*errorCodePtr = 0;
if (toWrite == 0) {
/* SF Tcl Bug 465765.
* Do not try to write nothing into a file. STREAM based
* implementations will considers this as EOF (if there is a
* pipe behind the file).
*/
return 0;
}
written = write(fsPtr->fd, buf, (size_t) toWrite);
if (written > -1) {
return written;
}
*errorCodePtr = errno;
return -1;
}
|
| ︙ | ︙ | |||
1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 |
{
int fd, seekFlag, mode, channelPermissions;
FileState *fsPtr;
char *native, *translation;
char channelName[16 + TCL_INTEGER_SPACE];
Tcl_DString ds, buffer;
Tcl_ChannelType *channelTypePtr;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
mode = TclGetOpenMode(interp, modeString, &seekFlag);
if (mode == -1) {
return NULL;
}
switch (mode & (O_RDONLY | O_WRONLY | O_RDWR)) {
| > > > | 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 |
{
int fd, seekFlag, mode, channelPermissions;
FileState *fsPtr;
char *native, *translation;
char channelName[16 + TCL_INTEGER_SPACE];
Tcl_DString ds, buffer;
Tcl_ChannelType *channelTypePtr;
#ifdef SUPPORTS_TTY
int ctl_tty;
#endif
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
mode = TclGetOpenMode(interp, modeString, &seekFlag);
if (mode == -1) {
return NULL;
}
switch (mode & (O_RDONLY | O_WRONLY | O_RDWR)) {
|
| ︙ | ︙ | |||
1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 |
native = Tcl_TranslateFileName(interp, fileName, &buffer);
if (native == NULL) {
return NULL;
}
native = Tcl_UtfToExternalDString(NULL, native, -1, &ds);
fd = open(native, mode, permissions); /* INTL: Native. */
Tcl_DStringFree(&ds);
Tcl_DStringFree(&buffer);
if (fd < 0) {
if (interp != (Tcl_Interp *) NULL) {
Tcl_AppendResult(interp, "couldn't open \"", fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
| > > > | 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 |
native = Tcl_TranslateFileName(interp, fileName, &buffer);
if (native == NULL) {
return NULL;
}
native = Tcl_UtfToExternalDString(NULL, native, -1, &ds);
fd = open(native, mode, permissions); /* INTL: Native. */
#ifdef SUPPORTS_TTY
ctl_tty = (strcmp (native, "/dev/tty") == 0);
#endif
Tcl_DStringFree(&ds);
Tcl_DStringFree(&buffer);
if (fd < 0) {
if (interp != (Tcl_Interp *) NULL) {
Tcl_AppendResult(interp, "couldn't open \"", fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
|
| ︙ | ︙ | |||
1316 1317 1318 1319 1320 1321 1322 |
*/
fcntl(fd, F_SETFD, FD_CLOEXEC);
sprintf(channelName, "file%d", fd);
#ifdef SUPPORTS_TTY
| | | 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 |
*/
fcntl(fd, F_SETFD, FD_CLOEXEC);
sprintf(channelName, "file%d", fd);
#ifdef SUPPORTS_TTY
if (!ctl_tty && isatty(fd)) {
/*
* Initialize the serial port to a set of sane parameters.
* Especially important if the remote device is set to echo and
* the serial port driver was also set to echo -- as soon as a char
* were sent to the serial port, the remote device would echo it,
* then the serial driver would echo it back to the device, etc.
*/
|
| ︙ | ︙ | |||
1411 1412 1413 1414 1415 1416 1417 |
sprintf(channelName, "file%d", fd);
/*
* Look to see if a channel with this fd and the same mode already exists.
* If the fd is used, but the mode doesn't match, return NULL.
*/
| | > < | 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 |
sprintf(channelName, "file%d", fd);
/*
* Look to see if a channel with this fd and the same mode already exists.
* If the fd is used, but the mode doesn't match, return NULL.
*/
for (fsPtr = tsdPtr->firstFilePtr; fsPtr != NULL; fsPtr = fsPtr->nextPtr) {
if (fsPtr->fd == fd) {
return ((mode|TCL_EXCEPTION) == fsPtr->validMask) ?
fsPtr->channel : NULL;
}
}
fsPtr = (FileState *) ckalloc((unsigned) sizeof(FileState));
fsPtr->nextPtr = tsdPtr->firstFilePtr;
tsdPtr->firstFilePtr = fsPtr;
fsPtr->fd = fd;
fsPtr->validMask = mode | TCL_EXCEPTION;
fsPtr->channel = Tcl_CreateChannel(&fileChannelType, channelName,
(ClientData) fsPtr, mode);
return fsPtr->channel;
}
|
| ︙ | ︙ |
Changes to unix/tclUnixFCmd.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclUnixFCmd.c * * This file implements the unix specific portion of file manipulation * subcommands of the "file" command. All filename arguments should * already be translated to native format. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclUnixFCmd.c * * This file implements the unix specific portion of file manipulation * subcommands of the "file" command. All filename arguments should * already be translated to native format. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclUnixFCmd.c,v 1.6.2.1 2001/10/17 19:12:26 hobbs Exp $ * * Portions of this code were derived from NetBSD source code which has * the following copyright notice: * * Copyright (c) 1988, 1993, 1994 * The Regents of the University of California. All rights reserved. * |
| ︙ | ︙ | |||
1086 1087 1088 1089 1090 1091 1092 |
Tcl_AppendResult(interp, "could not read \"", fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
}
groupPtr = getgrgid(statBuf.st_gid); /* INTL: Native. */
if (groupPtr == NULL) {
| | | 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 |
Tcl_AppendResult(interp, "could not read \"", fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
}
groupPtr = getgrgid(statBuf.st_gid); /* INTL: Native. */
if (groupPtr == NULL) {
*attributePtrPtr = Tcl_NewIntObj((int) statBuf.st_gid);
} else {
Tcl_DString ds;
CONST char *utf;
utf = Tcl_ExternalToUtfDString(NULL, groupPtr->gr_name, -1, &ds);
*attributePtrPtr = Tcl_NewStringObj(utf, -1);
Tcl_DStringFree(&ds);
|
| ︙ | ︙ | |||
1137 1138 1139 1140 1141 1142 1143 |
Tcl_AppendResult(interp, "could not read \"", fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
}
pwPtr = getpwuid(statBuf.st_uid); /* INTL: Native. */
if (pwPtr == NULL) {
| | | 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 |
Tcl_AppendResult(interp, "could not read \"", fileName, "\": ",
Tcl_PosixError(interp), (char *) NULL);
return TCL_ERROR;
}
pwPtr = getpwuid(statBuf.st_uid); /* INTL: Native. */
if (pwPtr == NULL) {
*attributePtrPtr = Tcl_NewIntObj((int) statBuf.st_uid);
} else {
Tcl_DString ds;
CONST char *utf;
utf = Tcl_ExternalToUtfDString(NULL, pwPtr->pw_name, -1, &ds);
*attributePtrPtr = Tcl_NewStringObj(utf, Tcl_DStringLength(&ds));
Tcl_DStringFree(&ds);
|
| ︙ | ︙ |
Changes to unix/tclUnixInit.c.
1 2 3 4 5 6 7 8 9 | /* * tclUnixInit.c -- * * Contains the Unix-specific interpreter initialization functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * All rights reserved. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* * tclUnixInit.c -- * * Contains the Unix-specific interpreter initialization functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * All rights reserved. * * RCS: @(#) $Id: tclUnixInit.c,v 1.18.2.3 2001/08/24 16:19:10 dgp Exp $ */ #include "tclInt.h" #include "tclPort.h" #include <locale.h> #if defined(__FreeBSD__) # include <floatingpoint.h> |
| ︙ | ︙ | |||
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
CONST char *lang;
CONST char *encoding;
} LocaleTable;
static CONST LocaleTable localeTable[] = {
{"ja_JP.SJIS", "shiftjis"},
{"ja_JP.EUC", "euc-jp"},
{"ja_JP.JIS", "iso2022-jp"},
{"ja_JP.mscode", "shiftjis"},
{"ja_JP.ujis", "euc-jp"},
{"ja_JP", "euc-jp"},
{"Ja_JP", "shiftjis"},
{"Jp_JP", "shiftjis"},
{"japan", "euc-jp"},
| > | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
CONST char *lang;
CONST char *encoding;
} LocaleTable;
static CONST LocaleTable localeTable[] = {
{"ja_JP.SJIS", "shiftjis"},
{"ja_JP.EUC", "euc-jp"},
{"ja_JP.eucJP", "euc-jp"},
{"ja_JP.JIS", "iso2022-jp"},
{"ja_JP.mscode", "shiftjis"},
{"ja_JP.ujis", "euc-jp"},
{"ja_JP", "euc-jp"},
{"Ja_JP", "shiftjis"},
{"Jp_JP", "shiftjis"},
{"japan", "euc-jp"},
|
| ︙ | ︙ | |||
276 277 278 279 280 281 282 283 284 |
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../library)
* <bindir>/../../<developLib>
* (e.g. /usr/src/tcl8.2/unix/../../tcl8.2/library)
* <bindir>/../../../<devlopLib>
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../../tcl8.2/library)
*/
if (path != NULL) {
Tcl_SplitPath(path, &pathc, &pathv);
| > > > > > > | > > | > < < < < < | < > > > > > > > > > > > | > > | > > | 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 |
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../library)
* <bindir>/../../<developLib>
* (e.g. /usr/src/tcl8.2/unix/../../tcl8.2/library)
* <bindir>/../../../<devlopLib>
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../../tcl8.2/library)
*/
/*
* The variable path holds an absolute path. Take care not to
* overwrite pathv[0] since that might produce a relative path.
*/
if (path != NULL) {
Tcl_SplitPath(path, &pathc, &pathv);
if (pathc > 2) {
str = pathv[pathc - 2];
pathv[pathc - 2] = installLib;
path = Tcl_JoinPath(pathc - 1, pathv, &ds);
pathv[pathc - 2] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 3) {
str = pathv[pathc - 3];
pathv[pathc - 3] = installLib;
path = Tcl_JoinPath(pathc - 2, pathv, &ds);
pathv[pathc - 3] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 2) {
str = pathv[pathc - 2];
pathv[pathc - 2] = "library";
path = Tcl_JoinPath(pathc - 1, pathv, &ds);
pathv[pathc - 2] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 3) {
str = pathv[pathc - 3];
pathv[pathc - 3] = "library";
path = Tcl_JoinPath(pathc - 2, pathv, &ds);
pathv[pathc - 3] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 3) {
str = pathv[pathc - 3];
pathv[pathc - 3] = developLib;
path = Tcl_JoinPath(pathc - 2, pathv, &ds);
pathv[pathc - 3] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 4) {
str = pathv[pathc - 4];
pathv[pathc - 4] = developLib;
path = Tcl_JoinPath(pathc - 3, pathv, &ds);
pathv[pathc - 4] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
ckfree((char *) pathv);
}
|
| ︙ | ︙ | |||
365 366 367 368 369 370 371 |
void
TclpSetInitialEncodings()
{
CONST char *encoding;
int i;
Tcl_Obj *pathPtr;
char *langEnv;
| < | 384 385 386 387 388 389 390 391 392 393 394 395 396 397 |
void
TclpSetInitialEncodings()
{
CONST char *encoding;
int i;
Tcl_Obj *pathPtr;
char *langEnv;
/*
* Determine the current encoding from the LC_* or LANG environment
* variables. We previously used setlocale() to determine the locale,
* but this does not work on some systems (e.g. Linux/i386 RH 5.0).
*/
|
| ︙ | ︙ | |||
428 429 430 431 432 433 434 435 436 |
}
if (encoding == NULL) {
encoding = "iso8859-1";
}
Tcl_SetSystemEncoding(NULL, encoding);
/*
* Initialize the C library's locale subsystem. This is required
| > | < > | | > | < < | < < < | 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 |
}
if (encoding == NULL) {
encoding = "iso8859-1";
}
Tcl_SetSystemEncoding(NULL, encoding);
resetPath:
/*
* Initialize the C library's locale subsystem. This is required
* for input methods to work properly on X11. We only do this for
* LC_CTYPE because that's the necessary one, and we don't want to
* affect LC_TIME here. The side effect of setting the default locale
* should be to load any locale specific modules that are needed by X.
* [BUG: 5422 3345 4236 2522 2521].
*/
setlocale(LC_CTYPE, "");
/*
* In case the initial locale is not "C", ensure that the numeric
* processing is done in "C" locale regardless. This is needed because
* Tcl relies on routines like strtod, but should not have locale
* dependent behavior.
*/
setlocale(LC_NUMERIC, "C");
/*
* Until the system encoding was actually set, the library path was
* actually in the native multi-byte encoding, and not really UTF-8
* as advertised. We cheated as follows:
*
* 1. It was safe to allow the Tcl_SetSystemEncoding() call to
|
| ︙ | ︙ | |||
474 475 476 477 478 479 480 |
* Now that the system encoding was actually successfully set,
* translate all the names in the library path to UTF-8. That way,
* next time we search the library path, we'll translate the names
* from UTF-8 to the system encoding which will be the native
* encoding.
*/
| < | 489 490 491 492 493 494 495 496 497 498 499 500 501 502 |
* Now that the system encoding was actually successfully set,
* translate all the names in the library path to UTF-8. That way,
* next time we search the library path, we'll translate the names
* from UTF-8 to the system encoding which will be the native
* encoding.
*/
pathPtr = TclGetLibraryPath();
if (pathPtr != NULL) {
int objc;
Tcl_Obj **objv;
objc = 0;
Tcl_ListObjGetElements(NULL, pathPtr, &objc, &objv);
|
| ︙ | ︙ |
Changes to unix/tclUnixPipe.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclUnixPipe.c -- * * This file implements the UNIX-specific exec pipeline functions, * the "pipe" channel driver, and the "pid" Tcl command. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclUnixPipe.c -- * * This file implements the UNIX-specific exec pipeline functions, * the "pipe" channel driver, and the "pid" Tcl command. * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclUnixPipe.c,v 1.9.2.2 2001/10/18 01:02:02 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" /* * The following macros convert between TclFile's and fd's. The conversion |
| ︙ | ︙ | |||
63 64 65 66 67 68 69 |
/*
* This structure describes the channel type structure for command pipe
* based IO:
*/
static Tcl_ChannelType pipeChannelType = {
| | | | | | | | | | | > > > > | 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 |
/*
* This structure describes the channel type structure for command pipe
* based IO:
*/
static Tcl_ChannelType pipeChannelType = {
"pipe", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
PipeCloseProc, /* Close proc. */
PipeInputProc, /* Input proc. */
PipeOutputProc, /* Output proc. */
NULL, /* Seek proc. */
NULL, /* Set option proc. */
NULL, /* Get option proc. */
PipeWatchProc, /* Initialize notifier. */
PipeGetHandleProc, /* Get OS handles out of channel. */
NULL, /* close2proc. */
PipeBlockModeProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
/*
*----------------------------------------------------------------------
*
* TclpMakeFile --
*
|
| ︙ | ︙ | |||
182 183 184 185 186 187 188 189 190 191 |
TclpCreateTempFile(contents)
CONST char *contents; /* String to write into temp file, or NULL. */
{
char fileName[L_tmpnam], *native;
Tcl_DString dstring;
int fd;
if (tmpnam(fileName) == NULL) { /* INTL: Native. */
return NULL;
}
| > > > > > | | 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
TclpCreateTempFile(contents)
CONST char *contents; /* String to write into temp file, or NULL. */
{
char fileName[L_tmpnam], *native;
Tcl_DString dstring;
int fd;
/*
* Linux says we should use mkstemp, but Solaris prefers tmpnam.
* We should also check against making more then TMP_MAX of these.
*/
if (tmpnam(fileName) == NULL) { /* INTL: Native. */
return NULL;
}
fd = open(fileName, O_RDWR|O_CREAT|O_EXCL, 0666); /* INTL: Native. */
if (fd == -1) {
return NULL;
}
fcntl(fd, F_SETFD, FD_CLOEXEC);
unlink(fileName); /* INTL: Native. */
if (contents != NULL) {
|
| ︙ | ︙ | |||
440 441 442 443 444 445 446 |
*pidPtr = (Tcl_Pid) pid;
return TCL_OK;
error:
if (pid != -1) {
/*
* Reap the child process now if an error occurred during its
| | > > | | 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 |
*pidPtr = (Tcl_Pid) pid;
return TCL_OK;
error:
if (pid != -1) {
/*
* Reap the child process now if an error occurred during its
* startup. We don't call this with WNOHANG because that can lead to
* defunct processes on an MP system. We shouldn't have to worry
* about hanging here, since this is the error case. [Bug: 6148]
*/
Tcl_WaitPid((Tcl_Pid) pid, &status, 0);
}
if (errPipeIn) {
TclpCloseFile(errPipeIn);
}
if (errPipeOut) {
TclpCloseFile(errPipeOut);
|
| ︙ | ︙ | |||
943 944 945 946 947 948 949 950 951 |
*errorCodePtr = 0;
/*
* Assume there is always enough input available. This will block
* appropriately, and read will unblock as soon as a short read is
* possible, if the channel is in blocking mode. If the channel is
* nonblocking, the read will never block.
*/
| > > > | | < | > | | > > > | 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 |
*errorCodePtr = 0;
/*
* Assume there is always enough input available. This will block
* appropriately, and read will unblock as soon as a short read is
* possible, if the channel is in blocking mode. If the channel is
* nonblocking, the read will never block.
* Some OSes can throw an interrupt error, for which we should
* immediately retry. [Bug #415131]
*/
do {
bytesRead = read (GetFd(psPtr->inFile), buf, (size_t) toRead);
} while ((bytesRead < 0) && (errno == EINTR));
if (bytesRead < 0) {
*errorCodePtr = errno;
return -1;
} else {
return bytesRead;
}
}
/*
*----------------------------------------------------------------------
*
* PipeOutputProc--
*
|
| ︙ | ︙ | |||
983 984 985 986 987 988 989 |
int toWrite; /* How many bytes to write? */
int *errorCodePtr; /* Where to store error code. */
{
PipeState *psPtr = (PipeState *) instanceData;
int written;
*errorCodePtr = 0;
| > > > > > > > | | < | > | | > > > | 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 |
int toWrite; /* How many bytes to write? */
int *errorCodePtr; /* Where to store error code. */
{
PipeState *psPtr = (PipeState *) instanceData;
int written;
*errorCodePtr = 0;
/*
* Some OSes can throw an interrupt error, for which we should
* immediately retry. [Bug #415131]
*/
do {
written = write(GetFd(psPtr->outFile), buf, (size_t) toWrite);
} while ((written < 0) && (errno == EINTR));
if (written < 0) {
*errorCodePtr = errno;
return -1;
} else {
return written;
}
}
/*
*----------------------------------------------------------------------
*
* PipeWatchProc --
*
|
| ︙ | ︙ |
Changes to unix/tclUnixPort.h.
| ︙ | ︙ | |||
15 16 17 18 19 20 21 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclUnixPort.h,v 1.15.2.1 2001/09/01 22:53:45 davygrvy Exp $ */ #ifndef _TCLUNIXPORT #define _TCLUNIXPORT #ifndef _TCLINT # include "tclInt.h" |
| ︙ | ︙ | |||
453 454 455 456 457 458 459 | #define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_LF /* * The following macros have trivial definitions, allowing generic code to * address platform-specific issues. */ | < | 453 454 455 456 457 458 459 460 461 462 463 464 465 466 | #define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_LF /* * The following macros have trivial definitions, allowing generic code to * address platform-specific issues. */ #define TclpGetPid(pid) ((unsigned long) (pid)) #define TclpReleaseFile(file) /* Nothing. */ /* * The following defines wrap the system memory allocation routines for * use by tclAlloc.c. By default off unused on Unix. */ |
| ︙ | ︙ |
Changes to unix/tclUnixThrd.c.
| ︙ | ︙ | |||
645 646 647 648 649 650 651 |
MASTER_UNLOCK;
}
pmutexPtr = *((pthread_mutex_t **)mutexPtr);
pcondPtr = *((pthread_cond_t **)condPtr);
if (timePtr == NULL) {
pthread_cond_wait(pcondPtr, pmutexPtr);
} else {
| > > > > > > > > | > | | 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 |
MASTER_UNLOCK;
}
pmutexPtr = *((pthread_mutex_t **)mutexPtr);
pcondPtr = *((pthread_cond_t **)condPtr);
if (timePtr == NULL) {
pthread_cond_wait(pcondPtr, pmutexPtr);
} else {
Tcl_Time now;
/*
* Make sure to take into account the microsecond component of the
* current time, including possible overflow situations. [Bug #411603]
*/
TclpGetTime(&now);
ptime.tv_sec = timePtr->sec + now.sec +
(timePtr->usec + now.usec) / 1000000;
ptime.tv_nsec = 1000 * ((timePtr->usec + now.usec) % 1000000);
pthread_cond_timedwait(pcondPtr, pmutexPtr, &ptime);
}
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ |
Changes to win/Makefile.in.
1 2 3 4 5 6 7 | # # This file is a Makefile for Tcl. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # # This file is a Makefile for Tcl. If it has the name "Makefile.in" # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # # RCS: @(#) $Id: Makefile.in,v 1.33.2.7 2001/10/03 20:26:10 hobbs Exp $ VERSION = @TCL_VERSION@ #---------------------------------------------------------------- # Things you can change to personalize the Makefile for your own # site (you can make these changes in either Makefile.in or # Makefile, but changes to Makefile will get lost if you re-run |
| ︙ | ︙ | |||
43 44 45 46 47 48 49 | # Path to use at runtime to refer to LIB_INSTALL_DIR: LIB_RUNTIME_DIR = $(libdir) # Directory in which to install the program tclsh: BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir) | | | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # Path to use at runtime to refer to LIB_INSTALL_DIR: LIB_RUNTIME_DIR = $(libdir) # Directory in which to install the program tclsh: BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir) # Directory in which to install the .a or .so binary for the Tcl library: LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir) # Path name to use when installing library scripts. SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY) # Directory in which to install the include file tcl.h: INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir) |
| ︙ | ︙ | |||
75 76 77 78 79 80 81 82 83 84 85 86 87 88 | # warning flags CFLAGS_WARNING = @CFLAGS_WARNING@ # The default switches for optimization or debugging CFLAGS_DEBUG = @CFLAGS_DEBUG@ CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@ # To enable compilation debugging reverse the comment characters on # one of the following lines. COMPILE_DEBUG_FLAGS = #COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG #COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS | > > > > > > > < < < < < < < < < < < < < < | < | | | | | < < < < < | < | > > > > | | > | 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 |
# warning flags
CFLAGS_WARNING = @CFLAGS_WARNING@
# The default switches for optimization or debugging
CFLAGS_DEBUG = @CFLAGS_DEBUG@
CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@
# To change the compiler switches, for example to change from optimization to
# debugging symbols, change the following line:
#CFLAGS = $(CFLAGS_DEBUG)
#CFLAGS = $(CFLAGS_OPTIMIZE)
#CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
CFLAGS = @CFLAGS@ @CFLAGS_DEFAULT@
# To enable compilation debugging reverse the comment characters on
# one of the following lines.
COMPILE_DEBUG_FLAGS =
#COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG
#COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
# Special compiler flags to use when building man2tcl on Windows.
MAN2TCLFLAGS = @MAN2TCLFLAGS@
SRC_DIR = @srcdir@
ROOT_DIR = @srcdir@/..
GENERIC_DIR = @srcdir@/../generic
WIN_DIR = @srcdir@
COMPAT_DIR = @srcdir@/../compat
# Converts a POSIX path to a Windows native path.
CYGPATH = @CYGPATH@
GENERIC_DIR_NATIVE = $(shell $(CYGPATH) '$(GENERIC_DIR)')
WIN_DIR_NATIVE = $(shell $(CYGPATH) '$(WIN_DIR)')
ROOT_DIR_NATIVE = $(shell $(CYGPATH) '$(ROOT_DIR)')
LIBRARY_DIR = $(shell echo '$(ROOT_DIR_NATIVE)/library' | sed 's/\\/\//g' )
DLLSUFFIX = @DLLSUFFIX@
LIBSUFFIX = @LIBSUFFIX@
EXESUFFIX = @EXESUFFIX@
TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@
TCL_DLL_FILE = @TCL_DLL_FILE@
TCL_LIB_FILE = @TCL_LIB_FILE@
DDE_DLL_FILE = tcldde$(VER)${DLLSUFFIX}
DDE_LIB_FILE = tcldde$(VER)${LIBSUFFIX}
REG_DLL_FILE = tclreg$(VER)${DLLSUFFIX}
REG_LIB_FILE = tclreg$(VER)${LIBSUFFIX}
PIPE_DLL_FILE = tclpip$(VER)${DLLSUFFIX}
SHARED_LIBRARIES = $(TCL_DLL_FILE) $(TCL_STUB_LIB_FILE) \
$(DDE_DLL_FILE) $(REG_DLL_FILE) $(PIPE_DLL_FILE)
STATIC_LIBRARIES = $(TCL_LIB_FILE) $(REG_LIB_FILE) $(DDE_LIB_FILE)
TCLSH = tclsh$(VER)${EXESUFFIX}
TCLTEST = tcltest${EXEEXT}
CAT32 = cat32$(EXEEXT)
MAN2TCL = man2tcl$(EXEEXT)
@SET_MAKE@
# Setting the VPATH variable to a list of paths will cause the
# makefile to look into these paths when resolving .c to .obj
# dependencies.
VPATH = $(GENERIC_DIR):$(WIN_DIR):$(COMPAT_DIR)
AR = @AR@
RANLIB = @RANLIB@
CC = @CC@
RC = @RC@
RES = @RES@
AC_FLAGS = @EXTRA_CFLAGS@ @DEFS@
CPPFLAGS = @CPPFLAGS@
LDFLAGS_DEBUG = @LDFLAGS_DEBUG@
LDFLAGS_OPTIMIZE = @LDFLAGS_OPTIMIZE@
LDFLAGS = @LDFLAGS@ @LDFLAGS_DEFAULT@
LDFLAGS_CONSOLE = @LDFLAGS_CONSOLE@
LDFLAGS_WINDOW = @LDFLAGS_WINDOW@
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
STLIB_LD = @STLIB_LD@
SHLIB_LD = @SHLIB_LD@
SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ $(LIBS)
SHLIB_CFLAGS = @SHLIB_CFLAGS@
SHLIB_SUFFIX = @SHLIB_SUFFIX@
VER = @TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@
DOTVER = @TCL_MAJOR_VERSION@.@TCL_MINOR_VERSION@
LIBS = @LIBS@
RMDIR = rm -rf
MKDIR = mkdir -p
SHELL = @SHELL@
RM = rm -f
COPY = cp
CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${TCL_SHLIB_CFLAGS} \
-I"${GENERIC_DIR_NATIVE}" -I"${WIN_DIR_NATIVE}" ${AC_FLAGS} \
${COMPILE_DEBUG_FLAGS}
|
| ︙ | ︙ | |||
225 226 227 228 229 230 231 232 233 234 235 236 237 238 | tclGet.$(OBJEXT) \ tclHash.$(OBJEXT) \ tclHistory.$(OBJEXT) \ tclIndexObj.$(OBJEXT) \ tclInterp.$(OBJEXT) \ tclIO.$(OBJEXT) \ tclIOCmd.$(OBJEXT) \ tclIOSock.$(OBJEXT) \ tclIOUtil.$(OBJEXT) \ tclLink.$(OBJEXT) \ tclLiteral.$(OBJEXT) \ tclListObj.$(OBJEXT) \ tclLoad.$(OBJEXT) \ tclMain.$(OBJEXT) \ | > | 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | tclGet.$(OBJEXT) \ tclHash.$(OBJEXT) \ tclHistory.$(OBJEXT) \ tclIndexObj.$(OBJEXT) \ tclInterp.$(OBJEXT) \ tclIO.$(OBJEXT) \ tclIOCmd.$(OBJEXT) \ tclIOGT.$(OBJEXT) \ tclIOSock.$(OBJEXT) \ tclIOUtil.$(OBJEXT) \ tclLink.$(OBJEXT) \ tclLiteral.$(OBJEXT) \ tclListObj.$(OBJEXT) \ tclLoad.$(OBJEXT) \ tclMain.$(OBJEXT) \ |
| ︙ | ︙ | |||
294 295 296 297 298 299 300 | TCL_DOCS = "$(ROOT_DIR_NATIVE)"/doc/*.[13n] all: binaries libraries doc tcltest: $(TCLTEST) | | | | | | | | | | > | | > | > > > > | > > > > | | | | | | | | | | | | | < | | | > > > | < > > > > | | | | 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 |
TCL_DOCS = "$(ROOT_DIR_NATIVE)"/doc/*.[13n]
all: binaries libraries doc
tcltest: $(TCLTEST)
binaries: @LIBRARIES@ $(TCLSH)
libraries:
doc:
winhelp: $(ROOT_DIR)/tools/man2help.tcl $(MAN2TCL)
TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
./$(TCLSH) "$(ROOT_DIR_NATIVE)"/tools/man2help.tcl tcl "$(VER)" $(TCL_DOCS)
hcw /c /e tcl.hpj
$(MAN2TCL): $(ROOT_DIR)/tools/man2tcl.c
$(CC) $(CFLAGS_OPTIMIZE) $(MAN2TCLFLAGS) -o $(MAN2TCL) "$(ROOT_DIR_NATIVE)"/tools/man2tcl.c
$(TCLSH): $(TCL_LIB_FILE) $(TCL_STUB_LIB_FILE) $(TCLSH_OBJS) tclsh.$(RES)
$(CC) $(CFLAGS) $(TCLSH_OBJS) $(TCL_LIB_FILE) $(LIBS) \
tclsh.$(RES) $(CC_EXENAME) $(LDFLAGS_CONSOLE)
$(TCLTEST): $(TCL_LIB_FILE) $(TCLTEST_OBJS) $(CAT32) tclsh.$(RES)
$(CC) $(CFLAGS) $(TCLTEST_OBJS) $(TCL_LIB_FILE) $(LIBS) \
tclsh.$(RES) $(CC_EXENAME) $(LDFLAGS_CONSOLE)
cat32.$(OBJEXT): cat.c
$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
$(CAT32): cat32.$(OBJEXT)
$(CC) $(CFLAGS) cat32.$(OBJEXT) $(CC_EXENAME) $(LDFLAGS_CONSOLE)
# The following targets are configured by autoconf to generate either
# a shared library or static library
${TCL_STUB_LIB_FILE}: ${STUB_OBJS}
@$(RM) ${TCL_STUB_LIB_FILE}
@MAKE_LIB@ ${STUB_OBJS}
@POST_MAKE_LIB@
${TCL_DLL_FILE}: ${TCL_OBJS} tcl.$(RES)
@$(RM) ${TCL_DLL_FILE}
@MAKE_DLL@ ${TCL_OBJS} tcl.$(RES) $(SHLIB_LD_LIBS)
${TCL_LIB_FILE}: ${TCL_OBJS}
@$(RM) ${TCL_LIB_FILE}
@MAKE_LIB@ ${TCL_OBJS}
@POST_MAKE_LIB@
${DDE_DLL_FILE}: ${DDE_OBJS} ${TCL_STUB_LIB_FILE}
@$(RM) ${DDE_DLL_FILE}
@MAKE_DLL@ ${DDE_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS)
${DDE_LIB_FILE}: ${DDE_OBJS} ${TCL_LIB_FILE}
@$(RM) ${DDE_LIB_FILE}
@MAKE_LIB@ ${DDE_OBJS} ${TCL_LIB_FILE}
${REG_DLL_FILE}: ${REG_OBJS} ${TCL_STUB_LIB_FILE}
@$(RM) ${REG_DLL_FILE}
@MAKE_DLL@ ${REG_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS)
${REG_LIB_FILE}: ${REG_OBJS} ${TCL_LIB_FILE}
@$(RM) ${REG_LIB_FILE}
@MAKE_LIB@ ${REG_OBJS} ${TCL_LIB_FILE}
# PIPE_DLL_FILE is actually an executable, don't build it
# like a DLL.
${PIPE_DLL_FILE}: ${PIPE_OBJS}
@$(RM) ${PIPE_DLL_FILE}
@MAKE_EXE@ $(CFLAGS) ${PIPE_OBJS} $(LIBS) $(LDFLAGS_CONSOLE)
# Add the object extension to the implicit rules. By default .obj is not
# automatically added.
.SUFFIXES: .${OBJEXT}
.SUFFIXES: .$(RES)
.SUFFIXES: .rc
# Special case object targets
tclWinInit.${OBJEXT}: tclWinInit.c
$(CC) -c $(CC_SWITCHES) -DBUILD_tcl $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME)
testMain.${OBJEXT}: tclAppInit.c
$(CC) -c $(CC_SWITCHES) -DTCL_TEST @DEPARG@ $(CC_OBJNAME)
tclTest.${OBJEXT}: tclTest.c
$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
tclTestObj.${OBJEXT}: tclTestObj.c
$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
tclWinTest.${OBJEXT}: tclWinTest.c
$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
tclAppInit.${OBJEXT} : tclAppInit.c
$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
# The following objects should be built using the stub interfaces
tclWinReg.${OBJEXT} : tclWinReg.c
$(CC) -c $(CC_SWITCHES) -DUSE_TCL_STUBS @DEPARG@ $(CC_OBJNAME)
tclWinDde.${OBJEXT} : tclWinDde.c
$(CC) -c $(CC_SWITCHES) -DUSE_TCL_STUBS @DEPARG@ $(CC_OBJNAME)
# The following objects are part of the stub library and should not
# be built as DLL objects but none of the symbols should be exported
tclStubLib.${OBJEXT}: tclStubLib.c
$(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME)
# Implicit rule for all object files that will end up in the Tcl library
.c.${OBJEXT}:
$(CC) -c $(CC_SWITCHES) -DBUILD_tcl @DEPARG@ $(CC_OBJNAME)
.rc.$(RES):
$(RC) @RC_OUT@ $@ @RC_TYPE@ @RC_DEFINES@ @RC_INCLUDE@ "$(GENERIC_DIR_NATIVE)" @RC_INCLUDE@ "$(WIN_DIR_NATIVE)" @DEPARG@
install: all install-binaries install-libraries install-doc
install-binaries: binaries
@for i in "$(LIB_INSTALL_DIR)" "$(BIN_INSTALL_DIR)" ; \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
$(MKDIR) $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@for i in dde1.1 reg1.0; \
do \
if [ ! -d $(LIB_INSTALL_DIR)/$$i ] ; then \
echo "Making directory $(LIB_INSTALL_DIR)/$$i"; \
$(MKDIR) $(LIB_INSTALL_DIR)/$$i; \
else true; \
fi; \
done;
@for i in $(TCL_DLL_FILE) $(TCLSH) $(PIPE_DLL_FILE); \
do \
if [ -f $$i ]; then \
echo "Installing $$i to $(BIN_INSTALL_DIR)/"; \
$(COPY) $$i "$(BIN_INSTALL_DIR)"; \
fi; \
done
@for i in tclConfig.sh $(TCL_LIB_FILE) $(TCL_STUB_LIB_FILE); \
do \
if [ -f $$i ]; then \
echo "Installing $$i to $(LIB_INSTALL_DIR)/"; \
$(COPY) $$i "$(LIB_INSTALL_DIR)"; \
fi; \
done
@if [ -f $(DDE_DLL_FILE) ]; then \
echo installing $(DDE_DLL_FILE); \
$(COPY) $(DDE_DLL_FILE) $(LIB_INSTALL_DIR)/dde1.1; \
$(COPY) $(ROOT_DIR)/library/dde1.1/pkgIndex.tcl $(LIB_INSTALL_DIR)/dde1.1; \
|
| ︙ | ︙ | |||
450 451 452 453 454 455 456 | $(COPY) $(ROOT_DIR)/library/reg1.0/pkgIndex.tcl $(LIB_INSTALL_DIR)/reg1.0; \ fi @if [ -f $(REG_LIB_FILE) ]; then \ echo installing $(REG_LIB_FILE); \ $(COPY) $(REG_LIB_FILE) $(LIB_INSTALL_DIR)/reg1.0; \ fi | | | | > > | > > | > > > > > | | | | > > > > > > > > > | | > > > > | | | 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 |
$(COPY) $(ROOT_DIR)/library/reg1.0/pkgIndex.tcl $(LIB_INSTALL_DIR)/reg1.0; \
fi
@if [ -f $(REG_LIB_FILE) ]; then \
echo installing $(REG_LIB_FILE); \
$(COPY) $(REG_LIB_FILE) $(LIB_INSTALL_DIR)/reg1.0; \
fi
install-libraries: libraries
@for i in $(prefix)/lib $(INCLUDE_INSTALL_DIR) \
$(SCRIPT_INSTALL_DIR); \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
$(MKDIR) $$i; \
else true; \
fi; \
done;
@for i in http1.0 http2.4 opt0.4 encoding msgcat1.1 tcltest1.0; \
do \
if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \
echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \
$(MKDIR) $(SCRIPT_INSTALL_DIR)/$$i; \
else true; \
fi; \
done;
@echo "Installing header files";
@for i in "$(GENERIC_DIR)/tcl.h" "$(GENERIC_DIR)/tclDecls.h" \
"$(GENERIC_DIR)/tclPlatDecls.h" ; \
do \
$(COPY) "$$i" "$(INCLUDE_INSTALL_DIR)"; \
done;
@echo "Installing library files to $(SCRIPT_INSTALL_DIR)";
@for i in $(ROOT_DIR)/library/*.tcl $(ROOT_DIR)/library/tclIndex; \
do \
$(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)"; \
done;
@echo "Installing library http1.0 directory";
@for j in $(ROOT_DIR)/library/http1.0/*.tcl; \
do \
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http1.0"; \
done;
@echo "Installing library http2.4 directory";
@for j in $(ROOT_DIR)/library/http/*.tcl; \
do \
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http2.4"; \
done;
@echo "Installing library opt0.4 directory";
@for j in $(ROOT_DIR)/library/opt/*.tcl; \
do \
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/opt0.4"; \
done;
@echo "Installing library msgcat1.1 directory";
@for j in $(ROOT_DIR)/library/msgcat/*.tcl; \
do \
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/msgcat1.1"; \
done;
@echo "Installing library tcltest1.0 directory";
@for j in $(ROOT_DIR)/library/tcltest1.0/*.tcl; \
do \
$(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/tcltest1.0"; \
done;
@echo "Installing encodings";
@for i in $(ROOT_DIR)/library/encoding/*.enc ; do \
$(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)/encoding"; \
done;
install-doc: doc
# Specifying TESTFLAGS on the command line is the standard way to pass
# args to tcltest, ie:
# % make test TESTFLAGS="-verbose bps -file fileName.test"
test: binaries $(TCLTEST)
TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
./$(TCLTEST) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \
| ./$(CAT32)
# Useful target to launch a built tcltest with the proper path,...
runtest: tcltest
@TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
./tcltest
depend:
Makefile: $(SRC_DIR)/Makefile.in
./config.status
cleanhelp:
$(RM) *.hlp *.cnt *.GID *.rtf man2tcl.exe
clean: cleanhelp
$(RM) *.lib *.a *.exp *.dll *.$(RES) *.${OBJEXT} *~ \#* TAGS a.out
$(RM) $(TCLSH) $(TCLTEST) $(CAT32)
$(RM) *.pch *.ilk *.pdb
distclean: clean
$(RM) Makefile config.status config.cache config.log tclConfig.sh \
tcl.hpj
|
| ︙ | ︙ |
Changes to win/README.
1 2 | Tcl 8.3 for Windows | < < < < | > | | | < < < < < | | | < < < | > | 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 | Tcl 8.3 for Windows RCS: @(#) $Id: README,v 1.16.2.3 2001/10/03 20:26:10 hobbs Exp $ 1. Introduction --------------- This is the directory where you configure and compile the Windows version of Tcl. This directory also contains source files for Tcl that are specific to Microsoft Windows. The information in this file is maintained on the web at: http://www.tcl-tk.net/doc/howto/compile.html#win 2. Compiling Tcl ---------------- In order to compile Tcl for Windows, you need the following items: Tcl 8.3 Source Distribution (plus any patches) Visual C++ 5+ In practice, this release is built with Visual C++ 6.0. In the "win" subdirectory of the source release, you will find "makefile.vc". This is the makefile Visual C++ compiler. You should update the paths at the top of the file to reflect your system configuration. Now you can use "make" (or "nmake" for VC++) to build the tcl libraries and the tclsh executable. In order to use the binaries generated by these makefiles, you will need to place the Tcl script library files someplace where Tcl can find them. Tcl looks in one of following places for the library files: 1) The path specified in the environment variable "TCL_LIBRARY". 2) Relative to the directory containing the current .exe. Tcl will look for a directory "..\lib\tcl8.3" relative to the directory containing the currently running .exe. Note that in order to run tclsh83.exe, you must ensure that tcl83.dll and tclpip83.dll are on your path, in the system directory, or in the directory containing tclsh83.exe. Note: Tcl no longer provides support for Win32s. 3. Test suite ------------- This distribution contains an extensive test suite for Tcl. Some of the tests are timing dependent and will fail from time to time. If a test is failing consistently, please send us a bug report with as much detail as you can manage. Please use the online database at http://tcl.sourceforge.net/ In order to run the test suite, you build the "test" target using the appropriate makefile for your compiler. |
Changes to win/README.binary.
1 2 | Tcl/Tk 8.3 for Windows, Binary Distribution | | | | < | | | | | | | | | | | | 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 | Tcl/Tk 8.3 for Windows, Binary Distribution RCS: @(#) $Id: README.binary,v 1.19.2.4 2001/10/03 20:26:10 hobbs Exp $ 1. Introduction --------------- This directory contains the binary distribution of Tcl/Tk 8.3.4 for Windows. It was compiled with Microsoft Visual C++ 5.0 using Win32 API, so that it will run under Windows NT, 95, 98 and 2000. Tcl provides a powerful platform for creating integration applications that tie together diverse applications, protocols, devices, and frameworks. When paired with the Tk toolkit, Tcl provides the fastest and most powerful way to create GUI applications that run on PCs, Unix, and the Macintosh. Tcl can also be used for a variety of web-related tasks and for creating powerful command languages for applications. Tcl is maintained, enhanced, and distributed freely by the Tcl community. 2. Documentation ---------------- The home of Tcl and Tk sources and bug database on the Web is at: http://tcl.sourceforge.net/ The home page for the Tcl Developer Xchange is at: http://www.tcl-tk.net/ The home page for the Tcl/Tk release is http://www.tcl-tk.net/software/tcltk/ Detailed release notes can be found at http://sourceforge.net/project/showfiles.php?group_id=10894 There are many Tcl books on the market. Most are listed at http://www.tcl-tk.net/resource/doc/books/ There are notes about compiling Tcl at http://www.tcl-tk.net/doc/howto/compile.html 3. Installation --------------- The binary release is distributed as a self-extracting archive called tcl<version>.exe. The setup program which will prompt you for an installation directory. It will create the installation heirarchy under the specified directory, and install a wish application icon under the program manager group of your choice. We are no longer supporting use of Tcl with 16-bit versions of Windows. Microsoft has completely dropped support of the Win32s subsystem. |
| ︙ | ︙ | |||
77 78 79 80 81 82 83 | systems. 6. Reporting Bugs ----------------- If you have comments or bug reports for the Windows version of Tcl, please use our online database at: | | | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | systems. 6. Reporting Bugs ----------------- If you have comments or bug reports for the Windows version of Tcl, please use our online database at: http://tcl.sourceforge.net/ or post them to the newsgroup comp.lang.tcl. 7. Tcl newsgroup ----------------- There is a network news group "comp.lang.tcl" intended for the exchange |
| ︙ | ︙ | |||
120 121 122 123 124 125 126 | releases, and patches. You can contribute patches by sending them to <patches@scriptics.com>. You can also recommend more URLs for the resource center using the forms labeled "Add a Resource". 10. Mailing lists ---------------- | < < < | < < | < < | | < < < < | < < < | < < < < | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | releases, and patches. You can contribute patches by sending them to <patches@scriptics.com>. You can also recommend more URLs for the resource center using the forms labeled "Add a Resource". 10. Mailing lists ---------------- Several mailing lists are hosted at SourceForge to discuss development or use issues (like Macintosh and Windows topics). For more information and to subscribe, visit: http://sourceforge.net/projects/tcl/ and go to the Mailing Lists page. |
Added win/configure.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
--enable-gcc allow use of gcc if available [--disable-gcc]"
ac_help="$ac_help
--enable-threads build with threads"
ac_help="$ac_help
--enable-shared build and link with shared libraries [--enable-shared]"
ac_help="$ac_help
--enable-64bit enable 64bit support (where applicable)"
ac_help="$ac_help
--enable-symbols build with debugging symbols [--disable-symbols]"
# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
case "$ac_option" in
-*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case "$ac_option" in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir="$ac_optarg" ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build="$ac_optarg" ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file="$ac_optarg" ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir="$ac_optarg" ;;
-disable-* | --disable-*)
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
eval "enable_${ac_feature}=no" ;;
-enable-* | --enable-*)
ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "enable_${ac_feature}='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix="$ac_optarg" ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he)
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
EOF
cat << EOF
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
EOF
if test -n "$ac_help"; then
echo "--enable and --with options recognized:$ac_help"
fi
exit 0 ;;
-host | --host | --hos | --ho)
ac_prev=host ;;
-host=* | --host=* | --hos=* | --ho=*)
host="$ac_optarg" ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir="$ac_optarg" ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir="$ac_optarg" ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir="$ac_optarg" ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir="$ac_optarg" ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir="$ac_optarg" ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir="$ac_optarg" ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir="$ac_optarg" ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix="$ac_optarg" ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix="$ac_optarg" ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix="$ac_optarg" ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name="$ac_optarg" ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir="$ac_optarg" ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir="$ac_optarg" ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir="$ac_optarg" ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir="$ac_optarg" ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target="$ac_optarg" ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.13"
exit 0 ;;
-with-* | --with-*)
ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "with_${ac_package}='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`echo $ac_option|sed -e 's/-*without-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
eval "with_${ac_package}=no" ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes="$ac_optarg" ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries="$ac_optarg" ;;
-*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
;;
*)
if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
echo "configure: warning: $ac_option: invalid host type" 1>&2
fi
if test "x$nonopt" != xNONE; then
{ echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
fi
nonopt="$ac_option"
;;
esac
done
if test -n "$ac_prev"; then
{ echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
exec 6>/dev/null
else
exec 6>&1
fi
exec 5>./config.log
echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
ac_configure_args="$ac_configure_args '$ac_arg'" ;;
*) ac_configure_args="$ac_configure_args $ac_arg" ;;
esac
done
# NLS nuisances.
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=../generic/tcl.h
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
{ echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
else
{ echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
echo "loading site script $ac_site_file"
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
echo "loading cache $cache_file"
. $cache_file
else
echo "creating cache $cache_file"
> $cache_file
fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
ac_exeext=
ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
ac_n= ac_c='
' ac_t=' '
else
ac_n=-n ac_c= ac_t=
fi
else
ac_n= ac_c='\c' ac_t=
fi
TCL_VERSION=8.3
TCL_MAJOR_VERSION=8
TCL_MINOR_VERSION=3
TCL_PATCH_LEVEL=".4"
VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION
#------------------------------------------------------------------------
# Handle the --prefix=... option
#------------------------------------------------------------------------
if test "${prefix}" = "NONE"; then
prefix=/usr/local
fi
if test "${exec_prefix}" = "NONE"; then
exec_prefix=$prefix
fi
#--------------------------------------------------------------------
# Check whether --enable-gcc or --disable-gcc was given. Do this
# before AC_PROG_CC and AC_CYGWIN are called so the compiler can
# be fully tested by built-in autoconf tools.
#--------------------------------------------------------------------
# Check whether --enable-gcc or --disable-gcc was given.
if test "${enable_gcc+set}" = set; then
enableval="$enable_gcc"
ok=$enableval
else
ok=no
fi
if test "$ok" = "yes"; then
# Quick hack to simulate a real cross check
# The right way to do this is to use AC_CHECK_TOOL
# correctly, but this is the minimal change
# we need until the real fix is ready.
if test "$host" != "$build" ; then
if test -z "$CC"; then
CC=${host}-gcc
fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:580: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="gcc"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:610: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
break
fi
done
IFS="$ac_save_ifs"
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
set dummy $ac_cv_prog_CC
shift
if test $# -gt 0; then
# We chose a different compiler from the bogus one.
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
set dummy "$ac_dir/$ac_word" "$@"
shift
ac_cv_prog_CC="$@"
fi
fi
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test -z "$CC"; then
case "`uname -s`" in
*win32* | *WIN32*)
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:661: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="cl"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
;;
esac
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:693: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
#line 704 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
ac_cv_prog_cc_cross=no
else
ac_cv_prog_cc_cross=yes
fi
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_cv_prog_cc_works=no
fi
rm -fr conftest*
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:735: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:740: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
fi
fi
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
if test $ac_cv_prog_gcc = yes; then
GCC=yes
else
GCC=
fi
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:768: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
ac_cv_prog_cc_g=yes
else
ac_cv_prog_cc_g=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-g"
fi
else
if test "$GCC" = yes; then
CFLAGS="-O2"
else
CFLAGS=
fi
fi
# Extract the first word of "${host}-ar", so it can be a program name with args.
set dummy ${host}-ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:802: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_AR="${host}-ar"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
AR="$ac_cv_prog_AR"
if test -n "$AR"; then
echo "$ac_t""$AR" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# Extract the first word of "${host}-ranlib", so it can be a program name with args.
set dummy ${host}-ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:831: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="${host}-ranlib"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
RANLIB="$ac_cv_prog_RANLIB"
if test -n "$RANLIB"; then
echo "$ac_t""$RANLIB" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# Extract the first word of "${host}-windres", so it can be a program name with args.
set dummy ${host}-windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:860: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RC"; then
ac_cv_prog_RC="$RC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RC="${host}-windres"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
RC="$ac_cv_prog_RC"
if test -n "$RC"; then
echo "$ac_t""$RC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
else
if test -z "$CC"; then
CC=gcc
fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:893: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="gcc"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:923: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
break
fi
done
IFS="$ac_save_ifs"
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
set dummy $ac_cv_prog_CC
shift
if test $# -gt 0; then
# We chose a different compiler from the bogus one.
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
set dummy "$ac_dir/$ac_word" "$@"
shift
ac_cv_prog_CC="$@"
fi
fi
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test -z "$CC"; then
case "`uname -s`" in
*win32* | *WIN32*)
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:974: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="cl"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
;;
esac
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:1006: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
#line 1017 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:1022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
ac_cv_prog_cc_cross=no
else
ac_cv_prog_cc_cross=yes
fi
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_cv_prog_cc_works=no
fi
rm -fr conftest*
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:1048: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:1053: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1062: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
fi
fi
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
if test $ac_cv_prog_gcc = yes; then
GCC=yes
else
GCC=
fi
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:1081: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
ac_cv_prog_cc_g=yes
else
ac_cv_prog_cc_g=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-g"
fi
else
if test "$GCC" = yes; then
CFLAGS="-O2"
else
CFLAGS=
fi
fi
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1115: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_AR="ar"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
AR="$ac_cv_prog_AR"
if test -n "$AR"; then
echo "$ac_t""$AR" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1144: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="ranlib"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
RANLIB="$ac_cv_prog_RANLIB"
if test -n "$RANLIB"; then
echo "$ac_t""$RANLIB" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1173: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RC"; then
ac_cv_prog_RC="$RC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RC="windres"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
RC="$ac_cv_prog_RC"
if test -n "$RC"; then
echo "$ac_t""$RC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
fi
else
# Allow user to override
if test -z "$CC"; then
CC=cl
fi
fi
#AC_PROG_CC
# To properly support cross-compilation, one would
# need to use these tool checks instead of
# the ones below and reconfigure with
# autoconf 2.50. You can also just set
# the CC, AR, RANLIB, and RC environment
# variables if you want to cross compile.
if test "${GCC}" = "yes" ; then
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1220: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_AR="ar"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
AR="$ac_cv_prog_AR"
if test -n "$AR"; then
echo "$ac_t""$AR" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1249: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="ranlib"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
RANLIB="$ac_cv_prog_RANLIB"
if test -n "$RANLIB"; then
echo "$ac_t""$RANLIB" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1278: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RC"; then
ac_cv_prog_RC="$RC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RC="windres"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
RC="$ac_cv_prog_RC"
if test -n "$RC"; then
echo "$ac_t""$RC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
fi
#--------------------------------------------------------------------
# Checks to see if the make progeam sets the $MAKE variable.
#--------------------------------------------------------------------
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:1311: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftestmake <<\EOF
all:
@echo 'ac_maketemp="${MAKE}"'
EOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
rm -f conftestmake
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
echo "$ac_t""yes" 1>&6
SET_MAKE=
else
echo "$ac_t""no" 1>&6
SET_MAKE="MAKE=${MAKE-make}"
fi
#--------------------------------------------------------------------
# These two macros perform additinal compiler test.
#--------------------------------------------------------------------
echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
echo "configure:1343: checking for Cygwin environment" >&5
if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1348 "configure"
#include "confdefs.h"
int main() {
#ifndef __CYGWIN__
#define __CYGWIN__ __CYGWIN32__
#endif
return __CYGWIN__;
; return 0; }
EOF
if { (eval echo configure:1359: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_cygwin=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_cygwin=no
fi
rm -f conftest*
rm -f conftest*
fi
echo "$ac_t""$ac_cv_cygwin" 1>&6
CYGWIN=
test "$ac_cv_cygwin" = yes && CYGWIN=yes
#--------------------------------------------------------------------
# Determines the correct binary file extension (.o, .obj, .exe etc.)
#--------------------------------------------------------------------
echo $ac_n "checking for object suffix""... $ac_c" 1>&6
echo "configure:1381: checking for object suffix" >&5
if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest*
echo 'int i = 1;' > conftest.$ac_ext
if { (eval echo configure:1387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
for ac_file in conftest.*; do
case $ac_file in
*.c) ;;
*) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
esac
done
else
{ echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_objext" 1>&6
OBJEXT=$ac_cv_objext
ac_objext=$ac_cv_objext
echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
echo "configure:1405: checking for mingw32 environment" >&5
if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1410 "configure"
#include "confdefs.h"
int main() {
return __MINGW32__;
; return 0; }
EOF
if { (eval echo configure:1417: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_mingw32=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_mingw32=no
fi
rm -f conftest*
rm -f conftest*
fi
echo "$ac_t""$ac_cv_mingw32" 1>&6
MINGW32=
test "$ac_cv_mingw32" = yes && MINGW32=yes
echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
echo "configure:1436: checking for executable suffix" >&5
if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
ac_cv_exeext=.exe
else
rm -f conftest*
echo 'int main () { return 0; }' > conftest.$ac_ext
ac_cv_exeext=
if { (eval echo configure:1446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
for file in conftest.*; do
case $file in
*.c | *.o | *.obj) ;;
*) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
esac
done
else
{ echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
fi
rm -f conftest*
test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
fi
fi
EXEEXT=""
test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
echo "$ac_t""${ac_cv_exeext}" 1>&6
ac_exeext=$EXEEXT
#--------------------------------------------------------------------
# Check whether --enable-threads or --disable-threads was given.
#--------------------------------------------------------------------
echo $ac_n "checking for building with threads""... $ac_c" 1>&6
echo "configure:1473: checking for building with threads" >&5
# Check whether --enable-threads or --disable-threads was given.
if test "${enable_threads+set}" = set; then
enableval="$enable_threads"
tcl_ok=$enableval
else
tcl_ok=no
fi
if test "$tcl_ok" = "yes"; then
echo "$ac_t""yes" 1>&6
TCL_THREADS=1
cat >> confdefs.h <<\EOF
#define TCL_THREADS 1
EOF
else
TCL_THREADS=0
echo "$ac_t""no (default)" 1>&6
fi
#--------------------------------------------------------------------
# The statements below define a collection of symbols related to
# building libtcl as a shared library instead of a static library.
#--------------------------------------------------------------------
echo $ac_n "checking how to build libraries""... $ac_c" 1>&6
echo "configure:1504: checking how to build libraries" >&5
# Check whether --enable-shared or --disable-shared was given.
if test "${enable_shared+set}" = set; then
enableval="$enable_shared"
tcl_ok=$enableval
else
tcl_ok=yes
fi
if test "${enable_shared+set}" = set; then
enableval="$enable_shared"
tcl_ok=$enableval
else
tcl_ok=yes
fi
if test "$tcl_ok" = "yes" ; then
echo "$ac_t""shared" 1>&6
SHARED_BUILD=1
else
echo "$ac_t""static" 1>&6
SHARED_BUILD=0
cat >> confdefs.h <<\EOF
#define STATIC_BUILD 1
EOF
fi
#--------------------------------------------------------------------
# The statements below define a collection of compile flags. This
# macro depends on the value of SHARED_BUILD, and should be called
# after SC_ENABLE_SHARED checks the configure switches.
#--------------------------------------------------------------------
# Step 0: Enable 64 bit support?
echo $ac_n "checking if 64bit support is requested""... $ac_c" 1>&6
echo "configure:1545: checking if 64bit support is requested" >&5
# Check whether --enable-64bit or --disable-64bit was given.
if test "${enable_64bit+set}" = set; then
enableval="$enable_64bit"
do64bit=$enableval
else
do64bit=no
fi
echo "$ac_t""$do64bit" 1>&6
# Set some defaults (may get changed below)
EXTRA_CFLAGS=""
# Extract the first word of "cygpath", so it can be a program name with args.
set dummy cygpath; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1562: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CYGPATH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CYGPATH"; then
ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CYGPATH="cygpath -w"
break
fi
done
IFS="$ac_save_ifs"
test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo"
fi
fi
CYGPATH="$ac_cv_prog_CYGPATH"
if test -n "$CYGPATH"; then
echo "$ac_t""$CYGPATH" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test "$CYGPATH" = "echo" || test "$ac_cv_cygwin" = "yes"; then
DEPARG='"$<"'
else
DEPARG='"$(shell $(CYGPATH) $<)"'
fi
# set various compiler flags depending on whether we are using gcc or cl
echo $ac_n "checking compiler flags""... $ac_c" 1>&6
echo "configure:1599: checking compiler flags" >&5
if test "${GCC}" = "yes" ; then
if test "$do64bit" = "yes" ; then
echo "configure: warning: "64bit mode not supported with GCC on Windows"" 1>&2
fi
SHLIB_LD=""
SHLIB_LD_LIBS=""
LIBS=""
LIBS_GUI="-lgdi32 -lcomdlg32 -limm32"
STLIB_LD='${AR} cr'
RC_OUT=-o
RC_TYPE=
RC_INCLUDE=--include
RC_DEFINE=--define
RES=res.o
MAKE_LIB="\${STLIB_LD} \$@"
POST_MAKE_LIB="\${RANLIB} \$@"
MAKE_EXE="\${CC} -o \$@"
LIBPREFIX="lib"
if test "$ac_cv_cygwin" = "yes"; then
extra_cflags="-mno-cygwin"
extra_ldflags="-mno-cygwin"
else
extra_cflags=""
extra_ldflags=""
fi
if test "${SHARED_BUILD}" = "0" ; then
# static
echo "$ac_t""using static flags" 1>&6
runtime=
MAKE_DLL="echo "
LIBSUFFIX="s\${DBGX}.a"
LIBRARIES="\${STATIC_LIBRARIES}"
EXESUFFIX="s\${DBGX}.exe"
else
# dynamic
echo "$ac_t""using shared flags" 1>&6
# ad-hoc check to see if CC supports -shared.
if "${CC}" -shared 2>&1 | egrep ': -shared not supported' >/dev/null; then
{ echo "configure: error: ${CC} does not support the -shared option.
You will need to upgrade to a newer version of the toolchain." 1>&2; exit 1; }
fi
runtime=
# Link with gcc since ld does not link to default libs like
# -luser32 and -lmsvcrt by default. Make sure CFLAGS is
# included so -mno-cygwin passed the correct libs to the linker.
SHLIB_LD='${CC} -shared ${CFLAGS}'
# Add SHLIB_LD_LIBS to the Make rule, not here.
MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \$@ ${extra_ldflags} \
-Wl,--out-implib,\$(patsubst %.dll,lib%.a,\$@)"
LIBSUFFIX="\${DBGX}.a"
EXESUFFIX="\${DBGX}.exe"
LIBRARIES="\${SHARED_LIBRARIES}"
fi
# DLLSUFFIX is separate because it is the building block for
# users of tclConfig.sh that may build shared or static.
DLLSUFFIX="\${DBGX}.dll"
EXTRA_CFLAGS="${extra_cflags}"
CFLAGS_DEBUG=-g
CFLAGS_OPTIMIZE=-O
CFLAGS_WARNING="-Wall -Wconversion"
LDFLAGS_DEBUG=
LDFLAGS_OPTIMIZE=
# Specify the CC output file names based on the target name
CC_OBJNAME="-o \$@"
CC_EXENAME="-o \$@"
# Specify linker flags depending on the type of app being
# built -- Console vs. Window.
#
# We need to pass -e _WinMain@16 so that ld will use
# WinMain() instead of main() as the entry point. We can't
# use autoconf to check for this case since it would need
# to run an executable and that does not work when
# cross compiling. Remove this -e workaround once we
# require a gcc that does not have this bug.
LDFLAGS_CONSOLE="-mconsole ${extra_ldflags}"
LDFLAGS_WINDOW="-mwindows -e _WinMain@16 ${extra_ldflags}"
else
if test "${SHARED_BUILD}" = "0" ; then
# static
echo "$ac_t""using static flags" 1>&6
runtime=-MT
MAKE_DLL="echo "
LIBSUFFIX="s\${DBGX}.lib"
LIBRARIES="\${STATIC_LIBRARIES}"
EXESUFFIX="s\${DBGX}.exe"
else
# dynamic
echo "$ac_t""using shared flags" 1>&6
runtime=-MD
# Add SHLIB_LD_LIBS to the Make rule, not here.
MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -out:\$@"
LIBSUFFIX="\${DBGX}.lib"
EXESUFFIX="\${DBGX}.exe"
LIBRARIES="\${SHARED_LIBRARIES}"
fi
# DLLSUFFIX is separate because it is the building block for
# users of tclConfig.sh that may build shared or static.
DLLSUFFIX="\${DBGX}.dll"
# This is a 2-stage check to make sure we have the 64-bit SDK
# We have to know where the SDK is installed.
if test "$do64bit" = "yes" ; then
if test "x${MSSDK}x" = "xx" ; then
MSSDK="C:/Progra~1/Microsoft SDK"
fi
# In order to work in the tortured autoconf environment,
# we need to ensure that this path has no spaces
MSSDK=$(cygpath -w -s "$MSSDK" | sed -e 's!\\!/!g')
if test ! -d "${MSSDK}/bin/win64" ; then
echo "configure: warning: "could not find 64-bit SDK to enable 64bit mode"" 1>&2
do64bit="no"
fi
fi
if test "$do64bit" = "yes" ; then
# All this magic is necessary for the Win64 SDK RC1 - hobbs
CC="${MSSDK}/Bin/Win64/cl.exe \
-I${MSSDK}/Include/prerelease \
-I${MSSDK}/Include/Win64/crt \
-I${MSSDK}/Include/Win64/crt/sys \
-I${MSSDK}/Include"
RC="${MSSDK}/bin/rc.exe"
CFLAGS_DEBUG="-nologo -Zi -Od ${runtime}d"
CFLAGS_OPTIMIZE="-nologo -O2 -Gs ${runtime}"
lflags="-MACHINE:IA64 -LIBPATH:${MSSDK}/Lib/IA64 \
-LIBPATH:${MSSDK}/Lib/Prerelease/IA64"
STLIB_LD="${MSSDK}/bin/win64/lib.exe -nologo ${lflags}"
LINKBIN="${MSSDK}/bin/win64/link.exe ${lflags}"
else
RC="rc"
CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d"
CFLAGS_OPTIMIZE="-nologo -Oti -Gs -GD ${runtime}"
STLIB_LD="lib -nologo"
LINKBIN="link -link50compat"
fi
SHLIB_LD="${LINKBIN} -dll -nologo -incremental:no"
SHLIB_LD_LIBS="user32.lib advapi32.lib"
LIBS="user32.lib advapi32.lib"
LIBS_GUI="gdi32.lib comdlg32.lib imm32.lib"
RC_OUT=-fo
RC_TYPE=-r
RC_INCLUDE=-i
RC_DEFINE=-d
RES=res
MAKE_LIB="\${STLIB_LD} -out:\$@"
POST_MAKE_LIB=
MAKE_EXE="\${CC} -Fe\$@"
LIBPREFIX=""
EXTRA_CFLAGS="-YX"
CFLAGS_WARNING="-W3"
LDFLAGS_DEBUG="-debug:full -debugtype:cv"
LDFLAGS_OPTIMIZE="-release"
# Specify the CC output file names based on the target name
CC_OBJNAME="-Fo\$@"
CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) '\$@')\""
# Specify linker flags depending on the type of app being
# built -- Console vs. Window.
LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
fi
# DL_LIBS is empty, but then we match the Unix version
#--------------------------------------------------------------------
# Set the default compiler switches based on the --enable-symbols
# option. This macro depends on C flags, and should be called
# after SC_CONFIG_CFLAGS macro is called.
#--------------------------------------------------------------------
echo $ac_n "checking for build with symbols""... $ac_c" 1>&6
echo "configure:1789: checking for build with symbols" >&5
# Check whether --enable-symbols or --disable-symbols was given.
if test "${enable_symbols+set}" = set; then
enableval="$enable_symbols"
tcl_ok=$enableval
else
tcl_ok=no
fi
if test "$tcl_ok" = "yes"; then
CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
DBGX=d
echo "$ac_t""yes" 1>&6
else
CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
DBGX=""
echo "$ac_t""no" 1>&6
fi
TCL_DBGX=${DBGX}
#--------------------------------------------------------------------
# man2tcl needs this so that it can use errno.h
#--------------------------------------------------------------------
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:1819: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# This must be in double quotes, not single quotes, because CPP may get
# substituted into the Makefile and "${CC-cc}" will confuse make.
CPP="${CC-cc} -E"
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
#line 1834 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
#line 1851 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1857: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
#line 1868 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP=/lib/cpp
fi
rm -f conftest*
fi
rm -f conftest*
fi
rm -f conftest*
ac_cv_prog_CPP="$CPP"
fi
CPP="$ac_cv_prog_CPP"
else
ac_cv_prog_CPP="$CPP"
fi
echo "$ac_t""$CPP" 1>&6
ac_safe=`echo "errno.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for errno.h""... $ac_c" 1>&6
echo "configure:1900: checking for errno.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1905 "configure"
#include "confdefs.h"
#include <errno.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
MAN2TCLFLAGS="-DNO_ERRNO_H"
fi
#------------------------------------------------------------------------
# tclConfig.sh refers to this by a different name
#------------------------------------------------------------------------
TCL_SHARED_BUILD=${SHARED_BUILD}
#--------------------------------------------------------------------
# Perform final evaluations of variables with possible substitutions.
#--------------------------------------------------------------------
TCL_SHARED_LIB_SUFFIX="\${NODOT_VERSION}${DLLSUFFIX}"
TCL_UNSHARED_LIB_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}"
TCL_EXPORT_FILE_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}"
eval "TCL_SRC_DIR=\"`cd $srcdir/..; pwd`\""
eval "TCL_DLL_FILE=tcl${VER}${DLLSUFFIX}"
eval "TCL_LIB_FILE=${LIBPREFIX}tcl$VER${LIBSUFFIX}"
# FIMXE: These variables decls are missing
#TCL_LIB_FLAG
#TCL_BUILD_LIB_SPEC
#TCL_LIB_SPEC
eval "TCL_STUB_LIB_FILE=\"${LIBPREFIX}tclstub${VER}${LIBSUFFIX}\""
eval "TCL_STUB_LIB_FLAG=\"-ltclstub${VER}${TCL_DBGX}\""
eval "TCL_BUILD_STUB_LIB_SPEC=\"-L`pwd` ${TCL_STUB_LIB_FLAG}\""
eval "TCL_STUB_LIB_SPEC=\"-L${exec_prefix}/lib ${TCL_STUB_LIB_FLAG}\""
eval "TCL_BUILD_STUB_LIB_PATH=\"`pwd`/${TCL_STUB_LIB_FILE}\""
eval "TCL_STUB_LIB_PATH=\"${exec_prefix}/lib/${TCL_STUB_LIB_FILE}\""
eval "DLLSUFFIX=${DLLSUFFIX}"
eval "LIBPREFIX=${LIBPREFIX}"
eval "LIBSUFFIX=${LIBSUFFIX}"
eval "EXESUFFIX=${EXESUFFIX}"
CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}
CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}
CFG_TCL_EXPORT_FILE_SUFFIX=${TCL_EXPORT_FILE_SUFFIX}
#--------------------------------------------------------------------
# Adjust the defines for how the resources are built depending
# on symbols and static vs. shared.
#--------------------------------------------------------------------
if test ${SHARED_BUILD} = 0 ; then
if test "${DBGX}" = "d"; then
RC_DEFINES="${RC_DEFINE} STATIC_BUILD ${RC_DEFINE} DEBUG"
else
RC_DEFINES="${RC_DEFINE} STATIC_BUILD"
fi
else
if test "${DBGX}" = "d"; then
RC_DEFINES="${RC_DEFINE} DEBUG"
else
RC_DEFINES=""
fi
fi
# empty on win
# win/tcl.m4 doesn't set (CFLAGS)
# win/tcl.m4 doesn't set (LDFLAGS)
# empty on win, but needs sub'ing
# win only
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
if test -w $cache_file; then
echo "updating cache $cache_file"
cat confcache > $cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
fi
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.
ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
case "\$ac_option" in
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.13"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
*) echo "\$ac_cs_usage"; exit 1 ;;
esac
done
ac_given_srcdir=$srcdir
trap 'rm -fr `echo "Makefile tclConfig.sh tcl.hpj" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@FFLAGS@%$FFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@CC@%$CC%g
s%@AR@%$AR%g
s%@RANLIB@%$RANLIB%g
s%@RC@%$RC%g
s%@SET_MAKE@%$SET_MAKE%g
s%@OBJEXT@%$OBJEXT%g
s%@EXEEXT@%$EXEEXT%g
s%@TCL_THREADS@%$TCL_THREADS%g
s%@CYGPATH@%$CYGPATH%g
s%@DL_LIBS@%$DL_LIBS%g
s%@CFLAGS_DEBUG@%$CFLAGS_DEBUG%g
s%@CFLAGS_OPTIMIZE@%$CFLAGS_OPTIMIZE%g
s%@CFLAGS_WARNING@%$CFLAGS_WARNING%g
s%@CPP@%$CPP%g
s%@MAN2TCLFLAGS@%$MAN2TCLFLAGS%g
s%@TCL_VERSION@%$TCL_VERSION%g
s%@TCL_MAJOR_VERSION@%$TCL_MAJOR_VERSION%g
s%@TCL_MINOR_VERSION@%$TCL_MINOR_VERSION%g
s%@TCL_PATCH_LEVEL@%$TCL_PATCH_LEVEL%g
s%@TCL_LIB_FILE@%$TCL_LIB_FILE%g
s%@TCL_LIB_FLAG@%$TCL_LIB_FLAG%g
s%@TCL_LIB_SPEC@%$TCL_LIB_SPEC%g
s%@TCL_STUB_LIB_FILE@%$TCL_STUB_LIB_FILE%g
s%@TCL_STUB_LIB_FLAG@%$TCL_STUB_LIB_FLAG%g
s%@TCL_STUB_LIB_SPEC@%$TCL_STUB_LIB_SPEC%g
s%@TCL_STUB_LIB_PATH@%$TCL_STUB_LIB_PATH%g
s%@TCL_BUILD_STUB_LIB_SPEC@%$TCL_BUILD_STUB_LIB_SPEC%g
s%@TCL_BUILD_STUB_LIB_PATH@%$TCL_BUILD_STUB_LIB_PATH%g
s%@TCL_DLL_FILE@%$TCL_DLL_FILE%g
s%@TCL_SRC_DIR@%$TCL_SRC_DIR%g
s%@TCL_BIN_DIR@%$TCL_BIN_DIR%g
s%@TCL_DBGX@%$TCL_DBGX%g
s%@CFG_TCL_SHARED_LIB_SUFFIX@%$CFG_TCL_SHARED_LIB_SUFFIX%g
s%@CFG_TCL_UNSHARED_LIB_SUFFIX@%$CFG_TCL_UNSHARED_LIB_SUFFIX%g
s%@CFG_TCL_EXPORT_FILE_SUFFIX@%$CFG_TCL_EXPORT_FILE_SUFFIX%g
s%@CFLAGS_DEFAULT@%$CFLAGS_DEFAULT%g
s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g
s%@DEPARG@%$DEPARG%g
s%@CC_OBJNAME@%$CC_OBJNAME%g
s%@CC_EXENAME@%$CC_EXENAME%g
s%@LDFLAGS_DEFAULT@%$LDFLAGS_DEFAULT%g
s%@LDFLAGS_DEBUG@%$LDFLAGS_DEBUG%g
s%@LDFLAGS_OPTIMIZE@%$LDFLAGS_OPTIMIZE%g
s%@LDFLAGS_CONSOLE@%$LDFLAGS_CONSOLE%g
s%@LDFLAGS_WINDOW@%$LDFLAGS_WINDOW%g
s%@STLIB_LD@%$STLIB_LD%g
s%@SHLIB_LD@%$SHLIB_LD%g
s%@SHLIB_LD_LIBS@%$SHLIB_LD_LIBS%g
s%@SHLIB_CFLAGS@%$SHLIB_CFLAGS%g
s%@SHLIB_SUFFIX@%$SHLIB_SUFFIX%g
s%@TCL_SHARED_BUILD@%$TCL_SHARED_BUILD%g
s%@LIBS_GUI@%$LIBS_GUI%g
s%@DLLSUFFIX@%$DLLSUFFIX%g
s%@LIBPREFIX@%$LIBPREFIX%g
s%@LIBSUFFIX@%$LIBSUFFIX%g
s%@EXESUFFIX@%$EXESUFFIX%g
s%@LIBRARIES@%$LIBRARIES%g
s%@MAKE_LIB@%$MAKE_LIB%g
s%@POST_MAKE_LIB@%$POST_MAKE_LIB%g
s%@MAKE_DLL@%$MAKE_DLL%g
s%@MAKE_EXE@%$MAKE_EXE%g
s%@TCL_BUILD_LIB_SPEC@%$TCL_BUILD_LIB_SPEC%g
s%@TCL_LD_SEARCH_FLAGS@%$TCL_LD_SEARCH_FLAGS%g
s%@TCL_NEEDS_EXP_FILE@%$TCL_NEEDS_EXP_FILE%g
s%@TCL_BUILD_EXP_FILE@%$TCL_BUILD_EXP_FILE%g
s%@TCL_EXP_FILE@%$TCL_EXP_FILE%g
s%@LIBOBJS@%$LIBOBJS%g
s%@TCL_LIB_VERSIONS_OK@%$TCL_LIB_VERSIONS_OK%g
s%@TCL_PACKAGE_PATH@%$TCL_PACKAGE_PATH%g
s%@RC_OUT@%$RC_OUT%g
s%@RC_TYPE@%$RC_TYPE%g
s%@RC_INCLUDE@%$RC_INCLUDE%g
s%@RC_DEFINE@%$RC_DEFINE%g
s%@RC_DEFINES@%$RC_DEFINES%g
s%@RES@%$RES%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile tclConfig.sh tcl.hpj"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
else
ac_dir_suffix= ac_dots=
fi
case "$ac_given_srcdir" in
.) srcdir=.
if test -z "$ac_dots"; then top_srcdir=.
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
*) # Relative path.
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
case "$ac_file" in
*Makefile*) ac_comsub="1i\\
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*
EOF
cat >> $CONFIG_STATUS <<EOF
EOF
cat >> $CONFIG_STATUS <<\EOF
exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
|
Changes to win/configure.in.
1 2 3 4 | # This file is an input file used by the GNU "autoconf" program to # generate the file "configure", which is run during Tcl installation # to configure the system for the local environment. # | > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
#! /bin/bash -norc
# This file is an input file used by the GNU "autoconf" program to
# generate the file "configure", which is run during Tcl installation
# to configure the system for the local environment.
#
# RCS: @(#) $Id: configure.in,v 1.20.2.7 2001/10/15 21:54:20 hobbs Exp $
AC_INIT(../generic/tcl.h)
TCL_VERSION=8.3
TCL_MAJOR_VERSION=8
TCL_MINOR_VERSION=3
TCL_PATCH_LEVEL=".4"
VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION
#------------------------------------------------------------------------
# Handle the --prefix=... option
#------------------------------------------------------------------------
if test "${prefix}" = "NONE"; then
prefix=/usr/local
fi
if test "${exec_prefix}" = "NONE"; then
exec_prefix=$prefix
fi
#--------------------------------------------------------------------
# Check whether --enable-gcc or --disable-gcc was given. Do this
# before AC_PROG_CC and AC_CYGWIN are called so the compiler can
# be fully tested by built-in autoconf tools.
#--------------------------------------------------------------------
SC_ENABLE_GCC
#AC_PROG_CC
# To properly support cross-compilation, one would
# need to use these tool checks instead of
# the ones below and reconfigure with
# autoconf 2.50. You can also just set
# the CC, AR, RANLIB, and RC environment
# variables if you want to cross compile.
dnl AC_CHECK_TOOL(AR, ar, :)
dnl AC_CHECK_TOOL(RANLIB, ranlib, :)
dnl AC_CHECK_TOOL(RC, windres, :)
if test "${GCC}" = "yes" ; then
AC_CHECK_PROG(AR, ar, ar)
AC_CHECK_PROG(RANLIB, ranlib, ranlib)
AC_CHECK_PROG(RC, windres, windres)
fi
#--------------------------------------------------------------------
# Checks to see if the make progeam sets the $MAKE variable.
#--------------------------------------------------------------------
AC_PROG_MAKE_SET
|
| ︙ | ︙ | |||
64 65 66 67 68 69 70 | # Set the default compiler switches based on the --enable-symbols # option. This macro depends on C flags, and should be called # after SC_CONFIG_CFLAGS macro is called. #-------------------------------------------------------------------- SC_ENABLE_SYMBOLS | < < > > > > > > | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > | | > > > > > | | > > | | > < < | | < < < | | > > > > > > > > > > > > > > > > > > > > > > | 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 |
# Set the default compiler switches based on the --enable-symbols
# option. This macro depends on C flags, and should be called
# after SC_CONFIG_CFLAGS macro is called.
#--------------------------------------------------------------------
SC_ENABLE_SYMBOLS
TCL_DBGX=${DBGX}
#--------------------------------------------------------------------
# man2tcl needs this so that it can use errno.h
#--------------------------------------------------------------------
AC_CHECK_HEADER(errno.h, , MAN2TCLFLAGS="-DNO_ERRNO_H")
AC_SUBST(MAN2TCLFLAGS)
#------------------------------------------------------------------------
# tclConfig.sh refers to this by a different name
#------------------------------------------------------------------------
TCL_SHARED_BUILD=${SHARED_BUILD}
#--------------------------------------------------------------------
# Perform final evaluations of variables with possible substitutions.
#--------------------------------------------------------------------
TCL_SHARED_LIB_SUFFIX="\${NODOT_VERSION}${DLLSUFFIX}"
TCL_UNSHARED_LIB_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}"
TCL_EXPORT_FILE_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}"
eval "TCL_SRC_DIR=\"`cd $srcdir/..; pwd`\""
eval "TCL_DLL_FILE=tcl${VER}${DLLSUFFIX}"
eval "TCL_LIB_FILE=${LIBPREFIX}tcl$VER${LIBSUFFIX}"
# FIMXE: These variables decls are missing
#TCL_LIB_FLAG
#TCL_BUILD_LIB_SPEC
#TCL_LIB_SPEC
eval "TCL_STUB_LIB_FILE=\"${LIBPREFIX}tclstub${VER}${LIBSUFFIX}\""
eval "TCL_STUB_LIB_FLAG=\"-ltclstub${VER}${TCL_DBGX}\""
eval "TCL_BUILD_STUB_LIB_SPEC=\"-L`pwd` ${TCL_STUB_LIB_FLAG}\""
eval "TCL_STUB_LIB_SPEC=\"-L${exec_prefix}/lib ${TCL_STUB_LIB_FLAG}\""
eval "TCL_BUILD_STUB_LIB_PATH=\"`pwd`/${TCL_STUB_LIB_FILE}\""
eval "TCL_STUB_LIB_PATH=\"${exec_prefix}/lib/${TCL_STUB_LIB_FILE}\""
eval "DLLSUFFIX=${DLLSUFFIX}"
eval "LIBPREFIX=${LIBPREFIX}"
eval "LIBSUFFIX=${LIBSUFFIX}"
eval "EXESUFFIX=${EXESUFFIX}"
CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}
CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}
CFG_TCL_EXPORT_FILE_SUFFIX=${TCL_EXPORT_FILE_SUFFIX}
#--------------------------------------------------------------------
# Adjust the defines for how the resources are built depending
# on symbols and static vs. shared.
#--------------------------------------------------------------------
if test ${SHARED_BUILD} = 0 ; then
if test "${DBGX}" = "d"; then
RC_DEFINES="${RC_DEFINE} STATIC_BUILD ${RC_DEFINE} DEBUG"
else
RC_DEFINES="${RC_DEFINE} STATIC_BUILD"
fi
else
if test "${DBGX}" = "d"; then
RC_DEFINES="${RC_DEFINE} DEBUG"
else
RC_DEFINES=""
fi
fi
AC_SUBST(TCL_VERSION)
AC_SUBST(TCL_MAJOR_VERSION)
AC_SUBST(TCL_MINOR_VERSION)
AC_SUBST(TCL_PATCH_LEVEL)
AC_SUBST(TCL_LIB_FILE)
AC_SUBST(TCL_LIB_FLAG)
# empty on win
AC_SUBST(TCL_LIB_SPEC)
AC_SUBST(TCL_STUB_LIB_FILE)
AC_SUBST(TCL_STUB_LIB_FLAG)
AC_SUBST(TCL_STUB_LIB_SPEC)
AC_SUBST(TCL_STUB_LIB_PATH)
AC_SUBST(TCL_BUILD_STUB_LIB_SPEC)
AC_SUBST(TCL_BUILD_STUB_LIB_PATH)
AC_SUBST(TCL_DLL_FILE)
AC_SUBST(TCL_SRC_DIR)
AC_SUBST(TCL_BIN_DIR)
AC_SUBST(TCL_DBGX)
AC_SUBST(CFG_TCL_SHARED_LIB_SUFFIX)
AC_SUBST(CFG_TCL_UNSHARED_LIB_SUFFIX)
AC_SUBST(CFG_TCL_EXPORT_FILE_SUFFIX)
# win/tcl.m4 doesn't set (CFLAGS)
AC_SUBST(CFLAGS_DEFAULT)
AC_SUBST(EXTRA_CFLAGS)
AC_SUBST(CYGPATH)
AC_SUBST(DEPARG)
AC_SUBST(CC_OBJNAME)
AC_SUBST(CC_EXENAME)
# win/tcl.m4 doesn't set (LDFLAGS)
AC_SUBST(LDFLAGS_DEFAULT)
AC_SUBST(LDFLAGS_DEBUG)
AC_SUBST(LDFLAGS_OPTIMIZE)
AC_SUBST(LDFLAGS_CONSOLE)
AC_SUBST(LDFLAGS_WINDOW)
AC_SUBST(AR)
AC_SUBST(RANLIB)
AC_SUBST(STLIB_LD)
AC_SUBST(SHLIB_LD)
AC_SUBST(SHLIB_LD_LIBS)
AC_SUBST(SHLIB_CFLAGS)
AC_SUBST(SHLIB_SUFFIX)
AC_SUBST(TCL_SHARED_BUILD)
AC_SUBST(LIBS)
AC_SUBST(LIBS_GUI)
AC_SUBST(DLLSUFFIX)
AC_SUBST(LIBPREFIX)
AC_SUBST(LIBSUFFIX)
AC_SUBST(EXESUFFIX)
AC_SUBST(LIBRARIES)
AC_SUBST(MAKE_LIB)
AC_SUBST(POST_MAKE_LIB)
AC_SUBST(MAKE_DLL)
AC_SUBST(MAKE_EXE)
# empty on win, but needs sub'ing
AC_SUBST(TCL_BUILD_LIB_SPEC)
AC_SUBST(TCL_LD_SEARCH_FLAGS)
AC_SUBST(TCL_NEEDS_EXP_FILE)
AC_SUBST(TCL_BUILD_EXP_FILE)
AC_SUBST(TCL_EXP_FILE)
AC_SUBST(DL_LIBS)
AC_SUBST(LIBOBJS)
AC_SUBST(TCL_LIB_VERSIONS_OK)
AC_SUBST(TCL_PACKAGE_PATH)
# win only
AC_SUBST(RC)
AC_SUBST(RC_OUT)
AC_SUBST(RC_TYPE)
AC_SUBST(RC_INCLUDE)
AC_SUBST(RC_DEFINE)
AC_SUBST(RC_DEFINES)
AC_SUBST(RES)
AC_OUTPUT(Makefile tclConfig.sh tcl.hpj)
|
Changes to win/makefile.vc.
|
| | | | > | > > > > | | > > > > > > > > | | > > > > > > > > > > > > > < < < < | 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 | # Visual C++ makefile # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # # RCS: @(#) $Id: makefile.vc,v 1.50.2.4 2001/09/20 18:50:24 hobbs Exp $ # Does not depend on the presence of any environment variables in # order to compile tcl; all needed information is derived from # location of the compiler directories. # # Project directories # # ROOT = top of source tree # # TOOLS32 = location of VC++ 32-bit development tools. Note that the # VC++ 2.0 header files are broken, so you need to use the # ones that come with the developer network CD's, or later # versions of VC++. # # INSTALLDIR = where the install- targets should copy the binaries and # support files # # Set this to the appropriate value of /MACHINE: for your platform # Choices: IX86, IA64, ALPHA MACHINE = IX86 ROOT = .. INSTALLDIR = C:\Progra~1\Tcl !IF "$(MACHINE)" == "IA64" # IA64 support is based on the standard setup with v2 of the # Microsoft SDK for XP, RC1 TOOLS32 = C:\Progra~1\Microsoft SDK TOOLS32_rc = C:\Progra~1\Microsoft SDK cc32 = "$(TOOLS32)\bin\Win64\cl.exe" link32 = "$(TOOLS32)\bin\Win64\link.exe" libpath32 = /LIBPATH:"$(TOOLS32)\lib\IA64" lib32 = "$(TOOLS32)\bin\Win64\lib.exe" !ELSE # Visual Studio 5 default #TOOLS32 = C:\Progra~1\devstudio\vc #TOOLS32_rc = C:\Progra~1\devstudio\sharedide # Visual Studio 6 default TOOLS32 = C:\Progra~1\Microsoft Visual Studio\VC98 TOOLS32_rc = C:\Progra~1\Microsoft Visual Studio\common\MSDev98 cc32 = "$(TOOLS32)\bin\cl.exe" link32 = "$(TOOLS32)\bin\link.exe" libpath32 = /LIBPATH:"$(TOOLS32)\lib" lib32 = "$(TOOLS32)\bin\lib.exe" !ENDIF rc32 = "$(TOOLS32_rc)\bin\rc.exe" include32 = -I"$(TOOLS32)\include" # Uncomment the following line to compile with thread support #THREADDEFINES = -DTCL_THREADS=1 # Set NODEBUG to 0 to compile with symbols NODEBUG = 1 # The following defines can be used to control the amount of debugging # code that is added to the compilation. # # -DTCL_MEM_DEBUG Enables the debugging memory allocator. # -DTCL_COMPILE_DEBUG Enables byte compilation logging. # -DTCL_COMPILE_STATS Enables byte compilation statistics gathering. # #DEBUGDEFINES = -DTCL_MEM_DEBUG -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS ###################################################################### # Do not modify below this line ###################################################################### NAMEPREFIX = tcl STUBPREFIX = $(NAMEPREFIX)stub |
| ︙ | ︙ | |||
148 149 150 151 152 153 154 155 156 157 158 159 160 161 | $(TMPDIR)\tclGet.obj \ $(TMPDIR)\tclHash.obj \ $(TMPDIR)\tclHistory.obj \ $(TMPDIR)\tclIndexObj.obj \ $(TMPDIR)\tclInterp.obj \ $(TMPDIR)\tclIO.obj \ $(TMPDIR)\tclIOCmd.obj \ $(TMPDIR)\tclIOSock.obj \ $(TMPDIR)\tclIOUtil.obj \ $(TMPDIR)\tclLink.obj \ $(TMPDIR)\tclLiteral.obj \ $(TMPDIR)\tclListObj.obj \ $(TMPDIR)\tclLoad.obj \ $(TMPDIR)\tclMain.obj \ | > | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | $(TMPDIR)\tclGet.obj \ $(TMPDIR)\tclHash.obj \ $(TMPDIR)\tclHistory.obj \ $(TMPDIR)\tclIndexObj.obj \ $(TMPDIR)\tclInterp.obj \ $(TMPDIR)\tclIO.obj \ $(TMPDIR)\tclIOCmd.obj \ $(TMPDIR)\tclIOGT.obj \ $(TMPDIR)\tclIOSock.obj \ $(TMPDIR)\tclIOUtil.obj \ $(TMPDIR)\tclLink.obj \ $(TMPDIR)\tclLiteral.obj \ $(TMPDIR)\tclListObj.obj \ $(TMPDIR)\tclLoad.obj \ $(TMPDIR)\tclMain.obj \ |
| ︙ | ︙ | |||
196 197 198 199 200 201 202 | $(TMPDIR)\tclWinPipe.obj \ $(TMPDIR)\tclWinSock.obj \ $(TMPDIR)\tclWinThrd.obj \ $(TMPDIR)\tclWinTime.obj TCLSTUBOBJS = $(TMPDIR)\tclStubLib.obj \ | < < < < < < < > | > > | < | 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 | $(TMPDIR)\tclWinPipe.obj \ $(TMPDIR)\tclWinSock.obj \ $(TMPDIR)\tclWinThrd.obj \ $(TMPDIR)\tclWinTime.obj TCLSTUBOBJS = $(TMPDIR)\tclStubLib.obj \ WINDIR = $(ROOT)\win GENERICDIR = $(ROOT)\generic TCL_INCLUDES = -I"$(WINDIR)" -I"$(GENERICDIR)" TCL_DEFINES = $(DEBUGDEFINES) $(THREADDEFINES) ###################################################################### # Compile flags ###################################################################### !IF "$(NODEBUG)" == "1" # This cranks the optimization level to maximize speed !IF "$(MACHINE)" == "IA64" cdebug = -O2 -Gs !ELSE cdebug = -O2 -Gs -GD !ENDIF !ELSE IF "$(MACHINE)" == "IA64" cdebug = -Od -Zi !ELSE cdebug = -Z7 -Od -WX !ENDIF # declarations common to all compiler options cflags = -c -W3 -nologo -Fp$(TMPDIR)\ -YX cvarsdll = -MD$(DBGX) TCL_CFLAGS = $(cdebug) $(cflags) $(cvarsdll) $(include32) \ |
| ︙ | ︙ | |||
249 250 251 252 253 254 255 | # declarations common to all linker options lflags = /NODEFAULTLIB /NOLOGO /MACHINE:$(MACHINE) $(libpath32) # declarations for use on Intel i386, i486, and Pentium systems !IF "$(MACHINE)" == "IX86" DLLENTRY = @12 dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll | < | < | 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | # declarations common to all linker options lflags = /NODEFAULTLIB /NOLOGO /MACHINE:$(MACHINE) $(libpath32) # declarations for use on Intel i386, i486, and Pentium systems !IF "$(MACHINE)" == "IX86" DLLENTRY = @12 dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll !ELSE IF "$(MACHINE)" == "IA64" DLLENTRY = @12 dlllflags = $(lflags) -dll !ELSE dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll !ENDIF conlflags = $(lflags) -subsystem:console -entry:mainCRTStartup guilflags = $(lflags) -subsystem:windows -entry:WinMainCRTStartup !IF "$(MACHINE)" == "PPC" libc = libc$(DBGX).lib |
| ︙ | ︙ | |||
363 364 365 366 367 368 369 | -@$(MKDIR) "$(LIB_INSTALL_DIR)" -@$(MKDIR) "$(INCLUDE_INSTALL_DIR)" -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)" @echo installing http1.0 -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\http1.0" -@copy "$(ROOT)\library\http1.0\http.tcl" "$(SCRIPT_INSTALL_DIR)\http1.0" -@copy "$(ROOT)\library\http1.0\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http1.0" | | | | | | | | | | | | | > | | | | | | | | | | 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 | -@$(MKDIR) "$(LIB_INSTALL_DIR)" -@$(MKDIR) "$(INCLUDE_INSTALL_DIR)" -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)" @echo installing http1.0 -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\http1.0" -@copy "$(ROOT)\library\http1.0\http.tcl" "$(SCRIPT_INSTALL_DIR)\http1.0" -@copy "$(ROOT)\library\http1.0\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http1.0" @echo installing http2.4 -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\http2.4" -@copy "$(ROOT)\library\http\http.tcl" "$(SCRIPT_INSTALL_DIR)\http2.4" -@copy "$(ROOT)\library\http\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http2.4" @echo installing opt0.4 -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\opt0.4" -@copy "$(ROOT)\library\opt\optparse.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4" -@copy "$(ROOT)\library\opt\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4" @echo installing msgcat1.1 -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\msgcat1.1" -@copy "$(ROOT)\library\msgcat\msgcat.tcl" "$(SCRIPT_INSTALL_DIR)\msgcat1.1" -@copy "$(ROOT)\library\msgcat\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\msgcat1.1" @echo installing $(TCLDDEDLLNAME) -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\dde1.1" -@copy "$(TCLDDEDLL)" "$(SCRIPT_INSTALL_DIR)\dde1.1" -@copy "$(ROOT)\library\dde1.1\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\dde1.1" @echo installing $(TCLREGDLLNAME) -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\reg1.0" -@copy "$(TCLREGDLL)" "$(SCRIPT_INSTALL_DIR)\reg1.0" -@copy "$(ROOT)\library\reg1.0\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\reg1.0" @echo installing encoding files -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\encoding" -@copy "$(ROOT)\library\encoding\*.enc" "$(SCRIPT_INSTALL_DIR)\encoding" @echo installing library files -@copy "$(GENERICDIR)\tcl.h" "$(INCLUDE_INSTALL_DIR)" -@copy "$(GENERICDIR)\tclDecls.h" "$(INCLUDE_INSTALL_DIR)" -@copy "$(GENERICDIR)\tclPlatDecls.h" "$(INCLUDE_INSTALL_DIR)" -@copy "$(ROOT)\library\history.tcl" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\init.tcl" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\ldAout.tcl" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\parray.tcl" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\safe.tcl" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\tclIndex" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\package.tcl" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\word.tcl" "$(SCRIPT_INSTALL_DIR)" -@copy "$(ROOT)\library\auto.tcl" "$(SCRIPT_INSTALL_DIR)" # # Regenerate the stubs files. # genstubs: tclsh$(VERSION) $(ROOT)\tools\genStubs.tcl $(GENERICDIR) \ |
| ︙ | ︙ | |||
503 504 505 506 507 508 509 |
$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
{$(ROOT)\compat}.c{$(TMPDIR)}.obj:
$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
{$(WINDIR)}.rc{$(TMPDIR)}.res:
$(rc32) -fo $@ -r -i $(GENERICDIR) -i $(WINDIR) -D__WIN32__ \
| | > > > > | 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 |
$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
{$(ROOT)\compat}.c{$(TMPDIR)}.obj:
$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
{$(WINDIR)}.rc{$(TMPDIR)}.res:
$(rc32) -fo $@ -r -i $(GENERICDIR) -i $(WINDIR) -D__WIN32__ \
$(TCL_DEFINES) \
!if "$(NODEBUG)" == "0"
-d DEBUG \
!endif
$<
clean:
-@$(RM) $(OUTDIR)\*.exp
-@$(RM) $(OUTDIR)\*.lib
-@$(RM) $(OUTDIR)\*.dll
-@$(RM) $(OUTDIR)\*.exe
-@$(RM) $(OUTDIR)\*.pdb
-@$(RM) $(TMPDIR)\*.pch
-@$(RM) $(TMPDIR)\*.obj
-@$(RM) $(TMPDIR)\*.res
-@$(RM) $(TMPDIR)\*.exe
-@$(RMDIR) $(OUTDIR)
-@$(RMDIR) $(TMPDIR)
|
Changes to win/tcl.m4.
| ︙ | ︙ | |||
69 70 71 72 73 74 75 |
if test ! -d $TK_BIN_DIR; then
AC_MSG_ERROR(Tk directory $TK_BIN_DIR does not exist)
fi
if test ! -f $TK_BIN_DIR/tkConfig.sh; then
AC_MSG_ERROR(There is no tkConfig.sh in $TK_BIN_DIR: perhaps you did not specify the Tk *build* directory (not the toplevel Tk directory) or you forgot to configure Tk?)
fi
| | | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
if test ! -d $TK_BIN_DIR; then
AC_MSG_ERROR(Tk directory $TK_BIN_DIR does not exist)
fi
if test ! -f $TK_BIN_DIR/tkConfig.sh; then
AC_MSG_ERROR(There is no tkConfig.sh in $TK_BIN_DIR: perhaps you did not specify the Tk *build* directory (not the toplevel Tk directory) or you forgot to configure Tk?)
fi
AC_MSG_RESULT([$TK_BIN_DIR/tkConfig.sh])
])
#------------------------------------------------------------------------
# SC_LOAD_TCLCONFIG --
#
# Load the tclConfig.sh file
# Currently a no-op for Windows
|
| ︙ | ︙ | |||
131 132 133 134 135 136 137 | # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN(SC_LOAD_TKCONFIG, [ | | | | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# Results:
#
# Sets the following vars that should be in tkConfig.sh:
# TK_BIN_DIR
#------------------------------------------------------------------------
AC_DEFUN(SC_LOAD_TKCONFIG, [
AC_MSG_CHECKING([for existence of $TK_BIN_DIR/tkConfig.sh])
if test -f "$TK_BIN_DIR/tkConfig.sh" ; then
AC_MSG_RESULT([loading])
. $TK_BIN_DIR/tkConfig.sh
else
AC_MSG_RESULT([could not find $TK_BIN_DIR/tkConfig.sh])
fi
AC_SUBST(TK_BIN_DIR)
|
| ︙ | ︙ | |||
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# Results:
#
# Adds the following arguments to configure:
# --enable-gcc
#
# Sets the following vars:
# CC Command to use for the compiler
#------------------------------------------------------------------------
AC_DEFUN(SC_ENABLE_GCC, [
AC_ARG_ENABLE(gcc, [ --enable-gcc allow use of gcc if available [--disable-gcc]],
[ok=$enableval], [ok=no])
if test "$ok" = "yes"; then
| > > > > > > > > > > > > > > > > > > | > | > > > > | 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 |
# Results:
#
# Adds the following arguments to configure:
# --enable-gcc
#
# Sets the following vars:
# CC Command to use for the compiler
# AR Comman for the archive tool
# RANLIB Command for the archive indexing tool
# RC Command for the resource compiler
#
#------------------------------------------------------------------------
AC_DEFUN(SC_ENABLE_GCC, [
AC_ARG_ENABLE(gcc, [ --enable-gcc allow use of gcc if available [--disable-gcc]],
[ok=$enableval], [ok=no])
if test "$ok" = "yes"; then
# Quick hack to simulate a real cross check
# The right way to do this is to use AC_CHECK_TOOL
# correctly, but this is the minimal change
# we need until the real fix is ready.
if test "$host" != "$build" ; then
if test -z "$CC"; then
CC=${host}-gcc
fi
AC_PROG_CC
AC_CHECK_PROG(AR, ${host}-ar, ${host}-ar)
AC_CHECK_PROG(RANLIB, ${host}-ranlib, ${host}-ranlib)
AC_CHECK_PROG(RC, ${host}-windres, ${host}-windres)
else
if test -z "$CC"; then
CC=gcc
fi
AC_PROG_CC
AC_CHECK_PROG(AR, ar, ar)
AC_CHECK_PROG(RANLIB, ranlib, ranlib)
AC_CHECK_PROG(RC, windres, windres)
fi
else
# Allow user to override
if test -z "$CC"; then
CC=cl
fi
fi
])
|
| ︙ | ︙ | |||
249 250 251 252 253 254 255 |
if test "$tcl_ok" = "yes"; then
AC_MSG_RESULT(yes)
TCL_THREADS=1
AC_DEFINE(TCL_THREADS)
else
TCL_THREADS=0
| | > | | | | | | | | | | 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 |
if test "$tcl_ok" = "yes"; then
AC_MSG_RESULT(yes)
TCL_THREADS=1
AC_DEFINE(TCL_THREADS)
else
TCL_THREADS=0
AC_MSG_RESULT([no (default)])
fi
AC_SUBST(TCL_THREADS)
])
#------------------------------------------------------------------------
# SC_ENABLE_SYMBOLS --
#
# Specify if debugging symbols should be used
#
# Arguments:
# none
#
# Requires the following vars to be set in the Makefile:
# CFLAGS_DEBUG
# CFLAGS_OPTIMIZE
#
# Results:
#
# Adds the following arguments to configure:
# --enable-symbols
#
# Defines the following vars:
# CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true
# Sets to $(CFLAGS_OPTIMIZE) if false
# LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
# Sets to $(LDFLAGS_OPTIMIZE) if false
# DBGX Debug library extension
#
#------------------------------------------------------------------------
AC_DEFUN(SC_ENABLE_SYMBOLS, [
AC_MSG_CHECKING([for build with symbols])
AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols [--disable-symbols]], [tcl_ok=$enableval], [tcl_ok=no])
if test "$tcl_ok" = "yes"; then
CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
DBGX=d
AC_MSG_RESULT([yes])
else
CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
DBGX=""
AC_MSG_RESULT([no])
fi
])
#--------------------------------------------------------------------
|
| ︙ | ︙ | |||
312 313 314 315 316 317 318 | # in the final configure script. # # Arguments: # none # # Results: # | | | | | | | | | | | | < < | | < | | | | > > > | | | | | | | | > > > | > > | | | > > > > > > > > > | < | > > > > | | > < | < < < < < < < < < < < < < < < < < < < < < < < | | | < < < < > < > > > > | < | | < < < > > > | | > > > > > > > | < < < < < < < < < < < < > | < > > > > > > > > > > > > > > > > > | > > > > > > > > | | > > > > > > > | > > > > > > > > > > > > > > > > > > > | | | | > > > > > > | 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 |
# in the final configure script.
#
# Arguments:
# none
#
# Results:
#
# Can the following vars:
# EXTRA_CFLAGS
# CFLAGS_DEBUG
# CFLAGS_OPTIMIZE
# CFLAGS_WARNING
# LDFLAGS_DEBUG
# LDFLAGS_OPTIMIZE
# LDFLAGS_CONSOLE
# LDFLAGS_WINDOW
# CC_OBJNAME
# CC_EXENAME
# CYGPATH
# STLIB_LD
# SHLIB_LD
# SHLIB_LD_LIBS
# LIBS
# AR
# RC
# RES
#
# MAKE_LIB
# MAKE_EXE
# MAKE_DLL
#
# LIBSUFFIX
# LIBPREFIX
# LIBRARIES
# EXESUFFIX
# DLLSUFFIX
#
#--------------------------------------------------------------------
AC_DEFUN(SC_CONFIG_CFLAGS, [
# Step 0: Enable 64 bit support?
AC_MSG_CHECKING([if 64bit support is requested])
AC_ARG_ENABLE(64bit,[ --enable-64bit enable 64bit support (where applicable)], [do64bit=$enableval], [do64bit=no])
AC_MSG_RESULT($do64bit)
# Set some defaults (may get changed below)
EXTRA_CFLAGS=""
AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo)
if test "$CYGPATH" = "echo" || test "$ac_cv_cygwin" = "yes"; then
DEPARG='"$<"'
else
DEPARG='"$(shell $(CYGPATH) $<)"'
fi
# set various compiler flags depending on whether we are using gcc or cl
AC_MSG_CHECKING([compiler flags])
if test "${GCC}" = "yes" ; then
if test "$do64bit" = "yes" ; then
AC_MSG_WARN("64bit mode not supported with GCC on Windows")
fi
SHLIB_LD=""
SHLIB_LD_LIBS=""
LIBS=""
LIBS_GUI="-lgdi32 -lcomdlg32 -limm32"
STLIB_LD='${AR} cr'
RC_OUT=-o
RC_TYPE=
RC_INCLUDE=--include
RC_DEFINE=--define
RES=res.o
MAKE_LIB="\${STLIB_LD} \[$]@"
POST_MAKE_LIB="\${RANLIB} \[$]@"
MAKE_EXE="\${CC} -o \[$]@"
LIBPREFIX="lib"
if test "$ac_cv_cygwin" = "yes"; then
extra_cflags="-mno-cygwin"
extra_ldflags="-mno-cygwin"
else
extra_cflags=""
extra_ldflags=""
fi
if test "${SHARED_BUILD}" = "0" ; then
# static
AC_MSG_RESULT([using static flags])
runtime=
MAKE_DLL="echo "
LIBSUFFIX="s\${DBGX}.a"
LIBRARIES="\${STATIC_LIBRARIES}"
EXESUFFIX="s\${DBGX}.exe"
else
# dynamic
AC_MSG_RESULT([using shared flags])
# ad-hoc check to see if CC supports -shared.
if "${CC}" -shared 2>&1 | egrep ': -shared not supported' >/dev/null; then
AC_MSG_ERROR([${CC} does not support the -shared option.
You will need to upgrade to a newer version of the toolchain.])
fi
runtime=
# Link with gcc since ld does not link to default libs like
# -luser32 and -lmsvcrt by default. Make sure CFLAGS is
# included so -mno-cygwin passed the correct libs to the linker.
SHLIB_LD='${CC} -shared ${CFLAGS}'
# Add SHLIB_LD_LIBS to the Make rule, not here.
MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \[$]@ ${extra_ldflags} \
-Wl,--out-implib,\$(patsubst %.dll,lib%.a,\[$]@)"
LIBSUFFIX="\${DBGX}.a"
EXESUFFIX="\${DBGX}.exe"
LIBRARIES="\${SHARED_LIBRARIES}"
fi
# DLLSUFFIX is separate because it is the building block for
# users of tclConfig.sh that may build shared or static.
DLLSUFFIX="\${DBGX}.dll"
EXTRA_CFLAGS="${extra_cflags}"
CFLAGS_DEBUG=-g
CFLAGS_OPTIMIZE=-O
CFLAGS_WARNING="-Wall -Wconversion"
LDFLAGS_DEBUG=
LDFLAGS_OPTIMIZE=
# Specify the CC output file names based on the target name
CC_OBJNAME="-o \[$]@"
CC_EXENAME="-o \[$]@"
# Specify linker flags depending on the type of app being
# built -- Console vs. Window.
#
# We need to pass -e _WinMain@16 so that ld will use
# WinMain() instead of main() as the entry point. We can't
# use autoconf to check for this case since it would need
# to run an executable and that does not work when
# cross compiling. Remove this -e workaround once we
# require a gcc that does not have this bug.
LDFLAGS_CONSOLE="-mconsole ${extra_ldflags}"
LDFLAGS_WINDOW="-mwindows -e _WinMain@16 ${extra_ldflags}"
else
if test "${SHARED_BUILD}" = "0" ; then
# static
AC_MSG_RESULT([using static flags])
runtime=-MT
MAKE_DLL="echo "
LIBSUFFIX="s\${DBGX}.lib"
LIBRARIES="\${STATIC_LIBRARIES}"
EXESUFFIX="s\${DBGX}.exe"
else
# dynamic
AC_MSG_RESULT([using shared flags])
runtime=-MD
# Add SHLIB_LD_LIBS to the Make rule, not here.
MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -out:\[$]@"
LIBSUFFIX="\${DBGX}.lib"
EXESUFFIX="\${DBGX}.exe"
LIBRARIES="\${SHARED_LIBRARIES}"
fi
# DLLSUFFIX is separate because it is the building block for
# users of tclConfig.sh that may build shared or static.
DLLSUFFIX="\${DBGX}.dll"
# This is a 2-stage check to make sure we have the 64-bit SDK
# We have to know where the SDK is installed.
if test "$do64bit" = "yes" ; then
if test "x${MSSDK}x" = "xx" ; then
MSSDK="C:/Progra~1/Microsoft SDK"
fi
# In order to work in the tortured autoconf environment,
# we need to ensure that this path has no spaces
MSSDK=$(cygpath -w -s "$MSSDK" | sed -e 's!\\!/!g')
if test ! -d "${MSSDK}/bin/win64" ; then
AC_MSG_WARN("could not find 64-bit SDK to enable 64bit mode")
do64bit="no"
fi
fi
if test "$do64bit" = "yes" ; then
# All this magic is necessary for the Win64 SDK RC1 - hobbs
CC="${MSSDK}/Bin/Win64/cl.exe \
-I${MSSDK}/Include/prerelease \
-I${MSSDK}/Include/Win64/crt \
-I${MSSDK}/Include/Win64/crt/sys \
-I${MSSDK}/Include"
RC="${MSSDK}/bin/rc.exe"
CFLAGS_DEBUG="-nologo -Zi -Od ${runtime}d"
CFLAGS_OPTIMIZE="-nologo -O2 -Gs ${runtime}"
lflags="-MACHINE:IA64 -LIBPATH:${MSSDK}/Lib/IA64 \
-LIBPATH:${MSSDK}/Lib/Prerelease/IA64"
STLIB_LD="${MSSDK}/bin/win64/lib.exe -nologo ${lflags}"
LINKBIN="${MSSDK}/bin/win64/link.exe ${lflags}"
else
RC="rc"
CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d"
CFLAGS_OPTIMIZE="-nologo -Oti -Gs -GD ${runtime}"
STLIB_LD="lib -nologo"
LINKBIN="link -link50compat"
fi
SHLIB_LD="${LINKBIN} -dll -nologo -incremental:no"
SHLIB_LD_LIBS="user32.lib advapi32.lib"
LIBS="user32.lib advapi32.lib"
LIBS_GUI="gdi32.lib comdlg32.lib imm32.lib"
RC_OUT=-fo
RC_TYPE=-r
RC_INCLUDE=-i
RC_DEFINE=-d
RES=res
MAKE_LIB="\${STLIB_LD} -out:\[$]@"
POST_MAKE_LIB=
MAKE_EXE="\${CC} -Fe\[$]@"
LIBPREFIX=""
EXTRA_CFLAGS="-YX"
CFLAGS_WARNING="-W3"
LDFLAGS_DEBUG="-debug:full -debugtype:cv"
LDFLAGS_OPTIMIZE="-release"
# Specify the CC output file names based on the target name
CC_OBJNAME="-Fo\[$]@"
CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) '\[$]@')\""
# Specify linker flags depending on the type of app being
# built -- Console vs. Window.
LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
fi
# DL_LIBS is empty, but then we match the Unix version
AC_SUBST(DL_LIBS)
AC_SUBST(CFLAGS_DEBUG)
AC_SUBST(CFLAGS_OPTIMIZE)
AC_SUBST(CFLAGS_WARNING)
])
#------------------------------------------------------------------------
# SC_WITH_TCL --
#
# Location of the Tcl build directory.
#
|
| ︙ | ︙ | |||
539 540 541 542 543 544 545 |
AC_MSG_ERROR(There is no Makefile in $TCL_BIN_DIR: perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?)
else
echo "building against Tcl binaries in: $TCL_BIN_DIR"
fi
AC_SUBST(TCL_BIN_DIR)
])
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
AC_MSG_ERROR(There is no Makefile in $TCL_BIN_DIR: perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?)
else
echo "building against Tcl binaries in: $TCL_BIN_DIR"
fi
AC_SUBST(TCL_BIN_DIR)
])
# FIXME : SC_PROG_TCLSH should really look for the installed tclsh and
# not the build version. If we want to use the build version in the
# tk script, it is better to hardcode that!
#------------------------------------------------------------------------
# SC_PROG_TCLSH
# Locate a tclsh shell in the following directories:
# ${exec_prefix}/bin
# ${prefix}/bin
# ${TCL_BIN_DIR}
# ${TCL_BIN_DIR}/../bin
# ${PATH}
#
# Arguments
# none
#
# Results
# Subst's the following values:
# TCLSH_PROG
#------------------------------------------------------------------------
AC_DEFUN(SC_PROG_TCLSH, [
AC_MSG_CHECKING([for tclsh])
AC_CACHE_VAL(ac_cv_path_tclsh, [
search_path=`echo ${exec_prefix}/bin:${prefix}/bin:${TCL_BIN_DIR}:${TCL_BIN_DIR}/../bin:${PATH} | sed -e 's/:/ /g'`
for dir in $search_path ; do
for j in `ls -r $dir/tclsh[[8-9]]*.exe 2> /dev/null` \
`ls -r $dir/tclsh* 2> /dev/null` ; do
if test x"$ac_cv_path_tclsh" = x ; then
if test -f "$j" ; then
ac_cv_path_tclsh=$j
break
fi
fi
done
done
])
if test -f "$ac_cv_path_tclsh" ; then
TCLSH_PROG=$ac_cv_path_tclsh
AC_MSG_RESULT($TCLSH_PROG)
else
AC_MSG_ERROR(No tclsh found in PATH: $search_path)
fi
AC_SUBST(TCLSH_PROG)
])
|
Changes to win/tcl.rc.
|
| | | | > > > > > > > > > > > > > > > > > > > > > > | | | | | < < < < < < < | 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 |
// RCS: @(#) $Id: tcl.rc,v 1.5.2.2 2001/10/03 20:24:59 hobbs Exp $
//
// Version Resource Script
//
#include <winver.h>
#define RESOURCE_INCLUDED
#include <tcl.h>
//
// build-up the name suffix that defines the type of build this is.
//
#ifdef TCL_THREADS
#define SUFFIX_THREADS "t"
#else
#define SUFFIX_THREADS ""
#endif
#ifdef DEBUG
#define SUFFIX_DEBUG "d"
#else
#define SUFFIX_DEBUG ""
#endif
#define SUFFIX SUFFIX_THREADS SUFFIX_DEBUG
LANGUAGE 0x9, 0x1 /* LANG_ENGLISH, SUBLANG_DEFAULT */
VS_VERSION_INFO VERSIONINFO
FILEVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL
PRODUCTVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL
FILEFLAGSMASK 0x3fL
#ifdef DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0" /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */
BEGIN
VALUE "FileDescription", "Tcl DLL\0"
VALUE "OriginalFilename", "tcl" STRINGIFY(TCL_MAJOR_VERSION) STRINGIFY(TCL_MINOR_VERSION) SUFFIX ".dll\0"
VALUE "CompanyName", "ActiveState Corporation\0"
VALUE "FileVersion", TCL_PATCH_LEVEL
VALUE "LegalCopyright", "Copyright (c) 2000 by ActiveState Corporation, et al\0"
VALUE "ProductName", "Tcl " TCL_VERSION " for Windows\0"
VALUE "ProductVersion", TCL_PATCH_LEVEL
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
|
Changes to win/tclConfig.sh.in.
1 2 3 4 5 6 7 8 9 10 11 | # tclConfig.sh -- # # This shell script (for sh) is generated automatically by Tcl's # configure script. It will create shell variables for most of # the configuration options discovered by the configure script. # This script is intended to be included by the configure scripts # for Tcl extensions so that they don't have to figure this all # out for themselves. # # The information in this file is specific to a single platform. # | | < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # tclConfig.sh -- # # This shell script (for sh) is generated automatically by Tcl's # configure script. It will create shell variables for most of # the configuration options discovered by the configure script. # This script is intended to be included by the configure scripts # for Tcl extensions so that they don't have to figure this all # out for themselves. # # The information in this file is specific to a single platform. # # RCS: @(#) $Id: tclConfig.sh.in,v 1.3.10.2 2000/07/28 07:58:28 mo Exp $ TCL_DLL_FILE="@TCL_DLL_FILE@" # Tcl's version number. TCL_VERSION='@TCL_VERSION@' TCL_MAJOR_VERSION='@TCL_MAJOR_VERSION@' TCL_MINOR_VERSION='@TCL_MINOR_VERSION@' TCL_PATCH_LEVEL='@TCL_PATCH_LEVEL@' |
| ︙ | ︙ | |||
56 57 58 59 60 61 62 |
# String that can be evaluated to generate the part of the export file
# name that comes after the "libxxx" (includes version number, if any,
# extension, and anything else needed). May depend on the variables
# VERSION. On most UNIX systems this is ${VERSION}.exp.
TCL_EXPORT_FILE_SUFFIX='@CFG_TCL_EXPORT_FILE_SUFFIX@'
# Additional libraries to use when linking Tcl.
| | | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# String that can be evaluated to generate the part of the export file
# name that comes after the "libxxx" (includes version number, if any,
# extension, and anything else needed). May depend on the variables
# VERSION. On most UNIX systems this is ${VERSION}.exp.
TCL_EXPORT_FILE_SUFFIX='@CFG_TCL_EXPORT_FILE_SUFFIX@'
# Additional libraries to use when linking Tcl.
TCL_LIBS='@LIBS@'
# Top-level directory in which Tcl's platform-independent files are
# installed.
TCL_PREFIX='@prefix@'
# Top-level directory in which Tcl's platform-specific files (e.g.
# executables) are installed.
|
| ︙ | ︙ | |||
78 79 80 81 82 83 84 | # Extra flags to pass to cc: TCL_EXTRA_CFLAGS='@EXTRA_CFLAGS@' # Base command to use for combining object files into a shared library: TCL_SHLIB_LD='@SHLIB_LD@' | | | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | # Extra flags to pass to cc: TCL_EXTRA_CFLAGS='@EXTRA_CFLAGS@' # Base command to use for combining object files into a shared library: TCL_SHLIB_LD='@SHLIB_LD@' # Base command to use for combining object files into a static library: TCL_STLIB_LD='@STLIB_LD@' # Either '$LIBS' (if dependent libraries should be included when linking # shared libraries) or an empty string. See Tcl's configure.in for more # explanation. TCL_SHLIB_LD_LIBS='@SHLIB_LD_LIBS@' |
| ︙ | ︙ |
Changes to win/tclWinChan.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclWinChan.c * * Channel drivers for Windows channels based on files, command * pipes and TCP sockets. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclWinChan.c * * Channel drivers for Windows channels based on files, command * pipes and TCP sockets. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinChan.c,v 1.10.2.3 2001/09/07 17:10:33 andreas_kupries Exp $ */ #include "tclWinInt.h" /* * State flags used in the info structures below. */ |
| ︙ | ︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
* which operations are valid on the file. */
int watchMask; /* OR'ed combination of TCL_READABLE,
* TCL_WRITABLE, or TCL_EXCEPTION: indicates
* which events should be reported. */
int flags; /* State flags, see above for a list. */
HANDLE handle; /* Input/output file. */
struct FileInfo *nextPtr; /* Pointer to next registered file. */
} FileInfo;
typedef struct ThreadSpecificData {
/*
* List of all file channels currently open.
*/
| > > | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
* which operations are valid on the file. */
int watchMask; /* OR'ed combination of TCL_READABLE,
* TCL_WRITABLE, or TCL_EXCEPTION: indicates
* which events should be reported. */
int flags; /* State flags, see above for a list. */
HANDLE handle; /* Input/output file. */
struct FileInfo *nextPtr; /* Pointer to next registered file. */
int dirty; /* Boolean flag. Set if the OS may have data
* pending on the channel */
} FileInfo;
typedef struct ThreadSpecificData {
/*
* List of all file channels currently open.
*/
|
| ︙ | ︙ | |||
97 98 99 100 101 102 103 |
/*
* This structure describes the channel type structure for file based IO.
*/
static Tcl_ChannelType fileChannelType = {
"file", /* Type name. */
| | > > > > | 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 |
/*
* This structure describes the channel type structure for file based IO.
*/
static Tcl_ChannelType fileChannelType = {
"file", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
FileCloseProc, /* Close proc. */
FileInputProc, /* Input proc. */
FileOutputProc, /* Output proc. */
FileSeekProc, /* Seek proc. */
NULL, /* Set option proc. */
NULL, /* Get option proc. */
FileWatchProc, /* Set up the notifier to watch the channel. */
FileGetHandleProc, /* Get an OS handle from channel. */
NULL, /* close2proc. */
FileBlockProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
/*
*----------------------------------------------------------------------
*
* FileInit --
|
| ︙ | ︙ | |||
549 550 551 552 553 554 555 |
if (WriteFile(infoPtr->handle, (LPVOID) buf, (DWORD) toWrite, &bytesWritten,
(LPOVERLAPPED) NULL) == FALSE) {
TclWinConvertError(GetLastError());
*errorCode = errno;
return -1;
}
| | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 |
if (WriteFile(infoPtr->handle, (LPVOID) buf, (DWORD) toWrite, &bytesWritten,
(LPOVERLAPPED) NULL) == FALSE) {
TclWinConvertError(GetLastError());
*errorCode = errno;
return -1;
}
infoPtr->dirty = 1;
return bytesWritten;
}
/*
*----------------------------------------------------------------------
*
* FileWatchProc --
|
| ︙ | ︙ | |||
871 872 873 874 875 876 877 878 |
ClientData rawHandle; /* OS level handle */
int mode; /* ORed combination of TCL_READABLE and
* TCL_WRITABLE to indicate file mode. */
{
char channelName[16 + TCL_INTEGER_SPACE];
Tcl_Channel channel = NULL;
HANDLE handle = (HANDLE) rawHandle;
DCB dcb;
| > | < > > > > > | 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 |
ClientData rawHandle; /* OS level handle */
int mode; /* ORed combination of TCL_READABLE and
* TCL_WRITABLE to indicate file mode. */
{
char channelName[16 + TCL_INTEGER_SPACE];
Tcl_Channel channel = NULL;
HANDLE handle = (HANDLE) rawHandle;
HANDLE dupedHandle;
DCB dcb;
DWORD consoleParams, type;
TclFile readFile = NULL;
TclFile writeFile = NULL;
BOOL result;
if (mode == 0) {
return NULL;
}
/*
* GetFileType() returns FILE_TYPE_UNKNOWN for invalid handles.
*/
type = GetFileType(handle);
/*
* If the file is a character device, we need to try to figure out
* whether it is a serial port, a console, or something else. We
* test for the console case first because this is more common.
*/
|
| ︙ | ︙ | |||
922 923 924 925 926 927 928 |
writeFile = TclWinMakeFile(handle);
}
channel = TclpCreateCommandChannel(readFile, writeFile, NULL, 0, NULL);
break;
case FILE_TYPE_DISK:
case FILE_TYPE_CHAR:
| < > | > > > > > > | > > > > > > > > | | | > | > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
writeFile = TclWinMakeFile(handle);
}
channel = TclpCreateCommandChannel(readFile, writeFile, NULL, 0, NULL);
break;
case FILE_TYPE_DISK:
case FILE_TYPE_CHAR:
channel = TclWinOpenFileChannel(handle, channelName, mode, 0);
break;
case FILE_TYPE_UNKNOWN:
default:
/*
* The handle is of an unknown type. Test the validity of this OS
* handle by duplicating it, then closing the dupe. The Win32 API
* doesn't provide an IsValidHandle() function, so we have to emulate
* it here. This test will not work on a console handle reliably,
* which is why we can't test every handle that comes into this
* function in this way.
*/
result = DuplicateHandle(GetCurrentProcess(), handle,
GetCurrentProcess(), &dupedHandle, 0, FALSE,
DUPLICATE_SAME_ACCESS);
if (result != 0) {
/*
* Unable to make a duplicate. It's definately invalid at this
* point.
*/
return NULL;
}
/*
* Use structured exception handling (Win32 SEH) to protect the close
* of this duped handle which might throw EXCEPTION_INVALID_HANDLE.
*/
__try {
CloseHandle(dupedHandle);
}
__except (EXCEPTION_EXECUTE_HANDLER) {
/*
* Definately an invalid handle. So, therefore, the original
* is invalid also.
*/
return NULL;
}
/* Fall through, the handle is valid. */
/*
* Create the undefined channel, anyways, because we know the handle
* is valid to something.
*/
channel = TclWinOpenFileChannel(handle, channelName, mode, 0);
}
return channel;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
966 967 968 969 970 971 972 973 974 975 976 977 978 979 |
int type; /* One of TCL_STDIN, TCL_STDOUT, TCL_STDERR. */
{
Tcl_Channel channel;
HANDLE handle;
int mode;
char *bufMode;
DWORD handleId; /* Standard handle to retrieve. */
switch (type) {
case TCL_STDIN:
handleId = STD_INPUT_HANDLE;
mode = TCL_READABLE;
bufMode = "line";
break;
| > | 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 |
int type; /* One of TCL_STDIN, TCL_STDOUT, TCL_STDERR. */
{
Tcl_Channel channel;
HANDLE handle;
int mode;
char *bufMode;
DWORD handleId; /* Standard handle to retrieve. */
switch (type) {
case TCL_STDIN:
handleId = STD_INPUT_HANDLE;
mode = TCL_READABLE;
bufMode = "line";
break;
|
| ︙ | ︙ | |||
995 996 997 998 999 1000 1001 |
handle = GetStdHandle(handleId);
/*
* Note that we need to check for 0 because Windows may return 0 if this
* is not a console mode application, even though this is not a valid
* handle.
*/
| | | | | | 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 |
handle = GetStdHandle(handleId);
/*
* Note that we need to check for 0 because Windows may return 0 if this
* is not a console mode application, even though this is not a valid
* handle.
*/
if ((handle == INVALID_HANDLE_VALUE) || (handle == 0)) {
return (Tcl_Channel) NULL;
}
channel = Tcl_MakeFileChannel(handle, mode);
if (channel == NULL) {
return (Tcl_Channel) NULL;
}
/*
* Set up the normal channel options for stdio handles.
*/
if ((Tcl_SetChannelOption((Tcl_Interp *) NULL, channel, "-translation",
|
| ︙ | ︙ | |||
1073 1074 1075 1076 1077 1078 1079 |
infoPtr = (FileInfo *) ckalloc((unsigned) sizeof(FileInfo));
infoPtr->nextPtr = tsdPtr->firstFilePtr;
tsdPtr->firstFilePtr = infoPtr;
infoPtr->validMask = permissions;
infoPtr->watchMask = 0;
infoPtr->flags = appendMode;
infoPtr->handle = handle;
| | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 |
infoPtr = (FileInfo *) ckalloc((unsigned) sizeof(FileInfo));
infoPtr->nextPtr = tsdPtr->firstFilePtr;
tsdPtr->firstFilePtr = infoPtr;
infoPtr->validMask = permissions;
infoPtr->watchMask = 0;
infoPtr->flags = appendMode;
infoPtr->handle = handle;
infoPtr->dirty = 0;
wsprintfA(channelName, "file%lx", (int) infoPtr);
infoPtr->channel = Tcl_CreateChannel(&fileChannelType, channelName,
(ClientData) infoPtr, permissions);
/*
* Files have default translation of AUTO and ^Z eof char, which
* means that a ^Z will be accepted as EOF when reading.
*/
Tcl_SetChannelOption(NULL, infoPtr->channel, "-translation", "auto");
Tcl_SetChannelOption(NULL, infoPtr->channel, "-eofchar", "\032 {}");
return infoPtr->channel;
}
/*
*----------------------------------------------------------------------
*
* TclWinOpenFileChannel --
*
* Constructs a File channel for the specified standard OS handle.
* This is a helper function to break up the construction of
* channels into File, Console, or Serial.
*
* Results:
* Returns the new channel, or NULL.
*
* Side effects:
* May open the channel and may cause creation of a file on the
* file system.
*
*----------------------------------------------------------------------
*/
void
TclWinFlushDirtyChannels ()
{
FileInfo *infoPtr;
ThreadSpecificData *tsdPtr;
tsdPtr = FileInit();
/*
* Flush all channels which are dirty, i.e. may have data pending
* in the OS
*/
for (infoPtr = tsdPtr->firstFilePtr;
infoPtr != NULL;
infoPtr = infoPtr->nextPtr) {
if (infoPtr->dirty) {
FlushFileBuffers(infoPtr->handle);
infoPtr->dirty = 0;
}
}
}
|
Changes to win/tclWinConsole.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclWinConsole.c -- * * This file implements the Windows-specific console functions, * and the "console" channel driver. * * Copyright (c) 1999 by Scriptics Corp. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclWinConsole.c -- * * This file implements the Windows-specific console functions, * and the "console" channel driver. * * Copyright (c) 1999 by Scriptics Corp. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinConsole.c,v 1.3.10.2 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" #include <dos.h> #include <fcntl.h> #include <io.h> |
| ︙ | ︙ | |||
131 132 133 134 135 136 137 | * pointer. */ } ConsoleEvent; /* * Declarations for functions used only in this file. */ | < < < < < < < < < | > > > > | 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 |
* pointer. */
} ConsoleEvent;
/*
* Declarations for functions used only in this file.
*/
static int ConsoleBlockModeProc(ClientData instanceData, int mode);
static void ConsoleCheckProc(ClientData clientData, int flags);
static int ConsoleCloseProc(ClientData instanceData,
Tcl_Interp *interp);
static int ConsoleEventProc(Tcl_Event *evPtr, int flags);
static void ConsoleExitHandler(ClientData clientData);
static int ConsoleGetHandleProc(ClientData instanceData,
int direction, ClientData *handlePtr);
static ThreadSpecificData *ConsoleInit(void);
static int ConsoleInputProc(ClientData instanceData, char *buf,
int toRead, int *errorCode);
static int ConsoleOutputProc(ClientData instanceData, char *buf,
int toWrite, int *errorCode);
static DWORD WINAPI ConsoleReaderThread(LPVOID arg);
static void ConsoleSetupProc(ClientData clientData, int flags);
static void ConsoleWatchProc(ClientData instanceData, int mask);
static DWORD WINAPI ConsoleWriterThread(LPVOID arg);
static void ProcExitHandler(ClientData clientData);
static int WaitForRead(ConsoleInfo *infoPtr, int blocking);
/*
* This structure describes the channel type structure for command console
* based IO.
*/
static Tcl_ChannelType consoleChannelType = {
"console", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
ConsoleCloseProc, /* Close proc. */
ConsoleInputProc, /* Input proc. */
ConsoleOutputProc, /* Output proc. */
NULL, /* Seek proc. */
NULL, /* Set option proc. */
NULL, /* Get option proc. */
ConsoleWatchProc, /* Set up notifier to watch the channel. */
ConsoleGetHandleProc, /* Get an OS handle from channel. */
NULL, /* close2proc. */
ConsoleBlockModeProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
/*
*----------------------------------------------------------------------
*
* ConsoleInit --
*
|
| ︙ | ︙ | |||
628 629 630 631 632 633 634 |
if (infoPtr->readFlags & CONSOLE_BUFFERED) {
/*
* Data is stored in the buffer.
*/
if (bufSize < (infoPtr->bytesRead - infoPtr->offset)) {
| | | | 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 |
if (infoPtr->readFlags & CONSOLE_BUFFERED) {
/*
* Data is stored in the buffer.
*/
if (bufSize < (infoPtr->bytesRead - infoPtr->offset)) {
memcpy(buf, &infoPtr->buffer[infoPtr->offset], (size_t) bufSize);
bytesRead = bufSize;
infoPtr->offset += bufSize;
} else {
memcpy(buf, &infoPtr->buffer[infoPtr->offset], (size_t) bufSize);
bytesRead = infoPtr->bytesRead - infoPtr->offset;
/*
* Reset the buffer
*/
infoPtr->readFlags &= ~CONSOLE_BUFFERED;
|
| ︙ | ︙ | |||
726 727 728 729 730 731 732 |
* Reallocate the buffer to be large enough to hold the data.
*/
if (infoPtr->writeBuf) {
ckfree(infoPtr->writeBuf);
}
infoPtr->writeBufLen = toWrite;
| | | | 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 |
* Reallocate the buffer to be large enough to hold the data.
*/
if (infoPtr->writeBuf) {
ckfree(infoPtr->writeBuf);
}
infoPtr->writeBufLen = toWrite;
infoPtr->writeBuf = ckalloc((unsigned int) toWrite);
}
memcpy(infoPtr->writeBuf, buf, (size_t) toWrite);
infoPtr->toWrite = toWrite;
ResetEvent(infoPtr->writable);
SetEvent(infoPtr->startWriter);
bytesWritten = toWrite;
} else {
/*
* In the blocking case, just try to write the buffer directly.
|
| ︙ | ︙ | |||
1078 1079 1080 1081 1082 1083 1084 | count = 0; /* * Look for data on the console, but first ignore any events * that are not KEY_EVENTs */ if (ReadConsole(handle, infoPtr->buffer, CONSOLE_BUFFER_SIZE, | | | 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 |
count = 0;
/*
* Look for data on the console, but first ignore any events
* that are not KEY_EVENTs
*/
if (ReadConsole(handle, infoPtr->buffer, CONSOLE_BUFFER_SIZE,
(LPDWORD) &infoPtr->bytesRead, NULL) != FALSE) {
/*
* Data was stored in the buffer.
*/
infoPtr->readFlags |= CONSOLE_BUFFERED;
} else {
DWORD err;
|
| ︙ | ︙ |
Changes to win/tclWinDde.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclWinDde.c -- * * This file provides procedures that implement the "send" * command, allowing commands to be passed from interpreter * to interpreter. * * Copyright (c) 1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclWinDde.c -- * * This file provides procedures that implement the "send" * command, allowing commands to be passed from interpreter * to interpreter. * * Copyright (c) 1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinDde.c,v 1.5.10.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclPort.h" #include <ddeml.h> /* * TCL_STORAGE_CLASS is set unconditionally to DLLEXPORT because the |
| ︙ | ︙ | |||
729 730 731 732 733 734 735 |
MakeDdeConnection(
Tcl_Interp *interp, /* Used to report errors. */
char *name, /* The connection to use. */
HCONV *ddeConvPtr)
{
HSZ ddeTopic, ddeService;
HCONV ddeConv;
| < | 729 730 731 732 733 734 735 736 737 738 739 740 741 742 |
MakeDdeConnection(
Tcl_Interp *interp, /* Used to report errors. */
char *name, /* The connection to use. */
HCONV *ddeConvPtr)
{
HSZ ddeTopic, ddeService;
HCONV ddeConv;
ddeService = DdeCreateStringHandle(ddeInstance, "TclEval", 0);
ddeTopic = DdeCreateStringHandle(ddeInstance, name, 0);
ddeConv = DdeConnect(ddeInstance, ddeService, ddeTopic, NULL);
DdeFreeStringHandle(ddeInstance, ddeService);
DdeFreeStringHandle(ddeInstance, ddeTopic);
|
| ︙ | ︙ |
Changes to win/tclWinError.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclWinError.c -- * * This file contains code for converting from Win32 errors to * errno errors. * * Copyright (c) 1995-1996 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclWinError.c -- * * This file contains code for converting from Win32 errors to * errno errors. * * Copyright (c) 1995-1996 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinError.c,v 1.3.12.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" /* * The following table contains the mapping from Win32 errors to * errno errors. |
| ︙ | ︙ | |||
143 144 145 146 147 148 149 |
EINVAL, /* 120 */
EINVAL, /* 121 */
EINVAL, /* 122 */
ENOENT, /* ERROR_INVALID_NAME 123 */
EINVAL, /* 124 */
EINVAL, /* 125 */
EINVAL, /* 126 */
| | | 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
EINVAL, /* 120 */
EINVAL, /* 121 */
EINVAL, /* 122 */
ENOENT, /* ERROR_INVALID_NAME 123 */
EINVAL, /* 124 */
EINVAL, /* 125 */
EINVAL, /* 126 */
EINVAL, /* ERROR_PROC_NOT_FOUND 127 */
ECHILD, /* ERROR_WAIT_NO_CHILDREN 128 */
ECHILD, /* ERROR_CHILD_NOT_COMPLETE 129 */
EBADF, /* ERROR_DIRECT_ACCESS_HANDLE 130 */
EINVAL, /* 131 */
ESPIPE, /* ERROR_SEEK_ON_DEVICE 132 */
EINVAL, /* 133 */
EINVAL, /* 134 */
|
| ︙ | ︙ |
Changes to win/tclWinFCmd.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclWinFCmd.c * * This file implements the Windows specific portion of file manipulation * subcommands of the "file" command. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclWinFCmd.c * * This file implements the Windows specific portion of file manipulation * subcommands of the "file" command. * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinFCmd.c,v 1.7.2.1 2000/08/07 21:33:02 hobbs Exp $ */ #include "tclWinInt.h" /* * The following constants specify the type of callback when * TraverseWinTree() calls the traverseProc() |
| ︙ | ︙ | |||
233 234 235 236 237 238 239 | return TCL_ERROR; } (*tclWinProcs->charLowerProc)((TCHAR *) nativeSrcPath); (*tclWinProcs->charLowerProc)((TCHAR *) nativeDstPath); src = Tcl_WinTCharToUtf((TCHAR *) nativeSrcPath, -1, &srcString); dst = Tcl_WinTCharToUtf((TCHAR *) nativeDstPath, -1, &dstString); | | | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
return TCL_ERROR;
}
(*tclWinProcs->charLowerProc)((TCHAR *) nativeSrcPath);
(*tclWinProcs->charLowerProc)((TCHAR *) nativeDstPath);
src = Tcl_WinTCharToUtf((TCHAR *) nativeSrcPath, -1, &srcString);
dst = Tcl_WinTCharToUtf((TCHAR *) nativeDstPath, -1, &dstString);
if (strncmp(src, dst, (size_t) Tcl_DStringLength(&srcString)) == 0) {
/*
* Trying to move a directory into itself.
*/
errno = EINVAL;
Tcl_DStringFree(&srcString);
Tcl_DStringFree(&dstString);
|
| ︙ | ︙ | |||
654 655 656 657 658 659 660 |
return result;
}
static int
DoCreateDirectory(
Tcl_DString *pathPtr) /* Pathname of directory to create (native). */
{
| | | 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 |
return result;
}
static int
DoCreateDirectory(
Tcl_DString *pathPtr) /* Pathname of directory to create (native). */
{
DWORD error;
CONST TCHAR *nativePath;
nativePath = (TCHAR *) Tcl_DStringValue(pathPtr);
if ((*tclWinProcs->createDirectoryProc)(nativePath, NULL) == 0) {
error = GetLastError();
TclWinConvertError(error);
return TCL_ERROR;
|
| ︙ | ︙ | |||
1280 1281 1282 1283 1284 1285 1286 |
Tcl_DStringFree(&ds);
if (result == 0xffffffff) {
StatError(interp, fileName);
return TCL_ERROR;
}
| | | 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 |
Tcl_DStringFree(&ds);
if (result == 0xffffffff) {
StatError(interp, fileName);
return TCL_ERROR;
}
*attributePtrPtr = Tcl_NewBooleanObj((int) (result & attributeArray[objIndex]));
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* ConvertFileNameFormat --
|
| ︙ | ︙ | |||
1418 1419 1420 1421 1422 1423 1424 | * but does complain about the second. * * fprintf(stderr, "%d\n", data.w.cAlternateFileName[0]); * fprintf(stderr, "%d\n", ((WCHAR *) nativeName)[0]); */ Tcl_WinTCharToUtf(nativeName, -1, &ds); | | | 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 |
* but does complain about the second.
*
* fprintf(stderr, "%d\n", data.w.cAlternateFileName[0]);
* fprintf(stderr, "%d\n", ((WCHAR *) nativeName)[0]);
*/
Tcl_WinTCharToUtf(nativeName, -1, &ds);
newv[i] = ckalloc((unsigned int) (Tcl_DStringLength(&ds) + 1));
lstrcpyA(newv[i], Tcl_DStringValue(&ds));
Tcl_DStringFree(&ds);
FindClose(handle);
}
}
Tcl_DStringInit(&resultDString);
|
| ︙ | ︙ |
Changes to win/tclWinFile.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclWinFile.c -- * * This file contains temporary wrappers around UNIX file handling * functions. These wrappers map the UNIX functions to Win32 HANDLE-style * files, which can be manipulated through the Win32 console redirection * interfaces. * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclWinFile.c -- * * This file contains temporary wrappers around UNIX file handling * functions. These wrappers map the UNIX functions to Win32 HANDLE-style * files, which can be manipulated through the Win32 console redirection * interfaces. * * Copyright (c) 1995-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinFile.c,v 1.7.2.2 2001/09/07 17:10:33 andreas_kupries Exp $ */ #include "tclWinInt.h" #include <sys/stat.h> #include <shlobj.h> #include <lmaccess.h> /* For TclpGetUserHome(). */ |
| ︙ | ︙ | |||
322 323 324 325 326 327 328 | name = Tcl_WinTCharToUtf(nativeMatchResult, -1, &ds); Tcl_DStringAppend(dirPtr, name, -1); Tcl_DStringFree(&ds); fname = Tcl_DStringValue(dirPtr); nativeName = Tcl_WinUtfToTChar(fname, Tcl_DStringLength(dirPtr), &ds); | | > > > > > | > > | 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 |
name = Tcl_WinTCharToUtf(nativeMatchResult, -1, &ds);
Tcl_DStringAppend(dirPtr, name, -1);
Tcl_DStringFree(&ds);
fname = Tcl_DStringValue(dirPtr);
nativeName = Tcl_WinUtfToTChar(fname, Tcl_DStringLength(dirPtr), &ds);
/*
* 'attr' represents the attributes of the file, but we only
* want to retrieve this info if it is absolutely necessary
* because it is an expensive call.
*/
attr = 0;
if (tail == NULL) {
int typeOk = 1;
if (types != NULL) {
if (types->perm != 0) {
attr = (*tclWinProcs->getFileAttributesProc)(nativeName);
if (
((types->perm & TCL_GLOB_PERM_RONLY) &&
!(attr & FILE_ATTRIBUTE_READONLY)) ||
((types->perm & TCL_GLOB_PERM_HIDDEN) &&
!(attr & FILE_ATTRIBUTE_HIDDEN)) ||
((types->perm & TCL_GLOB_PERM_R) &&
(TclpAccess(fname, R_OK) != 0)) ||
|
| ︙ | ︙ | |||
385 386 387 388 389 390 391 |
}
}
}
if (typeOk) {
Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(fname, Tcl_DStringLength(dirPtr)));
}
| > > | | | | | | | > > > > > > > | 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 |
}
}
}
if (typeOk) {
Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(fname, Tcl_DStringLength(dirPtr)));
}
} else {
attr = (*tclWinProcs->getFileAttributesProc)(nativeName);
if (attr & FILE_ATTRIBUTE_DIRECTORY) {
Tcl_DStringAppend(dirPtr, "/", 1);
result = TclDoGlob(interp, separators, dirPtr, tail, types);
if (result != TCL_OK) {
break;
}
}
}
/*
* Free ds here to ensure that nativeName is valid above.
*/
Tcl_DStringFree(&ds);
Tcl_DStringSetLength(dirPtr, dirLength);
}
FindClose(handle);
Tcl_DStringFree(&dirString);
Tcl_DStringFree(&patternString);
|
| ︙ | ︙ | |||
793 794 795 796 797 798 799 800 801 802 803 804 805 806 |
*/
if (strpbrk(path, "?*") != NULL) {
Tcl_SetErrno(ENOENT);
return -1;
}
nativePath = Tcl_WinUtfToTChar(path, -1, &ds);
handle = (*tclWinProcs->findFirstFileProc)(nativePath, &data);
if (handle == INVALID_HANDLE_VALUE) {
/*
* FindFirstFile() doesn't work on root directories, so call
* GetFileAttributes() to see if the specified file exists.
*/
| > > > > > > > > | 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 |
*/
if (strpbrk(path, "?*") != NULL) {
Tcl_SetErrno(ENOENT);
return -1;
}
/*
* Ensure correct file sizes by forcing the OS to write any
* pending data to disk. This is done only for channels which are
* dirty, i.e. have been written to since the last flush here.
*/
TclWinFlushDirtyChannels ();
nativePath = Tcl_WinUtfToTChar(path, -1, &ds);
handle = (*tclWinProcs->findFirstFileProc)(nativePath, &data);
if (handle == INVALID_HANDLE_VALUE) {
/*
* FindFirstFile() doesn't work on root directories, so call
* GetFileAttributes() to see if the specified file exists.
*/
|
| ︙ | ︙ |
Changes to win/tclWinInit.c.
1 2 3 4 5 6 7 8 9 | /* * tclWinInit.c -- * * Contains the Windows-specific interpreter initialization functions. * * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * | | < < < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* * tclWinInit.c -- * * Contains the Windows-specific interpreter initialization functions. * * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * * RCS: @(#) $Id: tclWinInit.c,v 1.22.2.6 2001/10/12 22:46:27 hobbs Exp $ */ #include "tclWinInt.h" #include <winnt.h> #include <winbase.h> /* * The following declaration is a workaround for some Microsoft brain damage. * The SYSTEM_INFO structure is different in various releases, even though the * layout is the same. So we overlay our own structure on top of it so we * can access the interesting slots in a uniform way. */ |
| ︙ | ︙ | |||
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#endif
#ifndef PROCESSOR_ARCHITECTURE_ALPHA
#define PROCESSOR_ARCHITECTURE_ALPHA 2
#endif
#ifndef PROCESSOR_ARCHITECTURE_PPC
#define PROCESSOR_ARCHITECTURE_PPC 3
#endif
#ifndef PROCESSOR_ARCHITECTURE_UNKNOWN
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
#endif
/*
* The following arrays contain the human readable strings for the Windows
* platform and processor values.
*/
#define NUMPLATFORMS 3
static char* platforms[NUMPLATFORMS] = {
"Win32s", "Windows 95", "Windows NT"
};
| > > > > > > > > > > > > > > > | | < | < | > | < | 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 |
#endif
#ifndef PROCESSOR_ARCHITECTURE_ALPHA
#define PROCESSOR_ARCHITECTURE_ALPHA 2
#endif
#ifndef PROCESSOR_ARCHITECTURE_PPC
#define PROCESSOR_ARCHITECTURE_PPC 3
#endif
#ifndef PROCESSOR_ARCHITECTURE_SHX
#define PROCESSOR_ARCHITECTURE_SHX 4
#endif
#ifndef PROCESSOR_ARCHITECTURE_ARM
#define PROCESSOR_ARCHITECTURE_ARM 5
#endif
#ifndef PROCESSOR_ARCHITECTURE_IA64
#define PROCESSOR_ARCHITECTURE_IA64 6
#endif
#ifndef PROCESSOR_ARCHITECTURE_ALPHA64
#define PROCESSOR_ARCHITECTURE_ALPHA64 7
#endif
#ifndef PROCESSOR_ARCHITECTURE_MSIL
#define PROCESSOR_ARCHITECTURE_MSIL 8
#endif
#ifndef PROCESSOR_ARCHITECTURE_UNKNOWN
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
#endif
/*
* The following arrays contain the human readable strings for the Windows
* platform and processor values.
*/
#define NUMPLATFORMS 3
static char* platforms[NUMPLATFORMS] = {
"Win32s", "Windows 95", "Windows NT"
};
#define NUMPROCESSORS 9
static char* processors[NUMPROCESSORS] = {
"intel", "mips", "alpha", "ppc", "shx", "arm", "ia64", "alpha64", "msil"
};
/* Used to store the encoding used for binary files */
static Tcl_Encoding binaryEncoding = NULL;
/* Has the basic library path encoding issue been fixed */
static int libraryPathEncodingFixed = 0;
/*
* The Init script (common to Windows and Unix platforms) is
* defined in tkInitScript.h
*/
#include "tclInitScript.h"
static void AppendEnvironment(Tcl_Obj *listPtr, CONST char *lib);
static void AppendDllPath(Tcl_Obj *listPtr, HMODULE hModule,
CONST char *lib);
static int ToUtf(CONST WCHAR *wSrc, char *dst);
/*
*---------------------------------------------------------------------------
*
* TclpInitPlatform --
*
|
| ︙ | ︙ | |||
125 126 127 128 129 130 131 |
*
* Under 95 and NT 4.0, this is a NOOP because the system doesn't
* automatically put up dialogs when the above operations fail.
*/
SetErrorMode(SetErrorMode(0) | SEM_FAILCRITICALERRORS);
| < < < < < < < < < < | 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
*
* Under 95 and NT 4.0, this is a NOOP because the system doesn't
* automatically put up dialogs when the above operations fail.
*/
SetErrorMode(SetErrorMode(0) | SEM_FAILCRITICALERRORS);
#ifdef STATIC_BUILD
/*
* If we are in a statically linked executable, then we need to
* explicitly initialize the Windows function tables here since
* DllMain() will not be invoked.
*/
|
| ︙ | ︙ | |||
242 243 244 245 246 247 248 249 250 |
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../library)
* <bindir>/../../<developLib>
* (e.g. /usr/src/tcl8.2/unix/../../tcl8.2/library)
* <bindir>/../../../<devlopLib>
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../../tcl8.2/library)
*/
if (path != NULL) {
Tcl_SplitPath(path, &pathc, &pathv);
| > > > > > | > > | > < < < < < | < > > > > > > > > > > > | > > | > > | 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 |
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../library)
* <bindir>/../../<developLib>
* (e.g. /usr/src/tcl8.2/unix/../../tcl8.2/library)
* <bindir>/../../../<devlopLib>
* (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../../tcl8.2/library)
*/
/*
* The variable path holds an absolute path. Take care not to
* overwrite pathv[0] since that might produce a relative path.
*/
if (path != NULL) {
Tcl_SplitPath(path, &pathc, &pathv);
if (pathc > 2) {
str = pathv[pathc - 2];
pathv[pathc - 2] = installLib;
path = Tcl_JoinPath(pathc - 1, pathv, &ds);
pathv[pathc - 2] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 3) {
str = pathv[pathc - 3];
pathv[pathc - 3] = installLib;
path = Tcl_JoinPath(pathc - 2, pathv, &ds);
pathv[pathc - 3] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 2) {
str = pathv[pathc - 2];
pathv[pathc - 2] = "library";
path = Tcl_JoinPath(pathc - 1, pathv, &ds);
pathv[pathc - 2] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 3) {
str = pathv[pathc - 3];
pathv[pathc - 3] = "library";
path = Tcl_JoinPath(pathc - 2, pathv, &ds);
pathv[pathc - 3] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 3) {
str = pathv[pathc - 3];
pathv[pathc - 3] = developLib;
path = Tcl_JoinPath(pathc - 2, pathv, &ds);
pathv[pathc - 3] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
if (pathc > 4) {
str = pathv[pathc - 4];
pathv[pathc - 4] = developLib;
path = Tcl_JoinPath(pathc - 3, pathv, &ds);
pathv[pathc - 4] = str;
objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds));
Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
Tcl_DStringFree(&ds);
}
ckfree((char *) pathv);
}
|
| ︙ | ︙ | |||
446 447 448 449 450 451 452 |
start = dst;
while (*wSrc != '\0') {
dst += Tcl_UniCharToUtf(*wSrc, dst);
wSrc++;
}
*dst = '\0';
| | | > > > | > > < < > > | < | | | | | | | | | | | | | | | | | | | | | | | | | > > > > > > > > | | | | < | | > | < | 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 |
start = dst;
while (*wSrc != '\0') {
dst += Tcl_UniCharToUtf(*wSrc, dst);
wSrc++;
}
*dst = '\0';
return (int) (dst - start);
}
/*
*---------------------------------------------------------------------------
*
* TclpSetInitialEncodings --
*
* Based on the locale, determine the encoding of the operating
* system and the default encoding for newly opened files.
*
* Called at process initialization time, and part way through
* startup, we verify that the initial encodings were correctly
* setup. Depending on Tcl's environment, there may not have been
* enough information first time through (above).
*
* Results:
* None.
*
* Side effects:
* The Tcl library path is converted from native encoding to UTF-8,
* on the first call, and the encodings may be changed on first or
* second call.
*
*---------------------------------------------------------------------------
*/
void
TclpSetInitialEncodings()
{
CONST char *encoding;
char buf[4 + TCL_INTEGER_SPACE];
if (libraryPathEncodingFixed == 0) {
int platformId;
platformId = TclWinGetPlatformId();
TclWinSetInterfaces(platformId == VER_PLATFORM_WIN32_NT);
wsprintfA(buf, "cp%d", GetACP());
Tcl_SetSystemEncoding(NULL, buf);
if (platformId != VER_PLATFORM_WIN32_NT) {
Tcl_Obj *pathPtr = TclGetLibraryPath();
if (pathPtr != NULL) {
int i, objc;
Tcl_Obj **objv;
objc = 0;
Tcl_ListObjGetElements(NULL, pathPtr, &objc, &objv);
for (i = 0; i < objc; i++) {
int length;
char *string;
Tcl_DString ds;
string = Tcl_GetStringFromObj(objv[i], &length);
Tcl_ExternalToUtfDString(NULL, string, length, &ds);
Tcl_SetStringObj(objv[i], Tcl_DStringValue(&ds),
Tcl_DStringLength(&ds));
Tcl_DStringFree(&ds);
}
}
}
libraryPathEncodingFixed = 1;
} else {
wsprintfA(buf, "cp%d", GetACP());
Tcl_SetSystemEncoding(NULL, buf);
}
/* This is only ever called from the startup thread */
if (binaryEncoding == NULL) {
/*
* Keep this encoding preloaded. The IO package uses it for
* gets on a binary channel.
*/
encoding = "iso8859-1";
binaryEncoding = Tcl_GetEncoding(NULL, encoding);
}
}
/*
*---------------------------------------------------------------------------
*
* TclpSetVariables --
*
* Performs platform-specific interpreter initialization related to
* the tcl_platform and env variables, and other platform-specific
* things.
*
* Results:
* None.
*
* Side effects:
* Sets "tcl_platform", and "env(HOME)" Tcl variables.
*
*----------------------------------------------------------------------
*/
void
TclpSetVariables(interp)
Tcl_Interp *interp; /* Interp to initialize. */
|
| ︙ | ︙ | |||
551 552 553 554 555 556 557 |
osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
GetVersionExA(&osInfo);
oemId = (OemId *) &sysInfo;
GetSystemInfo(&sysInfo);
| < < < < < < | 572 573 574 575 576 577 578 579 580 581 582 583 584 585 |
osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
GetVersionExA(&osInfo);
oemId = (OemId *) &sysInfo;
GetSystemInfo(&sysInfo);
/*
* Define the tcl_platform array.
*/
Tcl_SetVar2(interp, "tcl_platform", "platform", "windows",
TCL_GLOBAL_ONLY);
if (osInfo.dwPlatformId < NUMPLATFORMS) {
|
| ︙ | ︙ | |||
618 619 620 621 622 623 624 |
/*
* Initialize the user name from the environment first, since this is much
* faster than asking the system.
*/
Tcl_DStringSetLength(&ds, 100);
if (TclGetEnv("USERNAME", &ds) == NULL) {
| | | 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 |
/*
* Initialize the user name from the environment first, since this is much
* faster than asking the system.
*/
Tcl_DStringSetLength(&ds, 100);
if (TclGetEnv("USERNAME", &ds) == NULL) {
if (GetUserName(Tcl_DStringValue(&ds), (LPDWORD) &Tcl_DStringLength(&ds)) == 0) {
Tcl_DStringSetLength(&ds, 0);
}
}
Tcl_SetVar2(interp, "tcl_platform", "user", Tcl_DStringValue(&ds),
TCL_GLOBAL_ONLY);
Tcl_DStringFree(&ds);
}
|
| ︙ | ︙ | |||
685 686 687 688 689 690 691 |
*/
envUpper = Tcl_ExternalToUtfDString(NULL, env, -1, &envString);
p1 = strchr(envUpper, '=');
if (p1 == NULL) {
continue;
}
| | | 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 |
*/
envUpper = Tcl_ExternalToUtfDString(NULL, env, -1, &envString);
p1 = strchr(envUpper, '=');
if (p1 == NULL) {
continue;
}
length = (int) (p1 - envUpper);
Tcl_DStringSetLength(&envString, length+1);
Tcl_UtfToUpper(envUpper);
p1 = envUpper;
p2 = nameUpper;
for (; *p2 == *p1; p1++, p2++) {
/* NULL loop body. */
|
| ︙ | ︙ | |||
811 812 813 814 815 816 817 |
}
}
}
}
Tcl_DStringFree(&temp);
}
}
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 826 827 828 829 830 831 832 |
}
}
}
}
Tcl_DStringFree(&temp);
}
}
|
Changes to win/tclWinInt.h.
1 2 3 4 5 6 7 8 9 10 | /* * tclWinInt.h -- * * Declarations of Windows-specific shared variables and procedures. * * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclWinInt.h -- * * Declarations of Windows-specific shared variables and procedures. * * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinInt.h,v 1.8.10.3 2001/09/10 17:15:13 andreas_kupries Exp $ */ #ifndef _TCLWININT #define _TCLWININT #ifndef _TCLINT #include "tclInt.h" |
| ︙ | ︙ | |||
88 89 90 91 92 93 94 |
DWORD (WINAPI *searchPathProc)(CONST TCHAR *, CONST TCHAR *,
CONST TCHAR *, DWORD, WCHAR *, TCHAR **);
BOOL (WINAPI *setCurrentDirectoryProc)(CONST TCHAR *);
BOOL (WINAPI *setFileAttributesProc)(CONST TCHAR *, DWORD);
} TclWinProcs;
EXTERN TclWinProcs *tclWinProcs;
| < | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
DWORD (WINAPI *searchPathProc)(CONST TCHAR *, CONST TCHAR *,
CONST TCHAR *, DWORD, WCHAR *, TCHAR **);
BOOL (WINAPI *setCurrentDirectoryProc)(CONST TCHAR *);
BOOL (WINAPI *setFileAttributesProc)(CONST TCHAR *, DWORD);
} TclWinProcs;
EXTERN TclWinProcs *tclWinProcs;
/*
* Declarations of functions that are not accessible by way of the
* stubs table.
*/
EXTERN void TclWinInit(HINSTANCE hInst);
|
| ︙ | ︙ |
Changes to win/tclWinLoad.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclWinLoad.c -- * * This procedure provides a version of the TclLoadFile that * works with the Windows "LoadLibrary" and "GetProcAddress" * API for dynamic loading. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tclWinLoad.c -- * * This procedure provides a version of the TclLoadFile that * works with the Windows "LoadLibrary" and "GetProcAddress" * API for dynamic loading. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinLoad.c,v 1.5.2.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" /* *---------------------------------------------------------------------- |
| ︙ | ︙ | |||
83 84 85 86 87 88 89 |
* just about any problem, but it's better than nothing. It'd be
* even better if there was a way to get what DLLs
*/
switch (lastError) {
case ERROR_MOD_NOT_FOUND:
case ERROR_DLL_NOT_FOUND:
Tcl_AppendResult(interp, "this library or a dependent library",
| | | > > > > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
* just about any problem, but it's better than nothing. It'd be
* even better if there was a way to get what DLLs
*/
switch (lastError) {
case ERROR_MOD_NOT_FOUND:
case ERROR_DLL_NOT_FOUND:
Tcl_AppendResult(interp, "this library or a dependent library",
" could not be found in library path",
(char *) NULL);
break;
case ERROR_PROC_NOT_FOUND:
Tcl_AppendResult(interp, "could not find specified procedure",
(char *) NULL);
break;
case ERROR_INVALID_DLL:
Tcl_AppendResult(interp, "this library or a dependent library",
" is damaged", (char *) NULL);
break;
case ERROR_DLL_INIT_FAILED:
Tcl_AppendResult(interp, "the library initialization",
|
| ︙ | ︙ |
Changes to win/tclWinNotify.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclWinNotify.c -- * * This file contains Windows-specific procedures for the notifier, * which is the lowest-level part of the Tcl event loop. This file * works together with ../generic/tclNotify.c. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* * tclWinNotify.c -- * * This file contains Windows-specific procedures for the notifier, * which is the lowest-level part of the Tcl event loop. This file * works together with ../generic/tclNotify.c. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinNotify.c,v 1.5.10.3 2002/02/25 23:36:49 hobbs Exp $ */ #include "tclWinInt.h" #define INTERVAL_TIMER 1 /* Handle of interval timer. */ #define WM_WAKEUP WM_USER /* Message that is send by * Tcl_AlertNotifier. */ /* * The following static structure contains the state information for the |
| ︙ | ︙ | |||
145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
*/
void
Tcl_FinalizeNotifier(clientData)
ClientData clientData; /* Pointer to notifier data. */
{
ThreadSpecificData *tsdPtr = (ThreadSpecificData *) clientData;
DeleteCriticalSection(&tsdPtr->crit);
CloseHandle(tsdPtr->event);
/*
* Clean up the timer and messaging window for this thread.
*/
| > > > > > > > > > > > > > > | 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 |
*/
void
Tcl_FinalizeNotifier(clientData)
ClientData clientData; /* Pointer to notifier data. */
{
ThreadSpecificData *tsdPtr = (ThreadSpecificData *) clientData;
/*
* Only finalize the notifier if a notifier was installed in the
* current thread; there is a route in which this is not
* guaranteed to be true (when tclWin32Dll.c:DllMain() is called
* with the flag DLL_PROCESS_DETACH by the OS, which could be
* doing so from a thread that's never previously been involved
* with Tcl, e.g. the task manager) so this check is important.
*
* Fixes Bug #217982 reported by Hugh Vu and Gene Leache.
*/
if (tsdPtr == NULL) {
return;
}
DeleteCriticalSection(&tsdPtr->crit);
CloseHandle(tsdPtr->event);
/*
* Clean up the timer and messaging window for this thread.
*/
|
| ︙ | ︙ | |||
464 465 466 467 468 469 470 |
result = GetMessage(&msg, NULL, 0, 0);
if (result == 0) {
/*
* We received a request to exit this thread (WM_QUIT), so
* propagate the quit message and start unwinding.
*/
| | | 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 |
result = GetMessage(&msg, NULL, 0, 0);
if (result == 0) {
/*
* We received a request to exit this thread (WM_QUIT), so
* propagate the quit message and start unwinding.
*/
PostQuitMessage((int) msg.wParam);
status = -1;
} else if (result == -1) {
/*
* We got an error from the system. I have no idea why this would
* happen, so we'll just unwind.
*/
|
| ︙ | ︙ |
Changes to win/tclWinPipe.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclWinPipe.c -- * * This file implements the Windows-specific exec pipeline functions, * the "pipe" channel driver, and the "pid" Tcl command. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclWinPipe.c -- * * This file implements the Windows-specific exec pipeline functions, * the "pipe" channel driver, and the "pid" Tcl command. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinPipe.c,v 1.11.2.4 2001/08/23 21:19:34 andreas_kupries Exp $ */ #include "tclWinInt.h" #include <dos.h> #include <fcntl.h> #include <io.h> |
| ︙ | ︙ | |||
120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
* input. */
HANDLE startWriter; /* Auto-reset event used by the main thread to
* signal when the writer thread should attempt
* to write to the pipe. */
HANDLE startReader; /* Auto-reset event used by the main thread to
* signal when the reader thread should attempt
* to read from the pipe. */
DWORD writeError; /* An error caused by the last background
* write. Set to 0 if no error has been
* detected. This word is shared with the
* writer thread so access must be
* synchronized with the writable object.
*/
char *writeBuf; /* Current background output buffer.
| > > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
* input. */
HANDLE startWriter; /* Auto-reset event used by the main thread to
* signal when the writer thread should attempt
* to write to the pipe. */
HANDLE startReader; /* Auto-reset event used by the main thread to
* signal when the reader thread should attempt
* to read from the pipe. */
HANDLE stopReader; /* Manual-reset event used to alert the reader
* thread to fall-out and exit */
DWORD writeError; /* An error caused by the last background
* write. Set to 0 if no error has been
* detected. This word is shared with the
* writer thread so access must be
* synchronized with the writable object.
*/
char *writeBuf; /* Current background output buffer.
|
| ︙ | ︙ | |||
205 206 207 208 209 210 211 |
/*
* This structure describes the channel type structure for command pipe
* based IO.
*/
static Tcl_ChannelType pipeChannelType = {
"pipe", /* Type name. */
| | | > > > | 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 |
/*
* This structure describes the channel type structure for command pipe
* based IO.
*/
static Tcl_ChannelType pipeChannelType = {
"pipe", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
TCL_CLOSE2PROC, /* Close proc. */
PipeInputProc, /* Input proc. */
PipeOutputProc, /* Output proc. */
NULL, /* Seek proc. */
NULL, /* Set option proc. */
NULL, /* Get option proc. */
PipeWatchProc, /* Set up notifier to watch the channel. */
PipeGetHandleProc, /* Get an OS handle from channel. */
PipeClose2Proc, /* close2proc */
PipeBlockModeProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
/*
*----------------------------------------------------------------------
*
* PipeInit --
*
|
| ︙ | ︙ | |||
826 827 828 829 830 831 832 |
* stdio of another.
*/
if (!TclInExit()
|| ((GetStdHandle(STD_INPUT_HANDLE) != filePtr->handle)
&& (GetStdHandle(STD_OUTPUT_HANDLE) != filePtr->handle)
&& (GetStdHandle(STD_ERROR_HANDLE) != filePtr->handle))) {
| > | | 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 |
* stdio of another.
*/
if (!TclInExit()
|| ((GetStdHandle(STD_INPUT_HANDLE) != filePtr->handle)
&& (GetStdHandle(STD_OUTPUT_HANDLE) != filePtr->handle)
&& (GetStdHandle(STD_ERROR_HANDLE) != filePtr->handle))) {
if (filePtr->handle != NULL &&
CloseHandle(filePtr->handle) == FALSE) {
TclWinConvertError(GetLastError());
ckfree((char *) filePtr);
return -1;
}
}
break;
|
| ︙ | ︙ | |||
1190 1191 1192 1193 1194 1195 1196 |
* using ab~1.def instead of "a b.default").
*/
BuildCommandLine(execPath, argc, argv, &cmdLine);
if ((*tclWinProcs->createProcessProc)(NULL,
(TCHAR *) Tcl_DStringValue(&cmdLine), NULL, NULL, TRUE,
| | | 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 |
* using ab~1.def instead of "a b.default").
*/
BuildCommandLine(execPath, argc, argv, &cmdLine);
if ((*tclWinProcs->createProcessProc)(NULL,
(TCHAR *) Tcl_DStringValue(&cmdLine), NULL, NULL, TRUE,
(DWORD) createFlags, NULL, NULL, &startInfo, &procInfo) == 0) {
TclWinConvertError(GetLastError());
Tcl_AppendResult(interp, "couldn't execute \"", argv[0],
"\": ", Tcl_PosixError(interp), (char *) NULL);
goto end;
}
/*
|
| ︙ | ︙ | |||
1512 1513 1514 1515 1516 1517 1518 |
arg = executable;
} else {
arg = argv[i];
Tcl_DStringAppend(&ds, " ", 1);
}
quote = 0;
| | | | 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 |
arg = executable;
} else {
arg = argv[i];
Tcl_DStringAppend(&ds, " ", 1);
}
quote = 0;
if (arg[0] == '\0') {
quote = 1;
} else {
for (start = arg; *start != '\0'; start++) {
if (isspace(*start)) { /* INTL: ISO space. */
quote = 1;
break;
}
}
}
if (quote) {
|
| ︙ | ︙ | |||
1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 |
special++;
}
Tcl_DStringAppend(&ds, start, special - start);
if (quote) {
Tcl_DStringAppend(&ds, "\"", 1);
}
}
Tcl_WinUtfToTChar(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds), linePtr);
Tcl_DStringFree(&ds);
}
/*
*----------------------------------------------------------------------
*
| > | 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 |
special++;
}
Tcl_DStringAppend(&ds, start, special - start);
if (quote) {
Tcl_DStringAppend(&ds, "\"", 1);
}
}
Tcl_DStringFree(linePtr);
Tcl_WinUtfToTChar(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds), linePtr);
Tcl_DStringFree(&ds);
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
1641 1642 1643 1644 1645 1646 1647 |
if (readFile != NULL) {
/*
* Start the background reader thread.
*/
infoPtr->readable = CreateEvent(NULL, TRUE, TRUE, NULL);
infoPtr->startReader = CreateEvent(NULL, FALSE, FALSE, NULL);
| > | | | | 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 |
if (readFile != NULL) {
/*
* Start the background reader thread.
*/
infoPtr->readable = CreateEvent(NULL, TRUE, TRUE, NULL);
infoPtr->startReader = CreateEvent(NULL, FALSE, FALSE, NULL);
infoPtr->stopReader = CreateEvent(NULL, TRUE, FALSE, NULL);
infoPtr->readThread = CreateThread(NULL, 512, PipeReaderThread,
infoPtr, 0, &id);
SetThreadPriority(infoPtr->readThread, THREAD_PRIORITY_HIGHEST);
infoPtr->validMask |= TCL_READABLE;
} else {
infoPtr->readThread = 0;
}
if (writeFile != NULL) {
/*
* Start the background writer thread.
*/
infoPtr->writable = CreateEvent(NULL, TRUE, TRUE, NULL);
infoPtr->startWriter = CreateEvent(NULL, FALSE, FALSE, NULL);
infoPtr->writeThread = CreateThread(NULL, 512, PipeWriterThread,
infoPtr, 0, &id);
SetThreadPriority(infoPtr->readThread, THREAD_PRIORITY_HIGHEST);
infoPtr->validMask |= TCL_WRITABLE;
}
/*
* For backward compatibility with previous versions of Tcl, we
|
| ︙ | ︙ | |||
1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 |
int flags) /* Flags that indicate which side to close. */
{
PipeInfo *pipePtr = (PipeInfo *) instanceData;
Tcl_Channel errChan;
int errorCode, result;
PipeInfo *infoPtr, **nextPtrPtr;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
errorCode = 0;
if ((!flags || (flags == TCL_CLOSE_READ))
&& (pipePtr->readFile != NULL)) {
/*
* Clean up the background thread if necessary. Note that this
* must be done before we can close the file, since the
* thread may be blocking trying to read from the pipe.
*/
if (pipePtr->readThread) {
/*
| > | | > | > | > > > | > > | > | > > | | | > | > > > > | < > > > > > > | > > > > > > | > | | > > > | 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 |
int flags) /* Flags that indicate which side to close. */
{
PipeInfo *pipePtr = (PipeInfo *) instanceData;
Tcl_Channel errChan;
int errorCode, result;
PipeInfo *infoPtr, **nextPtrPtr;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
DWORD exitCode;
errorCode = 0;
if ((!flags || (flags == TCL_CLOSE_READ))
&& (pipePtr->readFile != NULL)) {
/*
* Clean up the background thread if necessary. Note that this
* must be done before we can close the file, since the
* thread may be blocking trying to read from the pipe.
*/
if (pipePtr->readThread) {
/*
* The thread may already have closed on it's own. Check it's
* exit code.
*/
GetExitCodeThread(pipePtr->readThread, &exitCode);
if (exitCode == STILL_ACTIVE) {
/*
* Set the stop event so that if the reader thread is blocked
* in PipeReaderThread on WaitForMultipleEvents, it will exit
* cleanly.
*/
SetEvent(pipePtr->stopReader);
/*
* Wait at most 10 milliseconds for the reader thread to close.
*/
WaitForSingleObject(pipePtr->readThread, 10);
GetExitCodeThread(pipePtr->readThread, &exitCode);
if (exitCode == STILL_ACTIVE) {
/*
* The thread must be blocked waiting for the pipe to
* become readable in ReadFile(). There isn't a clean way
* to exit the thread from this condition. We should
* terminate the child process instead to get the reader
* thread to fall out of ReadFile with a FALSE. (below) is
* not the correct way to do this, but will stay here until
* a better solution is found.
*
* Note that we need to guard against terminating the
* thread while it is in the middle of Tcl_ThreadAlert
* because it won't be able to release the notifier lock.
*/
Tcl_MutexLock(&pipeMutex);
/* BUG: this leaks memory */
TerminateThread(pipePtr->readThread, 0);
/* Wait for the thread to terminate. */
WaitForSingleObject(pipePtr->readThread, INFINITE);
Tcl_MutexUnlock(&pipeMutex);
}
}
CloseHandle(pipePtr->readThread);
CloseHandle(pipePtr->readable);
CloseHandle(pipePtr->startReader);
CloseHandle(pipePtr->stopReader);
pipePtr->readThread = NULL;
}
if (TclpCloseFile(pipePtr->readFile) != 0) {
errorCode = errno;
}
pipePtr->validMask &= ~TCL_READABLE;
pipePtr->readFile = NULL;
|
| ︙ | ︙ | |||
2108 2109 2110 2111 2112 2113 2114 |
* Reallocate the buffer to be large enough to hold the data.
*/
if (infoPtr->writeBuf) {
ckfree(infoPtr->writeBuf);
}
infoPtr->writeBufLen = toWrite;
| | | | 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 |
* Reallocate the buffer to be large enough to hold the data.
*/
if (infoPtr->writeBuf) {
ckfree(infoPtr->writeBuf);
}
infoPtr->writeBufLen = toWrite;
infoPtr->writeBuf = ckalloc((unsigned int) toWrite);
}
memcpy(infoPtr->writeBuf, buf, (size_t) toWrite);
infoPtr->toWrite = toWrite;
ResetEvent(infoPtr->writable);
SetEvent(infoPtr->startWriter);
bytesWritten = toWrite;
} else {
/*
* In the blocking case, just try to write the buffer directly.
|
| ︙ | ︙ | |||
2353 2354 2355 2356 2357 2358 2359 |
Tcl_Pid
Tcl_WaitPid(
Tcl_Pid pid,
int *statPtr,
int options)
{
ProcInfo *infoPtr, **prevPtrPtr;
| | | 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 |
Tcl_Pid
Tcl_WaitPid(
Tcl_Pid pid,
int *statPtr,
int options)
{
ProcInfo *infoPtr, **prevPtrPtr;
DWORD flags;
Tcl_Pid result;
DWORD ret;
PipeInit();
/*
* If no pid is specified, do nothing.
|
| ︙ | ︙ | |||
2655 2656 2657 2658 2659 2660 2661 | * * Results: * None. * * Side effects: * Signals the main thread when input become available. May * cause the main thread to wake up by posting a message. May | | > > > > | > > | > > > > > > > > | 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 |
*
* Results:
* None.
*
* Side effects:
* Signals the main thread when input become available. May
* cause the main thread to wake up by posting a message. May
* consume one byte from the pipe for each wait operation. Will
* cause a memory leak of ~4k, if forcefully terminated with
* TerminateThread().
*
*----------------------------------------------------------------------
*/
static DWORD WINAPI
PipeReaderThread(LPVOID arg)
{
PipeInfo *infoPtr = (PipeInfo *)arg;
HANDLE *handle = ((WinFile *) infoPtr->readFile)->handle;
DWORD count, err;
int done = 0;
HANDLE wEvents[2] = {infoPtr->stopReader, infoPtr->startReader};
DWORD dwWait;
while (!done) {
/*
* Wait for the main thread to signal before attempting to wait
* on the pipe becoming readable.
*/
dwWait = WaitForMultipleObjects(2, wEvents, FALSE, INFINITE);
if (dwWait != (WAIT_OBJECT_0 + 1)) {
/*
* The start event was not signaled. It might be the stop event
* or an error, so exit.
*/
return 0;
}
/*
* Try waiting for 0 bytes. This will block until some data is
* available on NT, but will return immediately on Win 95. So,
* if no data is available after the first read, we block until
* we can read a single byte off of the pipe.
*/
|
| ︙ | ︙ |
Changes to win/tclWinPort.h.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * tclWinPort.h -- * * This header file handles porting issues that occur because of * differences between Windows and Unix. It should be the only * file that contains #ifdefs to handle different flavors of OS. * * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | < | | < | | < | | < < > > > | > < < > > | 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 |
/*
* tclWinPort.h --
*
* This header file handles porting issues that occur because of
* differences between Windows and Unix. It should be the only
* file that contains #ifdefs to handle different flavors of OS.
*
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclWinPort.h,v 1.12.2.5 2001/10/15 17:39:34 hobbs Exp $
*/
#ifndef _TCLWINPORT
#define _TCLWINPORT
#ifndef _TCLINT
# include "tclInt.h"
#endif
#ifdef CHECK_UNICODE_CALLS
# define _UNICODE
# define UNICODE
# define __TCHAR_DEFINED
typedef float *_TCHAR;
# define _TCHAR_DEFINED
typedef float *TCHAR;
#endif
/*
*---------------------------------------------------------------------------
* The following sets of #includes and #ifdefs are required to get Tcl to
* compile under the windows compilers.
*---------------------------------------------------------------------------
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <float.h>
#include <io.h>
#include <malloc.h>
#include <process.h>
#include <signal.h>
#include <string.h>
/*
* Need to block out these includes for building extensions with MetroWerks
* compiler for Win32.
*/
#ifndef __MWERKS__
#include <sys/stat.h>
#include <sys/timeb.h>
# ifdef __BORLANDC__
# include <utime.h>
# else
# include <sys/utime.h>
# endif
#endif
#include <time.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#ifdef BUILD_tcl
# undef TCL_STORAGE_CLASS
# define TCL_STORAGE_CLASS DLLEXPORT
#endif
/*
|
| ︙ | ︙ |
Changes to win/tclWinReg.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclWinReg.c -- * * This file contains the implementation of the "registry" Tcl * built-in command. This command is built as a dynamically * loadable extension in a separate DLL. * * Copyright (c) 1997 by Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* * tclWinReg.c -- * * This file contains the implementation of the "registry" Tcl * built-in command. This command is built as a dynamically * loadable extension in a separate DLL. * * Copyright (c) 1997 by Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinReg.c,v 1.11.2.1 2001/04/03 22:54:40 hobbs Exp $ */ #include <tclPort.h> #include <stdlib.h> #define WIN32_LEAN_AND_MEAN #include <windows.h> |
| ︙ | ︙ | |||
363 364 365 366 367 368 369 |
Tcl_DString buf;
/*
* Find the parent of the key being deleted and open it.
*/
keyName = Tcl_GetStringFromObj(keyNameObj, &length);
| | | 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 |
Tcl_DString buf;
/*
* Find the parent of the key being deleted and open it.
*/
keyName = Tcl_GetStringFromObj(keyNameObj, &length);
buffer = ckalloc((unsigned int) length + 1);
strcpy(buffer, keyName);
if (ParseKeyName(interp, buffer, &hostName, &rootKey, &keyName)
!= TCL_OK) {
ckfree(buffer);
return TCL_ERROR;
}
|
| ︙ | ︙ | |||
617 618 619 620 621 622 623 |
/*
* Set the type into the result. Watch out for unknown types.
* If we don't know about the type, just use the numeric value.
*/
if (type > lastType || type < 0) {
| | | 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 |
/*
* Set the type into the result. Watch out for unknown types.
* If we don't know about the type, just use the numeric value.
*/
if (type > lastType || type < 0) {
Tcl_SetIntObj(resultPtr, (int) type);
} else {
Tcl_SetStringObj(resultPtr, typeNames[type], -1);
}
return TCL_OK;
}
/*
|
| ︙ | ︙ | |||
676 677 678 679 680 681 682 |
*
* This allows short values to be read from the registy in one call.
* Longer values need a second call with an expanded DString.
*/
Tcl_DStringInit(&data);
length = TCL_DSTRING_STATIC_SIZE - 1;
| | | | 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 |
*
* This allows short values to be read from the registy in one call.
* Longer values need a second call with an expanded DString.
*/
Tcl_DStringInit(&data);
length = TCL_DSTRING_STATIC_SIZE - 1;
Tcl_DStringSetLength(&data, (int) length);
resultPtr = Tcl_GetObjResult(interp);
valueName = Tcl_GetStringFromObj(valueNameObj, &nameLen);
valueName = Tcl_WinUtfToTChar(valueName, nameLen, &buf);
result = (*regWinProcs->regQueryValueExProc)(key, valueName, NULL, &type,
(BYTE *) Tcl_DStringValue(&data), &length);
while (result == ERROR_MORE_DATA) {
/*
* The Windows docs say that in this error case, we just need
* to expand our buffer and request more data.
* Required for HKEY_PERFORMANCE_DATA
*/
length *= 2;
Tcl_DStringSetLength(&data, (int) length);
result = (*regWinProcs->regQueryValueExProc)(key, valueName, NULL,
&type, (BYTE *) Tcl_DStringValue(&data), &length);
}
Tcl_DStringFree(&buf);
RegCloseKey(key);
if (result != ERROR_SUCCESS) {
Tcl_AppendStringsToObj(resultPtr, "unable to get value \"",
|
| ︙ | ︙ | |||
715 716 717 718 719 720 721 |
* If the data is a 32-bit quantity, store it as an integer object. If it
* is a multi-string, store it as a list of strings. For null-terminated
* strings, append up the to first null. Otherwise, store it as a binary
* string.
*/
if (type == REG_DWORD || type == REG_DWORD_BIG_ENDIAN) {
| | | 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 |
* If the data is a 32-bit quantity, store it as an integer object. If it
* is a multi-string, store it as a list of strings. For null-terminated
* strings, append up the to first null. Otherwise, store it as a binary
* string.
*/
if (type == REG_DWORD || type == REG_DWORD_BIG_ENDIAN) {
Tcl_SetIntObj(resultPtr, (int) ConvertDWORD(type,
*((DWORD*) Tcl_DStringValue(&data))));
} else if (type == REG_MULTI_SZ) {
char *p = Tcl_DStringValue(&data);
char *end = Tcl_DStringValue(&data) + length;
/*
* Multistrings are stored as an array of null-terminated strings,
|
| ︙ | ︙ | |||
750 751 752 753 754 755 756 |
Tcl_DStringLength(&buf));
Tcl_DStringFree(&buf);
} else {
/*
* Save binary data as a byte array.
*/
| | | 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 |
Tcl_DStringLength(&buf));
Tcl_DStringFree(&buf);
} else {
/*
* Save binary data as a byte array.
*/
Tcl_SetByteArrayObj(resultPtr, Tcl_DStringValue(&data), (int) length);
}
Tcl_DStringFree(&data);
return result;
}
/*
*----------------------------------------------------------------------
|
| ︙ | ︙ | |||
818 819 820 821 822 823 824 |
goto done;
}
maxSize++;
Tcl_DStringInit(&buffer);
Tcl_DStringSetLength(&buffer,
| | | 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 |
goto done;
}
maxSize++;
Tcl_DStringInit(&buffer);
Tcl_DStringSetLength(&buffer,
(int) ((regWinProcs->useWide) ? maxSize*2 : maxSize));
index = 0;
result = TCL_OK;
if (patternObj) {
pattern = Tcl_GetString(patternObj);
} else {
pattern = NULL;
|
| ︙ | ︙ | |||
843 844 845 846 847 848 849 |
Tcl_DStringValue(&buffer), &size, NULL, NULL, NULL, NULL)
== ERROR_SUCCESS) {
if (regWinProcs->useWide) {
size *= 2;
}
| | | 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 |
Tcl_DStringValue(&buffer), &size, NULL, NULL, NULL, NULL)
== ERROR_SUCCESS) {
if (regWinProcs->useWide) {
size *= 2;
}
Tcl_WinTCharToUtf((TCHAR *) Tcl_DStringValue(&buffer), (int) size, &ds);
name = Tcl_DStringValue(&ds);
if (!pattern || Tcl_StringMatch(name, pattern)) {
result = Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(name, Tcl_DStringLength(&ds)));
if (result != TCL_OK) {
Tcl_DStringFree(&ds);
break;
|
| ︙ | ︙ | |||
897 898 899 900 901 902 903 |
{
char *keyName, *buffer, *hostName;
int length;
HKEY rootKey;
DWORD result;
keyName = Tcl_GetStringFromObj(keyNameObj, &length);
| | | 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 |
{
char *keyName, *buffer, *hostName;
int length;
HKEY rootKey;
DWORD result;
keyName = Tcl_GetStringFromObj(keyNameObj, &length);
buffer = ckalloc((unsigned int) length + 1);
strcpy(buffer, keyName);
result = ParseKeyName(interp, buffer, &hostName, &rootKey, &keyName);
if (result == TCL_OK) {
result = OpenSubKey(hostName, rootKey, keyName, mode, flags, keyPtr);
if (result != ERROR_SUCCESS) {
Tcl_Obj *resultPtr = Tcl_GetObjResult(interp);
|
| ︙ | ︙ | |||
1131 1132 1133 1134 1135 1136 1137 |
maxSize++;
if (result != ERROR_SUCCESS) {
return result;
}
Tcl_DStringInit(&subkey);
Tcl_DStringSetLength(&subkey,
| | | 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 |
maxSize++;
if (result != ERROR_SUCCESS) {
return result;
}
Tcl_DStringInit(&subkey);
Tcl_DStringSetLength(&subkey,
(int) ((regWinProcs->useWide) ? maxSize * 2 : maxSize));
while (result == ERROR_SUCCESS) {
/*
* Always get index 0 because key deletion changes ordering.
*/
size = maxSize;
|
| ︙ | ︙ | |||
1268 1269 1270 1271 1272 1273 1274 |
if (regWinProcs->useWide) {
Tcl_DStringSetLength(&buf, Tcl_DStringLength(&buf)+1);
}
length = Tcl_DStringLength(&buf) + 1;
result = (*regWinProcs->regSetValueExProc)(key, valueName, 0, type,
| | | | 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 |
if (regWinProcs->useWide) {
Tcl_DStringSetLength(&buf, Tcl_DStringLength(&buf)+1);
}
length = Tcl_DStringLength(&buf) + 1;
result = (*regWinProcs->regSetValueExProc)(key, valueName, 0, type,
(BYTE*)data, (DWORD) length);
Tcl_DStringFree(&buf);
} else {
char *data;
/*
* Store binary data in the registry.
*/
data = Tcl_GetByteArrayFromObj(dataObj, &length);
result = (*regWinProcs->regSetValueExProc)(key, valueName, 0, type,
(BYTE *)data, (DWORD) length);
}
Tcl_DStringFree(&nameBuf);
RegCloseKey(key);
if (result != ERROR_SUCCESS) {
Tcl_AppendToObj(resultPtr, "unable to set value: ", -1);
AppendSystemError(interp, result);
return TCL_ERROR;
|
| ︙ | ︙ | |||
1342 1343 1344 1345 1346 1347 1348 |
LocalFree(msgPtr);
}
}
if (length == 0) {
if (error == ERROR_CALL_NOT_IMPLEMENTED) {
msg = "function not supported under Win32s";
} else {
| | | 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 |
LocalFree(msgPtr);
}
}
if (length == 0) {
if (error == ERROR_CALL_NOT_IMPLEMENTED) {
msg = "function not supported under Win32s";
} else {
sprintf(msgBuf, "unknown error: %ld", error);
msg = msgBuf;
}
} else {
Tcl_Encoding encoding;
encoding = Tcl_GetEncoding(NULL, "unicode");
Tcl_ExternalToUtfDString(encoding, (char *) wMsgPtr, -1, &ds);
|
| ︙ | ︙ | |||
1367 1368 1369 1370 1371 1372 1373 |
msg[--length] = 0;
}
if (msg[length-1] == '\r') {
msg[--length] = 0;
}
}
| | | 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 |
msg[--length] = 0;
}
if (msg[length-1] == '\r') {
msg[--length] = 0;
}
}
sprintf(id, "%ld", error);
Tcl_SetErrorCode(interp, "WINDOWS", id, msg, (char *) NULL);
Tcl_AppendToObj(resultPtr, msg, length);
if (length != 0) {
Tcl_DStringFree(&ds);
}
}
|
| ︙ | ︙ |
Changes to win/tclWinSerial.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* * Tclwinserial.c -- * * This file implements the Windows-specific serial port functions, * and the "serial" channel driver. * * Copyright (c) 1999 by Scriptics Corp. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * Changes by Rolf.Schroedter@dlr.de June 25-27, 1999 * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * Tclwinserial.c -- * * This file implements the Windows-specific serial port functions, * and the "serial" channel driver. * * Copyright (c) 1999 by Scriptics Corp. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * Changes by Rolf.Schroedter@dlr.de June 25-27, 1999 * * RCS: @(#) $Id: tclWinSerial.c,v 1.9.2.2 2001/04/03 22:54:40 hobbs Exp $ */ #include "tclWinInt.h" #include <dos.h> #include <fcntl.h> #include <io.h> |
| ︙ | ︙ | |||
150 151 152 153 154 155 156 |
/*
* This structure describes the channel type structure for command serial
* based IO.
*/
static Tcl_ChannelType serialChannelType = {
| | | | | | | | | | | > > > > | 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 |
/*
* This structure describes the channel type structure for command serial
* based IO.
*/
static Tcl_ChannelType serialChannelType = {
"serial", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
SerialCloseProc, /* Close proc. */
SerialInputProc, /* Input proc. */
SerialOutputProc, /* Output proc. */
NULL, /* Seek proc. */
SerialSetOptionProc, /* Set option proc. */
SerialGetOptionProc, /* Get option proc. */
SerialWatchProc, /* Set up notifier to watch the channel. */
SerialGetHandleProc, /* Get an OS handle from channel. */
NULL, /* close2proc. */
SerialBlockProc, /* Set blocking or non-blocking mode.*/
NULL, /* flush proc. */
NULL, /* handler proc. */
};
/*
*----------------------------------------------------------------------
*
* SerialInit --
*
|
| ︙ | ︙ | |||
1039 1040 1041 1042 1043 1044 1045 |
ClientData instanceData; /* File state. */
Tcl_Interp *interp; /* For error reporting - can be NULL. */
char *optionName; /* Which option to set? */
char *value; /* New value for option. */
{
SerialInfo *infoPtr;
DCB dcb;
| | | 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 |
ClientData instanceData; /* File state. */
Tcl_Interp *interp; /* For error reporting - can be NULL. */
char *optionName; /* Which option to set? */
char *value; /* New value for option. */
{
SerialInfo *infoPtr;
DCB dcb;
size_t len;
BOOL result;
Tcl_DString ds;
TCHAR *native;
infoPtr = (SerialInfo *) instanceData;
len = strlen(optionName);
|
| ︙ | ︙ | |||
1115 1116 1117 1118 1119 1120 1121 |
ClientData instanceData; /* File state. */
Tcl_Interp *interp; /* For error reporting - can be NULL. */
char *optionName; /* Option to get. */
Tcl_DString *dsPtr; /* Where to store value(s). */
{
SerialInfo *infoPtr;
DCB dcb;
| | | 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 |
ClientData instanceData; /* File state. */
Tcl_Interp *interp; /* For error reporting - can be NULL. */
char *optionName; /* Option to get. */
Tcl_DString *dsPtr; /* Where to store value(s). */
{
SerialInfo *infoPtr;
DCB dcb;
size_t len;
int valid = 0; /* flag if valid option parsed */
infoPtr = (SerialInfo *) instanceData;
if (optionName == NULL) {
len = 0;
} else {
|
| ︙ | ︙ | |||
1149 1150 1151 1152 1153 1154 1155 |
} else {
char parity;
char *stop;
char buf[2 * TCL_INTEGER_SPACE + 16];
parity = 'n';
| | | 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 |
} else {
char parity;
char *stop;
char buf[2 * TCL_INTEGER_SPACE + 16];
parity = 'n';
if (dcb.Parity <= 4) {
parity = "noems"[dcb.Parity];
}
stop = (dcb.StopBits == ONESTOPBIT) ? "1" :
(dcb.StopBits == ONE5STOPBITS) ? "1.5" : "2";
wsprintfA(buf, "%d,%c,%d,%s", dcb.BaudRate, parity,
|
| ︙ | ︙ |
Changes to win/tclWinSock.c.
1 2 3 4 5 6 7 8 9 10 | /* * tclWinSock.c -- * * This file contains Windows-specific socket related code. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * tclWinSock.c -- * * This file contains Windows-specific socket related code. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinSock.c,v 1.18.2.3 2001/09/20 18:50:24 hobbs Exp $ */ #include "tclWinInt.h" /* * The following variable is used to tell whether this module has been * initialized. |
| ︙ | ︙ | |||
211 212 213 214 215 216 217 |
/*
* This structure describes the channel type structure for TCP socket
* based IO.
*/
static Tcl_ChannelType tcpChannelType = {
| | | | | | | | | | | > > > > | 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 |
/*
* This structure describes the channel type structure for TCP socket
* based IO.
*/
static Tcl_ChannelType tcpChannelType = {
"tcp", /* Type name. */
TCL_CHANNEL_VERSION_2, /* v2 channel */
TcpCloseProc, /* Close proc. */
TcpInputProc, /* Input proc. */
TcpOutputProc, /* Output proc. */
NULL, /* Seek proc. */
NULL, /* Set option proc. */
TcpGetOptionProc, /* Get option proc. */
TcpWatchProc, /* Set up notifier to watch this channel. */
TcpGetHandleProc, /* Get an OS handle from channel. */
NULL, /* close2proc. */
TcpBlockProc, /* Set socket into (non-)blocking mode. */
NULL, /* flush proc. */
NULL, /* handler proc. */
};
/*
* Define version of Winsock required by Tcl.
*/
#define WSA_VERSION_REQD MAKEWORD(1,1)
|
| ︙ | ︙ | |||
828 829 830 831 832 833 834 835 836 |
FD_SET(infoPtr->socket, &readFds);
timeout.tv_usec = 0;
timeout.tv_sec = 0;
if ((*winSock.select)(0, &readFds, NULL, NULL, &timeout) != 0) {
mask |= TCL_READABLE;
} else {
SendMessage(tsdPtr->hwnd, SOCKET_SELECT,
(WPARAM) SELECT, (LPARAM) infoPtr);
| > < | 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 |
FD_SET(infoPtr->socket, &readFds);
timeout.tv_usec = 0;
timeout.tv_sec = 0;
if ((*winSock.select)(0, &readFds, NULL, NULL, &timeout) != 0) {
mask |= TCL_READABLE;
} else {
infoPtr->readyEvents &= ~(FD_READ);
SendMessage(tsdPtr->hwnd, SOCKET_SELECT,
(WPARAM) SELECT, (LPARAM) infoPtr);
}
}
if (events & (FD_WRITE | FD_CONNECT)) {
mask |= TCL_WRITABLE;
}
if (mask) {
|
| ︙ | ︙ | |||
2138 2139 2140 2141 2142 2143 2144 |
} else {
/*
* store the tsdPtr, it's from a different thread, so it's
* not directly accessible, but needed.
*/
#ifdef _WIN64
| | | 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 |
} else {
/*
* store the tsdPtr, it's from a different thread, so it's
* not directly accessible, but needed.
*/
#ifdef _WIN64
SetWindowLongPtr(tsdPtr->hwnd, GWLP_USERDATA, (LONG_PTR) tsdPtr);
#else
SetWindowLong(tsdPtr->hwnd, GWL_USERDATA, (LONG) tsdPtr);
#endif
}
while (1) {
/*
|
| ︙ | ︙ |
Changes to win/tclWinThrd.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * tclWinThread.c -- * * This file implements the Windows-specific thread operations. * * Copyright (c) 1998 by Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * tclWinThread.c -- * * This file implements the Windows-specific thread operations. * * Copyright (c) 1998 by Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWinThrd.c,v 1.8.2.1 2001/09/01 22:53:45 davygrvy Exp $ */ #include "tclWinInt.h" #include <dos.h> #include <fcntl.h> #include <io.h> |
| ︙ | ︙ | |||
119 120 121 122 123 124 125 |
Tcl_ThreadId *idPtr; /* Return, the ID of the thread */
Tcl_ThreadCreateProc proc; /* Main() function of the thread */
ClientData clientData; /* The one argument to Main() */
int stackSize; /* Size of stack for the new thread */
int flags; /* Flags controlling behaviour of
* the new thread */
{
| | | | | > > > > > > | 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 |
Tcl_ThreadId *idPtr; /* Return, the ID of the thread */
Tcl_ThreadCreateProc proc; /* Main() function of the thread */
ClientData clientData; /* The one argument to Main() */
int stackSize; /* Size of stack for the new thread */
int flags; /* Flags controlling behaviour of
* the new thread */
{
HANDLE tHandle;
tHandle = (HANDLE) _beginthreadex(NULL, (unsigned) stackSize, proc,
clientData, 0, (unsigned *)idPtr);
if (tHandle == NULL) {
return TCL_ERROR;
} else {
/*
* The only purpose of this is to decrement the reference count so the
* OS resources will be reaquired when the thread closes.
*/
CloseHandle(tHandle);
return TCL_OK;
}
}
/*
*----------------------------------------------------------------------
*
|
| ︙ | ︙ | |||
424 425 426 427 428 429 430 431 432 433 434 435 436 437 |
void
TclpFinalizeMutex(mutexPtr)
Tcl_Mutex *mutexPtr;
{
CRITICAL_SECTION *csPtr = *(CRITICAL_SECTION **)mutexPtr;
if (csPtr != NULL) {
ckfree((char *)csPtr);
*mutexPtr = NULL;
}
}
/*
| > | 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 |
void
TclpFinalizeMutex(mutexPtr)
Tcl_Mutex *mutexPtr;
{
CRITICAL_SECTION *csPtr = *(CRITICAL_SECTION **)mutexPtr;
if (csPtr != NULL) {
DeleteCriticalSection(csPtr);
ckfree((char *)csPtr);
*mutexPtr = NULL;
}
}
/*
|
| ︙ | ︙ | |||
892 893 894 895 896 897 898 899 900 901 902 903 |
* Note - this is called long after the thread-local storage is
* reclaimed. The per-thread condition waiting event is
* reclaimed earlier in a per-thread exit handler, which is
* called before thread local storage is reclaimed.
*/
if (winCondPtr != NULL) {
ckfree((char *)winCondPtr);
*condPtr = NULL;
}
}
#endif /* TCL_THREADS */
| > | 899 900 901 902 903 904 905 906 907 908 909 910 911 |
* Note - this is called long after the thread-local storage is
* reclaimed. The per-thread condition waiting event is
* reclaimed earlier in a per-thread exit handler, which is
* called before thread local storage is reclaimed.
*/
if (winCondPtr != NULL) {
DeleteCriticalSection(&winCondPtr->condLock);
ckfree((char *)winCondPtr);
*condPtr = NULL;
}
}
#endif /* TCL_THREADS */
|
Changes to win/tclsh.rc.
|
| | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | < | 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 |
// RCS: @(#) $Id: tclsh.rc,v 1.5.2.2 2001/10/03 20:24:59 hobbs Exp $
//
// Version Resource Script
//
#include <winver.h>
#define RESOURCE_INCLUDED
#include <tcl.h>
//
// build-up the name suffix that defines the type of build this is.
//
#ifdef TCL_THREADS
#define SUFFIX_THREADS "t"
#else
#define SUFFIX_THREADS ""
#endif
#ifdef STATIC_BUILD
#define SUFFIX_STATIC "s"
#else
#define SUFFIX_STATIC ""
#endif
#ifdef DEBUG
#define SUFFIX_DEBUG "d"
#else
#define SUFFIX_DEBUG ""
#endif
#define SUFFIX SUFFIX_THREADS SUFFIX_STATIC SUFFIX_DEBUG
LANGUAGE 0x9, 0x1 /* LANG_ENGLISH, SUBLANG_DEFAULT */
VS_VERSION_INFO VERSIONINFO
FILEVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL
PRODUCTVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL
FILEFLAGSMASK 0x3fL
#ifdef DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "Tclsh Application\0"
VALUE "OriginalFilename", "tclsh" STRINGIFY(TCL_MAJOR_VERSION) STRINGIFY(TCL_MINOR_VERSION) SUFFIX ".exe\0"
VALUE "CompanyName", "ActiveState Corporation\0"
VALUE "FileVersion", TCL_PATCH_LEVEL
VALUE "LegalCopyright", "Copyright (c) 2000 by ActiveState Corporation, et al\0"
VALUE "ProductName", "Tcl " TCL_VERSION " for Windows\0"
VALUE "ProductVersion", TCL_PATCH_LEVEL
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
//
// Icon
//
tclsh ICON DISCARDABLE "tclsh.ico"
|