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