1 /* vi:set ts=8 sts=4 sw=4 noet: 2 * 3 * VIM - Vi IMproved by Bram Moolenaar 4 * 5 * Do ":help uganda" in Vim to read copying and usage conditions. 6 * Do ":help credits" in Vim to see a list of people who contributed. 7 * See README.txt for an overview of the Vim source code. 8 */ 9 10 #include "vim.h" 11 12 #ifdef AMIGA 13 # include <time.h> /* for time() */ 14 #endif 15 16 /* 17 * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred) 18 * It has been changed beyond recognition since then. 19 * 20 * Differences between version 7.4 and 8.x can be found with ":help version8". 21 * Differences between version 6.4 and 7.x can be found with ":help version7". 22 * Differences between version 5.8 and 6.x can be found with ":help version6". 23 * Differences between version 4.x and 5.x can be found with ":help version5". 24 * Differences between version 3.0 and 4.x can be found with ":help version4". 25 * All the remarks about older versions have been removed, they are not very 26 * interesting. 27 */ 28 29 #include "version.h" 30 31 char *Version = VIM_VERSION_SHORT; 32 static char *mediumVersion = VIM_VERSION_MEDIUM; 33 34 #if defined(HAVE_DATE_TIME) || defined(PROTO) 35 # if (defined(VMS) && defined(VAXC)) || defined(PROTO) 36 char longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__) 37 + sizeof(__TIME__) + 3]; 38 39 void 40 make_version(void) 41 { 42 /* 43 * Construct the long version string. Necessary because 44 * VAX C can't catenate strings in the preprocessor. 45 */ 46 strcpy(longVersion, VIM_VERSION_LONG_DATE); 47 strcat(longVersion, __DATE__); 48 strcat(longVersion, " "); 49 strcat(longVersion, __TIME__); 50 strcat(longVersion, ")"); 51 } 52 # else 53 char *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")"; 54 # endif 55 #else 56 char *longVersion = VIM_VERSION_LONG; 57 #endif 58 59 static void list_features(void); 60 static void version_msg(char *s); 61 62 static char *(features[]) = 63 { 64 #ifdef HAVE_ACL 65 "+acl", 66 #else 67 "-acl", 68 #endif 69 #ifdef AMIGA /* only for Amiga systems */ 70 # ifdef FEAT_ARP 71 "+ARP", 72 # else 73 "-ARP", 74 # endif 75 #endif 76 #ifdef FEAT_ARABIC 77 "+arabic", 78 #else 79 "-arabic", 80 #endif 81 #ifdef FEAT_AUTOCMD 82 "+autocmd", 83 #else 84 "-autocmd", 85 #endif 86 #ifdef FEAT_BEVAL 87 "+balloon_eval", 88 #else 89 "-balloon_eval", 90 #endif 91 #ifdef FEAT_BROWSE 92 "+browse", 93 #else 94 "-browse", 95 #endif 96 #ifdef NO_BUILTIN_TCAPS 97 "-builtin_terms", 98 #endif 99 #ifdef SOME_BUILTIN_TCAPS 100 "+builtin_terms", 101 #endif 102 #ifdef ALL_BUILTIN_TCAPS 103 "++builtin_terms", 104 #endif 105 #ifdef FEAT_BYTEOFF 106 "+byte_offset", 107 #else 108 "-byte_offset", 109 #endif 110 #ifdef FEAT_JOB_CHANNEL 111 "+channel", 112 #else 113 "-channel", 114 #endif 115 #ifdef FEAT_CINDENT 116 "+cindent", 117 #else 118 "-cindent", 119 #endif 120 #ifdef FEAT_CLIENTSERVER 121 "+clientserver", 122 #else 123 "-clientserver", 124 #endif 125 #ifdef FEAT_CLIPBOARD 126 "+clipboard", 127 #else 128 "-clipboard", 129 #endif 130 #ifdef FEAT_CMDL_COMPL 131 "+cmdline_compl", 132 #else 133 "-cmdline_compl", 134 #endif 135 #ifdef FEAT_CMDHIST 136 "+cmdline_hist", 137 #else 138 "-cmdline_hist", 139 #endif 140 #ifdef FEAT_CMDL_INFO 141 "+cmdline_info", 142 #else 143 "-cmdline_info", 144 #endif 145 #ifdef FEAT_COMMENTS 146 "+comments", 147 #else 148 "-comments", 149 #endif 150 #ifdef FEAT_CONCEAL 151 "+conceal", 152 #else 153 "-conceal", 154 #endif 155 #ifdef FEAT_CRYPT 156 "+cryptv", 157 #else 158 "-cryptv", 159 #endif 160 #ifdef FEAT_CSCOPE 161 "+cscope", 162 #else 163 "-cscope", 164 #endif 165 #ifdef FEAT_CURSORBIND 166 "+cursorbind", 167 #else 168 "-cursorbind", 169 #endif 170 #ifdef CURSOR_SHAPE 171 "+cursorshape", 172 #else 173 "-cursorshape", 174 #endif 175 #if defined(FEAT_CON_DIALOG) && defined(FEAT_GUI_DIALOG) 176 "+dialog_con_gui", 177 #else 178 # if defined(FEAT_CON_DIALOG) 179 "+dialog_con", 180 # else 181 # if defined(FEAT_GUI_DIALOG) 182 "+dialog_gui", 183 # else 184 "-dialog", 185 # endif 186 # endif 187 #endif 188 #ifdef FEAT_DIFF 189 "+diff", 190 #else 191 "-diff", 192 #endif 193 #ifdef FEAT_DIGRAPHS 194 "+digraphs", 195 #else 196 "-digraphs", 197 #endif 198 #ifdef FEAT_GUI_W32 199 # ifdef FEAT_DIRECTX 200 "+directx", 201 # else 202 "-directx", 203 # endif 204 #endif 205 #ifdef FEAT_DND 206 "+dnd", 207 #else 208 "-dnd", 209 #endif 210 #ifdef EBCDIC 211 "+ebcdic", 212 #else 213 "-ebcdic", 214 #endif 215 #ifdef FEAT_EMACS_TAGS 216 "+emacs_tags", 217 #else 218 "-emacs_tags", 219 #endif 220 #ifdef FEAT_EVAL 221 "+eval", 222 #else 223 "-eval", 224 #endif 225 "+ex_extra", 226 #ifdef FEAT_SEARCH_EXTRA 227 "+extra_search", 228 #else 229 "-extra_search", 230 #endif 231 #ifdef FEAT_FKMAP 232 "+farsi", 233 #else 234 "-farsi", 235 #endif 236 #ifdef FEAT_SEARCHPATH 237 "+file_in_path", 238 #else 239 "-file_in_path", 240 #endif 241 #ifdef FEAT_FIND_ID 242 "+find_in_path", 243 #else 244 "-find_in_path", 245 #endif 246 #ifdef FEAT_FLOAT 247 "+float", 248 #else 249 "-float", 250 #endif 251 #ifdef FEAT_FOLDING 252 "+folding", 253 #else 254 "-folding", 255 #endif 256 #ifdef FEAT_FOOTER 257 "+footer", 258 #else 259 "-footer", 260 #endif 261 /* only interesting on Unix systems */ 262 #if !defined(USE_SYSTEM) && defined(UNIX) 263 "+fork()", 264 #endif 265 #ifdef FEAT_GETTEXT 266 # ifdef DYNAMIC_GETTEXT 267 "+gettext/dyn", 268 # else 269 "+gettext", 270 # endif 271 #else 272 "-gettext", 273 #endif 274 #ifdef FEAT_HANGULIN 275 "+hangul_input", 276 #else 277 "-hangul_input", 278 #endif 279 #if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV) 280 # ifdef DYNAMIC_ICONV 281 "+iconv/dyn", 282 # else 283 "+iconv", 284 # endif 285 #else 286 "-iconv", 287 #endif 288 #ifdef FEAT_INS_EXPAND 289 "+insert_expand", 290 #else 291 "-insert_expand", 292 #endif 293 #ifdef FEAT_JOB_CHANNEL 294 "+job", 295 #else 296 "-job", 297 #endif 298 #ifdef FEAT_JUMPLIST 299 "+jumplist", 300 #else 301 "-jumplist", 302 #endif 303 #ifdef FEAT_KEYMAP 304 "+keymap", 305 #else 306 "-keymap", 307 #endif 308 #ifdef FEAT_EVAL 309 "+lambda", 310 #else 311 "-lambda", 312 #endif 313 #ifdef FEAT_LANGMAP 314 "+langmap", 315 #else 316 "-langmap", 317 #endif 318 #ifdef FEAT_LIBCALL 319 "+libcall", 320 #else 321 "-libcall", 322 #endif 323 #ifdef FEAT_LINEBREAK 324 "+linebreak", 325 #else 326 "-linebreak", 327 #endif 328 #ifdef FEAT_LISP 329 "+lispindent", 330 #else 331 "-lispindent", 332 #endif 333 #ifdef FEAT_LISTCMDS 334 "+listcmds", 335 #else 336 "-listcmds", 337 #endif 338 #ifdef FEAT_LOCALMAP 339 "+localmap", 340 #else 341 "-localmap", 342 #endif 343 #ifdef FEAT_LUA 344 # ifdef DYNAMIC_LUA 345 "+lua/dyn", 346 # else 347 "+lua", 348 # endif 349 #else 350 "-lua", 351 #endif 352 #ifdef FEAT_MENU 353 "+menu", 354 #else 355 "-menu", 356 #endif 357 #ifdef FEAT_SESSION 358 "+mksession", 359 #else 360 "-mksession", 361 #endif 362 #ifdef FEAT_MODIFY_FNAME 363 "+modify_fname", 364 #else 365 "-modify_fname", 366 #endif 367 #ifdef FEAT_MOUSE 368 "+mouse", 369 # ifdef FEAT_MOUSESHAPE 370 "+mouseshape", 371 # else 372 "-mouseshape", 373 # endif 374 # else 375 "-mouse", 376 #endif 377 378 #if defined(UNIX) || defined(VMS) 379 # ifdef FEAT_MOUSE_DEC 380 "+mouse_dec", 381 # else 382 "-mouse_dec", 383 # endif 384 # ifdef FEAT_MOUSE_GPM 385 "+mouse_gpm", 386 # else 387 "-mouse_gpm", 388 # endif 389 # ifdef FEAT_MOUSE_JSB 390 "+mouse_jsbterm", 391 # else 392 "-mouse_jsbterm", 393 # endif 394 # ifdef FEAT_MOUSE_NET 395 "+mouse_netterm", 396 # else 397 "-mouse_netterm", 398 # endif 399 #endif 400 401 #ifdef __QNX__ 402 # ifdef FEAT_MOUSE_PTERM 403 "+mouse_pterm", 404 # else 405 "-mouse_pterm", 406 # endif 407 #endif 408 409 #if defined(UNIX) || defined(VMS) 410 # ifdef FEAT_MOUSE_SGR 411 "+mouse_sgr", 412 # else 413 "-mouse_sgr", 414 # endif 415 # ifdef FEAT_SYSMOUSE 416 "+mouse_sysmouse", 417 # else 418 "-mouse_sysmouse", 419 # endif 420 # ifdef FEAT_MOUSE_URXVT 421 "+mouse_urxvt", 422 # else 423 "-mouse_urxvt", 424 # endif 425 # ifdef FEAT_MOUSE_XTERM 426 "+mouse_xterm", 427 # else 428 "-mouse_xterm", 429 # endif 430 #endif 431 432 #ifdef FEAT_MBYTE_IME 433 # ifdef DYNAMIC_IME 434 "+multi_byte_ime/dyn", 435 # else 436 "+multi_byte_ime", 437 # endif 438 #else 439 # ifdef FEAT_MBYTE 440 "+multi_byte", 441 # else 442 "-multi_byte", 443 # endif 444 #endif 445 #ifdef FEAT_MULTI_LANG 446 "+multi_lang", 447 #else 448 "-multi_lang", 449 #endif 450 #ifdef FEAT_MZSCHEME 451 # ifdef DYNAMIC_MZSCHEME 452 "+mzscheme/dyn", 453 # else 454 "+mzscheme", 455 # endif 456 #else 457 "-mzscheme", 458 #endif 459 #ifdef FEAT_NETBEANS_INTG 460 "+netbeans_intg", 461 #else 462 "-netbeans_intg", 463 #endif 464 #ifdef FEAT_NUM64 465 "+num64", 466 #else 467 "-num64", 468 #endif 469 #ifdef FEAT_GUI_W32 470 # ifdef FEAT_OLE 471 "+ole", 472 # else 473 "-ole", 474 # endif 475 #endif 476 "+packages", 477 #ifdef FEAT_PATH_EXTRA 478 "+path_extra", 479 #else 480 "-path_extra", 481 #endif 482 #ifdef FEAT_PERL 483 # ifdef DYNAMIC_PERL 484 "+perl/dyn", 485 # else 486 "+perl", 487 # endif 488 #else 489 "-perl", 490 #endif 491 #ifdef FEAT_PERSISTENT_UNDO 492 "+persistent_undo", 493 #else 494 "-persistent_undo", 495 #endif 496 #ifdef FEAT_PRINTER 497 # ifdef FEAT_POSTSCRIPT 498 "+postscript", 499 # else 500 "-postscript", 501 # endif 502 "+printer", 503 #else 504 "-printer", 505 #endif 506 #ifdef FEAT_PROFILE 507 "+profile", 508 #else 509 "-profile", 510 #endif 511 #ifdef FEAT_PYTHON 512 # ifdef DYNAMIC_PYTHON 513 "+python/dyn", 514 # else 515 "+python", 516 # endif 517 #else 518 "-python", 519 #endif 520 #ifdef FEAT_PYTHON3 521 # ifdef DYNAMIC_PYTHON3 522 "+python3/dyn", 523 # else 524 "+python3", 525 # endif 526 #else 527 "-python3", 528 #endif 529 #ifdef FEAT_QUICKFIX 530 "+quickfix", 531 #else 532 "-quickfix", 533 #endif 534 #ifdef FEAT_RELTIME 535 "+reltime", 536 #else 537 "-reltime", 538 #endif 539 #ifdef FEAT_RIGHTLEFT 540 "+rightleft", 541 #else 542 "-rightleft", 543 #endif 544 #ifdef FEAT_RUBY 545 # ifdef DYNAMIC_RUBY 546 "+ruby/dyn", 547 # else 548 "+ruby", 549 # endif 550 #else 551 "-ruby", 552 #endif 553 #ifdef FEAT_SCROLLBIND 554 "+scrollbind", 555 #else 556 "-scrollbind", 557 #endif 558 #ifdef FEAT_SIGNS 559 "+signs", 560 #else 561 "-signs", 562 #endif 563 #ifdef FEAT_SMARTINDENT 564 "+smartindent", 565 #else 566 "-smartindent", 567 #endif 568 #ifdef STARTUPTIME 569 "+startuptime", 570 #else 571 "-startuptime", 572 #endif 573 #ifdef FEAT_STL_OPT 574 "+statusline", 575 #else 576 "-statusline", 577 #endif 578 #ifdef FEAT_SUN_WORKSHOP 579 "+sun_workshop", 580 #else 581 "-sun_workshop", 582 #endif 583 #ifdef FEAT_SYN_HL 584 "+syntax", 585 #else 586 "-syntax", 587 #endif 588 /* only interesting on Unix systems */ 589 #if defined(USE_SYSTEM) && defined(UNIX) 590 "+system()", 591 #endif 592 #ifdef FEAT_TAG_BINS 593 "+tag_binary", 594 #else 595 "-tag_binary", 596 #endif 597 #ifdef FEAT_TAG_OLDSTATIC 598 "+tag_old_static", 599 #else 600 "-tag_old_static", 601 #endif 602 #ifdef FEAT_TAG_ANYWHITE 603 "+tag_any_white", 604 #else 605 "-tag_any_white", 606 #endif 607 #ifdef FEAT_TCL 608 # ifdef DYNAMIC_TCL 609 "+tcl/dyn", 610 # else 611 "+tcl", 612 # endif 613 #else 614 "-tcl", 615 #endif 616 #ifdef FEAT_TERMGUICOLORS 617 "+termguicolors", 618 #else 619 "-termguicolors", 620 #endif 621 #ifdef FEAT_TERMINAL 622 "+terminal", 623 #else 624 "-terminal", 625 #endif 626 #if defined(UNIX) 627 /* only Unix can have terminfo instead of termcap */ 628 # ifdef TERMINFO 629 "+terminfo", 630 # else 631 "-terminfo", 632 # endif 633 #else /* unix always includes termcap support */ 634 # ifdef HAVE_TGETENT 635 "+tgetent", 636 # else 637 "-tgetent", 638 # endif 639 #endif 640 #ifdef FEAT_TERMRESPONSE 641 "+termresponse", 642 #else 643 "-termresponse", 644 #endif 645 #ifdef FEAT_TEXTOBJ 646 "+textobjects", 647 #else 648 "-textobjects", 649 #endif 650 #ifdef FEAT_TIMERS 651 "+timers", 652 #else 653 "-timers", 654 #endif 655 #ifdef FEAT_TITLE 656 "+title", 657 #else 658 "-title", 659 #endif 660 #ifdef FEAT_TOOLBAR 661 "+toolbar", 662 #else 663 "-toolbar", 664 #endif 665 #ifdef FEAT_USR_CMDS 666 "+user_commands", 667 #else 668 "-user_commands", 669 #endif 670 #ifdef FEAT_WINDOWS 671 "+vertsplit", 672 #else 673 "-vertsplit", 674 #endif 675 #ifdef FEAT_VIRTUALEDIT 676 "+virtualedit", 677 #else 678 "-virtualedit", 679 #endif 680 "+visual", 681 #ifdef FEAT_VISUALEXTRA 682 "+visualextra", 683 #else 684 "-visualextra", 685 #endif 686 #ifdef FEAT_VIMINFO 687 "+viminfo", 688 #else 689 "-viminfo", 690 #endif 691 #ifdef FEAT_VREPLACE 692 "+vreplace", 693 #else 694 "-vreplace", 695 #endif 696 #ifdef FEAT_WILDIGN 697 "+wildignore", 698 #else 699 "-wildignore", 700 #endif 701 #ifdef FEAT_WILDMENU 702 "+wildmenu", 703 #else 704 "-wildmenu", 705 #endif 706 #ifdef FEAT_WINDOWS 707 "+windows", 708 #else 709 "-windows", 710 #endif 711 #ifdef FEAT_WRITEBACKUP 712 "+writebackup", 713 #else 714 "-writebackup", 715 #endif 716 #if defined(UNIX) || defined(VMS) 717 # ifdef FEAT_X11 718 "+X11", 719 # else 720 "-X11", 721 # endif 722 #endif 723 #ifdef FEAT_XFONTSET 724 "+xfontset", 725 #else 726 "-xfontset", 727 #endif 728 #ifdef FEAT_XIM 729 "+xim", 730 #else 731 "-xim", 732 #endif 733 #ifdef WIN3264 734 # ifdef FEAT_XPM_W32 735 "+xpm_w32", 736 # else 737 "-xpm_w32", 738 # endif 739 #else 740 # ifdef HAVE_XPM 741 "+xpm", 742 # else 743 "-xpm", 744 # endif 745 #endif 746 #if defined(UNIX) || defined(VMS) 747 # ifdef USE_XSMP_INTERACT 748 "+xsmp_interact", 749 # else 750 # ifdef USE_XSMP 751 "+xsmp", 752 # else 753 "-xsmp", 754 # endif 755 # endif 756 # ifdef FEAT_XCLIPBOARD 757 "+xterm_clipboard", 758 # else 759 "-xterm_clipboard", 760 # endif 761 #endif 762 #ifdef FEAT_XTERM_SAVE 763 "+xterm_save", 764 #else 765 "-xterm_save", 766 #endif 767 NULL 768 }; 769 770 static int included_patches[] = 771 { /* Add new patch number below this line */ 772 /**/ 773 918, 774 /**/ 775 917, 776 /**/ 777 916, 778 /**/ 779 915, 780 /**/ 781 914, 782 /**/ 783 913, 784 /**/ 785 912, 786 /**/ 787 911, 788 /**/ 789 910, 790 /**/ 791 909, 792 /**/ 793 908, 794 /**/ 795 907, 796 /**/ 797 906, 798 /**/ 799 905, 800 /**/ 801 904, 802 /**/ 803 903, 804 /**/ 805 902, 806 /**/ 807 901, 808 /**/ 809 900, 810 /**/ 811 899, 812 /**/ 813 898, 814 /**/ 815 897, 816 /**/ 817 896, 818 /**/ 819 895, 820 /**/ 821 894, 822 /**/ 823 893, 824 /**/ 825 892, 826 /**/ 827 891, 828 /**/ 829 890, 830 /**/ 831 889, 832 /**/ 833 888, 834 /**/ 835 887, 836 /**/ 837 886, 838 /**/ 839 885, 840 /**/ 841 884, 842 /**/ 843 883, 844 /**/ 845 882, 846 /**/ 847 881, 848 /**/ 849 880, 850 /**/ 851 879, 852 /**/ 853 878, 854 /**/ 855 877, 856 /**/ 857 876, 858 /**/ 859 875, 860 /**/ 861 874, 862 /**/ 863 873, 864 /**/ 865 872, 866 /**/ 867 871, 868 /**/ 869 870, 870 /**/ 871 869, 872 /**/ 873 868, 874 /**/ 875 867, 876 /**/ 877 866, 878 /**/ 879 865, 880 /**/ 881 864, 882 /**/ 883 863, 884 /**/ 885 862, 886 /**/ 887 861, 888 /**/ 889 860, 890 /**/ 891 859, 892 /**/ 893 858, 894 /**/ 895 857, 896 /**/ 897 856, 898 /**/ 899 855, 900 /**/ 901 854, 902 /**/ 903 853, 904 /**/ 905 852, 906 /**/ 907 851, 908 /**/ 909 850, 910 /**/ 911 849, 912 /**/ 913 848, 914 /**/ 915 847, 916 /**/ 917 846, 918 /**/ 919 845, 920 /**/ 921 844, 922 /**/ 923 843, 924 /**/ 925 842, 926 /**/ 927 841, 928 /**/ 929 840, 930 /**/ 931 839, 932 /**/ 933 838, 934 /**/ 935 837, 936 /**/ 937 836, 938 /**/ 939 835, 940 /**/ 941 834, 942 /**/ 943 833, 944 /**/ 945 832, 946 /**/ 947 831, 948 /**/ 949 830, 950 /**/ 951 829, 952 /**/ 953 828, 954 /**/ 955 827, 956 /**/ 957 826, 958 /**/ 959 825, 960 /**/ 961 824, 962 /**/ 963 823, 964 /**/ 965 822, 966 /**/ 967 821, 968 /**/ 969 820, 970 /**/ 971 819, 972 /**/ 973 818, 974 /**/ 975 817, 976 /**/ 977 816, 978 /**/ 979 815, 980 /**/ 981 814, 982 /**/ 983 813, 984 /**/ 985 812, 986 /**/ 987 811, 988 /**/ 989 810, 990 /**/ 991 809, 992 /**/ 993 808, 994 /**/ 995 807, 996 /**/ 997 806, 998 /**/ 999 805, 1000 /**/ 1001 804, 1002 /**/ 1003 803, 1004 /**/ 1005 802, 1006 /**/ 1007 801, 1008 /**/ 1009 800, 1010 /**/ 1011 799, 1012 /**/ 1013 798, 1014 /**/ 1015 797, 1016 /**/ 1017 796, 1018 /**/ 1019 795, 1020 /**/ 1021 794, 1022 /**/ 1023 793, 1024 /**/ 1025 792, 1026 /**/ 1027 791, 1028 /**/ 1029 790, 1030 /**/ 1031 789, 1032 /**/ 1033 788, 1034 /**/ 1035 787, 1036 /**/ 1037 786, 1038 /**/ 1039 785, 1040 /**/ 1041 784, 1042 /**/ 1043 783, 1044 /**/ 1045 782, 1046 /**/ 1047 781, 1048 /**/ 1049 780, 1050 /**/ 1051 779, 1052 /**/ 1053 778, 1054 /**/ 1055 777, 1056 /**/ 1057 776, 1058 /**/ 1059 775, 1060 /**/ 1061 774, 1062 /**/ 1063 773, 1064 /**/ 1065 772, 1066 /**/ 1067 771, 1068 /**/ 1069 770, 1070 /**/ 1071 769, 1072 /**/ 1073 768, 1074 /**/ 1075 767, 1076 /**/ 1077 766, 1078 /**/ 1079 765, 1080 /**/ 1081 764, 1082 /**/ 1083 763, 1084 /**/ 1085 762, 1086 /**/ 1087 761, 1088 /**/ 1089 760, 1090 /**/ 1091 759, 1092 /**/ 1093 758, 1094 /**/ 1095 757, 1096 /**/ 1097 756, 1098 /**/ 1099 755, 1100 /**/ 1101 754, 1102 /**/ 1103 753, 1104 /**/ 1105 752, 1106 /**/ 1107 751, 1108 /**/ 1109 750, 1110 /**/ 1111 749, 1112 /**/ 1113 748, 1114 /**/ 1115 747, 1116 /**/ 1117 746, 1118 /**/ 1119 745, 1120 /**/ 1121 744, 1122 /**/ 1123 743, 1124 /**/ 1125 742, 1126 /**/ 1127 741, 1128 /**/ 1129 740, 1130 /**/ 1131 739, 1132 /**/ 1133 738, 1134 /**/ 1135 737, 1136 /**/ 1137 736, 1138 /**/ 1139 735, 1140 /**/ 1141 734, 1142 /**/ 1143 733, 1144 /**/ 1145 732, 1146 /**/ 1147 731, 1148 /**/ 1149 730, 1150 /**/ 1151 729, 1152 /**/ 1153 728, 1154 /**/ 1155 727, 1156 /**/ 1157 726, 1158 /**/ 1159 725, 1160 /**/ 1161 724, 1162 /**/ 1163 723, 1164 /**/ 1165 722, 1166 /**/ 1167 721, 1168 /**/ 1169 720, 1170 /**/ 1171 719, 1172 /**/ 1173 718, 1174 /**/ 1175 717, 1176 /**/ 1177 716, 1178 /**/ 1179 715, 1180 /**/ 1181 714, 1182 /**/ 1183 713, 1184 /**/ 1185 712, 1186 /**/ 1187 711, 1188 /**/ 1189 710, 1190 /**/ 1191 709, 1192 /**/ 1193 708, 1194 /**/ 1195 707, 1196 /**/ 1197 706, 1198 /**/ 1199 705, 1200 /**/ 1201 704, 1202 /**/ 1203 703, 1204 /**/ 1205 702, 1206 /**/ 1207 701, 1208 /**/ 1209 700, 1210 /**/ 1211 699, 1212 /**/ 1213 698, 1214 /**/ 1215 697, 1216 /**/ 1217 696, 1218 /**/ 1219 695, 1220 /**/ 1221 694, 1222 /**/ 1223 693, 1224 /**/ 1225 692, 1226 /**/ 1227 691, 1228 /**/ 1229 690, 1230 /**/ 1231 689, 1232 /**/ 1233 688, 1234 /**/ 1235 687, 1236 /**/ 1237 686, 1238 /**/ 1239 685, 1240 /**/ 1241 684, 1242 /**/ 1243 683, 1244 /**/ 1245 682, 1246 /**/ 1247 681, 1248 /**/ 1249 680, 1250 /**/ 1251 679, 1252 /**/ 1253 678, 1254 /**/ 1255 677, 1256 /**/ 1257 676, 1258 /**/ 1259 675, 1260 /**/ 1261 674, 1262 /**/ 1263 673, 1264 /**/ 1265 672, 1266 /**/ 1267 671, 1268 /**/ 1269 670, 1270 /**/ 1271 669, 1272 /**/ 1273 668, 1274 /**/ 1275 667, 1276 /**/ 1277 666, 1278 /**/ 1279 665, 1280 /**/ 1281 664, 1282 /**/ 1283 663, 1284 /**/ 1285 662, 1286 /**/ 1287 661, 1288 /**/ 1289 660, 1290 /**/ 1291 659, 1292 /**/ 1293 658, 1294 /**/ 1295 657, 1296 /**/ 1297 656, 1298 /**/ 1299 655, 1300 /**/ 1301 654, 1302 /**/ 1303 653, 1304 /**/ 1305 652, 1306 /**/ 1307 651, 1308 /**/ 1309 650, 1310 /**/ 1311 649, 1312 /**/ 1313 648, 1314 /**/ 1315 647, 1316 /**/ 1317 646, 1318 /**/ 1319 645, 1320 /**/ 1321 644, 1322 /**/ 1323 643, 1324 /**/ 1325 642, 1326 /**/ 1327 641, 1328 /**/ 1329 640, 1330 /**/ 1331 639, 1332 /**/ 1333 638, 1334 /**/ 1335 637, 1336 /**/ 1337 636, 1338 /**/ 1339 635, 1340 /**/ 1341 634, 1342 /**/ 1343 633, 1344 /**/ 1345 632, 1346 /**/ 1347 631, 1348 /**/ 1349 630, 1350 /**/ 1351 629, 1352 /**/ 1353 628, 1354 /**/ 1355 627, 1356 /**/ 1357 626, 1358 /**/ 1359 625, 1360 /**/ 1361 624, 1362 /**/ 1363 623, 1364 /**/ 1365 622, 1366 /**/ 1367 621, 1368 /**/ 1369 620, 1370 /**/ 1371 619, 1372 /**/ 1373 618, 1374 /**/ 1375 617, 1376 /**/ 1377 616, 1378 /**/ 1379 615, 1380 /**/ 1381 614, 1382 /**/ 1383 613, 1384 /**/ 1385 612, 1386 /**/ 1387 611, 1388 /**/ 1389 610, 1390 /**/ 1391 609, 1392 /**/ 1393 608, 1394 /**/ 1395 607, 1396 /**/ 1397 606, 1398 /**/ 1399 605, 1400 /**/ 1401 604, 1402 /**/ 1403 603, 1404 /**/ 1405 602, 1406 /**/ 1407 601, 1408 /**/ 1409 600, 1410 /**/ 1411 599, 1412 /**/ 1413 598, 1414 /**/ 1415 597, 1416 /**/ 1417 596, 1418 /**/ 1419 595, 1420 /**/ 1421 594, 1422 /**/ 1423 593, 1424 /**/ 1425 592, 1426 /**/ 1427 591, 1428 /**/ 1429 590, 1430 /**/ 1431 589, 1432 /**/ 1433 588, 1434 /**/ 1435 587, 1436 /**/ 1437 586, 1438 /**/ 1439 585, 1440 /**/ 1441 584, 1442 /**/ 1443 583, 1444 /**/ 1445 582, 1446 /**/ 1447 581, 1448 /**/ 1449 580, 1450 /**/ 1451 579, 1452 /**/ 1453 578, 1454 /**/ 1455 577, 1456 /**/ 1457 576, 1458 /**/ 1459 575, 1460 /**/ 1461 574, 1462 /**/ 1463 573, 1464 /**/ 1465 572, 1466 /**/ 1467 571, 1468 /**/ 1469 570, 1470 /**/ 1471 569, 1472 /**/ 1473 568, 1474 /**/ 1475 567, 1476 /**/ 1477 566, 1478 /**/ 1479 565, 1480 /**/ 1481 564, 1482 /**/ 1483 563, 1484 /**/ 1485 562, 1486 /**/ 1487 561, 1488 /**/ 1489 560, 1490 /**/ 1491 559, 1492 /**/ 1493 558, 1494 /**/ 1495 557, 1496 /**/ 1497 556, 1498 /**/ 1499 555, 1500 /**/ 1501 554, 1502 /**/ 1503 553, 1504 /**/ 1505 552, 1506 /**/ 1507 551, 1508 /**/ 1509 550, 1510 /**/ 1511 549, 1512 /**/ 1513 548, 1514 /**/ 1515 547, 1516 /**/ 1517 546, 1518 /**/ 1519 545, 1520 /**/ 1521 544, 1522 /**/ 1523 543, 1524 /**/ 1525 542, 1526 /**/ 1527 541, 1528 /**/ 1529 540, 1530 /**/ 1531 539, 1532 /**/ 1533 538, 1534 /**/ 1535 537, 1536 /**/ 1537 536, 1538 /**/ 1539 535, 1540 /**/ 1541 534, 1542 /**/ 1543 533, 1544 /**/ 1545 532, 1546 /**/ 1547 531, 1548 /**/ 1549 530, 1550 /**/ 1551 529, 1552 /**/ 1553 528, 1554 /**/ 1555 527, 1556 /**/ 1557 526, 1558 /**/ 1559 525, 1560 /**/ 1561 524, 1562 /**/ 1563 523, 1564 /**/ 1565 522, 1566 /**/ 1567 521, 1568 /**/ 1569 520, 1570 /**/ 1571 519, 1572 /**/ 1573 518, 1574 /**/ 1575 517, 1576 /**/ 1577 516, 1578 /**/ 1579 515, 1580 /**/ 1581 514, 1582 /**/ 1583 513, 1584 /**/ 1585 512, 1586 /**/ 1587 511, 1588 /**/ 1589 510, 1590 /**/ 1591 509, 1592 /**/ 1593 508, 1594 /**/ 1595 507, 1596 /**/ 1597 506, 1598 /**/ 1599 505, 1600 /**/ 1601 504, 1602 /**/ 1603 503, 1604 /**/ 1605 502, 1606 /**/ 1607 501, 1608 /**/ 1609 500, 1610 /**/ 1611 499, 1612 /**/ 1613 498, 1614 /**/ 1615 497, 1616 /**/ 1617 496, 1618 /**/ 1619 495, 1620 /**/ 1621 494, 1622 /**/ 1623 493, 1624 /**/ 1625 492, 1626 /**/ 1627 491, 1628 /**/ 1629 490, 1630 /**/ 1631 489, 1632 /**/ 1633 488, 1634 /**/ 1635 487, 1636 /**/ 1637 486, 1638 /**/ 1639 485, 1640 /**/ 1641 484, 1642 /**/ 1643 483, 1644 /**/ 1645 482, 1646 /**/ 1647 481, 1648 /**/ 1649 480, 1650 /**/ 1651 479, 1652 /**/ 1653 478, 1654 /**/ 1655 477, 1656 /**/ 1657 476, 1658 /**/ 1659 475, 1660 /**/ 1661 474, 1662 /**/ 1663 473, 1664 /**/ 1665 472, 1666 /**/ 1667 471, 1668 /**/ 1669 470, 1670 /**/ 1671 469, 1672 /**/ 1673 468, 1674 /**/ 1675 467, 1676 /**/ 1677 466, 1678 /**/ 1679 465, 1680 /**/ 1681 464, 1682 /**/ 1683 463, 1684 /**/ 1685 462, 1686 /**/ 1687 461, 1688 /**/ 1689 460, 1690 /**/ 1691 459, 1692 /**/ 1693 458, 1694 /**/ 1695 457, 1696 /**/ 1697 456, 1698 /**/ 1699 455, 1700 /**/ 1701 454, 1702 /**/ 1703 453, 1704 /**/ 1705 452, 1706 /**/ 1707 451, 1708 /**/ 1709 450, 1710 /**/ 1711 449, 1712 /**/ 1713 448, 1714 /**/ 1715 447, 1716 /**/ 1717 446, 1718 /**/ 1719 445, 1720 /**/ 1721 444, 1722 /**/ 1723 443, 1724 /**/ 1725 442, 1726 /**/ 1727 441, 1728 /**/ 1729 440, 1730 /**/ 1731 439, 1732 /**/ 1733 438, 1734 /**/ 1735 437, 1736 /**/ 1737 436, 1738 /**/ 1739 435, 1740 /**/ 1741 434, 1742 /**/ 1743 433, 1744 /**/ 1745 432, 1746 /**/ 1747 431, 1748 /**/ 1749 430, 1750 /**/ 1751 429, 1752 /**/ 1753 428, 1754 /**/ 1755 427, 1756 /**/ 1757 426, 1758 /**/ 1759 425, 1760 /**/ 1761 424, 1762 /**/ 1763 423, 1764 /**/ 1765 422, 1766 /**/ 1767 421, 1768 /**/ 1769 420, 1770 /**/ 1771 419, 1772 /**/ 1773 418, 1774 /**/ 1775 417, 1776 /**/ 1777 416, 1778 /**/ 1779 415, 1780 /**/ 1781 414, 1782 /**/ 1783 413, 1784 /**/ 1785 412, 1786 /**/ 1787 411, 1788 /**/ 1789 410, 1790 /**/ 1791 409, 1792 /**/ 1793 408, 1794 /**/ 1795 407, 1796 /**/ 1797 406, 1798 /**/ 1799 405, 1800 /**/ 1801 404, 1802 /**/ 1803 403, 1804 /**/ 1805 402, 1806 /**/ 1807 401, 1808 /**/ 1809 400, 1810 /**/ 1811 399, 1812 /**/ 1813 398, 1814 /**/ 1815 397, 1816 /**/ 1817 396, 1818 /**/ 1819 395, 1820 /**/ 1821 394, 1822 /**/ 1823 393, 1824 /**/ 1825 392, 1826 /**/ 1827 391, 1828 /**/ 1829 390, 1830 /**/ 1831 389, 1832 /**/ 1833 388, 1834 /**/ 1835 387, 1836 /**/ 1837 386, 1838 /**/ 1839 385, 1840 /**/ 1841 384, 1842 /**/ 1843 383, 1844 /**/ 1845 382, 1846 /**/ 1847 381, 1848 /**/ 1849 380, 1850 /**/ 1851 379, 1852 /**/ 1853 378, 1854 /**/ 1855 377, 1856 /**/ 1857 376, 1858 /**/ 1859 375, 1860 /**/ 1861 374, 1862 /**/ 1863 373, 1864 /**/ 1865 372, 1866 /**/ 1867 371, 1868 /**/ 1869 370, 1870 /**/ 1871 369, 1872 /**/ 1873 368, 1874 /**/ 1875 367, 1876 /**/ 1877 366, 1878 /**/ 1879 365, 1880 /**/ 1881 364, 1882 /**/ 1883 363, 1884 /**/ 1885 362, 1886 /**/ 1887 361, 1888 /**/ 1889 360, 1890 /**/ 1891 359, 1892 /**/ 1893 358, 1894 /**/ 1895 357, 1896 /**/ 1897 356, 1898 /**/ 1899 355, 1900 /**/ 1901 354, 1902 /**/ 1903 353, 1904 /**/ 1905 352, 1906 /**/ 1907 351, 1908 /**/ 1909 350, 1910 /**/ 1911 349, 1912 /**/ 1913 348, 1914 /**/ 1915 347, 1916 /**/ 1917 346, 1918 /**/ 1919 345, 1920 /**/ 1921 344, 1922 /**/ 1923 343, 1924 /**/ 1925 342, 1926 /**/ 1927 341, 1928 /**/ 1929 340, 1930 /**/ 1931 339, 1932 /**/ 1933 338, 1934 /**/ 1935 337, 1936 /**/ 1937 336, 1938 /**/ 1939 335, 1940 /**/ 1941 334, 1942 /**/ 1943 333, 1944 /**/ 1945 332, 1946 /**/ 1947 331, 1948 /**/ 1949 330, 1950 /**/ 1951 329, 1952 /**/ 1953 328, 1954 /**/ 1955 327, 1956 /**/ 1957 326, 1958 /**/ 1959 325, 1960 /**/ 1961 324, 1962 /**/ 1963 323, 1964 /**/ 1965 322, 1966 /**/ 1967 321, 1968 /**/ 1969 320, 1970 /**/ 1971 319, 1972 /**/ 1973 318, 1974 /**/ 1975 317, 1976 /**/ 1977 316, 1978 /**/ 1979 315, 1980 /**/ 1981 314, 1982 /**/ 1983 313, 1984 /**/ 1985 312, 1986 /**/ 1987 311, 1988 /**/ 1989 310, 1990 /**/ 1991 309, 1992 /**/ 1993 308, 1994 /**/ 1995 307, 1996 /**/ 1997 306, 1998 /**/ 1999 305, 2000 /**/ 2001 304, 2002 /**/ 2003 303, 2004 /**/ 2005 302, 2006 /**/ 2007 301, 2008 /**/ 2009 300, 2010 /**/ 2011 299, 2012 /**/ 2013 298, 2014 /**/ 2015 297, 2016 /**/ 2017 296, 2018 /**/ 2019 295, 2020 /**/ 2021 294, 2022 /**/ 2023 293, 2024 /**/ 2025 292, 2026 /**/ 2027 291, 2028 /**/ 2029 290, 2030 /**/ 2031 289, 2032 /**/ 2033 288, 2034 /**/ 2035 287, 2036 /**/ 2037 286, 2038 /**/ 2039 285, 2040 /**/ 2041 284, 2042 /**/ 2043 283, 2044 /**/ 2045 282, 2046 /**/ 2047 281, 2048 /**/ 2049 280, 2050 /**/ 2051 279, 2052 /**/ 2053 278, 2054 /**/ 2055 277, 2056 /**/ 2057 276, 2058 /**/ 2059 275, 2060 /**/ 2061 274, 2062 /**/ 2063 273, 2064 /**/ 2065 272, 2066 /**/ 2067 271, 2068 /**/ 2069 270, 2070 /**/ 2071 269, 2072 /**/ 2073 268, 2074 /**/ 2075 267, 2076 /**/ 2077 266, 2078 /**/ 2079 265, 2080 /**/ 2081 264, 2082 /**/ 2083 263, 2084 /**/ 2085 262, 2086 /**/ 2087 261, 2088 /**/ 2089 260, 2090 /**/ 2091 259, 2092 /**/ 2093 258, 2094 /**/ 2095 257, 2096 /**/ 2097 256, 2098 /**/ 2099 255, 2100 /**/ 2101 254, 2102 /**/ 2103 253, 2104 /**/ 2105 252, 2106 /**/ 2107 251, 2108 /**/ 2109 250, 2110 /**/ 2111 249, 2112 /**/ 2113 248, 2114 /**/ 2115 247, 2116 /**/ 2117 246, 2118 /**/ 2119 245, 2120 /**/ 2121 244, 2122 /**/ 2123 243, 2124 /**/ 2125 242, 2126 /**/ 2127 241, 2128 /**/ 2129 240, 2130 /**/ 2131 239, 2132 /**/ 2133 238, 2134 /**/ 2135 237, 2136 /**/ 2137 236, 2138 /**/ 2139 235, 2140 /**/ 2141 234, 2142 /**/ 2143 233, 2144 /**/ 2145 232, 2146 /**/ 2147 231, 2148 /**/ 2149 230, 2150 /**/ 2151 229, 2152 /**/ 2153 228, 2154 /**/ 2155 227, 2156 /**/ 2157 226, 2158 /**/ 2159 225, 2160 /**/ 2161 224, 2162 /**/ 2163 223, 2164 /**/ 2165 222, 2166 /**/ 2167 221, 2168 /**/ 2169 220, 2170 /**/ 2171 219, 2172 /**/ 2173 218, 2174 /**/ 2175 217, 2176 /**/ 2177 216, 2178 /**/ 2179 215, 2180 /**/ 2181 214, 2182 /**/ 2183 213, 2184 /**/ 2185 212, 2186 /**/ 2187 211, 2188 /**/ 2189 210, 2190 /**/ 2191 209, 2192 /**/ 2193 208, 2194 /**/ 2195 207, 2196 /**/ 2197 206, 2198 /**/ 2199 205, 2200 /**/ 2201 204, 2202 /**/ 2203 203, 2204 /**/ 2205 202, 2206 /**/ 2207 201, 2208 /**/ 2209 200, 2210 /**/ 2211 199, 2212 /**/ 2213 198, 2214 /**/ 2215 197, 2216 /**/ 2217 196, 2218 /**/ 2219 195, 2220 /**/ 2221 194, 2222 /**/ 2223 193, 2224 /**/ 2225 192, 2226 /**/ 2227 191, 2228 /**/ 2229 190, 2230 /**/ 2231 189, 2232 /**/ 2233 188, 2234 /**/ 2235 187, 2236 /**/ 2237 186, 2238 /**/ 2239 185, 2240 /**/ 2241 184, 2242 /**/ 2243 183, 2244 /**/ 2245 182, 2246 /**/ 2247 181, 2248 /**/ 2249 180, 2250 /**/ 2251 179, 2252 /**/ 2253 178, 2254 /**/ 2255 177, 2256 /**/ 2257 176, 2258 /**/ 2259 175, 2260 /**/ 2261 174, 2262 /**/ 2263 173, 2264 /**/ 2265 172, 2266 /**/ 2267 171, 2268 /**/ 2269 170, 2270 /**/ 2271 169, 2272 /**/ 2273 168, 2274 /**/ 2275 167, 2276 /**/ 2277 166, 2278 /**/ 2279 165, 2280 /**/ 2281 164, 2282 /**/ 2283 163, 2284 /**/ 2285 162, 2286 /**/ 2287 161, 2288 /**/ 2289 160, 2290 /**/ 2291 159, 2292 /**/ 2293 158, 2294 /**/ 2295 157, 2296 /**/ 2297 156, 2298 /**/ 2299 155, 2300 /**/ 2301 154, 2302 /**/ 2303 153, 2304 /**/ 2305 152, 2306 /**/ 2307 151, 2308 /**/ 2309 150, 2310 /**/ 2311 149, 2312 /**/ 2313 148, 2314 /**/ 2315 147, 2316 /**/ 2317 146, 2318 /**/ 2319 145, 2320 /**/ 2321 144, 2322 /**/ 2323 143, 2324 /**/ 2325 142, 2326 /**/ 2327 141, 2328 /**/ 2329 140, 2330 /**/ 2331 139, 2332 /**/ 2333 138, 2334 /**/ 2335 137, 2336 /**/ 2337 136, 2338 /**/ 2339 135, 2340 /**/ 2341 134, 2342 /**/ 2343 133, 2344 /**/ 2345 132, 2346 /**/ 2347 131, 2348 /**/ 2349 130, 2350 /**/ 2351 129, 2352 /**/ 2353 128, 2354 /**/ 2355 127, 2356 /**/ 2357 126, 2358 /**/ 2359 125, 2360 /**/ 2361 124, 2362 /**/ 2363 123, 2364 /**/ 2365 122, 2366 /**/ 2367 121, 2368 /**/ 2369 120, 2370 /**/ 2371 119, 2372 /**/ 2373 118, 2374 /**/ 2375 117, 2376 /**/ 2377 116, 2378 /**/ 2379 115, 2380 /**/ 2381 114, 2382 /**/ 2383 113, 2384 /**/ 2385 112, 2386 /**/ 2387 111, 2388 /**/ 2389 110, 2390 /**/ 2391 109, 2392 /**/ 2393 108, 2394 /**/ 2395 107, 2396 /**/ 2397 106, 2398 /**/ 2399 105, 2400 /**/ 2401 104, 2402 /**/ 2403 103, 2404 /**/ 2405 102, 2406 /**/ 2407 101, 2408 /**/ 2409 100, 2410 /**/ 2411 99, 2412 /**/ 2413 98, 2414 /**/ 2415 97, 2416 /**/ 2417 96, 2418 /**/ 2419 95, 2420 /**/ 2421 94, 2422 /**/ 2423 93, 2424 /**/ 2425 92, 2426 /**/ 2427 91, 2428 /**/ 2429 90, 2430 /**/ 2431 89, 2432 /**/ 2433 88, 2434 /**/ 2435 87, 2436 /**/ 2437 86, 2438 /**/ 2439 85, 2440 /**/ 2441 84, 2442 /**/ 2443 83, 2444 /**/ 2445 82, 2446 /**/ 2447 81, 2448 /**/ 2449 80, 2450 /**/ 2451 79, 2452 /**/ 2453 78, 2454 /**/ 2455 77, 2456 /**/ 2457 76, 2458 /**/ 2459 75, 2460 /**/ 2461 74, 2462 /**/ 2463 73, 2464 /**/ 2465 72, 2466 /**/ 2467 71, 2468 /**/ 2469 70, 2470 /**/ 2471 69, 2472 /**/ 2473 68, 2474 /**/ 2475 67, 2476 /**/ 2477 66, 2478 /**/ 2479 65, 2480 /**/ 2481 64, 2482 /**/ 2483 63, 2484 /**/ 2485 62, 2486 /**/ 2487 61, 2488 /**/ 2489 60, 2490 /**/ 2491 59, 2492 /**/ 2493 58, 2494 /**/ 2495 57, 2496 /**/ 2497 56, 2498 /**/ 2499 55, 2500 /**/ 2501 54, 2502 /**/ 2503 53, 2504 /**/ 2505 52, 2506 /**/ 2507 51, 2508 /**/ 2509 50, 2510 /**/ 2511 49, 2512 /**/ 2513 48, 2514 /**/ 2515 47, 2516 /**/ 2517 46, 2518 /**/ 2519 45, 2520 /**/ 2521 44, 2522 /**/ 2523 43, 2524 /**/ 2525 42, 2526 /**/ 2527 41, 2528 /**/ 2529 40, 2530 /**/ 2531 39, 2532 /**/ 2533 38, 2534 /**/ 2535 37, 2536 /**/ 2537 36, 2538 /**/ 2539 35, 2540 /**/ 2541 34, 2542 /**/ 2543 33, 2544 /**/ 2545 32, 2546 /**/ 2547 31, 2548 /**/ 2549 30, 2550 /**/ 2551 29, 2552 /**/ 2553 28, 2554 /**/ 2555 27, 2556 /**/ 2557 26, 2558 /**/ 2559 25, 2560 /**/ 2561 24, 2562 /**/ 2563 23, 2564 /**/ 2565 22, 2566 /**/ 2567 21, 2568 /**/ 2569 20, 2570 /**/ 2571 19, 2572 /**/ 2573 18, 2574 /**/ 2575 17, 2576 /**/ 2577 16, 2578 /**/ 2579 15, 2580 /**/ 2581 14, 2582 /**/ 2583 13, 2584 /**/ 2585 12, 2586 /**/ 2587 11, 2588 /**/ 2589 10, 2590 /**/ 2591 9, 2592 /**/ 2593 8, 2594 /**/ 2595 7, 2596 /**/ 2597 6, 2598 /**/ 2599 5, 2600 /**/ 2601 4, 2602 /**/ 2603 3, 2604 /**/ 2605 2, 2606 /**/ 2607 1, 2608 /**/ 2609 0 2610 }; 2611 2612 /* 2613 * Place to put a short description when adding a feature with a patch. 2614 * Keep it short, e.g.,: "relative numbers", "persistent undo". 2615 * Also add a comment marker to separate the lines. 2616 * See the official Vim patches for the diff format: It must use a context of 2617 * one line only. Create it by hand or use "diff -C2" and edit the patch. 2618 */ 2619 static char *(extra_patches[]) = 2620 { /* Add your patch description below this line */ 2621 /**/ 2622 NULL 2623 }; 2624 2625 int 2626 highest_patch(void) 2627 { 2628 int i; 2629 int h = 0; 2630 2631 for (i = 0; included_patches[i] != 0; ++i) 2632 if (included_patches[i] > h) 2633 h = included_patches[i]; 2634 return h; 2635 } 2636 2637 #if defined(FEAT_EVAL) || defined(PROTO) 2638 /* 2639 * Return TRUE if patch "n" has been included. 2640 */ 2641 int 2642 has_patch(int n) 2643 { 2644 int i; 2645 2646 for (i = 0; included_patches[i] != 0; ++i) 2647 if (included_patches[i] == n) 2648 return TRUE; 2649 return FALSE; 2650 } 2651 #endif 2652 2653 void 2654 ex_version(exarg_T *eap) 2655 { 2656 /* 2657 * Ignore a ":version 9.99" command. 2658 */ 2659 if (*eap->arg == NUL) 2660 { 2661 msg_putchar('\n'); 2662 list_version(); 2663 } 2664 } 2665 2666 /* 2667 * List all features aligned in columns, dictionary style. 2668 */ 2669 static void 2670 list_features(void) 2671 { 2672 int i; 2673 int ncol; 2674 int nrow; 2675 int nfeat = 0; 2676 int width = 0; 2677 2678 /* Find the length of the longest feature name, use that + 1 as the column 2679 * width */ 2680 for (i = 0; features[i] != NULL; ++i) 2681 { 2682 int l = (int)STRLEN(features[i]); 2683 2684 if (l > width) 2685 width = l; 2686 ++nfeat; 2687 } 2688 width += 1; 2689 2690 if (Columns < width) 2691 { 2692 /* Not enough screen columns - show one per line */ 2693 for (i = 0; features[i] != NULL; ++i) 2694 { 2695 version_msg(features[i]); 2696 if (msg_col > 0) 2697 msg_putchar('\n'); 2698 } 2699 return; 2700 } 2701 2702 /* The rightmost column doesn't need a separator. 2703 * Sacrifice it to fit in one more column if possible. */ 2704 ncol = (int) (Columns + 1) / width; 2705 nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0); 2706 2707 /* i counts columns then rows. idx counts rows then columns. */ 2708 for (i = 0; !got_int && i < nrow * ncol; ++i) 2709 { 2710 int idx = (i / ncol) + (i % ncol) * nrow; 2711 2712 if (idx < nfeat) 2713 { 2714 int last_col = (i + 1) % ncol == 0; 2715 2716 msg_puts((char_u *)features[idx]); 2717 if (last_col) 2718 { 2719 if (msg_col > 0) 2720 msg_putchar('\n'); 2721 } 2722 else 2723 { 2724 while (msg_col % width) 2725 msg_putchar(' '); 2726 } 2727 } 2728 else 2729 { 2730 if (msg_col > 0) 2731 msg_putchar('\n'); 2732 } 2733 } 2734 } 2735 2736 void 2737 list_version(void) 2738 { 2739 int i; 2740 int first; 2741 char *s = ""; 2742 2743 /* 2744 * When adding features here, don't forget to update the list of 2745 * internal variables in eval.c! 2746 */ 2747 MSG(longVersion); 2748 #ifdef WIN3264 2749 # ifdef FEAT_GUI_W32 2750 # ifdef _WIN64 2751 MSG_PUTS(_("\nMS-Windows 64-bit GUI version")); 2752 # else 2753 MSG_PUTS(_("\nMS-Windows 32-bit GUI version")); 2754 # endif 2755 # ifdef FEAT_OLE 2756 MSG_PUTS(_(" with OLE support")); 2757 # endif 2758 # else 2759 # ifdef _WIN64 2760 MSG_PUTS(_("\nMS-Windows 64-bit console version")); 2761 # else 2762 MSG_PUTS(_("\nMS-Windows 32-bit console version")); 2763 # endif 2764 # endif 2765 #endif 2766 #ifdef MACOS 2767 # ifdef MACOS_X 2768 # ifdef MACOS_X_UNIX 2769 MSG_PUTS(_("\nMacOS X (unix) version")); 2770 # else 2771 MSG_PUTS(_("\nMacOS X version")); 2772 # endif 2773 #else 2774 MSG_PUTS(_("\nMacOS version")); 2775 # endif 2776 #endif 2777 2778 #ifdef VMS 2779 MSG_PUTS(_("\nOpenVMS version")); 2780 # ifdef HAVE_PATHDEF 2781 if (*compiled_arch != NUL) 2782 { 2783 MSG_PUTS(" - "); 2784 MSG_PUTS(compiled_arch); 2785 } 2786 # endif 2787 2788 #endif 2789 2790 /* Print the list of patch numbers if there is at least one. */ 2791 /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */ 2792 if (included_patches[0] != 0) 2793 { 2794 MSG_PUTS(_("\nIncluded patches: ")); 2795 first = -1; 2796 /* find last one */ 2797 for (i = 0; included_patches[i] != 0; ++i) 2798 ; 2799 while (--i >= 0) 2800 { 2801 if (first < 0) 2802 first = included_patches[i]; 2803 if (i == 0 || included_patches[i - 1] != included_patches[i] + 1) 2804 { 2805 MSG_PUTS(s); 2806 s = ", "; 2807 msg_outnum((long)first); 2808 if (first != included_patches[i]) 2809 { 2810 MSG_PUTS("-"); 2811 msg_outnum((long)included_patches[i]); 2812 } 2813 first = -1; 2814 } 2815 } 2816 } 2817 2818 /* Print the list of extra patch descriptions if there is at least one. */ 2819 if (extra_patches[0] != NULL) 2820 { 2821 MSG_PUTS(_("\nExtra patches: ")); 2822 s = ""; 2823 for (i = 0; extra_patches[i] != NULL; ++i) 2824 { 2825 MSG_PUTS(s); 2826 s = ", "; 2827 MSG_PUTS(extra_patches[i]); 2828 } 2829 } 2830 2831 #ifdef MODIFIED_BY 2832 MSG_PUTS("\n"); 2833 MSG_PUTS(_("Modified by ")); 2834 MSG_PUTS(MODIFIED_BY); 2835 #endif 2836 2837 #ifdef HAVE_PATHDEF 2838 if (*compiled_user != NUL || *compiled_sys != NUL) 2839 { 2840 MSG_PUTS(_("\nCompiled ")); 2841 if (*compiled_user != NUL) 2842 { 2843 MSG_PUTS(_("by ")); 2844 MSG_PUTS(compiled_user); 2845 } 2846 if (*compiled_sys != NUL) 2847 { 2848 MSG_PUTS("@"); 2849 MSG_PUTS(compiled_sys); 2850 } 2851 } 2852 #endif 2853 2854 #ifdef FEAT_HUGE 2855 MSG_PUTS(_("\nHuge version ")); 2856 #else 2857 # ifdef FEAT_BIG 2858 MSG_PUTS(_("\nBig version ")); 2859 # else 2860 # ifdef FEAT_NORMAL 2861 MSG_PUTS(_("\nNormal version ")); 2862 # else 2863 # ifdef FEAT_SMALL 2864 MSG_PUTS(_("\nSmall version ")); 2865 # else 2866 MSG_PUTS(_("\nTiny version ")); 2867 # endif 2868 # endif 2869 # endif 2870 #endif 2871 #ifndef FEAT_GUI 2872 MSG_PUTS(_("without GUI.")); 2873 #else 2874 # ifdef FEAT_GUI_GTK 2875 # ifdef USE_GTK3 2876 MSG_PUTS(_("with GTK3 GUI.")); 2877 # else 2878 # ifdef FEAT_GUI_GNOME 2879 MSG_PUTS(_("with GTK2-GNOME GUI.")); 2880 # else 2881 MSG_PUTS(_("with GTK2 GUI.")); 2882 # endif 2883 # endif 2884 # else 2885 # ifdef FEAT_GUI_MOTIF 2886 MSG_PUTS(_("with X11-Motif GUI.")); 2887 # else 2888 # ifdef FEAT_GUI_ATHENA 2889 # ifdef FEAT_GUI_NEXTAW 2890 MSG_PUTS(_("with X11-neXtaw GUI.")); 2891 # else 2892 MSG_PUTS(_("with X11-Athena GUI.")); 2893 # endif 2894 # else 2895 # ifdef FEAT_GUI_PHOTON 2896 MSG_PUTS(_("with Photon GUI.")); 2897 # else 2898 # if defined(MSWIN) 2899 MSG_PUTS(_("with GUI.")); 2900 # else 2901 # if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON 2902 MSG_PUTS(_("with Carbon GUI.")); 2903 # else 2904 # if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX 2905 MSG_PUTS(_("with Cocoa GUI.")); 2906 # else 2907 # if defined(MACOS) 2908 MSG_PUTS(_("with (classic) GUI.")); 2909 # endif 2910 # endif 2911 # endif 2912 # endif 2913 # endif 2914 # endif 2915 # endif 2916 # endif 2917 #endif 2918 version_msg(_(" Features included (+) or not (-):\n")); 2919 2920 list_features(); 2921 2922 #ifdef SYS_VIMRC_FILE 2923 version_msg(_(" system vimrc file: \"")); 2924 version_msg(SYS_VIMRC_FILE); 2925 version_msg("\"\n"); 2926 #endif 2927 #ifdef USR_VIMRC_FILE 2928 version_msg(_(" user vimrc file: \"")); 2929 version_msg(USR_VIMRC_FILE); 2930 version_msg("\"\n"); 2931 #endif 2932 #ifdef USR_VIMRC_FILE2 2933 version_msg(_(" 2nd user vimrc file: \"")); 2934 version_msg(USR_VIMRC_FILE2); 2935 version_msg("\"\n"); 2936 #endif 2937 #ifdef USR_VIMRC_FILE3 2938 version_msg(_(" 3rd user vimrc file: \"")); 2939 version_msg(USR_VIMRC_FILE3); 2940 version_msg("\"\n"); 2941 #endif 2942 #ifdef USR_EXRC_FILE 2943 version_msg(_(" user exrc file: \"")); 2944 version_msg(USR_EXRC_FILE); 2945 version_msg("\"\n"); 2946 #endif 2947 #ifdef USR_EXRC_FILE2 2948 version_msg(_(" 2nd user exrc file: \"")); 2949 version_msg(USR_EXRC_FILE2); 2950 version_msg("\"\n"); 2951 #endif 2952 #ifdef FEAT_GUI 2953 # ifdef SYS_GVIMRC_FILE 2954 version_msg(_(" system gvimrc file: \"")); 2955 version_msg(SYS_GVIMRC_FILE); 2956 version_msg("\"\n"); 2957 # endif 2958 version_msg(_(" user gvimrc file: \"")); 2959 version_msg(USR_GVIMRC_FILE); 2960 version_msg("\"\n"); 2961 # ifdef USR_GVIMRC_FILE2 2962 version_msg(_("2nd user gvimrc file: \"")); 2963 version_msg(USR_GVIMRC_FILE2); 2964 version_msg("\"\n"); 2965 # endif 2966 # ifdef USR_GVIMRC_FILE3 2967 version_msg(_("3rd user gvimrc file: \"")); 2968 version_msg(USR_GVIMRC_FILE3); 2969 version_msg("\"\n"); 2970 # endif 2971 #endif 2972 version_msg(_(" defaults file: \"")); 2973 version_msg(VIM_DEFAULTS_FILE); 2974 version_msg("\"\n"); 2975 #ifdef FEAT_GUI 2976 # ifdef SYS_MENU_FILE 2977 version_msg(_(" system menu file: \"")); 2978 version_msg(SYS_MENU_FILE); 2979 version_msg("\"\n"); 2980 # endif 2981 #endif 2982 #ifdef HAVE_PATHDEF 2983 if (*default_vim_dir != NUL) 2984 { 2985 version_msg(_(" fall-back for $VIM: \"")); 2986 version_msg((char *)default_vim_dir); 2987 version_msg("\"\n"); 2988 } 2989 if (*default_vimruntime_dir != NUL) 2990 { 2991 version_msg(_(" f-b for $VIMRUNTIME: \"")); 2992 version_msg((char *)default_vimruntime_dir); 2993 version_msg("\"\n"); 2994 } 2995 version_msg(_("Compilation: ")); 2996 version_msg((char *)all_cflags); 2997 version_msg("\n"); 2998 #ifdef VMS 2999 if (*compiler_version != NUL) 3000 { 3001 version_msg(_("Compiler: ")); 3002 version_msg((char *)compiler_version); 3003 version_msg("\n"); 3004 } 3005 #endif 3006 version_msg(_("Linking: ")); 3007 version_msg((char *)all_lflags); 3008 #endif 3009 #ifdef DEBUG 3010 version_msg("\n"); 3011 version_msg(_(" DEBUG BUILD")); 3012 #endif 3013 } 3014 3015 /* 3016 * Output a string for the version message. If it's going to wrap, output a 3017 * newline, unless the message is too long to fit on the screen anyway. 3018 */ 3019 static void 3020 version_msg(char *s) 3021 { 3022 int len = (int)STRLEN(s); 3023 3024 if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns 3025 && *s != '\n') 3026 msg_putchar('\n'); 3027 if (!got_int) 3028 MSG_PUTS(s); 3029 } 3030 3031 static void do_intro_line(int row, char_u *mesg, int add_version, int attr); 3032 3033 /* 3034 * Show the intro message when not editing a file. 3035 */ 3036 void 3037 maybe_intro_message(void) 3038 { 3039 if (BUFEMPTY() 3040 && curbuf->b_fname == NULL 3041 #ifdef FEAT_WINDOWS 3042 && firstwin->w_next == NULL 3043 #endif 3044 && vim_strchr(p_shm, SHM_INTRO) == NULL) 3045 intro_message(FALSE); 3046 } 3047 3048 /* 3049 * Give an introductory message about Vim. 3050 * Only used when starting Vim on an empty file, without a file name. 3051 * Or with the ":intro" command (for Sven :-). 3052 */ 3053 void 3054 intro_message( 3055 int colon) /* TRUE for ":intro" */ 3056 { 3057 int i; 3058 int row; 3059 int blanklines; 3060 int sponsor; 3061 char *p; 3062 static char *(lines[]) = 3063 { 3064 N_("VIM - Vi IMproved"), 3065 "", 3066 N_("version "), 3067 N_("by Bram Moolenaar et al."), 3068 #ifdef MODIFIED_BY 3069 " ", 3070 #endif 3071 N_("Vim is open source and freely distributable"), 3072 "", 3073 N_("Help poor children in Uganda!"), 3074 N_("type :help iccf<Enter> for information "), 3075 "", 3076 N_("type :q<Enter> to exit "), 3077 N_("type :help<Enter> or <F1> for on-line help"), 3078 N_("type :help version8<Enter> for version info"), 3079 NULL, 3080 "", 3081 N_("Running in Vi compatible mode"), 3082 N_("type :set nocp<Enter> for Vim defaults"), 3083 N_("type :help cp-default<Enter> for info on this"), 3084 }; 3085 #ifdef FEAT_GUI 3086 static char *(gui_lines[]) = 3087 { 3088 NULL, 3089 NULL, 3090 NULL, 3091 NULL, 3092 #ifdef MODIFIED_BY 3093 NULL, 3094 #endif 3095 NULL, 3096 NULL, 3097 NULL, 3098 N_("menu Help->Orphans for information "), 3099 NULL, 3100 N_("Running modeless, typed text is inserted"), 3101 N_("menu Edit->Global Settings->Toggle Insert Mode "), 3102 N_(" for two modes "), 3103 NULL, 3104 NULL, 3105 NULL, 3106 N_("menu Edit->Global Settings->Toggle Vi Compatible"), 3107 N_(" for Vim defaults "), 3108 }; 3109 #endif 3110 3111 /* blanklines = screen height - # message lines */ 3112 blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1); 3113 if (!p_cp) 3114 blanklines += 4; /* add 4 for not showing "Vi compatible" message */ 3115 3116 #ifdef FEAT_WINDOWS 3117 /* Don't overwrite a statusline. Depends on 'cmdheight'. */ 3118 if (p_ls > 1) 3119 blanklines -= Rows - topframe->fr_height; 3120 #endif 3121 if (blanklines < 0) 3122 blanklines = 0; 3123 3124 /* Show the sponsor and register message one out of four times, the Uganda 3125 * message two out of four times. */ 3126 sponsor = (int)time(NULL); 3127 sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0); 3128 3129 /* start displaying the message lines after half of the blank lines */ 3130 row = blanklines / 2; 3131 if ((row >= 2 && Columns >= 50) || colon) 3132 { 3133 for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i) 3134 { 3135 p = lines[i]; 3136 #ifdef FEAT_GUI 3137 if (p_im && gui.in_use && gui_lines[i] != NULL) 3138 p = gui_lines[i]; 3139 #endif 3140 if (p == NULL) 3141 { 3142 if (!p_cp) 3143 break; 3144 continue; 3145 } 3146 if (sponsor != 0) 3147 { 3148 if (strstr(p, "children") != NULL) 3149 p = sponsor < 0 3150 ? N_("Sponsor Vim development!") 3151 : N_("Become a registered Vim user!"); 3152 else if (strstr(p, "iccf") != NULL) 3153 p = sponsor < 0 3154 ? N_("type :help sponsor<Enter> for information ") 3155 : N_("type :help register<Enter> for information "); 3156 else if (strstr(p, "Orphans") != NULL) 3157 p = N_("menu Help->Sponsor/Register for information "); 3158 } 3159 if (*p != NUL) 3160 do_intro_line(row, (char_u *)_(p), i == 2, 0); 3161 ++row; 3162 } 3163 } 3164 3165 /* Make the wait-return message appear just below the text. */ 3166 if (colon) 3167 msg_row = row; 3168 } 3169 3170 static void 3171 do_intro_line( 3172 int row, 3173 char_u *mesg, 3174 int add_version, 3175 int attr) 3176 { 3177 char_u vers[20]; 3178 int col; 3179 char_u *p; 3180 int l; 3181 int clen; 3182 #ifdef MODIFIED_BY 3183 # define MODBY_LEN 150 3184 char_u modby[MODBY_LEN]; 3185 3186 if (*mesg == ' ') 3187 { 3188 vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1); 3189 l = (int)STRLEN(modby); 3190 vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1); 3191 mesg = modby; 3192 } 3193 #endif 3194 3195 /* Center the message horizontally. */ 3196 col = vim_strsize(mesg); 3197 if (add_version) 3198 { 3199 STRCPY(vers, mediumVersion); 3200 if (highest_patch()) 3201 { 3202 /* Check for 9.9x or 9.9xx, alpha/beta version */ 3203 if (isalpha((int)vers[3])) 3204 { 3205 int len = (isalpha((int)vers[4])) ? 5 : 4; 3206 sprintf((char *)vers + len, ".%d%s", highest_patch(), 3207 mediumVersion + len); 3208 } 3209 else 3210 sprintf((char *)vers + 3, ".%d", highest_patch()); 3211 } 3212 col += (int)STRLEN(vers); 3213 } 3214 col = (Columns - col) / 2; 3215 if (col < 0) 3216 col = 0; 3217 3218 /* Split up in parts to highlight <> items differently. */ 3219 for (p = mesg; *p != NUL; p += l) 3220 { 3221 clen = 0; 3222 for (l = 0; p[l] != NUL 3223 && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l) 3224 { 3225 #ifdef FEAT_MBYTE 3226 if (has_mbyte) 3227 { 3228 clen += ptr2cells(p + l); 3229 l += (*mb_ptr2len)(p + l) - 1; 3230 } 3231 else 3232 #endif 3233 clen += byte2cells(p[l]); 3234 } 3235 screen_puts_len(p, l, row, col, *p == '<' ? HL_ATTR(HLF_8) : attr); 3236 col += clen; 3237 } 3238 3239 /* Add the version number to the version line. */ 3240 if (add_version) 3241 screen_puts(vers, row, col, 0); 3242 } 3243 3244 /* 3245 * ":intro": clear screen, display intro screen and wait for return. 3246 */ 3247 void 3248 ex_intro(exarg_T *eap UNUSED) 3249 { 3250 screenclear(); 3251 intro_message(TRUE); 3252 wait_return(TRUE); 3253 } 3254